diff --git a/base/applications/network/ipconfig/ipconfig.c b/base/applications/network/ipconfig/ipconfig.c index 5bb2d95fc25..3d9de7d8e19 100644 --- a/base/applications/network/ipconfig/ipconfig.c +++ b/base/applications/network/ipconfig/ipconfig.c @@ -359,6 +359,7 @@ CLEANUP: VOID ShowInfo(BOOL bAll) { + MIB_IFROW mibEntry; PIP_ADAPTER_INFO pAdapterInfo = NULL; PIP_ADAPTER_INFO pAdapter = NULL; ULONG adaptOutBufLen = 0; @@ -441,6 +442,9 @@ VOID ShowInfo(BOOL bAll) { LPTSTR IntType, myConType; + mibEntry.dwIndex = pAdapter->Index; + GetIfEntry(&mibEntry); + IntType = GetInterfaceTypeName(pAdapter->Type); myConType = GetConnectionType(pAdapter->AdapterName); @@ -449,7 +453,7 @@ VOID ShowInfo(BOOL bAll) if (myConType != NULL) HeapFree(ProcessHeap, 0, myConType); /* check if the adapter is connected to the media */ - if (_tcscmp(pAdapter->IpAddressList.IpAddress.String, "0.0.0.0") == 0) + if (mibEntry.dwOperStatus != MIB_IF_OPER_STATUS_CONNECTED && mibEntry.dwOperStatus != MIB_IF_OPER_STATUS_OPERATIONAL) { _tprintf(_T("\tMedia State . . . . . . . . . . . : Media disconnected\n")); pAdapter = pAdapter->Next; diff --git a/base/applications/network/netstat/netstat.c b/base/applications/network/netstat/netstat.c index fbffe08db8e..d491d081813 100644 --- a/base/applications/network/netstat/netstat.c +++ b/base/applications/network/netstat/netstat.c @@ -237,12 +237,13 @@ BOOL DisplayOutput() ShowUdpStatistics(); return EXIT_SUCCESS; } - else //if (bDoShowAllCons) + else { _tprintf(_T("\nActive Connections\n")); _tprintf(_T("\n Proto Local Address Foreign Address State\n")); ShowTcpTable(); - ShowUdpTable(); + if (bDoShowAllCons) + ShowUdpTable(); } return EXIT_SUCCESS; } @@ -422,23 +423,24 @@ VOID ShowTcpTable() CHAR Remote[ADDRESSLEN]; /* Get the table of TCP endpoints */ - dwSize = 0; - error = GetTcpTable(NULL, &dwSize, TRUE); - if (error != ERROR_INSUFFICIENT_BUFFER) + dwSize = sizeof (MIB_TCPTABLE); + /* Should also work when we get new connections between 2 GetTcpTable() + * calls: */ + do + { + tcpTable = (PMIB_TCPTABLE) HeapAlloc(GetProcessHeap(), 0, dwSize); + error = GetTcpTable(tcpTable, &dwSize, TRUE); + if ( error != NO_ERROR ) + HeapFree(GetProcessHeap(), 0, tcpTable); + } + while ( error == ERROR_INSUFFICIENT_BUFFER ); + + if (error != NO_ERROR) { printf("Failed to snapshot TCP endpoints.\n"); DoFormatMessage(error); exit(EXIT_FAILURE); } - tcpTable = (PMIB_TCPTABLE) HeapAlloc(GetProcessHeap(), 0, dwSize); - error = GetTcpTable(tcpTable, &dwSize, TRUE ); - if (error) - { - printf("Failed to snapshot TCP endpoints table.\n"); - DoFormatMessage(error); - HeapFree(GetProcessHeap(), 0, tcpTable); - exit(EXIT_FAILURE); - } /* Dump the TCP table */ for (i = 0; i < tcpTable->dwNumEntries; i++) diff --git a/base/applications/regedit/childwnd.c b/base/applications/regedit/childwnd.c index 0d76562ae39..6f3de0b4910 100644 --- a/base/applications/regedit/childwnd.c +++ b/base/applications/regedit/childwnd.c @@ -587,8 +587,8 @@ LRESULT CALLBACK ChildWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPa } else pt.x = pt.y = 0; + ClientToScreen(pChildWnd->hListWnd, &pt); } - ClientToScreen(pChildWnd->hListWnd, &pt); if(i == -1) { TrackPopupMenu(GetSubMenu(hPopupMenus, PM_NEW), TPM_RIGHTBUTTON, pt.x, pt.y, 0, hFrameWnd, NULL); diff --git a/base/applications/regedit/hexedit.c b/base/applications/regedit/hexedit.c index b84f431d04e..8a7438be84e 100644 --- a/base/applications/regedit/hexedit.c +++ b/base/applications/regedit/hexedit.c @@ -47,9 +47,11 @@ typedef struct INT SelStart; INT SelEnd; - BOOL SelOnField; } HEXEDIT_DATA, *PHEXEDIT_DATA; +static const TCHAR ClipboardFormatName[] = TEXT("RegEdit_HexData"); +static UINT ClipboardFormatID = 0; + /* hit test codes */ #define HEHT_LEFTMARGIN (0x1) #define HEHT_ADDRESS (0x2) @@ -67,6 +69,8 @@ RegisterHexEditorClass(HINSTANCE hInstance) { WNDCLASSEX WndClass; + ClipboardFormatID = RegisterClipboardFormat(ClipboardFormatName); + ZeroMemory(&WndClass, sizeof(WNDCLASSEX)); WndClass.cbSize = sizeof(WNDCLASSEX); WndClass.style = CS_DBLCLKS; @@ -218,7 +222,7 @@ HEXEDIT_PaintLines(PHEXEDIT_DATA hed, HDC hDC, DWORD ScrollPos, DWORD First, DWO if(ScrollPos + First == 0) { /* draw address */ - _stprintf(addr, _T("%04X"), 0); + wsprintf(addr, TEXT("%04X"), 0); TextOut(hDC, hed->LeftMargin, First * hed->LineHeight, addr, 4); } } @@ -240,7 +244,7 @@ HEXEDIT_PaintLines(PHEXEDIT_DATA hed, HDC hDC, DWORD ScrollPos, DWORD First, DWO dx = hed->LeftMargin; /* draw address */ - _stprintf(addr, _T("%04lX"), linestart); + wsprintf(addr, TEXT("%04lX"), linestart); TextOut(hDC, dx, dy, addr, 4); dx += ((4 + hed->AddressSpacing) * hed->CharWidth); @@ -260,7 +264,7 @@ HEXEDIT_PaintLines(PHEXEDIT_DATA hed, HDC hDC, DWORD ScrollPos, DWORD First, DWO rct.left += dh; rct.right += dh; - _stprintf(hex, _T("%02X"), *(current++)); + wsprintf(hex, TEXT("%02X"), *(current++)); if (i0 <= i && i < i1) { rct2.left = dx; @@ -275,7 +279,7 @@ HEXEDIT_PaintLines(PHEXEDIT_DATA hed, HDC hDC, DWORD ScrollPos, DWORD First, DWO } else ExtTextOut(hDC, dx, dy, ETO_OPAQUE, &rct, hex, 2, NULL); - dx += dh; + dx += dh; i++; } @@ -285,8 +289,8 @@ HEXEDIT_PaintLines(PHEXEDIT_DATA hed, HDC hDC, DWORD ScrollPos, DWORD First, DWO i = isave; for(x = 0; x < hed->ColumnsPerLine && current < end; x++) { - _stprintf(hex, _T("%C"), *(current++)); - hex[0] = ((hex[0] & _T('\x007f')) >= _T(' ') ? hex[0] : _T('.')); + wsprintf(hex, _T("%C"), *(current++)); + hex[0] = ((hex[0] & _T('\x007f')) >= _T(' ') ? hex[0] : _T('.')); if (i0 <= i && i < i1) { rct2.left = dx; @@ -300,7 +304,7 @@ HEXEDIT_PaintLines(PHEXEDIT_DATA hed, HDC hDC, DWORD ScrollPos, DWORD First, DWO } else TextOut(hDC, dx, dy, hex, 1); - dx += hed->CharWidth; + dx += hed->CharWidth; i++; } @@ -415,6 +419,149 @@ HEXEDIT_IndexFromPoint(PHEXEDIT_DATA hed, POINTS pt, DWORD Hit, POINT *EditPos, return Index; } +static VOID +HEXEDIT_Copy(PHEXEDIT_DATA hed) +{ + PBYTE pb, buf; + UINT cb; + INT i0, i1; + HGLOBAL hGlobal; + + if (hed->SelStart < hed->SelEnd) + { + i0 = hed->SelStart; + i1 = hed->SelEnd; + } + else + { + i0 = hed->SelEnd; + i1 = hed->SelStart; + } + + cb = i1 - i0; + if (cb == 0) + return; + + hGlobal = GlobalAlloc(GHND | GMEM_SHARE, cb + sizeof(DWORD)); + if (hGlobal == NULL) + return; + + pb = GlobalLock(hGlobal); + if (pb) + { + *(PDWORD)pb = cb; + pb += sizeof(DWORD); + buf = (PBYTE) LocalLock(hed->hBuffer); + if (buf) + { + CopyMemory(pb, buf + i0, cb); + LocalUnlock(hed->hBuffer); + } + GlobalUnlock(hGlobal); + + if (OpenClipboard(hed->hWndSelf)) + { + EmptyClipboard(); + SetClipboardData(ClipboardFormatID, hGlobal); + CloseClipboard(); + } + } + else + GlobalFree(hGlobal); +} + +static VOID +HEXEDIT_Delete(PHEXEDIT_DATA hed) +{ + PBYTE buf; + INT i0, i1; + UINT bufsize; + + if (hed->SelStart < hed->SelEnd) + { + i0 = hed->SelStart; + i1 = hed->SelEnd; + } + else + { + i0 = hed->SelEnd; + i1 = hed->SelStart; + } + + if (i0 != i1) + { + bufsize = (hed->hBuffer ? LocalSize(hed->hBuffer) : 0); + buf = (PBYTE) LocalLock(hed->hBuffer); + if (buf) + { + MoveMemory(buf + i0, buf + i1, bufsize - i1); + LocalUnlock(hed->hBuffer); + } + HexEdit_SetMaxBufferSize(hed->hWndSelf, bufsize - (i1 - i0)); + hed->InMid = FALSE; + hed->Index = hed->SelStart = hed->SelEnd = i0; + hed->CaretCol = hed->Index % hed->ColumnsPerLine; + hed->CaretLine = hed->Index / hed->ColumnsPerLine; + InvalidateRect(hed->hWndSelf, NULL, TRUE); + HEXEDIT_MoveCaret(hed, TRUE); + } +} + +static VOID +HEXEDIT_Paste(PHEXEDIT_DATA hed) +{ + HGLOBAL hGlobal; + UINT bufsize; + PBYTE pb, buf; + DWORD cb; + + HEXEDIT_Delete(hed); + bufsize = (hed->hBuffer ? LocalSize(hed->hBuffer) : 0); + + if (OpenClipboard(hed->hWndSelf)) + { + hGlobal = GetClipboardData(ClipboardFormatID); + if (hGlobal != NULL) + { + pb = (PBYTE) GlobalLock(hGlobal); + cb = *(PDWORD) pb; + pb += sizeof(DWORD); + HexEdit_SetMaxBufferSize(hed->hWndSelf, bufsize + cb); + buf = (PBYTE) LocalLock(hed->hBuffer); + if (buf) + { + MoveMemory(buf + hed->Index + cb, buf + hed->Index, + bufsize - hed->Index); + CopyMemory(buf + hed->Index, pb, cb); + LocalUnlock(hed->hBuffer); + } + GlobalUnlock(hGlobal); + } + CloseClipboard(); + } + InvalidateRect(hed->hWndSelf, NULL, TRUE); + HEXEDIT_MoveCaret(hed, TRUE); +} + +static VOID +HEXEDIT_Cut(PHEXEDIT_DATA hed) +{ + HEXEDIT_Copy(hed); + HEXEDIT_Delete(hed); +} + +static VOID +HEXEDIT_SelectAll(PHEXEDIT_DATA hed) +{ + INT bufsize; + + bufsize = (hed->hBuffer ? (INT) LocalSize(hed->hBuffer) : 0); + hed->Index = hed->SelStart = 0; + hed->SelEnd = bufsize; + InvalidateRect(hed->hWndSelf, NULL, TRUE); + HEXEDIT_MoveCaret(hed, TRUE); +} + /*** Control specific messages ************************************************/ static LRESULT @@ -808,19 +955,18 @@ HEXEDIT_WM_LBUTTONDOWN(PHEXEDIT_DATA hed, INT Buttons, POINTS Pt) if (GetAsyncKeyState(VK_SHIFT) < 0) { - if (hed->SelOnField) + if (hed->EditingField) hed->Index = HEXEDIT_IndexFromPoint(hed, Pt, HEHT_HEXDUMP, &EditPos, &NewField); else hed->Index = HEXEDIT_IndexFromPoint(hed, Pt, HEHT_ASCIIDUMP, &EditPos, &NewField); hed->SelEnd = hed->Index; - hed->EditingField = hed->SelOnField; } else { Hit = HEXEDIT_HitRegionTest(hed, Pt); hed->Index = HEXEDIT_IndexFromPoint(hed, Pt, Hit, &EditPos, &NewField); hed->SelStart = hed->SelEnd = hed->Index; - hed->SelOnField = hed->EditingField = NewField; + hed->EditingField = NewField; SetCapture(hed->hWndSelf); } hed->CaretCol = EditPos.x; @@ -839,7 +985,7 @@ HEXEDIT_WM_LBUTTONUP(PHEXEDIT_DATA hed, INT Buttons, POINTS Pt) POINT EditPos; if (GetCapture() == hed->hWndSelf) { - if (hed->SelOnField) + if (hed->EditingField) hed->Index = HEXEDIT_IndexFromPoint(hed, Pt, HEHT_HEXDUMP, &EditPos, &NewField); else hed->Index = HEXEDIT_IndexFromPoint(hed, Pt, HEHT_ASCIIDUMP, &EditPos, &NewField); @@ -860,7 +1006,7 @@ HEXEDIT_WM_MOUSEMOVE(PHEXEDIT_DATA hed, INT Buttons, POINTS Pt) POINT EditPos; if (GetCapture() == hed->hWndSelf) { - if (hed->SelOnField) + if (hed->EditingField) hed->Index = HEXEDIT_IndexFromPoint(hed, Pt, HEHT_HEXDUMP, &EditPos, &NewField); else hed->Index = HEXEDIT_IndexFromPoint(hed, Pt, HEHT_ASCIIDUMP, &EditPos, &NewField); @@ -900,8 +1046,51 @@ HEXEDIT_WM_KEYDOWN(PHEXEDIT_DATA hed, INT VkCode) switch(VkCode) { - case VK_DELETE: + case 'X': + if (GetAsyncKeyState(VK_SHIFT) >= 0 && + GetAsyncKeyState(VK_CONTROL) < 0 && hed->SelStart != hed->SelEnd) + HEXEDIT_Cut(hed); + else + return TRUE; + break; + + case 'C': + if (GetAsyncKeyState(VK_SHIFT) >= 0 && + GetAsyncKeyState(VK_CONTROL) < 0 && hed->SelStart != hed->SelEnd) + HEXEDIT_Copy(hed); + else + return TRUE; + break; + + case 'V': + if (GetAsyncKeyState(VK_SHIFT) >= 0 && GetAsyncKeyState(VK_CONTROL) < 0) + HEXEDIT_Paste(hed); + else + return TRUE; + break; + + case 'A': + if (GetAsyncKeyState(VK_SHIFT) >= 0 && GetAsyncKeyState(VK_CONTROL) < 0) + HEXEDIT_SelectAll(hed); + else + return TRUE; + break; + + case VK_INSERT: if (hed->SelStart != hed->SelEnd) + { + if (GetAsyncKeyState(VK_SHIFT) >= 0 && GetAsyncKeyState(VK_CONTROL) < 0) + HEXEDIT_Copy(hed); + } + if (GetAsyncKeyState(VK_SHIFT) < 0 && GetAsyncKeyState(VK_CONTROL) >= 0) + HEXEDIT_Paste(hed); + break; + + case VK_DELETE: + if (GetAsyncKeyState(VK_SHIFT) < 0 && GetAsyncKeyState(VK_CONTROL) >= 0 && + hed->SelStart != hed->SelEnd) + HEXEDIT_Copy(hed); + if (i0 != i1) { buf = (PBYTE) LocalLock(hed->hBuffer); if (buf) @@ -946,7 +1135,7 @@ HEXEDIT_WM_KEYDOWN(PHEXEDIT_DATA hed, INT VkCode) break; case VK_BACK: - if (hed->SelStart != hed->SelEnd) + if (i0 != i1) { buf = (PBYTE) LocalLock(hed->hBuffer); if (buf) @@ -986,6 +1175,8 @@ HEXEDIT_WM_KEYDOWN(PHEXEDIT_DATA hed, INT VkCode) hed->CaretCol = hed->Index % hed->ColumnsPerLine; hed->CaretLine = hed->Index / hed->ColumnsPerLine; } + else + return TRUE; HexEdit_SetMaxBufferSize(hed->hWndSelf, bufsize - 1); hed->InMid = FALSE; } @@ -1056,6 +1247,9 @@ HEXEDIT_WM_KEYDOWN(PHEXEDIT_DATA hed, INT VkCode) InvalidateRect(hed->hWndSelf, NULL, TRUE); HEXEDIT_MoveCaret(hed, TRUE); break; + + default: + return TRUE; } return FALSE; @@ -1185,6 +1379,40 @@ HEXEDIT_WM_SIZE(PHEXEDIT_DATA hed, DWORD sType, WORD NewWidth, WORD NewHeight) return 0; } +static VOID +HEXEDIT_WM_CONTEXTMENU(PHEXEDIT_DATA hed, INT x, INT y) +{ + HMENU hMenu; + RECT rc; + + if (x == -1 && y == -1) + { + GetWindowRect(hed->hWndSelf, &rc); + x = rc.left; + y = rc.top; + } + + hMenu = GetSubMenu(hPopupMenus, PM_HEXEDIT); + if (hed->SelStart == hed->SelEnd) + { + EnableMenuItem(hMenu, ID_HEXEDIT_CUT, MF_GRAYED); + EnableMenuItem(hMenu, ID_HEXEDIT_COPY, MF_GRAYED); + EnableMenuItem(hMenu, ID_HEXEDIT_PASTE, MF_GRAYED); + EnableMenuItem(hMenu, ID_HEXEDIT_DELETE, MF_GRAYED); + } + else + { + EnableMenuItem(hMenu, ID_HEXEDIT_CUT, MF_ENABLED); + EnableMenuItem(hMenu, ID_HEXEDIT_COPY, MF_ENABLED); + EnableMenuItem(hMenu, ID_HEXEDIT_PASTE, MF_ENABLED); + EnableMenuItem(hMenu, ID_HEXEDIT_DELETE, MF_ENABLED); + } + + SetForegroundWindow(hed->hWndSelf); + TrackPopupMenu(hMenu, TPM_RIGHTBUTTON, x, y, 0, hed->hWndSelf, NULL); + PostMessage(hed->hWndSelf, WM_NULL, 0, 0); +} + INT_PTR CALLBACK HexEditWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { @@ -1291,11 +1519,32 @@ HexEditWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) break; case WM_CONTEXTMENU: - /* FIXME: Implement Cut, Copy, Paste, Delete and Select All */ + HEXEDIT_WM_CONTEXTMENU(hed, (short)LOWORD(lParam), (short)HIWORD(lParam)); break; case WM_COMMAND: - /* FIXME: Implement Cut, Copy, Paste, Delete and Select All */ + switch(LOWORD(wParam)) + { + case ID_HEXEDIT_CUT: + HEXEDIT_Cut(hed); + break; + + case ID_HEXEDIT_COPY: + HEXEDIT_Copy(hed); + break; + + case ID_HEXEDIT_PASTE: + HEXEDIT_Paste(hed); + break; + + case ID_HEXEDIT_DELETE: + HEXEDIT_Delete(hed); + break; + + case ID_HEXEDIT_SELECT_ALL: + HEXEDIT_SelectAll(hed); + break; + } break; } diff --git a/base/applications/regedit/lang/bg-BG.rc b/base/applications/regedit/lang/bg-BG.rc index c7bd4215245..7ecabedf807 100644 --- a/base/applications/regedit/lang/bg-BG.rc +++ b/base/applications/regedit/lang/bg-BG.rc @@ -162,6 +162,15 @@ BEGIN MENUITEM SEPARATOR MENUITEM "& ", ID_EDIT_COPYKEYNAME END + POPUP "" + BEGIN + MENUITEM "C&ut", ID_HEXEDIT_CUT + MENUITEM "&Copy", ID_HEXEDIT_COPY + MENUITEM "&Paste", ID_HEXEDIT_PASTE + MENUITEM "&Delete", ID_HEXEDIT_DELETE + MENUITEM SEPARATOR + MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL + END END diff --git a/base/applications/regedit/lang/cs-CZ.rc b/base/applications/regedit/lang/cs-CZ.rc index b412af4c186..c1d12dbfa95 100644 --- a/base/applications/regedit/lang/cs-CZ.rc +++ b/base/applications/regedit/lang/cs-CZ.rc @@ -160,6 +160,15 @@ BEGIN MENUITEM SEPARATOR MENUITEM "Z&koprovat nzev kle", ID_EDIT_COPYKEYNAME END + POPUP "" + BEGIN + MENUITEM "C&ut", ID_HEXEDIT_CUT + MENUITEM "&Copy", ID_HEXEDIT_COPY + MENUITEM "&Paste", ID_HEXEDIT_PASTE + MENUITEM "&Delete", ID_HEXEDIT_DELETE + MENUITEM SEPARATOR + MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL + END END diff --git a/base/applications/regedit/lang/de-DE.rc b/base/applications/regedit/lang/de-DE.rc index 3b2b646f738..4cf8657a80f 100644 --- a/base/applications/regedit/lang/de-DE.rc +++ b/base/applications/regedit/lang/de-DE.rc @@ -162,6 +162,15 @@ BEGIN MENUITEM SEPARATOR MENUITEM "S&chlsselnamen kopieren", ID_EDIT_COPYKEYNAME END + POPUP "" + BEGIN + MENUITEM "&Ausschneiden", ID_HEXEDIT_CUT + MENUITEM "&Kopieren", ID_HEXEDIT_COPY + MENUITEM "&Einfgen", ID_HEXEDIT_PASTE + MENUITEM "&Lschen", ID_HEXEDIT_DELETE + MENUITEM SEPARATOR + MENUITEM "A&lles auswhlen", ID_HEXEDIT_SELECT_ALL + END END diff --git a/base/applications/regedit/lang/el-GR.rc b/base/applications/regedit/lang/el-GR.rc index 34e4202d15d..281ed2d299e 100644 --- a/base/applications/regedit/lang/el-GR.rc +++ b/base/applications/regedit/lang/el-GR.rc @@ -162,6 +162,15 @@ BEGIN MENUITEM SEPARATOR MENUITEM "& ", ID_EDIT_COPYKEYNAME END + POPUP "" + BEGIN + MENUITEM "C&ut", ID_HEXEDIT_CUT + MENUITEM "&Copy", ID_HEXEDIT_COPY + MENUITEM "&Paste", ID_HEXEDIT_PASTE + MENUITEM "&Delete", ID_HEXEDIT_DELETE + MENUITEM SEPARATOR + MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL + END END diff --git a/base/applications/regedit/lang/en-US.rc b/base/applications/regedit/lang/en-US.rc index b7e948f8a9a..e5a94cba8e7 100644 --- a/base/applications/regedit/lang/en-US.rc +++ b/base/applications/regedit/lang/en-US.rc @@ -160,6 +160,15 @@ BEGIN MENUITEM SEPARATOR MENUITEM "&Copy Key Name", ID_EDIT_COPYKEYNAME END + POPUP "" + BEGIN + MENUITEM "C&ut", ID_HEXEDIT_CUT + MENUITEM "&Copy", ID_HEXEDIT_COPY + MENUITEM "&Paste", ID_HEXEDIT_PASTE + MENUITEM "&Delete", ID_HEXEDIT_DELETE + MENUITEM SEPARATOR + MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL + END END diff --git a/base/applications/regedit/lang/es-ES.rc b/base/applications/regedit/lang/es-ES.rc index b7e703048da..b128846bca1 100644 --- a/base/applications/regedit/lang/es-ES.rc +++ b/base/applications/regedit/lang/es-ES.rc @@ -165,6 +165,15 @@ BEGIN MENUITEM SEPARATOR MENUITEM "&Copiar nombre de clave", ID_EDIT_COPYKEYNAME END + POPUP "" + BEGIN + MENUITEM "C&ut", ID_HEXEDIT_CUT + MENUITEM "&Copy", ID_HEXEDIT_COPY + MENUITEM "&Paste", ID_HEXEDIT_PASTE + MENUITEM "&Delete", ID_HEXEDIT_DELETE + MENUITEM SEPARATOR + MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL + END END diff --git a/base/applications/regedit/lang/fr-FR.rc b/base/applications/regedit/lang/fr-FR.rc index ed997425aff..c5042da4c9a 100644 --- a/base/applications/regedit/lang/fr-FR.rc +++ b/base/applications/regedit/lang/fr-FR.rc @@ -165,6 +165,15 @@ BEGIN MENUITEM SEPARATOR MENUITEM "&Copier le nom de la cl", ID_EDIT_COPYKEYNAME END + POPUP "" + BEGIN + MENUITEM "C&ut", ID_HEXEDIT_CUT + MENUITEM "&Copy", ID_HEXEDIT_COPY + MENUITEM "&Paste", ID_HEXEDIT_PASTE + MENUITEM "&Delete", ID_HEXEDIT_DELETE + MENUITEM SEPARATOR + MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL + END END diff --git a/base/applications/regedit/lang/hu-HU.rc b/base/applications/regedit/lang/hu-HU.rc index 3c7277b79ab..42faef3a4ea 100644 --- a/base/applications/regedit/lang/hu-HU.rc +++ b/base/applications/regedit/lang/hu-HU.rc @@ -163,6 +163,15 @@ BEGIN MENUITEM SEPARATOR MENUITEM "&Copy Key Name", ID_EDIT_COPYKEYNAME END + POPUP "" + BEGIN + MENUITEM "C&ut", ID_HEXEDIT_CUT + MENUITEM "&Copy", ID_HEXEDIT_COPY + MENUITEM "&Paste", ID_HEXEDIT_PASTE + MENUITEM "&Delete", ID_HEXEDIT_DELETE + MENUITEM SEPARATOR + MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL + END END diff --git a/base/applications/regedit/lang/id-ID.rc b/base/applications/regedit/lang/id-ID.rc index c6b9bb1cb49..059abec9576 100644 --- a/base/applications/regedit/lang/id-ID.rc +++ b/base/applications/regedit/lang/id-ID.rc @@ -162,6 +162,15 @@ BEGIN MENUITEM SEPARATOR MENUITEM "&Copy Nama Kunci", ID_EDIT_COPYKEYNAME END + POPUP "" + BEGIN + MENUITEM "C&ut", ID_HEXEDIT_CUT + MENUITEM "&Copy", ID_HEXEDIT_COPY + MENUITEM "&Paste", ID_HEXEDIT_PASTE + MENUITEM "&Delete", ID_HEXEDIT_DELETE + MENUITEM SEPARATOR + MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL + END END diff --git a/base/applications/regedit/lang/it-IT.rc b/base/applications/regedit/lang/it-IT.rc index f5a2fc96540..a86981a0865 100644 --- a/base/applications/regedit/lang/it-IT.rc +++ b/base/applications/regedit/lang/it-IT.rc @@ -165,6 +165,15 @@ BEGIN MENUITEM SEPARATOR MENUITEM "&Copia il nome della chiave", ID_EDIT_COPYKEYNAME END + POPUP "" + BEGIN + MENUITEM "C&ut", ID_HEXEDIT_CUT + MENUITEM "&Copy", ID_HEXEDIT_COPY + MENUITEM "&Paste", ID_HEXEDIT_PASTE + MENUITEM "&Delete", ID_HEXEDIT_DELETE + MENUITEM SEPARATOR + MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL + END END diff --git a/base/applications/regedit/lang/ja-JP.rc b/base/applications/regedit/lang/ja-JP.rc index 3108fb8aa34..8b1816bf03f 100644 --- a/base/applications/regedit/lang/ja-JP.rc +++ b/base/applications/regedit/lang/ja-JP.rc @@ -160,6 +160,15 @@ BEGIN MENUITEM SEPARATOR MENUITEM "L[̃Rs[(&C)", ID_EDIT_COPYKEYNAME END + POPUP "" + BEGIN + MENUITEM "؂(&C)", ID_HEXEDIT_CUT + MENUITEM "Rs[(&C)", ID_HEXEDIT_COPY + MENUITEM "\\t(&P)", ID_HEXEDIT_PASTE + MENUITEM "폜(&D)", ID_HEXEDIT_DELETE + MENUITEM SEPARATOR + MENUITEM "ׂđI(&A)", ID_HEXEDIT_SELECT_ALL + END END diff --git a/base/applications/regedit/lang/ko-KR.rc b/base/applications/regedit/lang/ko-KR.rc index 5aef6a1b358..01777d0344b 100644 --- a/base/applications/regedit/lang/ko-KR.rc +++ b/base/applications/regedit/lang/ko-KR.rc @@ -147,6 +147,15 @@ BEGIN MENUITEM SEPARATOR MENUITEM "Ű ̸ (&C)", ID_EDIT_COPYKEYNAME END + POPUP "" + BEGIN + MENUITEM "C&ut", ID_HEXEDIT_CUT + MENUITEM "&Copy", ID_HEXEDIT_COPY + MENUITEM "&Paste", ID_HEXEDIT_PASTE + MENUITEM "&Delete", ID_HEXEDIT_DELETE + MENUITEM SEPARATOR + MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL + END END diff --git a/base/applications/regedit/lang/nl-NL.rc b/base/applications/regedit/lang/nl-NL.rc index 158a4ec4d24..be86610e59c 100644 --- a/base/applications/regedit/lang/nl-NL.rc +++ b/base/applications/regedit/lang/nl-NL.rc @@ -162,6 +162,15 @@ BEGIN MENUITEM SEPARATOR MENUITEM "&Copy Key Name", ID_EDIT_COPYKEYNAME END + POPUP "" + BEGIN + MENUITEM "C&ut", ID_HEXEDIT_CUT + MENUITEM "&Copy", ID_HEXEDIT_COPY + MENUITEM "&Paste", ID_HEXEDIT_PASTE + MENUITEM "&Delete", ID_HEXEDIT_DELETE + MENUITEM SEPARATOR + MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL + END END diff --git a/base/applications/regedit/lang/no-NO.rc b/base/applications/regedit/lang/no-NO.rc index ac3e7faa330..b052432f8ec 100644 --- a/base/applications/regedit/lang/no-NO.rc +++ b/base/applications/regedit/lang/no-NO.rc @@ -162,6 +162,15 @@ BEGIN MENUITEM SEPARATOR MENUITEM "&Kopier nkkelnavn", ID_EDIT_COPYKEYNAME END + POPUP "" + BEGIN + MENUITEM "C&ut", ID_HEXEDIT_CUT + MENUITEM "&Copy", ID_HEXEDIT_COPY + MENUITEM "&Paste", ID_HEXEDIT_PASTE + MENUITEM "&Delete", ID_HEXEDIT_DELETE + MENUITEM SEPARATOR + MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL + END END diff --git a/base/applications/regedit/lang/pl-PL.rc b/base/applications/regedit/lang/pl-PL.rc index ebf6da04151..198125c772c 100644 --- a/base/applications/regedit/lang/pl-PL.rc +++ b/base/applications/regedit/lang/pl-PL.rc @@ -167,6 +167,15 @@ BEGIN MENUITEM SEPARATOR MENUITEM "&Kopiuj nazw klucza", ID_EDIT_COPYKEYNAME END + POPUP "" + BEGIN + MENUITEM "C&ut", ID_HEXEDIT_CUT + MENUITEM "&Copy", ID_HEXEDIT_COPY + MENUITEM "&Paste", ID_HEXEDIT_PASTE + MENUITEM "&Delete", ID_HEXEDIT_DELETE + MENUITEM SEPARATOR + MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL + END END diff --git a/base/applications/regedit/lang/pt-BR.rc b/base/applications/regedit/lang/pt-BR.rc index 9c1f7245ec4..4cd21990e30 100644 --- a/base/applications/regedit/lang/pt-BR.rc +++ b/base/applications/regedit/lang/pt-BR.rc @@ -163,6 +163,15 @@ BEGIN MENUITEM SEPARATOR MENUITEM "&Copiar nome da chave", ID_EDIT_COPYKEYNAME END + POPUP "" + BEGIN + MENUITEM "C&ut", ID_HEXEDIT_CUT + MENUITEM "&Copy", ID_HEXEDIT_COPY + MENUITEM "&Paste", ID_HEXEDIT_PASTE + MENUITEM "&Delete", ID_HEXEDIT_DELETE + MENUITEM SEPARATOR + MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL + END END diff --git a/base/applications/regedit/lang/pt-PT.rc b/base/applications/regedit/lang/pt-PT.rc index 081ba3b0800..15fee2f3166 100644 --- a/base/applications/regedit/lang/pt-PT.rc +++ b/base/applications/regedit/lang/pt-PT.rc @@ -163,6 +163,15 @@ BEGIN MENUITEM SEPARATOR MENUITEM "&Copy Key Name", ID_EDIT_COPYKEYNAME END + POPUP "" + BEGIN + MENUITEM "C&ut", ID_HEXEDIT_CUT + MENUITEM "&Copy", ID_HEXEDIT_COPY + MENUITEM "&Paste", ID_HEXEDIT_PASTE + MENUITEM "&Delete", ID_HEXEDIT_DELETE + MENUITEM SEPARATOR + MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL + END END diff --git a/base/applications/regedit/lang/ru-RU.rc b/base/applications/regedit/lang/ru-RU.rc index 3d38ed24f01..62892800f15 100644 --- a/base/applications/regedit/lang/ru-RU.rc +++ b/base/applications/regedit/lang/ru-RU.rc @@ -162,6 +162,15 @@ BEGIN MENUITEM SEPARATOR MENUITEM "& ", ID_EDIT_COPYKEYNAME END + POPUP "" + BEGIN + MENUITEM "C&ut", ID_HEXEDIT_CUT + MENUITEM "&Copy", ID_HEXEDIT_COPY + MENUITEM "&Paste", ID_HEXEDIT_PASTE + MENUITEM "&Delete", ID_HEXEDIT_DELETE + MENUITEM SEPARATOR + MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL + END END diff --git a/base/applications/regedit/lang/sk-SK.rc b/base/applications/regedit/lang/sk-SK.rc index 1ef4df97081..d8d558852b3 100644 --- a/base/applications/regedit/lang/sk-SK.rc +++ b/base/applications/regedit/lang/sk-SK.rc @@ -147,6 +147,15 @@ BEGIN MENUITEM SEPARATOR MENUITEM "&Copy Key Name", ID_EDIT_COPYKEYNAME END + POPUP "" + BEGIN + MENUITEM "C&ut", ID_HEXEDIT_CUT + MENUITEM "&Copy", ID_HEXEDIT_COPY + MENUITEM "&Paste", ID_HEXEDIT_PASTE + MENUITEM "&Delete", ID_HEXEDIT_DELETE + MENUITEM SEPARATOR + MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL + END END diff --git a/base/applications/regedit/lang/sl-SI.rc b/base/applications/regedit/lang/sl-SI.rc index 5c529ffe6fb..d5c5804c881 100644 --- a/base/applications/regedit/lang/sl-SI.rc +++ b/base/applications/regedit/lang/sl-SI.rc @@ -162,6 +162,15 @@ BEGIN MENUITEM SEPARATOR MENUITEM "&Copy Key Name", ID_EDIT_COPYKEYNAME END + POPUP "" + BEGIN + MENUITEM "C&ut", ID_HEXEDIT_CUT + MENUITEM "&Copy", ID_HEXEDIT_COPY + MENUITEM "&Paste", ID_HEXEDIT_PASTE + MENUITEM "&Delete", ID_HEXEDIT_DELETE + MENUITEM SEPARATOR + MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL + END END diff --git a/base/applications/regedit/lang/sv-SE.rc b/base/applications/regedit/lang/sv-SE.rc index efce60a4190..ee1515dd08b 100644 --- a/base/applications/regedit/lang/sv-SE.rc +++ b/base/applications/regedit/lang/sv-SE.rc @@ -160,6 +160,15 @@ BEGIN MENUITEM SEPARATOR MENUITEM "&Kopiera nyckelnamn", ID_EDIT_COPYKEYNAME END + POPUP "" + BEGIN + MENUITEM "C&ut", ID_HEXEDIT_CUT + MENUITEM "&Copy", ID_HEXEDIT_COPY + MENUITEM "&Paste", ID_HEXEDIT_PASTE + MENUITEM "&Delete", ID_HEXEDIT_DELETE + MENUITEM SEPARATOR + MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL + END END diff --git a/base/applications/regedit/lang/th-TH.rc b/base/applications/regedit/lang/th-TH.rc index d69da60f90e..c7bb7fde7d9 100644 --- a/base/applications/regedit/lang/th-TH.rc +++ b/base/applications/regedit/lang/th-TH.rc @@ -162,6 +162,15 @@ BEGIN MENUITEM SEPARATOR MENUITEM "&Copy Key Name", ID_EDIT_COPYKEYNAME END + POPUP "" + BEGIN + MENUITEM "C&ut", ID_HEXEDIT_CUT + MENUITEM "&Copy", ID_HEXEDIT_COPY + MENUITEM "&Paste", ID_HEXEDIT_PASTE + MENUITEM "&Delete", ID_HEXEDIT_DELETE + MENUITEM SEPARATOR + MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL + END END diff --git a/base/applications/regedit/lang/uk-UA.rc b/base/applications/regedit/lang/uk-UA.rc index 6638339705a..5fd1fa5ec45 100644 --- a/base/applications/regedit/lang/uk-UA.rc +++ b/base/applications/regedit/lang/uk-UA.rc @@ -163,6 +163,15 @@ BEGIN MENUITEM SEPARATOR MENUITEM "& ' ", ID_EDIT_COPYKEYNAME END + POPUP "" + BEGIN + MENUITEM "C&ut", ID_HEXEDIT_CUT + MENUITEM "&Copy", ID_HEXEDIT_COPY + MENUITEM "&Paste", ID_HEXEDIT_PASTE + MENUITEM "&Delete", ID_HEXEDIT_DELETE + MENUITEM SEPARATOR + MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL + END END diff --git a/base/applications/regedit/lang/zh-CN.rc b/base/applications/regedit/lang/zh-CN.rc index 87a1e6fd5e4..0d20667cdd3 100644 --- a/base/applications/regedit/lang/zh-CN.rc +++ b/base/applications/regedit/lang/zh-CN.rc @@ -162,6 +162,15 @@ BEGIN MENUITEM SEPARATOR MENUITEM "(&C)", ID_EDIT_COPYKEYNAME END + POPUP "" + BEGIN + MENUITEM "C&ut", ID_HEXEDIT_CUT + MENUITEM "&Copy", ID_HEXEDIT_COPY + MENUITEM "&Paste", ID_HEXEDIT_PASTE + MENUITEM "&Delete", ID_HEXEDIT_DELETE + MENUITEM SEPARATOR + MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL + END END diff --git a/base/applications/regedit/main.h b/base/applications/regedit/main.h index ea16ceec7cb..eee317e67ae 100644 --- a/base/applications/regedit/main.h +++ b/base/applications/regedit/main.h @@ -35,6 +35,7 @@ #define PM_MODIFYVALUE 0 #define PM_NEW 1 #define PM_TREECONTEXT 2 +#define PM_HEXEDIT 3 #define MAX_NEW_KEY_LEN 128 diff --git a/base/applications/regedit/resource.h b/base/applications/regedit/resource.h index 6da08790a28..2190e0e3ed6 100644 --- a/base/applications/regedit/resource.h +++ b/base/applications/regedit/resource.h @@ -108,6 +108,11 @@ #define ID_REGISTRY_PRINTSUBTREE 32832 #define ID_REGISTRY_PRINTERSETUP 32833 #define ID_REGISTRY_SAVESUBTREEAS 32834 +#define ID_HEXEDIT_CUT 32835 +#define ID_HEXEDIT_COPY 32836 +#define ID_HEXEDIT_PASTE 32837 +#define ID_HEXEDIT_DELETE 32838 +#define ID_HEXEDIT_SELECT_ALL 32839 #define IDS_LICENSE 32835 #define IDS_ERROR 32836 #define IDS_BAD_VALUE 32837 @@ -203,6 +208,7 @@ #define IDC_LOOKAT_DATA 2016 #define IDC_MATCHSTRING 2017 #define IDC_MATCHCASE 2018 + #define IDS_FINISHEDFIND 2019 #define ID_FAVORITES_MIN 2100 @@ -210,4 +216,5 @@ #define ID_ACCEL 3000 + #define IDC_STATIC -1 diff --git a/base/applications/regedit/treeview.c b/base/applications/regedit/treeview.c index cfbd401d009..cd592036907 100644 --- a/base/applications/regedit/treeview.c +++ b/base/applications/regedit/treeview.c @@ -540,15 +540,16 @@ BOOL CreateNewKey(HWND hwndTV, HTREEITEM hItem) TCHAR szNewKey[128]; LPCTSTR pszKeyPath; int iIndex = 1; - HKEY hRootKey; - HKEY hKey = NULL; - HKEY hNewKey = NULL; + LONG nResult; + HKEY hRootKey = NULL, hKey = NULL, hNewKey = NULL; BOOL bSuccess = FALSE; DWORD dwDisposition; HTREEITEM hNewItem; - pszKeyPath = GetItemPath(g_pChildWnd->hTreeWnd, hItem, &hRootKey); - if (RegOpenKey(hRootKey, pszKeyPath, &hKey) != ERROR_SUCCESS) + pszKeyPath = GetItemPath(hwndTV, hItem, &hRootKey); + if (pszKeyPath[0] == TEXT('\0')) + hKey = hRootKey; + else if (RegOpenKey(hRootKey, pszKeyPath, &hKey) != ERROR_SUCCESS) goto done; if (LoadString(hInst, IDS_NEW_KEY, szNewKeyFormat, sizeof(szNewKeyFormat) / sizeof(szNewKeyFormat[0])) <= 0) @@ -557,13 +558,20 @@ BOOL CreateNewKey(HWND hwndTV, HTREEITEM hItem) /* Need to create a new key with a unique name */ do { - _sntprintf(szNewKey, sizeof(szNewKey) / sizeof(szNewKey[0]), szNewKeyFormat, iIndex++); - RegCreateKeyEx(hKey, szNewKey, 0, NULL, 0, KEY_ALL_ACCESS, NULL, &hNewKey, &dwDisposition); - if (hNewKey && (dwDisposition == REG_OPENED_EXISTING_KEY)) + wsprintf(szNewKey, szNewKeyFormat, iIndex++); + nResult = RegCreateKeyEx(hKey, szNewKey, 0, NULL, 0, KEY_WRITE, NULL, &hNewKey, &dwDisposition); + if (hNewKey && dwDisposition == REG_OPENED_EXISTING_KEY) { RegCloseKey(hNewKey); hNewKey = NULL; } + else if (!hNewKey) + { + TCHAR sz[256]; + wsprintf(sz, TEXT("Cannot create new key!\n\nError Code: %d"), nResult); + MessageBox(hFrameWnd, sz, NULL, MB_ICONERROR); + goto done; + } } while(!hNewKey); @@ -578,7 +586,7 @@ BOOL CreateNewKey(HWND hwndTV, HTREEITEM hItem) bSuccess = TRUE; done: - if (hKey) + if (hKey != hRootKey && hKey) RegCloseKey(hKey); if (hNewKey) RegCloseKey(hNewKey); diff --git a/base/applications/sc/create.c b/base/applications/sc/create.c index 85a064d1d74..00ae3325c41 100644 --- a/base/applications/sc/create.c +++ b/base/applications/sc/create.c @@ -4,86 +4,265 @@ * FILE: base/system/sc/create.c * PURPOSE: Create a service * COPYRIGHT: Copyright 2005 - 2006 Ged Murphy + * Roel Messiant * */ #include "sc.h" -BOOL Create(LPCTSTR ServiceName, LPCTSTR *ServiceArgs) + +typedef struct +{ + LPCTSTR lpOption; + DWORD dwValue; +} OPTION_INFO; + +typedef struct +{ + LPCTSTR lpServiceName; + LPCTSTR lpDisplayName; + DWORD dwServiceType; + DWORD dwStartType; + DWORD dwErrorControl; + LPCTSTR lpBinaryPathName; + LPCTSTR lpLoadOrderGroup; + DWORD dwTagId; + LPCTSTR lpDependencies; + LPCTSTR lpServiceStartName; + LPCTSTR lpPassword; + + BOOL bTagId; +} SERVICE_CREATE_INFO, *LPSERVICE_CREATE_INFO; + + +static const OPTION_INFO TypeOpts[] = +{ + { _T("own"), SERVICE_WIN32_OWN_PROCESS }, + { _T("share"), SERVICE_WIN32_SHARE_PROCESS }, + { _T("interact"), SERVICE_INTERACTIVE_PROCESS }, + { _T("kernel"), SERVICE_KERNEL_DRIVER }, + { _T("filesys"), SERVICE_FILE_SYSTEM_DRIVER }, + { _T("rec"), SERVICE_RECOGNIZER_DRIVER } +}; + +static const OPTION_INFO StartOpts[] = +{ + { _T("boot"), SERVICE_BOOT_START }, + { _T("system"), SERVICE_SYSTEM_START }, + { _T("auto"), SERVICE_AUTO_START }, + { _T("demand"), SERVICE_DEMAND_START }, + { _T("disabled"), SERVICE_DISABLED } +}; + +static const OPTION_INFO ErrorOpts[] = +{ + { _T("normal"), SERVICE_ERROR_NORMAL }, + { _T("severe"), SERVICE_ERROR_SEVERE }, + { _T("critical"), SERVICE_ERROR_CRITICAL }, + { _T("ignore"), SERVICE_ERROR_IGNORE } +}; + +static const OPTION_INFO TagOpts[] = +{ + { _T("yes"), TRUE }, + { _T("no"), FALSE } +}; + + +static BOOL ParseCreateArguments( + LPCTSTR *ServiceArgs, + INT ArgCount, + OUT LPSERVICE_CREATE_INFO lpServiceInfo +) +{ + INT i, ArgIndex = 1; + + if (ArgCount < 1) + return FALSE; + + ZeroMemory(lpServiceInfo, sizeof(SERVICE_CREATE_INFO)); + + lpServiceInfo->lpServiceName = ServiceArgs[0]; + + ArgCount--; + + while (ArgCount > 1) + { + if (!lstrcmpi(ServiceArgs[ArgIndex], _T("type="))) + { + for (i = 0; i < sizeof(TypeOpts) / sizeof(TypeOpts[0]); i++) + if (!lstrcmpi(ServiceArgs[ArgIndex + 1], TypeOpts[i].lpOption)) + { + lpServiceInfo->dwServiceType |= TypeOpts[i].dwValue; + break; + } + + if (i == sizeof(TypeOpts) / sizeof(TypeOpts[0])) + break; + } + else if (!lstrcmpi(ServiceArgs[ArgIndex], _T("start="))) + { + for (i = 0; i < sizeof(StartOpts) / sizeof(StartOpts[0]); i++) + if (!lstrcmpi(ServiceArgs[ArgIndex + 1], StartOpts[i].lpOption)) + { + lpServiceInfo->dwStartType = StartOpts[i].dwValue; + break; + } + + if (i == sizeof(StartOpts) / sizeof(StartOpts[0])) + break; + } + else if (!lstrcmpi(ServiceArgs[ArgIndex], _T("error="))) + { + for (i = 0; i < sizeof(ErrorOpts) / sizeof(ErrorOpts[0]); i++) + if (!lstrcmpi(ServiceArgs[ArgIndex + 1], ErrorOpts[i].lpOption)) + { + lpServiceInfo->dwErrorControl = ErrorOpts[i].dwValue; + break; + } + + if (i == sizeof(ErrorOpts) / sizeof(ErrorOpts[0])) + break; + } + else if (!lstrcmpi(ServiceArgs[ArgIndex], _T("tag="))) + { + for (i = 0; i < sizeof(TagOpts) / sizeof(TagOpts[0]); i++) + if (!lstrcmpi(ServiceArgs[ArgIndex + 1], TagOpts[i].lpOption)) + { + lpServiceInfo->bTagId = TagOpts[i].dwValue; + break; + } + + if (i == sizeof(TagOpts) / sizeof(TagOpts[0])) + break; + } + else if (!lstrcmpi(ServiceArgs[ArgIndex], _T("binpath="))) + { + lpServiceInfo->lpBinaryPathName = ServiceArgs[ArgIndex + 1]; + } + else if (!lstrcmpi(ServiceArgs[ArgIndex], _T("group="))) + { + lpServiceInfo->lpLoadOrderGroup = ServiceArgs[ArgIndex + 1]; + } + else if (!lstrcmpi(ServiceArgs[ArgIndex], _T("depend="))) + { + lpServiceInfo->lpDependencies = ServiceArgs[ArgIndex + 1]; + } + else if (!lstrcmpi(ServiceArgs[ArgIndex], _T("obj="))) + { + lpServiceInfo->lpServiceStartName = ServiceArgs[ArgIndex + 1]; + } + else if (!lstrcmpi(ServiceArgs[ArgIndex], _T("displayname="))) + { + lpServiceInfo->lpDisplayName = ServiceArgs[ArgIndex + 1]; + } + else if (!lstrcmpi(ServiceArgs[ArgIndex], _T("password="))) + { + lpServiceInfo->lpPassword = ServiceArgs[ArgIndex + 1]; + } + + ArgIndex += 2; + ArgCount -= 2; + } + + return (ArgCount == 0); +} + +BOOL Create(LPCTSTR *ServiceArgs, INT ArgCount) { SC_HANDLE hSCManager; SC_HANDLE hSc; BOOL bRet = FALSE; - DWORD dwServiceType = SERVICE_WIN32_OWN_PROCESS; - DWORD dwStartType = SERVICE_DEMAND_START; - DWORD dwErrorControl = SERVICE_ERROR_NORMAL; - LPCTSTR lpBinaryPathName = NULL; - LPCTSTR lpLoadOrderGroup = NULL; - DWORD dwTagId = 0; - LPCTSTR lpDependencies = NULL; - LPCTSTR lpServiceStartName = NULL; - LPCTSTR lpPassword = NULL; + INT i; + INT Length; + LPTSTR lpBuffer = NULL; + SERVICE_CREATE_INFO ServiceInfo; - /* quick hack to get it working */ - lpBinaryPathName = *ServiceArgs; - -#ifdef SCDBG - _tprintf(_T("service name - %s\n"), ServiceName); - _tprintf(_T("display name - %s\n"), ServiceName); - _tprintf(_T("service type - %lu\n"), dwServiceType); - _tprintf(_T("start type - %lu\n"), dwStartType); - _tprintf(_T("error control - %lu\n"), dwErrorControl); - _tprintf(_T("Binary path - %s\n"), lpBinaryPathName); - _tprintf(_T("load order group - %s\n"), lpLoadOrderGroup); - _tprintf(_T("tag - %lu\n"), dwTagId); - _tprintf(_T("dependincies - %s\n"), lpDependencies); - _tprintf(_T("account start name - %s\n"), lpServiceStartName); - _tprintf(_T("account password - %s\n"), lpPassword); -#endif - - if (!ServiceName) + if (!ParseCreateArguments(ServiceArgs, ArgCount, &ServiceInfo)) { CreateUsage(); return FALSE; } - hSCManager = OpenSCManager(NULL, - NULL, - SC_MANAGER_CREATE_SERVICE); - if (hSCManager == NULL) + if (!ServiceInfo.dwServiceType) + ServiceInfo.dwServiceType = SERVICE_WIN32_OWN_PROCESS; + + if (!ServiceInfo.dwStartType) + ServiceInfo.dwStartType = SERVICE_DEMAND_START; + + if (!ServiceInfo.dwErrorControl) + ServiceInfo.dwErrorControl = SERVICE_ERROR_NORMAL; + + if (ServiceInfo.lpDependencies) { - ReportLastError(); - return FALSE; + Length = lstrlen(ServiceInfo.lpDependencies); + + lpBuffer = HeapAlloc(GetProcessHeap(), + 0, + (Length + 2) * sizeof(TCHAR)); + + for (i = 0; i < Length; i++) + if (ServiceInfo.lpDependencies[i] == _T('/')) + lpBuffer[i] = 0; + else + lpBuffer[i] = ServiceInfo.lpDependencies[i]; + + lpBuffer[Length] = 0; + lpBuffer[Length + 1] = 0; + + ServiceInfo.lpDependencies = lpBuffer; } - hSc = CreateService(hSCManager, - ServiceName, - ServiceName, - SERVICE_ALL_ACCESS, - dwServiceType, - dwStartType, - dwErrorControl, - lpBinaryPathName, - lpLoadOrderGroup, - &dwTagId, - lpDependencies, - lpServiceStartName, - lpPassword); +#ifdef SCDBG + _tprintf(_T("service name - %s\n"), ServiceInfo.lpServiceName); + _tprintf(_T("display name - %s\n"), ServiceInfo.lpDisplayName); + _tprintf(_T("service type - %lu\n"), ServiceInfo.dwServiceType); + _tprintf(_T("start type - %lu\n"), ServiceInfo.dwStartType); + _tprintf(_T("error control - %lu\n"), ServiceInfo.dwErrorControl); + _tprintf(_T("Binary path - %s\n"), ServiceInfo.lpBinaryPathName); + _tprintf(_T("load order group - %s\n"), ServiceInfo.lpLoadOrderGroup); + _tprintf(_T("tag - %lu\n"), ServiceInfo.dwTagId); + _tprintf(_T("dependencies - %s\n"), ServiceInfo.lpDependencies); + _tprintf(_T("account start name - %s\n"), ServiceInfo.lpServiceStartName); + _tprintf(_T("account password - %s\n"), ServiceInfo.lpPassword); +#endif - if (hSc == NULL) + hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_CREATE_SERVICE); + + if (hSCManager != NULL) { - ReportLastError(); + hSc = CreateService(hSCManager, + ServiceInfo.lpServiceName, + ServiceInfo.lpDisplayName, + SERVICE_ALL_ACCESS, + ServiceInfo.dwServiceType, + ServiceInfo.dwStartType, + ServiceInfo.dwErrorControl, + ServiceInfo.lpBinaryPathName, + ServiceInfo.lpLoadOrderGroup, + ServiceInfo.bTagId ? &ServiceInfo.dwTagId : NULL, + ServiceInfo.lpDependencies, + ServiceInfo.lpServiceStartName, + ServiceInfo.lpPassword); + + if (hSc != NULL) + { + _tprintf(_T("[SC] CreateService SUCCESS\n")); + + CloseServiceHandle(hSc); + bRet = TRUE; + } + else + ReportLastError(); + CloseServiceHandle(hSCManager); } else - { - _tprintf(_T("[SC] CreateService SUCCESS\n")); + ReportLastError(); - CloseServiceHandle(hSc); - CloseServiceHandle(hSCManager); - bRet = TRUE; - } + if (lpBuffer != NULL) + HeapFree(GetProcessHeap(), 0, lpBuffer); return bRet; } diff --git a/base/applications/sc/sc.c b/base/applications/sc/sc.c index 9c45ed86d64..390e9fe2ade 100644 --- a/base/applications/sc/sc.c +++ b/base/applications/sc/sc.c @@ -67,11 +67,11 @@ ScControl(LPCTSTR Server, // remote machine name } else if (!lstrcmpi(Command, _T("start"))) { - ServiceName = *ServiceArgs++; - ArgCount--; - - if (ServiceName) + if (ArgCount > 0) { + ServiceName = *ServiceArgs++; + ArgCount--; + Start(ServiceName, ServiceArgs, ArgCount); @@ -81,11 +81,11 @@ ScControl(LPCTSTR Server, // remote machine name } else if (!lstrcmpi(Command, _T("pause"))) { - ServiceName = *ServiceArgs++; - ArgCount--; - - if (ServiceName) + if (ArgCount > 0) { + ServiceName = *ServiceArgs++; + ArgCount--; + Control(SERVICE_CONTROL_PAUSE, ServiceName, ServiceArgs, @@ -96,11 +96,11 @@ ScControl(LPCTSTR Server, // remote machine name } else if (!lstrcmpi(Command, _T("interrogate"))) { - ServiceName = *ServiceArgs++; - ArgCount--; - - if (ServiceName) + if (ArgCount > 0) { + ServiceName = *ServiceArgs++; + ArgCount--; + Control(SERVICE_CONTROL_INTERROGATE, ServiceName, ServiceArgs, @@ -111,11 +111,11 @@ ScControl(LPCTSTR Server, // remote machine name } else if (!lstrcmpi(Command, _T("stop"))) { - ServiceName = *ServiceArgs++; - ArgCount--; - - if (ServiceName) + if (ArgCount > 0) { + ServiceName = *ServiceArgs++; + ArgCount--; + Control(SERVICE_CONTROL_STOP, ServiceName, ServiceArgs, @@ -126,11 +126,11 @@ ScControl(LPCTSTR Server, // remote machine name } else if (!lstrcmpi(Command, _T("continue"))) { - ServiceName = *ServiceArgs++; - ArgCount--; - - if (ServiceName) + if (ArgCount > 0) { + ServiceName = *ServiceArgs++; + ArgCount--; + Control(SERVICE_CONTROL_CONTINUE, ServiceName, ServiceArgs, @@ -141,51 +141,49 @@ ScControl(LPCTSTR Server, // remote machine name } else if (!lstrcmpi(Command, _T("delete"))) { - ServiceName = *ServiceArgs++; - ArgCount--; + if (ArgCount > 0) + { + ServiceName = *ServiceArgs++; + ArgCount--; - if (ServiceName) Delete(ServiceName); + } else DeleteUsage(); } else if (!lstrcmpi(Command, _T("create"))) { - ServiceName = *ServiceArgs++; - ArgCount--; - - if (*ServiceArgs) - Create(ServiceName, - ServiceArgs); - else - CreateUsage(); + Create(ServiceArgs, ArgCount); } else if (!lstrcmpi(Command, _T("control"))) { INT CtlValue; - ServiceName = *ServiceArgs++; - ArgCount--; - - CtlValue = _ttoi(ServiceArgs[0]); - ServiceArgs++; - ArgCount--; - - if (ServiceName) + if (ArgCount > 1) { - if ((CtlValue >=128) && CtlValue <= 255) - { + ServiceName = *ServiceArgs++; + ArgCount--; + + CtlValue = _ttoi(ServiceArgs[0]); + ServiceArgs++; + ArgCount--; + + if ((CtlValue >= 128) && (CtlValue <= 255)) Control(CtlValue, ServiceName, ServiceArgs, ArgCount); - - return 0; - } + else + ControlUsage(); } - - ContinueUsage(); + else + ControlUsage(); } + else + { + MainUsage(); + } + return 0; } diff --git a/base/applications/sc/sc.h b/base/applications/sc/sc.h index cec74b921a1..52d939ea24f 100644 --- a/base/applications/sc/sc.h +++ b/base/applications/sc/sc.h @@ -7,7 +7,7 @@ /* control functions */ BOOL Start(LPCTSTR ServiceName, LPCTSTR *ServiceArgs, INT ArgCount); -BOOL Create(LPCTSTR ServiceName, LPCTSTR *ServiceArgs); +BOOL Create(LPCTSTR *ServiceArgs, INT ArgCount); BOOL Delete(LPCTSTR ServiceName); BOOL Control(DWORD Control, LPCTSTR ServiceName, LPCTSTR *Args, INT ArgCount); BOOL Query(LPCTSTR *ServiceArgs, DWORD ArgCount, BOOL bExtended); @@ -29,3 +29,4 @@ VOID ConfigUsage(VOID); VOID DescriptionUsage(VOID); VOID DeleteUsage(VOID); VOID CreateUsage(VOID); +VOID ControlUsage(VOID); diff --git a/base/applications/sc/usage.c b/base/applications/sc/usage.c index add5ea25f29..f4680ef1bd4 100644 --- a/base/applications/sc/usage.c +++ b/base/applications/sc/usage.c @@ -118,7 +118,7 @@ VOID InterrogateUsage(VOID) VOID StopUsage(VOID) { _tprintf(_T("DESCRIPTION:\n") - _T(" Sends an STOP control request to a service.\n") + _T(" Sends a STOP control request to a service.\n") _T("USAGE:\n") _T(" sc stop [service name]\n")); } @@ -126,7 +126,7 @@ VOID StopUsage(VOID) VOID ContinueUsage(VOID) { _tprintf(_T("DESCRIPTION:\n") - _T(" Sends an CONTINUE control request to a service.\n") + _T(" Sends a CONTINUE control request to a service.\n") _T("USAGE:\n") _T(" sc continue [service name]\n")); } @@ -179,3 +179,11 @@ VOID CreateUsage(VOID) _T(" DisplayName= \n") _T(" password= \n")); } + +VOID ControlUsage(VOID) +{ + _tprintf(_T("DESCRIPTION:\n") + _T(" Sends a CONTROL control request to a service.\n") + _T("USAGE:\n") + _T(" sc control [service name] \n")); +} diff --git a/base/applications/taskmgr/applpage.c b/base/applications/taskmgr/applpage.c index 0c20e810817..88c52070fa9 100644 --- a/base/applications/taskmgr/applpage.c +++ b/base/applications/taskmgr/applpage.c @@ -38,7 +38,6 @@ HWND hApplicationPageSwitchToButton; /* Application Switch To button HWND hApplicationPageNewTaskButton; /* Application New Task button */ static int nApplicationPageWidth; static int nApplicationPageHeight; -static HANDLE hApplicationPageEvent = NULL; /* When this event becomes signaled then we refresh the app list */ static BOOL bSortAscending = TRUE; DWORD WINAPI ApplicationPageRefreshThread(void *lpParameter); BOOL noApps; @@ -51,6 +50,11 @@ void ApplicationPageShowContextMenu2(void); int CALLBACK ApplicationPageCompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort); int ProcGetIndexByProcessId(DWORD dwProcessId); +#ifdef RUN_APPS_PAGE +static HANDLE hApplicationThread = NULL; +static DWORD dwApplicationThread; +#endif + #if 0 void SwitchToThisWindow ( HWND hWnd, /* Handle to the window that should be activated */ @@ -92,7 +96,6 @@ ApplicationPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) LV_COLUMN column; WCHAR szTemp[256]; int cx, cy; - HANDLE hRefreshThread = NULL; switch (message) { case WM_INITDIALOG: @@ -132,15 +135,16 @@ ApplicationPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) UpdateApplicationListControlViewSetting(); /* Start our refresh thread */ - hRefreshThread = CreateThread(NULL, 0, ApplicationPageRefreshThread, NULL, 0, NULL); - +#ifdef RUN_APPS_PAGE + hApplicationThread = CreateThread(NULL, 0, ApplicationPageRefreshThread, NULL, 0, &dwApplicationThread); +#endif return TRUE; case WM_DESTROY: - /* Close the event handle, this will make the */ - /* refresh thread exit when the wait fails */ - CloseHandle(hApplicationPageEvent); - CloseHandle(hRefreshThread); + /* Close refresh thread */ +#ifdef RUN_APPS_PAGE + EndLocalThread(&hApplicationThread, dwApplicationThread); +#endif break; case WM_COMMAND: @@ -213,9 +217,11 @@ ApplicationPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) void RefreshApplicationPage(void) { +#ifdef RUN_APPS_PAGE /* Signal the event so that our refresh thread */ /* will wake up and refresh the application page */ - SetEvent(hApplicationPageEvent); + PostThreadMessage(dwApplicationThread, WM_TIMER, 0, 0); +#endif } void UpdateApplicationListControlViewSetting(void) @@ -236,6 +242,7 @@ void UpdateApplicationListControlViewSetting(void) DWORD WINAPI ApplicationPageRefreshThread(void *lpParameter) { + MSG msg; INT i; BOOL bItemRemoved = FALSE; LV_ITEM item; @@ -243,30 +250,15 @@ DWORD WINAPI ApplicationPageRefreshThread(void *lpParameter) HIMAGELIST hImageListLarge; HIMAGELIST hImageListSmall; - /* Create the event */ - hApplicationPageEvent = CreateEventW(NULL, TRUE, TRUE, NULL); - /* If we couldn't create the event then exit the thread */ - if (!hApplicationPageEvent) - return 0; - while (1) { - DWORD dwWaitVal; - - /* Wait on the event */ - dwWaitVal = WaitForSingleObject(hApplicationPageEvent, INFINITE); - - /* If the wait failed then the event object must have been */ - /* closed and the task manager is exiting so exit this thread */ - if (dwWaitVal == WAIT_FAILED) + /* Wait for an the event or application close */ + if (GetMessage(&msg, NULL, 0, 0) <= 0) return 0; - if (dwWaitVal == WAIT_OBJECT_0) + if (msg.message == WM_TIMER) { - /* Reset our event */ - ResetEvent(hApplicationPageEvent); - /* * FIXME: * diff --git a/base/applications/taskmgr/debug.c b/base/applications/taskmgr/debug.c index fb11fc73fec..f72ba26a03d 100644 --- a/base/applications/taskmgr/debug.c +++ b/base/applications/taskmgr/debug.c @@ -1,7 +1,7 @@ /* * ReactOS Task Manager * - * debug.cpp + * debug.c * * Copyright (C) 1999 - 2001 Brian Palmer * 2005 Klemens Friedl diff --git a/base/applications/taskmgr/endproc.c b/base/applications/taskmgr/endproc.c index 3ae716f568c..be080ffbddf 100644 --- a/base/applications/taskmgr/endproc.c +++ b/base/applications/taskmgr/endproc.c @@ -1,7 +1,7 @@ /* * ReactOS Task Manager * - * endproc.cpp + * endproc.c * * Copyright (C) 1999 - 2001 Brian Palmer * 2005 Klemens Friedl diff --git a/base/applications/taskmgr/graph.c b/base/applications/taskmgr/graph.c index 6045a8f218f..b7b937e388c 100644 --- a/base/applications/taskmgr/graph.c +++ b/base/applications/taskmgr/graph.c @@ -1,7 +1,7 @@ /* * ReactOS Task Manager * - * graph.cpp + * graph.c * * Copyright (C) 1999 - 2001 Brian Palmer * diff --git a/base/applications/taskmgr/graphctl.c b/base/applications/taskmgr/graphctl.c index a1abf779e5a..5735e8b4d8d 100644 --- a/base/applications/taskmgr/graphctl.c +++ b/base/applications/taskmgr/graphctl.c @@ -1,7 +1,7 @@ /* * ReactOS Task Manager * - * GraphCtrl.cpp + * graphctl.c * * Copyright (C) 2002 Robert Dickenson * @@ -425,7 +425,7 @@ void GraphCtrl_DrawPoint(TGraphCtrl* this) * note: the m_dcPlot covers the entire client * but we only shift bitmap that is the size * of the plot rectangle - * grab the right side of the plot (exluding m_nShiftPixels on the left) + * grab the right side of the plot (excluding m_nShiftPixels on the left) * move this grabbed bitmap to the left by m_nShiftPixels */ BitBlt(this->m_dcPlot, this->m_rectPlot.left, this->m_rectPlot.top+1, diff --git a/base/applications/taskmgr/graphctl.h b/base/applications/taskmgr/graphctl.h index e924716e3e9..3a5b8388150 100644 --- a/base/applications/taskmgr/graphctl.h +++ b/base/applications/taskmgr/graphctl.h @@ -1,7 +1,7 @@ /* * ReactOS Task Manager * - * GraphCtrl.h + * graphctl.h * * Copyright (C) 2002 Robert Dickenson * diff --git a/base/applications/taskmgr/lang/bg-BG.rc b/base/applications/taskmgr/lang/bg-BG.rc index 3f281c7610c..aec05a5ab43 100644 --- a/base/applications/taskmgr/lang/bg-BG.rc +++ b/base/applications/taskmgr/lang/bg-BG.rc @@ -160,6 +160,7 @@ END // // Dialog // +// TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened IDD_TASKMGR_DIALOG DIALOGEX DISCARDABLE 0, 0, 264, 246 STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | diff --git a/base/applications/taskmgr/lang/cs-CZ.rc b/base/applications/taskmgr/lang/cs-CZ.rc index 287fee830b7..1fce6f7c89b 100644 --- a/base/applications/taskmgr/lang/cs-CZ.rc +++ b/base/applications/taskmgr/lang/cs-CZ.rc @@ -160,6 +160,7 @@ END // // Dialog // +// TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened IDD_TASKMGR_DIALOG DIALOGEX DISCARDABLE 0, 0, 264, 246 STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | diff --git a/base/applications/taskmgr/lang/da-DK.rc b/base/applications/taskmgr/lang/da-DK.rc index 07d2c7bade2..df2c65a8bb9 100644 --- a/base/applications/taskmgr/lang/da-DK.rc +++ b/base/applications/taskmgr/lang/da-DK.rc @@ -159,6 +159,7 @@ END // // Dialog // +// TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened IDD_TASKMGR_DIALOG DIALOGEX DISCARDABLE 0, 0, 264, 246 STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | diff --git a/base/applications/taskmgr/lang/de-DE.rc b/base/applications/taskmgr/lang/de-DE.rc index 53b93098ca0..0a900598892 100644 --- a/base/applications/taskmgr/lang/de-DE.rc +++ b/base/applications/taskmgr/lang/de-DE.rc @@ -160,6 +160,7 @@ END // // Dialog // +// TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened IDD_TASKMGR_DIALOG DIALOGEX DISCARDABLE 0, 0, 264, 246 STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | diff --git a/base/applications/taskmgr/lang/el-GR.rc b/base/applications/taskmgr/lang/el-GR.rc index e206ffbcbee..c6a86fcf19e 100644 --- a/base/applications/taskmgr/lang/el-GR.rc +++ b/base/applications/taskmgr/lang/el-GR.rc @@ -160,6 +160,7 @@ END // // Dialog // +// TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened IDD_TASKMGR_DIALOG DIALOGEX DISCARDABLE 0, 0, 264, 246 STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | diff --git a/base/applications/taskmgr/lang/es-ES.rc b/base/applications/taskmgr/lang/es-ES.rc index 636a9b6a1c0..fc987e3a7a0 100644 --- a/base/applications/taskmgr/lang/es-ES.rc +++ b/base/applications/taskmgr/lang/es-ES.rc @@ -45,67 +45,54 @@ BEGIN END MENUITEM SEPARATOR - MENUITEM "Iconos &Grandes", ID_VIEW_LARGE - MENUITEM "Iconos &Pequeos", ID_VIEW_SMALL - MENUITEM "&Detalles", ID_VIEW_DETAILS, -CHECKED - MENUITEM "&Seleccionar Columnas...", -ID_VIEW_SELECTCOLUMNS + MENUITEM "Iconos &Grandes", ID_VIEW_LARGE + MENUITEM "Iconos &Pequeos", ID_VIEW_SMALL + MENUITEM "&Detalles", ID_VIEW_DETAILS, CHECKED + MENUITEM "&Seleccionar Columnas...", ID_VIEW_SELECTCOLUMNS POPUP "Historial de la &CPU" BEGIN - MENUITEM "&Una Grfica, Todas las CPUs", -ID_VIEW_CPUHISTORY_ONEGRAPHALL + MENUITEM "&Una Grfica, Todas las CPUs", ID_VIEW_CPUHISTORY_ONEGRAPHALL - MENUITEM "Una Grfica, &Por CPU", -ID_VIEW_CPUHISTORY_ONEGRAPHPERCPU - , CHECKED + MENUITEM "Una Grfica, &Por CPU", ID_VIEW_CPUHISTORY_ONEGRAPHPERCPU, CHECKED END - MENUITEM "&Mostrar tiempos del Ncleo", -ID_VIEW_SHOWKERNELTIMES + MENUITEM "&Mostrar tiempos del Ncleo", ID_VIEW_SHOWKERNELTIMES END POPUP "&Ventanas" BEGIN - MENUITEM "Mosaico &Horizontal", -ID_WINDOWS_TILEHORIZONTALLY - MENUITEM "Mosaico &Vertical", -ID_WINDOWS_TILEVERTICALLY - MENUITEM "&Minimizar", ID_WINDOWS_MINIMIZE - MENUITEM "Ma&ximizar", ID_WINDOWS_MAXIMIZE - MENUITEM "&Cascada", ID_WINDOWS_CASCADE - MENUITEM "&Traer al Frente", -ID_WINDOWS_BRINGTOFRONT + MENUITEM "Mosaico &Horizontal", ID_WINDOWS_TILEHORIZONTALLY + MENUITEM "Mosaico &Vertical", ID_WINDOWS_TILEVERTICALLY + MENUITEM "&Minimizar", ID_WINDOWS_MINIMIZE + MENUITEM "Ma&ximizar", ID_WINDOWS_MAXIMIZE + MENUITEM "&Cascada", ID_WINDOWS_CASCADE + MENUITEM "&Traer al Frente", ID_WINDOWS_BRINGTOFRONT END POPUP "A&yuda" BEGIN - MENUITEM "&Temas de Ayuda del Administrador de Tareas", -ID_HELP_TOPICS + MENUITEM "&Temas de Ayuda del Administrador de Tareas", ID_HELP_TOPICS MENUITEM SEPARATOR - MENUITEM "&Acerca del Administrador de Tareas", -ID_HELP_ABOUT + MENUITEM "&Acerca del Administrador de Tareas", ID_HELP_ABOUT END END IDR_WINDOWSMENU MENU DISCARDABLE BEGIN - MENUITEM "Mosaico &Horizontal", -ID_WINDOWS_TILEHORIZONTALLY - MENUITEM "Mosaico &Vertical", ID_WINDOWS_TILEVERTICALLY - MENUITEM "&Minimizar", ID_WINDOWS_MINIMIZE - MENUITEM "Ma&ximizar", ID_WINDOWS_MAXIMIZE + MENUITEM "Mosaico &Horizontal", ID_WINDOWS_TILEHORIZONTALLY + MENUITEM "Mosaico &Vertical", ID_WINDOWS_TILEVERTICALLY + MENUITEM "&Minimizar", ID_WINDOWS_MINIMIZE + MENUITEM "Ma&ximizar", ID_WINDOWS_MAXIMIZE MENUITEM "&Cascada", ID_WINDOWS_CASCADE - MENUITEM "&Traer al Frente", ID_WINDOWS_BRINGTOFRONT + MENUITEM "&Traer al Frente", ID_WINDOWS_BRINGTOFRONT END IDR_APPLICATION_PAGE_CONTEXT1 MENU DISCARDABLE BEGIN POPUP "DUMMY" BEGIN - MENUITEM "&Nueva Tarea (Ejecutar...)", ID_FILE_NEW + MENUITEM "&Nueva Tarea (Ejecutar...)", ID_FILE_NEW MENUITEM SEPARATOR - MENUITEM "Iconos &Grandes", ID_VIEW_LARGE - MENUITEM "Iconos &Pequeos", ID_VIEW_SMALL - MENUITEM "&Detalles", ID_VIEW_DETAILS, -CHECKED + MENUITEM "Iconos &Grandes", ID_VIEW_LARGE + MENUITEM "Iconos &Pequeos", ID_VIEW_SMALL + MENUITEM "&Detalles", ID_VIEW_DETAILS, CHECKED END END @@ -113,21 +100,17 @@ IDR_APPLICATION_PAGE_CONTEXT2 MENU DISCARDABLE BEGIN POPUP "DUMMY" BEGIN - MENUITEM "&Cambiar A", -ID_APPLICATION_PAGE_SWITCHTO - MENUITEM "&Traer al Frente", -ID_WINDOWS_BRINGTOFRONT + MENUITEM "&Cambiar A", ID_APPLICATION_PAGE_SWITCHTO + MENUITEM "&Traer al Frente", ID_WINDOWS_BRINGTOFRONT MENUITEM SEPARATOR - MENUITEM "Mosaico &Horizontal", -ID_WINDOWS_TILEHORIZONTALLY - MENUITEM "Mosaico &Vertical", -ID_WINDOWS_TILEVERTICALLY - MENUITEM "&Minimizar", ID_WINDOWS_MINIMIZE - MENUITEM "Ma&ximizar", ID_WINDOWS_MAXIMIZE - MENUITEM "Ca&scada", ID_WINDOWS_CASCADE + MENUITEM "Mosaico &Horizontal", ID_WINDOWS_TILEHORIZONTALLY + MENUITEM "Mosaico &Vertical", ID_WINDOWS_TILEVERTICALLY + MENUITEM "&Minimizar", ID_WINDOWS_MINIMIZE + MENUITEM "Ma&ximizar", ID_WINDOWS_MAXIMIZE + MENUITEM "Ca&scada", ID_WINDOWS_CASCADE MENUITEM SEPARATOR - MENUITEM "&Finalizar Tarea", ID_APPLICATION_PAGE_ENDTASK - MENUITEM "&Ir al Proceso", ID_APPLICATION_PAGE_GOTOPROCESS + MENUITEM "&Finalizar Tarea", ID_APPLICATION_PAGE_ENDTASK + MENUITEM "&Ir al Proceso", ID_APPLICATION_PAGE_GOTOPROCESS END END @@ -136,10 +119,10 @@ IDR_TRAY_POPUP MENU DISCARDABLE BEGIN POPUP "DUMMY" BEGIN - MENUITEM "&Restaurar", ID_RESTORE - MENUITEM "&Cerrar", ID_FILE_EXIT + MENUITEM "&Restaurar", ID_RESTORE + MENUITEM "&Cerrar", ID_FILE_EXIT MENUITEM SEPARATOR - MENUITEM "&Siempre Visible", ID_OPTIONS_ALWAYSONTOP + MENUITEM "&Siempre Visible", ID_OPTIONS_ALWAYSONTOP END END @@ -147,27 +130,27 @@ IDR_PROCESS_PAGE_CONTEXT MENU DISCARDABLE BEGIN POPUP "DUMMY" BEGIN - MENUITEM "&Finalizar Proceso", ID_PROCESS_PAGE_ENDPROCESS - MENUITEM "Finalizar &rbol de Procesos", ID_PROCESS_PAGE_ENDPROCESSTREE + MENUITEM "&Finalizar Proceso", ID_PROCESS_PAGE_ENDPROCESS + MENUITEM "Finalizar &rbol de Procesos", ID_PROCESS_PAGE_ENDPROCESSTREE MENUITEM "&Depurador", ID_PROCESS_PAGE_DEBUG MENUITEM SEPARATOR POPUP "Establecer &Prioridad" BEGIN - MENUITEM "Tiempo-&Real", ID_PROCESS_PAGE_SETPRIORITY_REALTIME + MENUITEM "Tiempo-&Real", ID_PROCESS_PAGE_SETPRIORITY_REALTIME MENUITEM "&Alta", ID_PROCESS_PAGE_SETPRIORITY_HIGH - MENUITEM "Arr&iba de lo Normal", ID_PROCESS_PAGE_SETPRIORITY_ABOVENORMAL + MENUITEM "Arr&iba de lo Normal", ID_PROCESS_PAGE_SETPRIORITY_ABOVENORMAL MENUITEM "&Normal", ID_PROCESS_PAGE_SETPRIORITY_NORMAL - MENUITEM "&Debajo de lo Normal", ID_PROCESS_PAGE_SETPRIORITY_BELOWNORMAL + MENUITEM "&Debajo de lo Normal", ID_PROCESS_PAGE_SETPRIORITY_BELOWNORMAL - MENUITEM "&Baja", ID_PROCESS_PAGE_SETPRIORITY_LOW + MENUITEM "&Baja", ID_PROCESS_PAGE_SETPRIORITY_LOW END - MENUITEM "Establecer &Afinidad...", ID_PROCESS_PAGE_SETAFFINITY + MENUITEM "Establecer &Afinidad...", ID_PROCESS_PAGE_SETAFFINITY MENUITEM "Editar &Canales de Depuracin...", ID_PROCESS_PAGE_DEBUGCHANNELS END END @@ -177,6 +160,7 @@ END // // Dialog // +// TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened IDD_TASKMGR_DIALOG DIALOGEX DISCARDABLE 0, 0, 264, 246 STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | @@ -186,8 +170,7 @@ CAPTION "Administrador de Tareas" MENU IDR_TASKMANAGER FONT 8, "MS Shell Dlg" BEGIN - CONTROL -"Tab1",IDC_TAB,"SysTabControl32",WS_TABSTOP,3,3,257,228 + CONTROL "Tab1",IDC_TAB,"SysTabControl32",WS_TABSTOP,3,3,257,228 END IDD_APPLICATION_PAGE DIALOGEX DISCARDABLE 0, 0, 247, 210 @@ -195,8 +178,7 @@ STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN FONT 8, "MS Shell Dlg" BEGIN CONTROL "List2",IDC_APPLIST,"SysListView32",LVS_REPORT | - LVS_SHOWSELALWAYS | WS_BORDER | -WS_TABSTOP,7,7,233,177 + LVS_SHOWSELALWAYS | WS_BORDER |WS_TABSTOP,7,7,233,177 PUSHBUTTON "&Nueva Tarea...",IDC_NEWTASK,187,189,53,14 PUSHBUTTON "&Cambiar A",IDC_SWITCHTO,131,189,53,14,WS_DISABLED PUSHBUTTON "&Finalizar Tarea",IDC_ENDTASK,75,189,53,14,WS_DISABLED @@ -206,8 +188,7 @@ IDD_PROCESS_PAGE DIALOGEX DISCARDABLE 0, 0, 247, 210 STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN FONT 8, "MS Shell Dlg" BEGIN - CONTROL "List2",IDC_PROCESSLIST,"SysListView32",LVS_REPORT -| + CONTROL "List2",IDC_PROCESSLIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,7,7,233,177 PUSHBUTTON "&Finalizar Proceso",IDC_ENDPROCESS,171,189,69,14 @@ -251,8 +232,7 @@ BEGIN ES_READONLY | ES_NUMBER | NOT WS_BORDER | NOT WS_TABSTOP EDITTEXT IDC_PHYSICAL_MEMORY_AVAILABLE,185,140,48,8,ES_RIGHT | ES_READONLY | ES_NUMBER | NOT WS_BORDER | NOT WS_TABSTOP - EDITTEXT -IDC_PHYSICAL_MEMORY_SYSTEM_CACHE,185,149,48,8,ES_RIGHT | + EDITTEXT IDC_PHYSICAL_MEMORY_SYSTEM_CACHE,185,149,48,8,ES_RIGHT | ES_READONLY | ES_NUMBER | NOT WS_BORDER | NOT WS_TABSTOP LTEXT "Total",IDS_KERNEL_MEMORY_TOTAL,137,174,27,8 LTEXT "Paginado",IDS_KERNEL_MEMORY_PAGED,137,184,30,8 @@ -265,10 +245,8 @@ IDC_PHYSICAL_MEMORY_SYSTEM_CACHE,185,149,48,8,ES_RIGHT | ES_READONLY | ES_NUMBER | NOT WS_BORDER | NOT WS_TABSTOP GROUPBOX "Historial de uso de la CPU",IDC_CPU_USAGE_HISTORY_FRAME,74,5,168,54,0,WS_EX_TRANSPARENT GROUPBOX "Historial de uso de la Memoria",IDC_MEMORY_USAGE_HISTORY_FRAME,74,63,168,54,0,WS_EX_TRANSPARENT - PUSHBUTTON "Display de uso de la CPU",IDC_CPU_USAGE_GRAPH,12,17,47,37,NOT WS_TABSTOP, - WS_EX_CLIENTEDGE - PUSHBUTTON "Display de uso de la Memoria",IDC_MEM_USAGE_GRAPH,12,75,47,37,NOT WS_TABSTOP, - WS_EX_CLIENTEDGE + PUSHBUTTON "Display de uso de la CPU",IDC_CPU_USAGE_GRAPH,12,17,47,37,NOT WS_TABSTOP,WS_EX_CLIENTEDGE + PUSHBUTTON "Display de uso de la Memoria",IDC_MEM_USAGE_GRAPH,12,75,47,37,NOT WS_TABSTOP,WS_EX_CLIENTEDGE PUSHBUTTON "Historial de uso de la CPU",IDC_CPU_USAGE_HISTORY_GRAPH,81,17, 153,37,NOT WS_TABSTOP,WS_EX_CLIENTEDGE PUSHBUTTON "Historial de uso de la Memoria",IDC_MEM_USAGE_HISTORY_GRAPH,81,75, @@ -281,8 +259,7 @@ CAPTION "Canales de Depuraci FONT 8, "MS Shell Dlg" BEGIN CONTROL "List2",IDC_DEBUG_CHANNELS_LIST,"SysListView32",LVS_REPORT | - LVS_SINGLESEL | LVS_SHOWSELALWAYS | WS_BORDER | -WS_TABSTOP | + LVS_SINGLESEL | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP | LVS_SORTASCENDING,7,7,233,177 PUSHBUTTON "Cerrar",IDOK,171,189,69,14 END @@ -389,8 +366,7 @@ BEGIN WS_TABSTOP,7,105,80,10 //53 CONTROL "O&bjetos de USUARIO",IDC_USEROBJECTS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,116,80,10 //62 - CONTROL "Lecturas E/S",IDC_IOREADS,"Button",BS_AUTOCHECKBOX -| + CONTROL "Lecturas E/S",IDC_IOREADS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,127,60,10 //49 CONTROL "Bytes E/S Leidos",IDC_IOREADBYTES,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,7,138,65,10 @@ -610,7 +586,6 @@ BEGIN ID_PROCESS_PAGE_SETPRIORITY_BELOWNORMAL "Establece el proceso en prioridad ABAJO DE LO NORMAL" ID_PROCESS_PAGE_SETPRIORITY_LOW "Establece el proceso en prioridad BAJA" - END // Spanish (SPAIN) resources by Carlos Garcia Gomez diff --git a/base/applications/taskmgr/lang/fr-FR.rc b/base/applications/taskmgr/lang/fr-FR.rc index 6f060750126..59f5deddc3f 100644 --- a/base/applications/taskmgr/lang/fr-FR.rc +++ b/base/applications/taskmgr/lang/fr-FR.rc @@ -160,6 +160,7 @@ END // // Dialog // +// TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened IDD_TASKMGR_DIALOG DIALOGEX DISCARDABLE 0, 0, 264, 246 STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | diff --git a/base/applications/taskmgr/lang/hu-HU.rc b/base/applications/taskmgr/lang/hu-HU.rc index 440a9e5b435..596e4bdfddc 100644 --- a/base/applications/taskmgr/lang/hu-HU.rc +++ b/base/applications/taskmgr/lang/hu-HU.rc @@ -161,6 +161,7 @@ END // // Dialog // +// TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened IDD_TASKMGR_DIALOG DIALOGEX DISCARDABLE 0, 0, 264, 246 STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | diff --git a/base/applications/taskmgr/lang/id-ID.rc b/base/applications/taskmgr/lang/id-ID.rc index 64abb279986..93ad26391fb 100644 --- a/base/applications/taskmgr/lang/id-ID.rc +++ b/base/applications/taskmgr/lang/id-ID.rc @@ -159,6 +159,7 @@ END // // Dialog // +// TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened IDD_TASKMGR_DIALOG DIALOGEX DISCARDABLE 0, 0, 264, 246 STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | diff --git a/base/applications/taskmgr/lang/it-IT.rc b/base/applications/taskmgr/lang/it-IT.rc index 4c25f9e1db5..412c966765a 100644 --- a/base/applications/taskmgr/lang/it-IT.rc +++ b/base/applications/taskmgr/lang/it-IT.rc @@ -160,6 +160,7 @@ END // // Dialog // +// TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened IDD_TASKMGR_DIALOG DIALOGEX DISCARDABLE 0, 0, 264, 246 STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | diff --git a/base/applications/taskmgr/lang/ja-JP.rc b/base/applications/taskmgr/lang/ja-JP.rc index 001e8a64a36..9904af5415a 100644 --- a/base/applications/taskmgr/lang/ja-JP.rc +++ b/base/applications/taskmgr/lang/ja-JP.rc @@ -160,6 +160,7 @@ END // // Dialog // +// TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened IDD_TASKMGR_DIALOG DIALOGEX DISCARDABLE 0, 0, 264, 246 STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | diff --git a/base/applications/taskmgr/lang/ko-KR.rc b/base/applications/taskmgr/lang/ko-KR.rc index e446bc6bab4..ca133bbde90 100644 --- a/base/applications/taskmgr/lang/ko-KR.rc +++ b/base/applications/taskmgr/lang/ko-KR.rc @@ -163,6 +163,7 @@ END // // Dialog // +// TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened IDD_TASKMGR_DIALOG DIALOGEX DISCARDABLE 0, 0, 264, 246 STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | diff --git a/base/applications/taskmgr/lang/nl-NL.rc b/base/applications/taskmgr/lang/nl-NL.rc index 3ce8e52acc6..d8579cd5514 100644 --- a/base/applications/taskmgr/lang/nl-NL.rc +++ b/base/applications/taskmgr/lang/nl-NL.rc @@ -160,6 +160,7 @@ END // // Dialog // +// TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened IDD_TASKMGR_DIALOG DIALOGEX DISCARDABLE 0, 0, 264, 246 STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | diff --git a/base/applications/taskmgr/lang/no-NO.rc b/base/applications/taskmgr/lang/no-NO.rc index 3344dfc0370..59de5a90832 100644 --- a/base/applications/taskmgr/lang/no-NO.rc +++ b/base/applications/taskmgr/lang/no-NO.rc @@ -160,12 +160,13 @@ END // // Dialog // +// TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened IDD_TASKMGR_DIALOG DIALOGEX DISCARDABLE 0, 0, 264, 246 STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME -CAPTION "Oppgavebehandler" +CAPTION "Oppgavebehandling" MENU IDR_TASKMANAGER FONT 8, "MS Shell Dlg" BEGIN diff --git a/base/applications/taskmgr/lang/pl-PL.rc b/base/applications/taskmgr/lang/pl-PL.rc index 92b16c412e7..1cbd872c3a7 100644 --- a/base/applications/taskmgr/lang/pl-PL.rc +++ b/base/applications/taskmgr/lang/pl-PL.rc @@ -165,6 +165,7 @@ END // // Dialog // +// TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened IDD_TASKMGR_DIALOG DIALOGEX DISCARDABLE 0, 0, 264, 246 STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | diff --git a/base/applications/taskmgr/lang/pt-BR.rc b/base/applications/taskmgr/lang/pt-BR.rc index 78fc16c17f6..63669286563 100644 --- a/base/applications/taskmgr/lang/pt-BR.rc +++ b/base/applications/taskmgr/lang/pt-BR.rc @@ -160,6 +160,7 @@ END // // Dialog // +// TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened IDD_TASKMGR_DIALOG DIALOGEX DISCARDABLE 0, 0, 264, 246 STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | diff --git a/base/applications/taskmgr/lang/ro-RO.rc b/base/applications/taskmgr/lang/ro-RO.rc index 9509c87400c..6ec5bbc6994 100644 --- a/base/applications/taskmgr/lang/ro-RO.rc +++ b/base/applications/taskmgr/lang/ro-RO.rc @@ -160,6 +160,7 @@ END // // Dialog // +// TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened IDD_TASKMGR_DIALOG DIALOGEX DISCARDABLE 0, 0, 264, 246 STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | @@ -520,8 +521,8 @@ END STRINGTABLE DISCARDABLE BEGIN - IDS_APP_TITLE "Gestionar de activități" - IDC_TASKMGR "Gestoinar de activități" + IDS_APP_TITLE "Gestionarul de activități" + IDC_TASKMGR "Gestionarul de activități" IDS_IDLE_PROCESS "Proces sistem inactiv" END diff --git a/base/applications/taskmgr/lang/ru-RU.rc b/base/applications/taskmgr/lang/ru-RU.rc index 7023ff51e76..b632ad53c6a 100644 --- a/base/applications/taskmgr/lang/ru-RU.rc +++ b/base/applications/taskmgr/lang/ru-RU.rc @@ -159,6 +159,7 @@ END // // // +// TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened IDD_TASKMGR_DIALOG DIALOGEX DISCARDABLE 0, 0, 264, 246 STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | diff --git a/base/applications/taskmgr/lang/sk-SK.rc b/base/applications/taskmgr/lang/sk-SK.rc index da93d37d45b..6f7c1e7b22b 100644 --- a/base/applications/taskmgr/lang/sk-SK.rc +++ b/base/applications/taskmgr/lang/sk-SK.rc @@ -159,6 +159,7 @@ END // // Dialog // +// TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened IDD_TASKMGR_DIALOG DIALOGEX DISCARDABLE 0, 0, 264, 246 STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | @@ -521,8 +522,8 @@ END STRINGTABLE DISCARDABLE BEGIN - IDS_APP_TITLE "Sprvca loh" - IDC_TASKMGR "Sprvca loh" + IDS_APP_TITLE "Sprvca loh systmu" + IDC_TASKMGR "Sprvca loh systmu" IDS_IDLE_PROCESS "Procesy systmovej neinnosti" END diff --git a/base/applications/taskmgr/lang/sv-SE.rc b/base/applications/taskmgr/lang/sv-SE.rc index b3e45814606..e7ba6beb535 100644 --- a/base/applications/taskmgr/lang/sv-SE.rc +++ b/base/applications/taskmgr/lang/sv-SE.rc @@ -177,6 +177,7 @@ END // // Dialog // +// TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened IDD_TASKMGR_DIALOG DIALOGEX DISCARDABLE 0, 0, 264, 246 STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | diff --git a/base/applications/taskmgr/lang/uk-UA.rc b/base/applications/taskmgr/lang/uk-UA.rc index 38b4d3190fd..cb518e1967a 100644 --- a/base/applications/taskmgr/lang/uk-UA.rc +++ b/base/applications/taskmgr/lang/uk-UA.rc @@ -160,6 +160,7 @@ END // // Dialog // +// TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened IDD_TASKMGR_DIALOG DIALOGEX DISCARDABLE 0, 0, 264, 246 STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | @@ -338,65 +339,65 @@ BEGIN WS_DISABLED | WS_TABSTOP,175,119,41,10 END -IDD_COLUMNS_DIALOG DIALOGEX DISCARDABLE 0, 0, 195, 199 +IDD_COLUMNS_DIALOG DIALOGEX DISCARDABLE 0, 0, 227, 199 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION " " FONT 8, "MS Shell Dlg" BEGIN - DEFPUSHBUTTON "",IDOK,84,178,50,14 - PUSHBUTTON "ͳ",IDCANCEL,138,178,50,14 - LTEXT " , .", + DEFPUSHBUTTON "",IDOK,116,178,50,14 + PUSHBUTTON "",IDCANCEL,170,178,50,14 + LTEXT " , .", IDC_STATIC,7,7,181,17 CONTROL "&' ",IDC_IMAGENAME,"Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,7,28,56,10 CONTROL "&. (PID)",IDC_PID,"Button", - BS_AUTOCHECKBOX | WS_TABSTOP,7,39,88,10 + BS_AUTOCHECKBOX | WS_TABSTOP,7,39,91,10 CONTROL "& ",IDC_CPUUSAGE,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,7,50,53,10 + WS_TABSTOP,7,50,71,10 CONTROL "& ",IDC_CPUTIME,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,61,48,10 CONTROL "&' - ",IDC_MEMORYUSAGE,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,7,72,63,10 + WS_TABSTOP,7,72,92,10 CONTROL "' - &",IDC_MEMORYUSAGEDELTA,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,7,83,82,10 CONTROL "' - &",IDC_PEAKMEMORYUSAGE,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,7,94,82,10 CONTROL "& ",IDC_PAGEFAULTS,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,7,105,53,10 + WS_TABSTOP,7,105,73,10 CONTROL "&' USER",IDC_USEROBJECTS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,116,62,10 CONTROL "ʳ ",IDC_IOREADS,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,7,127,49,10 + WS_TABSTOP,7,127,68,10 CONTROL " ",IDC_IOREADBYTES,"Button", - BS_AUTOCHECKBOX | WS_TABSTOP,7,138,65,10 + BS_AUTOCHECKBOX | WS_TABSTOP,7,138,72,10 CONTROL " &",IDC_SESSIONID,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,149,50,10 CONTROL "'& ",IDC_USERNAME,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,7,160,51,10 + WS_TABSTOP,7,160,70,10 CONTROL " & - ",IDC_PAGEFAULTSDELTA,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,107,28,72,10 CONTROL "' & '",IDC_VIRTUALMEMORYSIZE,"Button", - BS_AUTOCHECKBOX | WS_TABSTOP,107,39,77,10 + BS_AUTOCHECKBOX | WS_TABSTOP,107,39,100,10 CONTROL "& ",IDC_PAGEDPOOL,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,107,50,53,10 + WS_TABSTOP,107,50,88,10 CONTROL "& ",IDC_NONPAGEDPOOL,"Button", - BS_AUTOCHECKBOX | WS_TABSTOP,107,61,67,10 + BS_AUTOCHECKBOX | WS_TABSTOP,107,61,96,10 CONTROL "& ",IDC_BASEPRIORITY,"Button", - BS_AUTOCHECKBOX | WS_TABSTOP,107,72,55,10 + BS_AUTOCHECKBOX | WS_TABSTOP,107,72,75,10 CONTROL "˳ &",IDC_HANDLECOUNT,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,107,83,59,10 + WS_TABSTOP,107,83,98,10 CONTROL "&˳ ",IDC_THREADCOUNT,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,107,94,59,10 + WS_TABSTOP,107,94,79,10 CONTROL "'& GDI",IDC_GDIOBJECTS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,107,105,55,10 CONTROL "ʳ ",IDC_IOWRITES,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,107,116,49,10 + WS_TABSTOP,107,116,73,10 CONTROL " ",IDC_IOWRITEBYTES,"Button", - BS_AUTOCHECKBOX | WS_TABSTOP,107,127,65,10 + BS_AUTOCHECKBOX | WS_TABSTOP,107,127,67,10 CONTROL " -",IDC_IOOTHER,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,107,138,46,10 - CONTROL " -",IDC_IOOTHERBYTES,"Button", - BS_AUTOCHECKBOX | WS_TABSTOP,107,149,65,10 + WS_TABSTOP,107,138,71,10 + CONTROL " -",IDC_IOOTHERBYTES,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,107,149,114,10 END @@ -522,7 +523,7 @@ STRINGTABLE DISCARDABLE BEGIN IDS_APP_TITLE " " IDC_TASKMGR " " - IDS_IDLE_PROCESS " " + IDS_IDLE_PROCESS " " END STRINGTABLE DISCARDABLE diff --git a/base/applications/taskmgr/lang/zh-CN.rc b/base/applications/taskmgr/lang/zh-CN.rc index 7423300d5c9..24826e68690 100644 --- a/base/applications/taskmgr/lang/zh-CN.rc +++ b/base/applications/taskmgr/lang/zh-CN.rc @@ -168,6 +168,7 @@ END // // Dialog // +// TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened IDD_TASKMGR_DIALOG DIALOGEX DISCARDABLE 0, 0, 264, 246 STYLE DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | diff --git a/base/applications/taskmgr/optnmenu.c b/base/applications/taskmgr/optnmenu.c index 931e00c25fc..4ba1fa60336 100644 --- a/base/applications/taskmgr/optnmenu.c +++ b/base/applications/taskmgr/optnmenu.c @@ -1,7 +1,7 @@ /* * ReactOS Task Manager * - * optnmenu.cpp + * optnmenu.c * * Copyright (C) 1999 - 2001 Brian Palmer * @@ -110,7 +110,7 @@ void TaskManager_OnOptionsShow16BitTasks(void) /* * FIXME: Currently this is useless because the - * current implemetation doesn't list the 16-bit + * current implementation doesn't list the 16-bit * processes. I believe that would require querying * each ntvdm.exe process for it's children. */ diff --git a/base/applications/taskmgr/perfdata.c b/base/applications/taskmgr/perfdata.c index a1095e5acd6..a82eb78ef1e 100644 --- a/base/applications/taskmgr/perfdata.c +++ b/base/applications/taskmgr/perfdata.c @@ -1,7 +1,7 @@ /* * ReactOS Task Manager * - * perfdata.cpp + * perfdata.c * * Copyright (C) 1999 - 2001 Brian Palmer * diff --git a/base/applications/taskmgr/perfpage.c b/base/applications/taskmgr/perfpage.c index 8ba87eb067d..872a01406f9 100644 --- a/base/applications/taskmgr/perfpage.c +++ b/base/applications/taskmgr/perfpage.c @@ -51,11 +51,14 @@ HWND hPerformancePageTotalsHandleCountEdit; /* Total Handles Edit Con HWND hPerformancePageTotalsProcessCountEdit; /* Total Processes Edit Control */ HWND hPerformancePageTotalsThreadCountEdit; /* Total Threads Edit Control */ +#ifdef RUN_PERF_PAGE +static HANDLE hPerformanceThread = NULL; +static DWORD dwPerformanceThread; +#endif static int nPerformancePageWidth; static int nPerformancePageHeight; static int lastX, lastY; -static HANDLE hPerformancePageEvent = NULL; /* When this event becomes signaled then we refresh the performance page */ DWORD WINAPI PerformancePageRefreshThread(void *lpParameter); void AdjustFrameSize(HWND hCntrl, HWND hDlg, int nXDifference, int nYDifference, int pos) @@ -94,12 +97,12 @@ void AdjustFrameSize(HWND hCntrl, HWND hDlg, int nXDifference, int nYDifference, InvalidateRect(hCntrl, NULL, TRUE); } -void AdjustControlPostion(HWND hCntrl, HWND hDlg, int nXDifference, int nYDifference) +static void AdjustControlPostion(HWND hCntrl, HWND hDlg, int nXDifference, int nYDifference) { AdjustFrameSize(hCntrl, hDlg, nXDifference, nYDifference, 0); } -void AdjustCntrlPos(int ctrl_id, HWND hDlg, int nXDifference, int nYDifference) +static void AdjustCntrlPos(int ctrl_id, HWND hDlg, int nXDifference, int nYDifference) { AdjustFrameSize(GetDlgItem(hDlg, ctrl_id), hDlg, nXDifference, nYDifference, 0); } @@ -110,9 +113,6 @@ PerformancePageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) RECT rc; int nXDifference; int nYDifference; -#ifdef RUN_PERF_PAGE - HANDLE hRefreshThread = NULL; -#endif /* HDC hdc; */ /* PAINTSTRUCT ps; */ @@ -121,7 +121,7 @@ PerformancePageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) GraphCtrl_Dispose(&PerformancePageCpuUsageHistoryGraph); GraphCtrl_Dispose(&PerformancePageMemUsageHistoryGraph); #ifdef RUN_PERF_PAGE - CloseHandle(hRefreshThread); + EndLocalThread(&hPerformanceThread, dwPerformanceThread); #endif break; @@ -192,7 +192,7 @@ PerformancePageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) GraphCtrl_SetPlotColor(&PerformancePageMemUsageHistoryGraph, 0, RGB(255, 255, 0)) ; /* Start our refresh thread */ #ifdef RUN_PERF_PAGE - hRefreshThread = CreateThread(NULL, 0, PerformancePageRefreshThread, NULL, 0, NULL); + hPerformanceThread = CreateThread(NULL, 0, PerformancePageRefreshThread, NULL, 0, &dwPerformanceThread); #endif /* @@ -303,9 +303,11 @@ PerformancePageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) void RefreshPerformancePage(void) { +#ifdef RUN_PERF_PAGE /* Signal the event so that our refresh thread */ /* will wake up and refresh the performance page */ - SetEvent(hPerformancePageEvent); + PostThreadMessage(dwPerformanceThread, WM_TIMER, 0, 0); +#endif } DWORD WINAPI PerformancePageRefreshThread(void *lpParameter) @@ -332,35 +334,21 @@ DWORD WINAPI PerformancePageRefreshThread(void *lpParameter) WCHAR Text[260]; WCHAR szMemUsage[256]; - /* Create the event */ - hPerformancePageEvent = CreateEventW(NULL, TRUE, TRUE, NULL); - - /* If we couldn't create the event then exit the thread */ - if (!hPerformancePageEvent) - return 0; + MSG msg; LoadStringW(hInst, IDS_STATUS_MEMUSAGE, szMemUsage, 256); while (1) { - DWORD dwWaitVal; - int nBarsUsed1; int nBarsUsed2; - /* Wait on the event */ - dwWaitVal = WaitForSingleObject(hPerformancePageEvent, INFINITE); - - /* If the wait failed then the event object must have been */ - /* closed and the task manager is exiting so exit this thread */ - if (dwWaitVal == WAIT_FAILED) + /* Wait for an the event or application close */ + if (GetMessage(&msg, NULL, 0, 0) <= 0) return 0; - if (dwWaitVal == WAIT_OBJECT_0) + if (msg.message == WM_TIMER) { - /* Reset our event */ - ResetEvent(hPerformancePageEvent); - /* * Update the commit charge info */ @@ -449,8 +437,6 @@ DWORD WINAPI PerformancePageRefreshThread(void *lpParameter) PhysicalMemoryAvailable = PerfDataGetPhysicalMemoryAvailableK(); nBarsUsed2 = PhysicalMemoryTotal ? ((PhysicalMemoryAvailable * 100) / PhysicalMemoryTotal) : 0; - - GraphCtrl_AppendPoint(&PerformancePageCpuUsageHistoryGraph, CpuUsage, CpuKernelUsage, 0.0, 0.0); GraphCtrl_AppendPoint(&PerformancePageMemUsageHistoryGraph, nBarsUsed1, nBarsUsed2, 0.0, 0.0); /* PerformancePageMemUsageHistoryGraph.SetRange(0.0, 100.0, 10) ; */ @@ -458,7 +444,7 @@ DWORD WINAPI PerformancePageRefreshThread(void *lpParameter) InvalidateRect(hPerformancePageCpuUsageHistoryGraph, NULL, FALSE); } } - return 0; + return 0; } void PerformancePage_OnViewShowKernelTimes(void) diff --git a/base/applications/taskmgr/procpage.c b/base/applications/taskmgr/procpage.c index 42bf5949ea7..acaa159bd04 100644 --- a/base/applications/taskmgr/procpage.c +++ b/base/applications/taskmgr/procpage.c @@ -40,7 +40,10 @@ HWND hProcessPageShowAllProcessesButton;/* Process Show All Processes checkbox * static int nProcessPageWidth; static int nProcessPageHeight; -static HANDLE hProcessPageEvent = NULL; /* When this event becomes signaled then we refresh the process list */ +#ifdef RUN_PROC_PAGE +static HANDLE hProcessThread = NULL; +static DWORD dwProcessThread; +#endif int CALLBACK ProcessPageCompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort); void AddProcess(ULONG Index); @@ -104,7 +107,6 @@ ProcessPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) int nXDifference; int nYDifference; int cx, cy; - HANDLE hRefreshThread = NULL; switch (message) { case WM_INITDIALOG: @@ -139,19 +141,19 @@ ProcessPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) */ OldProcessListWndProc = (WNDPROC)(LONG_PTR) SetWindowLongPtrW(hProcessPageListCtrl, GWL_WNDPROC, (LONG_PTR)ProcessListWndProc); +#ifdef RUN_PROC_PAGE /* Start our refresh thread */ - hRefreshThread = CreateThread(NULL, 0, ProcessPageRefreshThread, NULL, 0, NULL); - + hProcessThread = CreateThread(NULL, 0, ProcessPageRefreshThread, NULL, 0, &dwProcessThread); +#endif return TRUE; case WM_DESTROY: /* Close the event handle, this will make the */ /* refresh thread exit when the wait fails */ - CloseHandle(hProcessPageEvent); - CloseHandle(hRefreshThread); - +#ifdef RUN_PROC_PAGE + EndLocalThread(&hProcessThread, dwProcessThread); +#endif SaveColumnSettings(); - break; case WM_COMMAND: @@ -194,11 +196,9 @@ ProcessPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) cy = rc.top + nYDifference; SetWindowPos(hProcessPageShowAllProcessesButton, NULL, cx, cy, 0, 0, SWP_NOACTIVATE|SWP_NOOWNERZORDER|SWP_NOSIZE|SWP_NOZORDER); InvalidateRect(hProcessPageShowAllProcessesButton, NULL, TRUE); - break; case WM_NOTIFY: - ProcessPageOnNotify(wParam, lParam); break; } @@ -372,9 +372,11 @@ void ProcessPageShowContextMenu(DWORD dwProcessId) void RefreshProcessPage(void) { +#ifdef RUN_PROC_PAGE /* Signal the event so that our refresh thread */ /* will wake up and refresh the process page */ - SetEvent(hProcessPageEvent); + PostThreadMessage(dwProcessThread, WM_TIMER, 0, 0); +#endif } DWORD WINAPI ProcessPageRefreshThread(void *lpParameter) @@ -382,34 +384,19 @@ DWORD WINAPI ProcessPageRefreshThread(void *lpParameter) ULONG OldProcessorUsage = 0; ULONG OldProcessCount = 0; WCHAR szCpuUsage[256], szProcesses[256]; - - /* Create the event */ - hProcessPageEvent = CreateEventW(NULL, TRUE, TRUE, NULL); - - /* If we couldn't create the event then exit the thread */ - if (!hProcessPageEvent) - return 0; + MSG msg; LoadStringW(hInst, IDS_STATUS_CPUUSAGE, szCpuUsage, 256); LoadStringW(hInst, IDS_STATUS_PROCESSES, szProcesses, 256); while (1) { - DWORD dwWaitVal; - - /* Wait on the event */ - dwWaitVal = WaitForSingleObject(hProcessPageEvent, INFINITE); - - /* If the wait failed then the event object must have been */ - /* closed and the task manager is exiting so exit this thread */ - if (dwWaitVal == WAIT_FAILED) + /* Wait for an the event or application close */ + if (GetMessage(&msg, NULL, 0, 0) <= 0) return 0; - if (dwWaitVal == WAIT_OBJECT_0) { + if (msg.message == WM_TIMER) { WCHAR text[260]; - /* Reset our event */ - ResetEvent(hProcessPageEvent); - UpdateProcesses(); if (IsWindowVisible(hProcessPage)) diff --git a/base/applications/taskmgr/taskmgr.c b/base/applications/taskmgr/taskmgr.c index c409f808b1f..c6d11c0e54d 100644 --- a/base/applications/taskmgr/taskmgr.c +++ b/base/applications/taskmgr/taskmgr.c @@ -1,7 +1,7 @@ /* * ReactOS Task Manager * - * TaskMgr.c : Defines the entry point for the application. + * taskmgr.c : Defines the entry point for the application. * * Copyright (C) 1999 - 2001 Brian Palmer * 2005 Klemens Friedl @@ -856,11 +856,6 @@ void TaskManager_OnViewUpdateSpeed(DWORD dwSpeed) SetUpdateSpeed(hMainWnd); } -void TaskManager_OnViewRefresh(void) -{ - PostMessageW(hMainWnd, WM_TIMER, 0, 0); -} - void TaskManager_OnTabWndSelChange(void) { int i; @@ -1012,3 +1007,27 @@ LPWSTR GetLastErrorText(LPWSTR lpszBuf, DWORD dwSize) } return lpszBuf; } + +DWORD EndLocalThread(HANDLE *hThread, DWORD dwThread) +{ + DWORD dwExitCodeThread = 0; + + if (*hThread != NULL) { + PostThreadMessage(dwThread,WM_QUIT,0,0); + for (;;) { + MSG msg; + + if (WAIT_OBJECT_0 == WaitForSingleObject(*hThread, 500)) + break; + while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + } + GetExitCodeThread(*hThread, &dwExitCodeThread); + CloseHandle(*hThread); + *hThread = NULL; + } + return dwExitCodeThread; +} + diff --git a/base/applications/taskmgr/taskmgr.h b/base/applications/taskmgr/taskmgr.h index 16eaad8224a..e0a8de842d9 100644 --- a/base/applications/taskmgr/taskmgr.h +++ b/base/applications/taskmgr/taskmgr.h @@ -116,9 +116,9 @@ void TaskManager_OnEnterMenuLoop(HWND hWnd); void TaskManager_OnExitMenuLoop(HWND hWnd); void TaskManager_OnMenuSelect(HWND hWnd, UINT nItemID, UINT nFlags, HMENU hSysMenu); void TaskManager_OnViewUpdateSpeed(DWORD); -void TaskManager_OnViewRefresh(void); void TaskManager_OnTabWndSelChange(void); LPTSTR GetLastErrorText( LPTSTR lpszBuf, DWORD dwSize ); +DWORD EndLocalThread(HANDLE *hThread, DWORD dwThread); #ifdef __cplusplus } diff --git a/base/setup/usetup/bootsup.c b/base/setup/usetup/bootsup.c index 7abbcb1f4a0..3f880c97feb 100644 --- a/base/setup/usetup/bootsup.c +++ b/base/setup/usetup/bootsup.c @@ -31,6 +31,75 @@ #define SECTORSIZE 512 +#include +typedef struct _FAT_BOOTSECTOR +{ + UCHAR JumpBoot[3]; // Jump instruction to boot code + CHAR OemName[8]; // "MSWIN4.1" for MS formatted volumes + USHORT BytesPerSector; // Bytes per sector + UCHAR SectorsPerCluster; // Number of sectors in a cluster + USHORT ReservedSectors; // Reserved sectors, usually 1 (the bootsector) + UCHAR NumberOfFats; // Number of FAT tables + USHORT RootDirEntries; // Number of root directory entries (fat12/16) + USHORT TotalSectors; // Number of total sectors on the drive, 16-bit + UCHAR MediaDescriptor; // Media descriptor byte + USHORT SectorsPerFat; // Sectors per FAT table (fat12/16) + USHORT SectorsPerTrack; // Number of sectors in a track + USHORT NumberOfHeads; // Number of heads on the disk + ULONG HiddenSectors; // Hidden sectors (sectors before the partition start like the partition table) + ULONG TotalSectorsBig; // This field is the new 32-bit total count of sectors on the volume + UCHAR DriveNumber; // Int 0x13 drive number (e.g. 0x80) + UCHAR Reserved1; // Reserved (used by Windows NT). Code that formats FAT volumes should always set this byte to 0. + UCHAR BootSignature; // Extended boot signature (0x29). This is a signature byte that indicates that the following three fields in the boot sector are present. + ULONG VolumeSerialNumber; // Volume serial number + CHAR VolumeLabel[11]; // Volume label. This field matches the 11-byte volume label recorded in the root directory + CHAR FileSystemType[8]; // One of the strings "FAT12 ", "FAT16 ", or "FAT " + + UCHAR BootCodeAndData[448]; // The remainder of the boot sector + + USHORT BootSectorMagic; // 0xAA55 + +} FAT_BOOTSECTOR, *PFAT_BOOTSECTOR; + +typedef struct _FAT32_BOOTSECTOR +{ + UCHAR JumpBoot[3]; // Jump instruction to boot code + CHAR OemName[8]; // "MSWIN4.1" for MS formatted volumes + USHORT BytesPerSector; // Bytes per sector + UCHAR SectorsPerCluster; // Number of sectors in a cluster + USHORT ReservedSectors; // Reserved sectors, usually 1 (the bootsector) + UCHAR NumberOfFats; // Number of FAT tables + USHORT RootDirEntries; // Number of root directory entries (fat12/16) + USHORT TotalSectors; // Number of total sectors on the drive, 16-bit + UCHAR MediaDescriptor; // Media descriptor byte + USHORT SectorsPerFat; // Sectors per FAT table (fat12/16) + USHORT SectorsPerTrack; // Number of sectors in a track + USHORT NumberOfHeads; // Number of heads on the disk + ULONG HiddenSectors; // Hidden sectors (sectors before the partition start like the partition table) + ULONG TotalSectorsBig; // This field is the new 32-bit total count of sectors on the volume + ULONG SectorsPerFatBig; // This field is the FAT32 32-bit count of sectors occupied by ONE FAT. BPB_FATSz16 must be 0 + USHORT ExtendedFlags; // Extended flags (fat32) + USHORT FileSystemVersion; // File system version (fat32) + ULONG RootDirStartCluster; // Starting cluster of the root directory (fat32) + USHORT FsInfo; // Sector number of FSINFO structure in the reserved area of the FAT32 volume. Usually 1. + USHORT BackupBootSector; // If non-zero, indicates the sector number in the reserved area of the volume of a copy of the boot record. Usually 6. + UCHAR Reserved[12]; // Reserved for future expansion + UCHAR DriveNumber; // Int 0x13 drive number (e.g. 0x80) + UCHAR Reserved1; // Reserved (used by Windows NT). Code that formats FAT volumes should always set this byte to 0. + UCHAR BootSignature; // Extended boot signature (0x29). This is a signature byte that indicates that the following three fields in the boot sector are present. + ULONG VolumeSerialNumber; // Volume serial number + CHAR VolumeLabel[11]; // Volume label. This field matches the 11-byte volume label recorded in the root directory + CHAR FileSystemType[8]; // Always set to the string "FAT32 " + + UCHAR BootCodeAndData[420]; // The remainder of the boot sector + + USHORT BootSectorMagic; // 0xAA55 + +} FAT32_BOOTSECTOR, *PFAT32_BOOTSECTOR; +#include + +extern PPARTLIST PartitionList; + /* FUNCTIONS ****************************************************************/ @@ -1094,53 +1163,53 @@ NTSTATUS InstallMbrBootCodeToDisk (PWSTR SrcPath, PWSTR RootPath) { - OBJECT_ATTRIBUTES ObjectAttributes; - IO_STATUS_BLOCK IoStatusBlock; - UNICODE_STRING Name; - HANDLE FileHandle; - NTSTATUS Status; + OBJECT_ATTRIBUTES ObjectAttributes; + IO_STATUS_BLOCK IoStatusBlock; + UNICODE_STRING Name; + HANDLE FileHandle; + NTSTATUS Status; PPARTITION_SECTOR OrigBootSector; PPARTITION_SECTOR NewBootSector; - /* Allocate buffer for original bootsector */ + /* Allocate buffer for original bootsector */ OrigBootSector = (PPARTITION_SECTOR)RtlAllocateHeap(ProcessHeap, 0, sizeof(PARTITION_SECTOR)); if (OrigBootSector == NULL) return(STATUS_INSUFFICIENT_RESOURCES); - /* Read current boot sector into buffer */ + /* Read current boot sector into buffer */ RtlInitUnicodeString(&Name, RootPath); - InitializeObjectAttributes(&ObjectAttributes, - &Name, - OBJ_CASE_INSENSITIVE, - NULL, - NULL); + InitializeObjectAttributes(&ObjectAttributes, + &Name, + OBJ_CASE_INSENSITIVE, + NULL, + NULL); - Status = NtOpenFile(&FileHandle, - GENERIC_READ, - &ObjectAttributes, - &IoStatusBlock, - 0, - FILE_SYNCHRONOUS_IO_NONALERT); + Status = NtOpenFile(&FileHandle, + GENERIC_READ, + &ObjectAttributes, + &IoStatusBlock, + 0, + FILE_SYNCHRONOUS_IO_NONALERT); if (!NT_SUCCESS(Status)) { RtlFreeHeap(ProcessHeap, 0, OrigBootSector); return(Status); } - Status = NtReadFile(FileHandle, - NULL, - NULL, - NULL, - &IoStatusBlock, + Status = NtReadFile(FileHandle, + NULL, + NULL, + NULL, + &IoStatusBlock, OrigBootSector, - SECTORSIZE, - NULL, - NULL); - NtClose(FileHandle); + SECTORSIZE, + NULL, + NULL); + NtClose(FileHandle); if (!NT_SUCCESS(Status)) { RtlFreeHeap(ProcessHeap, 0, OrigBootSector); @@ -1256,11 +1325,12 @@ InstallFat16BootCodeToDisk(PWSTR SrcPath, UNICODE_STRING Name; HANDLE FileHandle; NTSTATUS Status; - PUCHAR OrigBootSector; - PUCHAR NewBootSector; + PFAT_BOOTSECTOR OrigBootSector; + PFAT_BOOTSECTOR NewBootSector; + PARTITION_INFORMATION *PartInfo; /* Allocate buffer for original bootsector */ - OrigBootSector = (PUCHAR)RtlAllocateHeap(ProcessHeap, + OrigBootSector = RtlAllocateHeap(ProcessHeap, 0, SECTORSIZE); if (OrigBootSector == NULL) @@ -1306,7 +1376,7 @@ InstallFat16BootCodeToDisk(PWSTR SrcPath, /* Allocate buffer for new bootsector */ - NewBootSector = (PUCHAR)RtlAllocateHeap(ProcessHeap, + NewBootSector = RtlAllocateHeap(ProcessHeap, 0, SECTORSIZE); if (NewBootSector == NULL) @@ -1356,9 +1426,12 @@ InstallFat16BootCodeToDisk(PWSTR SrcPath, } /* Adjust bootsector (copy a part of the FAT16 BPB) */ - memcpy((NewBootSector + 3), - (OrigBootSector + 3), - 59); /* FAT16 BPB length*/ + memcpy(&NewBootSector->BytesPerSector, + &OrigBootSector->BytesPerSector, + 51); /* FAT16 BPB length */ + + PartInfo = &PartitionList->CurrentPartition->PartInfo[PartitionList->CurrentPartitionNumber]; + NewBootSector->HiddenSectors = PartInfo->HiddenSectors; /* Free the original boot sector */ RtlFreeHeap(ProcessHeap, 0, OrigBootSector); @@ -1416,13 +1489,14 @@ InstallFat32BootCodeToDisk(PWSTR SrcPath, UNICODE_STRING Name; HANDLE FileHandle; NTSTATUS Status; - PUCHAR OrigBootSector; - PUCHAR NewBootSector; + PFAT32_BOOTSECTOR OrigBootSector; + PFAT32_BOOTSECTOR NewBootSector; LARGE_INTEGER FileOffset; USHORT BackupBootSector; + PARTITION_INFORMATION *PartInfo; /* Allocate buffer for original bootsector */ - OrigBootSector = (PUCHAR)RtlAllocateHeap(ProcessHeap, + OrigBootSector = RtlAllocateHeap(ProcessHeap, 0, SECTORSIZE); if (OrigBootSector == NULL) @@ -1468,7 +1542,7 @@ InstallFat32BootCodeToDisk(PWSTR SrcPath, /* Allocate buffer for new bootsector (2 sectors) */ - NewBootSector = (PUCHAR)RtlAllocateHeap(ProcessHeap, + NewBootSector = RtlAllocateHeap(ProcessHeap, 0, 2 * SECTORSIZE); if (NewBootSector == NULL) @@ -1518,12 +1592,15 @@ InstallFat32BootCodeToDisk(PWSTR SrcPath, } /* Adjust bootsector (copy a part of the FAT32 BPB) */ - memcpy((NewBootSector + 3), - (OrigBootSector + 3), - 87); /* FAT32 BPB length */ + memcpy(&NewBootSector->BytesPerSector, + &OrigBootSector->BytesPerSector, + 79); /* FAT32 BPB length */ + + PartInfo = &PartitionList->CurrentPartition->PartInfo[PartitionList->CurrentPartitionNumber]; + NewBootSector->HiddenSectors = PartInfo->HiddenSectors; /* Get the location of the backup boot sector */ - BackupBootSector = (OrigBootSector[0x33] << 8) + OrigBootSector[0x32]; + BackupBootSector = OrigBootSector->BackupBootSector; /* Free the original boot sector */ RtlFreeHeap(ProcessHeap, 0, OrigBootSector); @@ -1599,7 +1676,7 @@ InstallFat32BootCodeToDisk(PWSTR SrcPath, NULL, NULL, &IoStatusBlock, - (NewBootSector + SECTORSIZE), + ((PUCHAR)NewBootSector + SECTORSIZE), SECTORSIZE, &FileOffset, NULL); @@ -2156,6 +2233,28 @@ InstallFatBootcodeToPartition(PUNICODE_STRING SystemRootPath, #endif } +NTSTATUS +InstallVBRToPartition(PUNICODE_STRING SystemRootPath, + PUNICODE_STRING SourceRootPath, + PUNICODE_STRING DestinationArcPath, + UCHAR PartitionType) +{ + if ((PartitionType == PARTITION_FAT_12) || + (PartitionType == PARTITION_FAT_16) || + (PartitionType == PARTITION_HUGE) || + (PartitionType == PARTITION_XINT13) || + (PartitionType == PARTITION_FAT32) || + (PartitionType == PARTITION_FAT32_XINT13)) + { + return InstallFatBootcodeToPartition(SystemRootPath, + SourceRootPath, + DestinationArcPath, + PartitionType); + } + + return STATUS_UNSUCCESSFUL; +} + NTSTATUS InstallFatBootcodeToFloppy(PUNICODE_STRING SourceRootPath, diff --git a/base/setup/usetup/bootsup.h b/base/setup/usetup/bootsup.h index a0b012ed32b..75c772a2140 100644 --- a/base/setup/usetup/bootsup.h +++ b/base/setup/usetup/bootsup.h @@ -78,6 +78,12 @@ InstallFatBootcodeToPartition(PUNICODE_STRING SystemRootPath, PUNICODE_STRING DestinationArcPath, UCHAR PartitionType); +NTSTATUS +InstallVBRToPartition(PUNICODE_STRING SystemRootPath, + PUNICODE_STRING SourceRootPath, + PUNICODE_STRING DestinationArcPath, + UCHAR PartitionType); + NTSTATUS InstallFatBootcodeToFloppy(PUNICODE_STRING SourceRootPath, PUNICODE_STRING DestinationArcPath); diff --git a/base/setup/usetup/inffile.c b/base/setup/usetup/inffile.c index 0bbde01d9da..7b0d2a9748a 100644 --- a/base/setup/usetup/inffile.c +++ b/base/setup/usetup/inffile.c @@ -65,46 +65,6 @@ InfpFindFirstLineW( return TRUE; } -BOOL WINAPI -InfpFindNextLine( - IN PINFCONTEXT ContextIn, - OUT PINFCONTEXT ContextOut) -{ - return InfFindNextLine(ContextIn, ContextOut); -} - -BOOL WINAPI -InfpGetBinaryField( - IN PINFCONTEXT Context, - IN ULONG FieldIndex, - IN OUT BYTE* ReturnBuffer, - IN ULONG ReturnBufferSize, - OUT PULONG RequiredSize) -{ - return InfGetBinaryField(Context, FieldIndex, ReturnBuffer, ReturnBufferSize, RequiredSize); -} - -DWORD WINAPI -InfpGetFieldCount( - IN PINFCONTEXT Context) -{ - return (DWORD)InfGetFieldCount(Context); -} - -BOOL WINAPI -InfpGetIntField( - IN PINFCONTEXT Context, - IN DWORD FieldIndex, - OUT PINT IntegerValue) -{ - LONG IntegerValueL; - BOOL ret; - - ret = InfGetIntField(Context, FieldIndex, &IntegerValueL); - *IntegerValue = (INT)IntegerValueL; - return ret; -} - BOOL WINAPI InfpGetMultiSzFieldW( IN PINFCONTEXT Context, diff --git a/base/setup/usetup/inffile.h b/base/setup/usetup/inffile.h index 864d2017020..4a5b8d9360f 100644 --- a/base/setup/usetup/inffile.h +++ b/base/setup/usetup/inffile.h @@ -36,10 +36,10 @@ #define SetupCloseInfFile InfpCloseInfFile #define SetupFindFirstLineW InfpFindFirstLineW -#define SetupFindNextLine InfpFindNextLine -#define SetupGetBinaryField InfpGetBinaryField -#define SetupGetFieldCount InfpGetFieldCount -#define SetupGetIntField InfpGetIntField +#define SetupFindNextLine InfFindNextLine +#define SetupGetBinaryField InfGetBinaryField +#define SetupGetFieldCount InfGetFieldCount +#define SetupGetIntField InfGetIntField #define SetupGetMultiSzFieldW InfpGetMultiSzFieldW #define SetupGetStringFieldW InfpGetStringFieldW #define SetupOpenInfFileW InfpOpenInfFileW @@ -66,29 +66,6 @@ InfpFindFirstLineW( IN PCWSTR Key, IN OUT PINFCONTEXT Context); -BOOL WINAPI -InfpFindNextLine( - IN PINFCONTEXT ContextIn, - OUT PINFCONTEXT ContextOut); - -BOOL WINAPI -InfpGetBinaryField( - IN PINFCONTEXT Context, - IN ULONG FieldIndex, - IN OUT BYTE* ReturnBuffer, - IN ULONG ReturnBufferSize, - OUT PULONG RequiredSize); - -DWORD WINAPI -InfpGetFieldCount( - IN PINFCONTEXT Context); - -BOOL WINAPI -InfpGetIntField( - IN PINFCONTEXT Context, - IN DWORD FieldIndex, - OUT PINT IntegerValue); - BOOL WINAPI InfpGetMultiSzFieldW( IN PINFCONTEXT Context, diff --git a/base/setup/usetup/interface/usetup.c b/base/setup/usetup/interface/usetup.c index da9d60a7d41..231238048aa 100644 --- a/base/setup/usetup/interface/usetup.c +++ b/base/setup/usetup/interface/usetup.c @@ -51,11 +51,10 @@ WCHAR DefaultLanguage[20]; WCHAR DefaultKBLayout[20]; BOOLEAN RepairUpdateFlag = FALSE; HANDLE hPnpThread = INVALID_HANDLE_VALUE; +PPARTLIST PartitionList = NULL; /* LOCALS *******************************************************************/ -static PPARTLIST PartitionList = NULL; - static PFILE_SYSTEM_LIST FileSystemList = NULL; static UNICODE_STRING InstallPath; @@ -1402,23 +1401,24 @@ LayoutSettingsPage(PINPUT_RECORD Ir) static BOOL IsDiskSizeValid(PPARTENTRY PartEntry) { - ULONGLONG m; + ULONGLONG m1, m2; /* check for unpartitioned space */ - m = PartEntry->UnpartitionedLength; - m = (m + (1 << 19)) >> 20; /* in MBytes (rounded) */ - if( m > RequiredPartitionDiskSpace) + m1 = PartEntry->UnpartitionedLength; + m1 = (m1 + (1 << 19)) >> 20; /* in MBytes (rounded) */ + + if( m1 > RequiredPartitionDiskSpace) { return TRUE; } /* check for partitioned space */ - m = PartEntry->PartInfo[0].PartitionLength.QuadPart; - m = (m + (1 << 19)) >> 20; /* in MBytes (rounded) */ - if (m < RequiredPartitionDiskSpace) + m2 = PartEntry->PartInfo[0].PartitionLength.QuadPart; + m2 = (m2 + (1 << 19)) >> 20; /* in MBytes (rounded) */ + if (m2 < RequiredPartitionDiskSpace) { /* partition is too small so ask for another partion */ - DPRINT1("Partition is too small, required disk space is %lu MB\n", RequiredPartitionDiskSpace); + DPRINT1("Partition is too small(unpartitioned: %I64u MB, partitioned: %I64u MB), required disk space is %lu MB\n", m1, m2, RequiredPartitionDiskSpace); return FALSE; } else @@ -2450,29 +2450,6 @@ FormatPartitionPage(PINPUT_RECORD Ir) CheckActiveBootPartition(PartitionList); } - /* Install MBR if necessary */ - if (DiskEntry->NoMbr && - DiskEntry->BiosDiskNumber == 0) - { - wcscpy(PathBuffer, SourceRootPath.Buffer); - wcscat(PathBuffer, L"\\loader\\dosmbr.bin"); - - DPRINT("Install MBR bootcode: %S ==> %S\n", - PathBuffer, DestinationRootPath.Buffer); - - /* Install MBR bootcode */ - Status = InstallMbrBootCodeToDisk(PathBuffer, - DestinationRootPath.Buffer); - if (!NT_SUCCESS (Status)) - { - DPRINT1("InstallMbrBootCodeToDisk() failed (Status %lx)\n", - Status); - return FALSE; - } - - DiskEntry->NoMbr = FALSE; - } - if (wcscmp(FileSystemList->Selected->FileSystem, L"FAT") == 0) { /* FIXME: Install boot code. This is a hack! */ @@ -3503,7 +3480,7 @@ BootLoaderPage(PINPUT_RECORD Ir) /* Unattended install on hdd? */ if (IsUnattendedSetup && UnattendMBRInstallType == 2) { - return BOOT_LOADER_HARDDISK_PAGE; + return BOOT_LOADER_HARDDISK_MBR_PAGE; } MUIDisplayPage(BOOT_LOADER_PAGE); @@ -3520,9 +3497,9 @@ BootLoaderPage(PINPUT_RECORD Ir) Line++; if (Line<12) - Line=14; + Line=15; - if (Line>14) + if (Line>15) Line=12; CONSOLE_InvertTextXY(8, Line, 60, 1); @@ -3534,9 +3511,9 @@ BootLoaderPage(PINPUT_RECORD Ir) Line--; if (Line<12) - Line=14; + Line=15; - if (Line>14) + if (Line>15) Line=12; CONSOLE_InvertTextXY(8, Line, 60, 1); @@ -3553,13 +3530,17 @@ BootLoaderPage(PINPUT_RECORD Ir) { if (Line == 12) { - return BOOT_LOADER_HARDDISK_PAGE; + return BOOT_LOADER_HARDDISK_MBR_PAGE; } else if (Line == 13) { - return BOOT_LOADER_FLOPPY_PAGE; + return BOOT_LOADER_HARDDISK_VBR_PAGE; } else if (Line == 14) + { + return BOOT_LOADER_FLOPPY_PAGE; + } + else if (Line == 15) { return SUCCESS_PAGE; } @@ -3615,41 +3596,72 @@ BootLoaderFloppyPage(PINPUT_RECORD Ir) return BOOT_LOADER_FLOPPY_PAGE; } - static PAGE_NUMBER -BootLoaderHarddiskPage(PINPUT_RECORD Ir) +BootLoaderHarddiskVbrPage(PINPUT_RECORD Ir) { UCHAR PartitionType; NTSTATUS Status; + + PartitionType = PartitionList->ActiveBootPartition-> + PartInfo[PartitionList->ActiveBootPartitionNumber].PartitionType; + + Status = InstallVBRToPartition(&SystemRootPath, + &SourceRootPath, + &DestinationArcPath, + PartitionType); + if (!NT_SUCCESS(Status)) + { + MUIDisplayError(ERROR_WRITE_BOOT, Ir, POPUP_WAIT_ENTER); + return QUIT_PAGE; + } + + return SUCCESS_PAGE; +} +static PAGE_NUMBER +BootLoaderHarddiskMbrPage(PINPUT_RECORD Ir) +{ + UCHAR PartitionType; + NTSTATUS Status; + WCHAR DestinationDevicePathBuffer[MAX_PATH]; + WCHAR SourceMbrPathBuffer[MAX_PATH]; + + /* Step 1: Write the VBR */ PartitionType = PartitionList->ActiveBootPartition-> PartInfo[PartitionList->ActiveBootPartitionNumber].PartitionType; - if ((PartitionType == PARTITION_FAT_12) || - (PartitionType == PARTITION_FAT_16) || - (PartitionType == PARTITION_HUGE) || - (PartitionType == PARTITION_XINT13) || - (PartitionType == PARTITION_FAT32) || - (PartitionType == PARTITION_FAT32_XINT13)) - { - Status = InstallFatBootcodeToPartition(&SystemRootPath, - &SourceRootPath, - &DestinationArcPath, - PartitionType); - if (!NT_SUCCESS(Status)) - { - MUIDisplayError(ERROR_INSTALL_BOOTCODE, Ir, POPUP_WAIT_ENTER); - return QUIT_PAGE; - } - return SUCCESS_PAGE; - } - else + Status = InstallVBRToPartition(&SystemRootPath, + &SourceRootPath, + &DestinationArcPath, + PartitionType); + if (!NT_SUCCESS(Status)) { MUIDisplayError(ERROR_WRITE_BOOT, Ir, POPUP_WAIT_ENTER); return QUIT_PAGE; } - return BOOT_LOADER_HARDDISK_PAGE; + /* Step 2: Write the MBR */ + swprintf(DestinationDevicePathBuffer, + L"\\Device\\Harddisk%d\\Partition0", + PartitionList->ActiveBootDisk->DiskNumber); + + wcscpy(SourceMbrPathBuffer, SourceRootPath.Buffer); + wcscat(SourceMbrPathBuffer, L"\\loader\\dosmbr.bin"); + + DPRINT("Install MBR bootcode: %S ==> %S\n", + SourceMbrPathBuffer, DestinationDevicePathBuffer); + + Status = InstallMbrBootCodeToDisk(SourceMbrPathBuffer, + DestinationDevicePathBuffer); + if (!NT_SUCCESS (Status)) + { + DPRINT1("InstallMbrBootCodeToDisk() failed (Status %lx)\n", + Status); + MUIDisplayError(ERROR_INSTALL_BOOTCODE, Ir, POPUP_WAIT_ENTER); + return QUIT_PAGE; + } + + return SUCCESS_PAGE; } @@ -3916,8 +3928,12 @@ RunUSetup(VOID) Page = BootLoaderFloppyPage(&Ir); break; - case BOOT_LOADER_HARDDISK_PAGE: - Page = BootLoaderHarddiskPage(&Ir); + case BOOT_LOADER_HARDDISK_MBR_PAGE: + Page = BootLoaderHarddiskMbrPage(&Ir); + break; + + case BOOT_LOADER_HARDDISK_VBR_PAGE: + Page = BootLoaderHarddiskVbrPage(&Ir); break; /* Repair pages */ diff --git a/base/setup/usetup/lang/bg-BG.h b/base/setup/usetup/lang/bg-BG.h index b6b22fdbf13..9e8de240a6a 100644 --- a/base/setup/usetup/lang/bg-BG.h +++ b/base/setup/usetup/lang/bg-BG.h @@ -995,18 +995,24 @@ static MUI_ENTRY bgBGBootLoaderEntries[] = { 8, 12, - " ० न ( MBR).", + "Install bootloader on the harddisk (MBR and VBR).", TEXT_STYLE_NORMAL }, { 8, 13, - " ० ᪥.", + "Install bootloader on the harddisk (VBR only).", TEXT_STYLE_NORMAL }, { 8, 14, + " ० ᪥.", + TEXT_STYLE_NORMAL + }, + { + 8, + 15, " ᫠ ०.", TEXT_STYLE_NORMAL }, diff --git a/base/setup/usetup/lang/cs-CZ.h b/base/setup/usetup/lang/cs-CZ.h index 428b0f55fea..523cca70c2d 100644 --- a/base/setup/usetup/lang/cs-CZ.h +++ b/base/setup/usetup/lang/cs-CZ.h @@ -993,18 +993,24 @@ static MUI_ENTRY csCZBootLoaderEntries[] = { 8, 12, - "Nainstalovat zavad؟ na disk (MBR).", + "Install bootloader on the harddisk (MBR and VBR).", TEXT_STYLE_NORMAL }, { 8, 13, - "Nainstalovat zavad؟ na disketu.", + "Install bootloader on the harddisk (VBR only).", TEXT_STYLE_NORMAL }, { 8, 14, + "Nainstalovat zavad؟ na disketu.", + TEXT_STYLE_NORMAL + }, + { + 8, + 15, "Peskoit instalaci zavad؟e.", TEXT_STYLE_NORMAL }, diff --git a/base/setup/usetup/lang/de-DE.h b/base/setup/usetup/lang/de-DE.h index 4686873427a..a0b814deef1 100644 --- a/base/setup/usetup/lang/de-DE.h +++ b/base/setup/usetup/lang/de-DE.h @@ -578,7 +578,7 @@ static MUI_ENTRY deDEFlushPageEntries[] = { 10, 9, - "Der PC wird automatisch neunstarten, wenn der Vorgang beendet ist.", + "Der PC wird automatisch neustarten, wenn der Vorgang beendet ist.", TEXT_STYLE_NORMAL }, { @@ -986,18 +986,24 @@ static MUI_ENTRY deDEBootLoaderEntries[] = { 8, 12, - "Boot-Loader auf der Festplatte installieren (Bootsektor).", + "Boot-Loader auf der Festplatte installieren (MBR und VBR).", TEXT_STYLE_NORMAL }, { 8, 13, - "Boot-Loader auf einer Diskette installieren.", + "Boot-Loader auf der Festplatte installieren (nur VBR).", TEXT_STYLE_NORMAL }, { 8, 14, + "Boot-Loader auf einer Diskette installieren.", + TEXT_STYLE_NORMAL + }, + { + 8, + 15, "Boot-Loader nicht installieren.", TEXT_STYLE_NORMAL }, diff --git a/base/setup/usetup/lang/el-GR.h b/base/setup/usetup/lang/el-GR.h index 66de19aa71a..16fc2d3f57d 100644 --- a/base/setup/usetup/lang/el-GR.h +++ b/base/setup/usetup/lang/el-GR.h @@ -1009,18 +1009,24 @@ static MUI_ENTRY elGRBootLoaderEntries[] = { 8, 12, - "ᩫ bootloader 婡 (MBR).", + "Install bootloader on the harddisk (MBR and VBR).", TEXT_STYLE_NORMAL }, { 8, 13, - "ᩫ bootloader ⫘.", + "Install bootloader on the harddisk (VBR only).", TEXT_STYLE_NORMAL }, { 8, 14, + "ᩫ bootloader ⫘.", + TEXT_STYLE_NORMAL + }, + { + 8, + 15, " 夜 ᩫ bootloader.", TEXT_STYLE_NORMAL }, diff --git a/base/setup/usetup/lang/en-US.h b/base/setup/usetup/lang/en-US.h index 9038002050d..909552f277d 100644 --- a/base/setup/usetup/lang/en-US.h +++ b/base/setup/usetup/lang/en-US.h @@ -985,18 +985,24 @@ static MUI_ENTRY enUSBootLoaderEntries[] = { 8, 12, - "Install bootloader on the harddisk (bootsector).", + "Install bootloader on the harddisk (MBR and VBR).", TEXT_STYLE_NORMAL }, { 8, 13, - "Install bootloader on a floppy disk.", + "Install bootloader on the harddisk (VBR only).", TEXT_STYLE_NORMAL }, { 8, 14, + "Install bootloader on a floppy disk.", + TEXT_STYLE_NORMAL + }, + { + 8, + 15, "Skip install bootloader.", TEXT_STYLE_NORMAL }, diff --git a/base/setup/usetup/lang/es-ES.h b/base/setup/usetup/lang/es-ES.h index bc2fe1340af..1df39349954 100644 --- a/base/setup/usetup/lang/es-ES.h +++ b/base/setup/usetup/lang/es-ES.h @@ -992,18 +992,24 @@ static MUI_ENTRY esESBootLoaderEntries[] = { 8, 12, - "Instalar cargador de arranque en el disco duro (sector de boot).", + "Install bootloader on the harddisk (MBR and VBR).", TEXT_STYLE_NORMAL }, { 8, 13, - "Instalar cargador de inicio en un disquete.", + "Install bootloader on the harddisk (VBR only).", TEXT_STYLE_NORMAL }, { 8, 14, + "Instalar cargador de inicio en un disquete.", + TEXT_STYLE_NORMAL + }, + { + 8, + 15, "Omitir la instalacin del cargador de arranque.", TEXT_STYLE_NORMAL }, diff --git a/base/setup/usetup/lang/et-EE.h b/base/setup/usetup/lang/et-EE.h index f0b7e8bd328..3c8a14b43c5 100644 --- a/base/setup/usetup/lang/et-EE.h +++ b/base/setup/usetup/lang/et-EE.h @@ -985,18 +985,24 @@ static MUI_ENTRY etEEBootLoaderEntries[] = { 8, 12, - "Paigalda alglaadur kvakettale (MBR).", + "Install bootloader on the harddisk (MBR and VBR).", TEXT_STYLE_NORMAL }, { 8, 13, - "Paigalda alglaadur flopikettale.", + "Install bootloader on the harddisk (VBR only).", TEXT_STYLE_NORMAL }, { 8, 14, + "Paigalda alglaadur flopikettale.", + TEXT_STYLE_NORMAL + }, + { + 8, + 15, "ra paigalda alglaadurit.", TEXT_STYLE_NORMAL }, diff --git a/base/setup/usetup/lang/fr-FR.h b/base/setup/usetup/lang/fr-FR.h index aa3b3df809a..ba1844cf0f8 100644 --- a/base/setup/usetup/lang/fr-FR.h +++ b/base/setup/usetup/lang/fr-FR.h @@ -998,18 +998,24 @@ static MUI_ENTRY frFRBootLoaderEntries[] = { 8, 12, - "Installer le chargeur de dmarrage sur le disque dur (MBR).", + "Installer le chargeur de dmarrage sur le disque (MBR et VBR).", TEXT_STYLE_NORMAL }, { 8, 13, - "Installer le chargeur de dmarrage sur une disquette.", + "Installer le chargeur de dmarrage sur le disque (VBR seulement).", TEXT_STYLE_NORMAL }, { 8, 14, + "Installer le chargeur de dmarrage sur une disquette.", + TEXT_STYLE_NORMAL + }, + { + 8, + 15, "Ne pas installer le chargeur de dmarrage.", TEXT_STYLE_NORMAL }, @@ -1090,7 +1096,7 @@ static MUI_ENTRY frFRLayoutSettingsEntries[] = { 6, 8, - "Please select a layout to be installed by default.", + "Veuillez slectionner une disposition installer par dfaut.", TEXT_STYLE_NORMAL }, { @@ -1481,18 +1487,18 @@ MUI_ERROR frFRErrorEntries[] = }, { //ERROR_ADDING_KBLAYOUTS, - "Setup failed to add keyboard layouts to registry.\n" - "ENTER = Reboot computer" + "Setup n'a pas pu ajouter les dispositions de clavier au registre.\n" + "ENTER = Redmarrer l'ordinateur" }, { //ERROR_UPDATE_GEOID, - "Setup could not set the geo id.\n" - "ENTER = Reboot computer" + "Setup n'a pas pu dfinir la geo id.\n" + "ENTER = Redmarrer l'ordinateur" }, { //ERROR_INSUFFICIENT_DISKSPACE, - "Not enough free space in the selected partition.\n" - " * Press any key to continue.", + "Pas assez d'espace libre dans la partition slectionne.\n" + " * Appuyez sur n'importe quelle touche pour continuer.", NULL }, { @@ -1709,6 +1715,6 @@ MUI_STRING frFRStrings[] = {STRING_GB, "Go"}, {STRING_ADDKBLAYOUTS, - "Adding keyboard layouts"}, + "Ajout des dispositions clavier"}, {0, 0} }; diff --git a/base/setup/usetup/lang/it-IT.h b/base/setup/usetup/lang/it-IT.h index 3b4ac5670cd..6e3c4d88398 100644 --- a/base/setup/usetup/lang/it-IT.h +++ b/base/setup/usetup/lang/it-IT.h @@ -986,18 +986,24 @@ static MUI_ENTRY itITBootLoaderEntries[] = { 8, 12, - "Installazione del bootloader sul disco fisso (settore di avvio).", + "Install bootloader on the harddisk (MBR and VBR).", TEXT_STYLE_NORMAL }, { 8, 13, - "Installazione del bootloader su un disco floppy.", + "Install bootloader on the harddisk (VBR only).", TEXT_STYLE_NORMAL }, { 8, 14, + "Installazione del bootloader su un disco floppy.", + TEXT_STYLE_NORMAL + }, + { + 8, + 15, "Salta l'installazione del bootloader.", TEXT_STYLE_NORMAL }, diff --git a/base/setup/usetup/lang/ja-JP.h b/base/setup/usetup/lang/ja-JP.h index 03b6ec1841d..0db36acab83 100644 --- a/base/setup/usetup/lang/ja-JP.h +++ b/base/setup/usetup/lang/ja-JP.h @@ -986,18 +986,24 @@ static MUI_ENTRY jaJPBootLoaderEntries[] = { 8, 12, - "ް۰ަ ʰި (ްľ) ݽİ ١", + "Install bootloader on the harddisk (MBR and VBR).", TEXT_STYLE_NORMAL }, { 8, 13, - "ް۰ަ ۯ߰ ި ݽİ ١", + "Install bootloader on the harddisk (VBR only).", TEXT_STYLE_NORMAL }, { 8, 14, + "ް۰ަ ۯ߰ ި ݽİ ١", + TEXT_STYLE_NORMAL + }, + { + 8, + 15, "ް۰ ݽİ٦ ١", TEXT_STYLE_NORMAL }, diff --git a/base/setup/usetup/lang/lt-LT.h b/base/setup/usetup/lang/lt-LT.h index 7020ebbaba1..363f1f3923e 100644 --- a/base/setup/usetup/lang/lt-LT.h +++ b/base/setup/usetup/lang/lt-LT.h @@ -995,18 +995,24 @@ static MUI_ENTRY ltLTBootLoaderEntries[] = { 8, 12, - "Install bootloader on the harddisk (MBR).", + "Install bootloader on the harddisk (MBR and VBR).", TEXT_STYLE_NORMAL }, { 8, 13, - "Install bootloader on a floppy disk.", + "Install bootloader on the harddisk (VBR only).", TEXT_STYLE_NORMAL }, { 8, 14, + "Install bootloader on a floppy disk.", + TEXT_STYLE_NORMAL + }, + { + 8, + 15, "Skip install bootloader.", TEXT_STYLE_NORMAL }, diff --git a/base/setup/usetup/lang/nl-NL.h b/base/setup/usetup/lang/nl-NL.h index 0141359d290..5ed50c609da 100644 --- a/base/setup/usetup/lang/nl-NL.h +++ b/base/setup/usetup/lang/nl-NL.h @@ -1012,18 +1012,24 @@ static MUI_ENTRY nlNLBootLoaderEntries[] = { 8, 12, - "Installeer de bootloader op de harde schijf (bootsector).", + "Install bootloader on the harddisk (MBR and VBR).", TEXT_STYLE_NORMAL }, { 8, 13, - "Installeer de bootloader op een floppy disk.", + "Install bootloader on the harddisk (VBR only).", TEXT_STYLE_NORMAL }, { 8, 14, + "Installeer de bootloader op een floppy disk.", + TEXT_STYLE_NORMAL + }, + { + 8, + 15, "Installeren bootloader overslaan.", TEXT_STYLE_NORMAL }, diff --git a/base/setup/usetup/lang/pl-PL.h b/base/setup/usetup/lang/pl-PL.h index de0a55fcd5c..ee8d9d8353e 100644 --- a/base/setup/usetup/lang/pl-PL.h +++ b/base/setup/usetup/lang/pl-PL.h @@ -994,18 +994,24 @@ static MUI_ENTRY plPLBootLoaderEntries[] = { 8, 12, - " Wgraj bootloader na dysk twardy (MBR).", + "Wgraj bootloader na dysk twardy (MBR i VBR).", TEXT_STYLE_NORMAL }, { 8, 13, - " Wgraj bootloader na dyskietk.", + "Wgraj bootloader na dysk twardy (tylko VBR).", TEXT_STYLE_NORMAL }, { 8, 14, + " Wgraj bootloader na dyskietk.", + TEXT_STYLE_NORMAL + }, + { + 8, + 15, " Pomi wgrywanie bootloadera.", TEXT_STYLE_NORMAL }, diff --git a/base/setup/usetup/lang/pt-BR.h b/base/setup/usetup/lang/pt-BR.h index 6c545ad785a..74392e529fd 100644 --- a/base/setup/usetup/lang/pt-BR.h +++ b/base/setup/usetup/lang/pt-BR.h @@ -6,3 +6,1738 @@ MUI_LAYOUTS ptBRLayouts[] = { L"0409", L"00000409" }, { NULL, NULL } }; + +static MUI_ENTRY ptBRLanguagePageEntries[] = +{ + { + 4, + 3, + " Instalao do ReactOS " KERNEL_VERSION_STR " ", + TEXT_STYLE_UNDERLINE + }, + { + 6, + 8, + "Seleo do idioma", + TEXT_STYLE_NORMAL + }, + { + 8, + 10, + "\x07 Por favor, selecione o idioma a ser utilizado durante a instalao.", + TEXT_STYLE_NORMAL + }, + { + 8, + 11, + " Ento pressione ENTER.", + TEXT_STYLE_NORMAL + }, + { + 8, + 13, + "\x07 O idioma selecionado tambm ser o idioma padro do sistema.", + TEXT_STYLE_NORMAL + }, + { + 0, + 0, + "ENTER=Continuar F3=Sair", + TEXT_TYPE_STATUS | TEXT_PADDING_BIG + }, + { + 0, + 0, + NULL, + 0 + } +}; + +static MUI_ENTRY ptBRWelcomePageEntries[] = +{ + { + 4, + 3, + " Instalao do ReactOS " KERNEL_VERSION_STR " ", + TEXT_STYLE_UNDERLINE + }, + { + 6, + 8, + "Bem-vindo instalao do ReactOS.", + TEXT_STYLE_HIGHLIGHT + }, + { + 6, + 11, + "Esta parte da instalao prepara o ReactOS para ser", + TEXT_STYLE_NORMAL + }, + { + 6, + 12, + "executado em seu computador.", + TEXT_STYLE_NORMAL + }, + { + 8, + 15, + "\x07 Para instalar o ReactOS agora, pressione ENTER.", + TEXT_STYLE_NORMAL + }, + { + 8, + 17, + "\x07 Para reparar uma instalao do ReactOS, pressione R.", + TEXT_STYLE_NORMAL + }, + { + 8, + 19, + "\x07 Para ver os termos e condies da licena, pressione L.", + TEXT_STYLE_NORMAL + }, + { + 8, + 21, + "\x07 Para sair sem instalar o ReactOS, pressione F3.", + TEXT_STYLE_NORMAL + }, + { + 6, + 23, + "Para maiores informaes sobre o ReactOS, visite o stio:", + TEXT_STYLE_NORMAL + }, + { + 6, + 24, + "http://www.reactos.org", + TEXT_STYLE_HIGHLIGHT + }, + { + 0, + 0, + "ENTER=Continuar R=Reparar L=Licena F3=Sair", + TEXT_TYPE_STATUS | TEXT_PADDING_BIG + }, + { + 0, + 0, + NULL, + 0 + } +}; + +static MUI_ENTRY ptBRIntroPageEntries[] = +{ + { + 4, + 3, + " Instalao do ReactOS " KERNEL_VERSION_STR " ", + TEXT_STYLE_UNDERLINE + }, + { + 6, + 8, + "O instalador do ReactOS est em fase inicial de desenvolvimento e", + TEXT_STYLE_NORMAL + }, + { + 6, + 9, + "ainda no suporta todas as funes de instalao.", + TEXT_STYLE_NORMAL + }, + { + 6, + 11, + "As seguintes limitaes se aplicam:", + TEXT_STYLE_NORMAL + }, + { + 8, + 13, + "- O instalador no suporta mais de uma partio primria por disco.", + TEXT_STYLE_NORMAL + }, + { + 8, + 14, + "- O instalador no pode excluir uma partio primria de um disco", + TEXT_STYLE_NORMAL + }, + { + 8, + 15, + " se houverem parties estendidas no mesmo disco.", + TEXT_STYLE_NORMAL + }, + { + 8, + 16, + "- O instalador no pode remover a primeira partio estendida de um", + TEXT_STYLE_NORMAL + }, + { + 8, + 17, + " disco se existirem outras parties estendidas no mesmo disco.", + TEXT_STYLE_NORMAL + }, + { + 8, + 18, + "- O instalador suporta somente o sistema de arquivos FAT.", + TEXT_STYLE_NORMAL + }, + { + 8, + 19, + "- O verificador de integridade de sistema de arquivos ainda no est", + TEXT_STYLE_NORMAL + }, + { + 8, + 20, + " implementado.", + TEXT_STYLE_NORMAL + }, + { + 8, + 25, + "\x07 Para continuar a instalao do ReactOS, pressione ENTER.", + TEXT_STYLE_NORMAL + }, + { + 8, + 27, + "\x07 Para sair sem instalar o ReactOS, pressione F3.", + TEXT_STYLE_NORMAL + }, + { + 0, + 0, + "ENTER=Continuar F3=Sair", + TEXT_TYPE_STATUS | TEXT_PADDING_BIG + }, + { + 0, + 0, + NULL, + 0 + } +}; + +static MUI_ENTRY ptBRLicensePageEntries[] = +{ + { + 4, + 3, + " Instalao do ReactOS " KERNEL_VERSION_STR " ", + TEXT_STYLE_UNDERLINE + }, + { + 6, + 6, + "Licena:", + TEXT_STYLE_HIGHLIGHT + }, + { + 8, + 8, + "O ReactOS est licenciado sob os termos da licena", + TEXT_STYLE_NORMAL + }, + { + 8, + 9, + "GNU GPL contendo partes de cdigo licenciados sob outras", + TEXT_STYLE_NORMAL + }, + { + 8, + 10, + "licenas compatveis, como X11 ou BSD e GNU LGPL.", + TEXT_STYLE_NORMAL + }, + { + 8, + 11, + "Todo o software que faz parte do ReactOS portanto, liberado", + TEXT_STYLE_NORMAL + }, + { + 8, + 12, + "sob a licena GNU GPL, bem como a manuteno da licena", + TEXT_STYLE_NORMAL + }, + { + 8, + 13, + "original.", + TEXT_STYLE_NORMAL + }, + { + 8, + 15, + "Este software vem sem NENHUMA GARANTIA ou restrio de uso", + TEXT_STYLE_NORMAL + }, + { + 8, + 16, + "exceto onde leis locais e internacionais so aplicaveis. A licena", + TEXT_STYLE_NORMAL + }, + { + 8, + 17, + "do ReactOS abrange apenas a distribuio a terceiros.", + TEXT_STYLE_NORMAL + }, + { + 8, + 18, + "Se por alguma razo voc no recebeu uma cpia da licena", + TEXT_STYLE_NORMAL + }, + { + 8, + 19, + "GNU General Public License com o ReactOS por favor visite", + TEXT_STYLE_NORMAL + }, + { + 8, + 20, + "http://www.gnu.org/licenses/licenses.html", + TEXT_STYLE_HIGHLIGHT + }, + { + 6, + 22, + "Garantia:", + TEXT_STYLE_HIGHLIGHT + }, + { + 8, + 24, + "Este um software livre; veja o cdigo fonte para condies de cpia.", + TEXT_STYLE_NORMAL + }, + { + 8, + 25, + "NO h garantia; nem mesmo para COMERCIALIZAO ou", + TEXT_STYLE_NORMAL + }, + { + 8, + 26, + "ADEQUAO PARA UM PROPSITO PARTICULAR", + TEXT_STYLE_NORMAL + }, + { + 0, + 0, + "ENTER=Voltar", + TEXT_TYPE_STATUS | TEXT_PADDING_BIG + }, + { + 0, + 0, + NULL, + 0 + } +}; + +static MUI_ENTRY ptBRDevicePageEntries[] = +{ + { + 4, + 3, + " Instalao do ReactOS " KERNEL_VERSION_STR " ", + TEXT_STYLE_UNDERLINE + }, + { + 6, + 8, + "A lista a seguir mostra as configuraes de dispositivos atual.", + TEXT_STYLE_NORMAL + }, + { + 24, + 11, + "Computador:", + TEXT_STYLE_NORMAL | TEXT_ALIGN_RIGHT + }, + { + 24, + 12, + "Vdeo:", + TEXT_STYLE_NORMAL | TEXT_ALIGN_RIGHT + }, + { + 24, + 13, + "Teclado:", + TEXT_STYLE_NORMAL | TEXT_ALIGN_RIGHT + }, + { + 24, + 14, + "Leiaute teclado:", + TEXT_STYLE_NORMAL | TEXT_ALIGN_RIGHT + }, + { + 24, + 16, + "Aceitar:", + TEXT_STYLE_NORMAL | TEXT_ALIGN_RIGHT + }, + { + 25, + 16, "Aceitar essas configuraes de dispositivo", + TEXT_STYLE_NORMAL + }, + { + 6, + 19, + "Use as teclas SETA PARA CIMA e SETA PARA BAIXO para mudar de opo.", + TEXT_STYLE_NORMAL + }, + { + 6, + 20, + "Para escolher uma configurao alternativa, pressione ENTER.", + TEXT_STYLE_NORMAL + }, + { + 6, + 22, + "Quanto finalizar os ajustes, selecione \"Aceitar essas configuraes", + TEXT_STYLE_NORMAL + }, + { + 6, + 23, + "de dispositivo\" e pressione ENTER.", + TEXT_STYLE_NORMAL + }, + { + 0, + 0, + "ENTER=Continuar F3=Sair", + TEXT_TYPE_STATUS | TEXT_PADDING_BIG + }, + { + 0, + 0, + NULL, + 0 + } +}; + +static MUI_ENTRY ptBRRepairPageEntries[] = +{ + { + 4, + 3, + " Instalao do ReactOS " KERNEL_VERSION_STR " ", + TEXT_STYLE_UNDERLINE + }, + { + 6, + 8, + "O instalador do ReactOS est em fase inicial de desenvolvimento e", + TEXT_STYLE_NORMAL + }, + { + 6, + 9, + "ainda no suporta todas as funes de instalao.", + TEXT_STYLE_NORMAL + }, + { + 6, + 12, + "As funes reparao ainda no foram implementadas.", + TEXT_STYLE_NORMAL + }, + { + 8, + 15, + "\x07 Para atualizar o sistema operacional, pressione U.", + TEXT_STYLE_NORMAL + }, + { + 8, + 17, + "\x07 Para abrir o console de recuperao, pressione R.", + TEXT_STYLE_NORMAL + }, + { + 8, + 19, + "\x07 Para voltar a pgina principal, pressione ESC.", + TEXT_STYLE_NORMAL + }, + { + 8, + 21, + "\x07 Para reiniciar o computador, pressione ENTER.", + TEXT_STYLE_NORMAL + }, + { + 0, + 0, + "ESC=Pgina principal U=Atualizar R=Recuperar ENTER=Reiniciar", + TEXT_TYPE_STATUS | TEXT_PADDING_BIG + }, + { + 0, + 0, + NULL, + 0 + } +}; +static MUI_ENTRY ptBRComputerPageEntries[] = +{ + { + 4, + 3, + " Instalao do ReactOS " KERNEL_VERSION_STR " ", + TEXT_STYLE_UNDERLINE + }, + { + 6, + 8, + "A lista a seguir mostra os tipos de computadores disponveis", + TEXT_STYLE_NORMAL + }, + { + 6, + 9, + "para instalao.", + TEXT_STYLE_NORMAL + }, + { + 6, + 11, + "Use as teclas SETA PARA CIMA e SETA PARA BAIXO para selecionar", + TEXT_STYLE_NORMAL + }, + { + 6, + 12, + "um item na lista.", + TEXT_STYLE_NORMAL + }, + { + 8, + 14, + "\x07 Para escolher o item selecionado, pressione ENTER.", + TEXT_STYLE_NORMAL + }, + { + 8, + 16, + "\x07 Para cancelar a alterao, pressione ESC.", + TEXT_STYLE_NORMAL + }, + { + 0, + 0, + "ENTER=Continuar ESC=Cancelar F3=Sair", + TEXT_TYPE_STATUS | TEXT_PADDING_BIG + }, + { + 0, + 0, + NULL, + 0 + } +}; + +static MUI_ENTRY ptBRFlushPageEntries[] = +{ + { + 4, + 3, + " Instalao do ReactOS " KERNEL_VERSION_STR " ", + TEXT_STYLE_UNDERLINE + }, + { + 10, + 6, + "O sistema est agora certificando que todos os dados estejam sendo", + TEXT_STYLE_NORMAL + }, + { + 10, + 7, + "armazenados corretamente no disco.", + TEXT_STYLE_NORMAL + }, + { + 10, + 8, + "Esta operao pode demorar um minuto.", + TEXT_STYLE_NORMAL + }, + { + 10, + 9, + "Quando terminar, o computador ser reiniciado automaticamente.", + TEXT_STYLE_NORMAL + }, + { + 0, + 0, + "Esvaziando o cache", + TEXT_TYPE_STATUS | TEXT_PADDING_BIG + }, + { + 0, + 0, + NULL, + 0 + } +}; + +static MUI_ENTRY ptBRQuitPageEntries[] = +{ + { + 4, + 3, + " Instalao do ReactOS " KERNEL_VERSION_STR " ", + TEXT_STYLE_UNDERLINE + }, + { + 10, + 6, + "O ReactOS no foi totalmente instalado neste computador.", + TEXT_STYLE_NORMAL + }, + { + 10, + 8, + "Se houver algum disquete na unidade A: ou disco nas unidades", + TEXT_STYLE_NORMAL + }, + { + 10, + 9, + "de CD-ROM, remova-os.", + TEXT_STYLE_NORMAL + }, + { + 10, + 11, + "Para reiniciar o computador, pressione ENTER.", + TEXT_STYLE_NORMAL + }, + { + 0, + 0, + "Por favor, aguarde...", + TEXT_TYPE_STATUS | TEXT_PADDING_BIG, + }, + { + 0, + 0, + NULL, + 0 + } +}; + +static MUI_ENTRY ptBRDisplayPageEntries[] = +{ + { + 4, + 3, + " Instalao do ReactOS " KERNEL_VERSION_STR " ", + TEXT_STYLE_UNDERLINE + }, + { + 6, + 8, + "A lista a seguir mostra os tipos de vdeo disponveis para instalao.", + TEXT_STYLE_NORMAL + }, + { 6, + 10, + "Use as teclas SETA PARA CIMA e SETA PARA BAIXO para selecionar", + TEXT_STYLE_NORMAL + }, + { + 6, + 11, + "um item na lista.", + TEXT_STYLE_NORMAL + }, + { + 8, + 13, + "\x07 Para escolher o item selecionado, pressione ENTER.", + TEXT_STYLE_NORMAL + }, + { + 8, + 15, + "\x07 Para cancelar a alterao, pressione ESC.", + TEXT_STYLE_NORMAL + }, + { + 0, + 0, + "ENTER=Continuar ESC=Cancelar F3=Sair", + TEXT_TYPE_STATUS | TEXT_PADDING_BIG + }, + { + 0, + 0, + NULL, + 0 + } +}; + +static MUI_ENTRY ptBRSuccessPageEntries[] = +{ + { + 4, + 3, + " Instalao do ReactOS " KERNEL_VERSION_STR " ", + TEXT_STYLE_UNDERLINE + }, + { + 10, + 6, + "Os componentes bsicos do ReactOS foram instalados com sucesso.", + TEXT_STYLE_NORMAL + }, + { + 10, + 8, + "Se houver algum disquete na unidade A: ou disco nas unidades", + TEXT_STYLE_NORMAL + }, + { + 10, + 9, + "de CD-ROM, remova-os.", + TEXT_STYLE_NORMAL + }, + { + 10, + 11, + "Para reiniciar o computador, pressione ENTER.", + TEXT_STYLE_NORMAL + }, + { + 0, + 0, + "ENTER=Reiniciar", + TEXT_TYPE_STATUS | TEXT_PADDING_BIG + }, + { + 0, + 0, + NULL, + 0 + } +}; + +static MUI_ENTRY ptBRBootPageEntries[] = +{ + { + 4, + 3, + " Instalao do ReactOS " KERNEL_VERSION_STR " ", + TEXT_STYLE_UNDERLINE + }, + { + 6, + 8, + "O instalador no pde instalar o gernciador de inicializao no disco", + TEXT_STYLE_NORMAL + }, + { + 6, + 9, + "rgido do computador.", + TEXT_STYLE_NORMAL + }, + { + 6, + 13, + "Por favor insira um disquete formatado na unidade A: e", + TEXT_STYLE_NORMAL + }, + { + 6, + 14, + "pressione ENTER.", + TEXT_STYLE_NORMAL, + }, + { + 0, + 0, + "ENTER=Continuar F3=Sair", + TEXT_TYPE_STATUS | TEXT_PADDING_BIG + }, + { + 0, + 0, + NULL, + 0 + } + +}; + +static MUI_ENTRY ptBRSelectPartitionEntries[] = +{ + { + 4, + 3, + " Instalao do ReactOS " KERNEL_VERSION_STR " ", + TEXT_STYLE_UNDERLINE + }, + { + 6, + 7, + "A lista a seguir mostra as parties existentes e os espaos", + TEXT_STYLE_NORMAL + }, + { + 6, + 8, + "no-particionados neste computador.", + TEXT_STYLE_NORMAL + }, + { + 6, + 10, + "Use as teclas SETA PARA CIMA e SETA PARA BAIXO para selecionar", + TEXT_STYLE_NORMAL + }, + { + 6, + 11, + "um item na lista.", + TEXT_STYLE_NORMAL + }, + { + 8, + 13, + "\x07 Para configurar o ReactOS no item selecionado, pressione ENTER.", + TEXT_STYLE_NORMAL + }, + { + 8, + 15, + "\x07 Para criar uma partio no espao no particionado, pressione C.", + TEXT_STYLE_NORMAL + }, + { + 8, + 17, + "\x07 Para excluir a partio selecionada, pressione D.", + TEXT_STYLE_NORMAL + }, + { + 0, + 0, + "Por favor, aguarde...", + TEXT_TYPE_STATUS | TEXT_PADDING_BIG + }, + { + 0, + 0, + NULL, + 0 + } +}; + +static MUI_ENTRY ptBRFormatPartitionEntries[] = +{ + { + 4, + 3, + " Instalao do ReactOS " KERNEL_VERSION_STR " ", + TEXT_STYLE_UNDERLINE + }, + { + 6, + 8, + "Formatar partio", + TEXT_STYLE_NORMAL + }, + { + 6, + 10, + "O instalador ir formatar a partio. Para continuar, pressione ENTER.", + TEXT_STYLE_NORMAL + }, + { + 0, + 0, + "ENTER=Continuar F3=Sair", + TEXT_TYPE_STATUS + }, + { + 0, + 0, + NULL, + TEXT_STYLE_NORMAL + } +}; + +static MUI_ENTRY ptBRInstallDirectoryEntries[] = +{ + { + 4, + 3, + " Instalao do ReactOS " KERNEL_VERSION_STR " ", + TEXT_STYLE_UNDERLINE + }, + { + 6, + 8, + "O instalador ir copiar os arquivos para a partio selecionada.", + TEXT_STYLE_NORMAL + }, + { + 6, + 9, + "Selecione um diretrio onde deseja que o ReactOS seja instalado:", + TEXT_STYLE_NORMAL + }, + { + 6, + 14, + "Para mudar o diretrio sugerido, pressione a tecla BACKSPACE para apagar", + TEXT_STYLE_NORMAL + }, + { + 6, + 15, + "o texto e escreva o nome do diretrio onde deseja que o ReactOS", + TEXT_STYLE_NORMAL + }, + { + 6, + 16, + "seja instalado.", + TEXT_STYLE_NORMAL + }, + { + 0, + 0, + "ENTER=Continuar F3 = Sair", + TEXT_TYPE_STATUS | TEXT_PADDING_BIG + }, + { + 0, + 0, + NULL, + 0 + } +}; + +static MUI_ENTRY ptBRFileCopyEntries[] = +{ + { + 4, + 3, + " Instalao do ReactOS " KERNEL_VERSION_STR " ", + TEXT_STYLE_UNDERLINE + }, + { + 0, + 12, + "Por favor aguarde enquanto o instalador copia os", + TEXT_STYLE_NORMAL | TEXT_ALIGN_CENTER + }, + { + 0, + 13, + "arquivos do ReactOS para a pasta de instalao.", + TEXT_STYLE_NORMAL | TEXT_ALIGN_CENTER + }, + { + 0, + 14, + "Esta operao pode demorar alguns minutos.", + TEXT_STYLE_NORMAL | TEXT_ALIGN_CENTER + }, + { + 50, + 0, + "\xB3 Por favor, aguarde...", + TEXT_TYPE_STATUS + }, + { + 0, + 0, + NULL, + 0 + } +}; + +static MUI_ENTRY ptBRBootLoaderEntries[] = +{ + { + 4, + 3, + " Instalao do ReactOS " KERNEL_VERSION_STR " ", + TEXT_STYLE_UNDERLINE + }, + { + 6, + 8, + "O instalador ir configurar o gernciador de inicializao", + TEXT_STYLE_NORMAL + }, + { + 8, + 12, + "Instalar o gernciador de inic. no disco rgido (MBR e VBR)", + TEXT_STYLE_NORMAL + }, + { + 8, + 13, + "Instalar o gernciador de inic. no disco rgido (apenas VBR)", + TEXT_STYLE_NORMAL + }, + { + 8, + 14, + "Instalar o gernciador de inicializao em um disquete", + TEXT_STYLE_NORMAL + }, + { + 8, + 15, + "Pular a instalao do gernciador de inicializao", + TEXT_STYLE_NORMAL + }, + { + 0, + 0, + "ENTER=Continuar F3=Sair", + TEXT_TYPE_STATUS | TEXT_PADDING_BIG + }, + { + 0, + 0, + NULL, + 0 + } +}; + +static MUI_ENTRY ptBRKeyboardSettingsEntries[] = +{ + { + 4, + 3, + " Instalao do ReactOS " KERNEL_VERSION_STR " ", + TEXT_STYLE_UNDERLINE + }, + { + 6, + 8, + "A lista a seguir mostra os tipos de teclados disponveis para instalao.", + TEXT_STYLE_NORMAL + }, + { + 6, + 10, + "Use as teclas SETA PARA CIMA e SETA PARA BAIXO para selecionar", + TEXT_STYLE_NORMAL + }, + { + 6, + 11, + "um item na lista.", + TEXT_STYLE_NORMAL + }, + { + 8, + 13, + "\x07 Para escolher o item selecionado, pressione ENTER.", + TEXT_STYLE_NORMAL + }, + { + 8, + 15, + "\x07 Para cancelar a alterao, pressione ESC.", + TEXT_STYLE_NORMAL + }, + { + 0, + 0, + "ENTER=Continuar ESC=Cancelar F3=Sair", + TEXT_TYPE_STATUS | TEXT_PADDING_BIG + }, + { + 0, + 0, + NULL, + 0 + } +}; + +static MUI_ENTRY ptBRLayoutSettingsEntries[] = +{ + { + 4, + 3, + " Instalao do ReactOS " KERNEL_VERSION_STR " ", + TEXT_STYLE_UNDERLINE + }, + { + 6, + 8, + "A lista a seguir mostra os tipos de leiautes de teclado disponveis", + TEXT_STYLE_NORMAL + }, + { + 6, + 9, + "para instalao.", + TEXT_STYLE_NORMAL + }, + { + 6, + 11, + "Use as teclas SETA PARA CIMA e SETA PARA BAIXO para selecionar", + TEXT_STYLE_NORMAL + }, + { + 6, + 12, + "um item na lista.", + TEXT_STYLE_NORMAL + }, + { + 8, + 14, + "\x07 Para escolher o item selecionado, pressione ENTER.", + TEXT_STYLE_NORMAL + }, + { + 8, + 16, + "\x07 Para cancelar a alterao, pressione ESC.", + TEXT_STYLE_NORMAL + }, + { + 0, + 0, + "ENTER=Continuar ESC=Cancelar F3=Sair", + TEXT_TYPE_STATUS | TEXT_PADDING_BIG + }, + { + 0, + 0, + NULL, + 0 + }, + +}; + +static MUI_ENTRY ptBRPrepareCopyEntries[] = +{ + { + 4, + 3, + " Instalao do ReactOS " KERNEL_VERSION_STR " ", + TEXT_STYLE_UNDERLINE + }, + { + 6, + 8, + "O instalador est preparando o computador para copiar os arquivos", + TEXT_STYLE_NORMAL + }, + { + 6, + 9, + "do ReactOS.", + TEXT_STYLE_NORMAL + }, + { + 0, + 0, + "Montando a lista de arquivos a serem copiados...", + TEXT_TYPE_STATUS | TEXT_PADDING_BIG + }, + { + 0, + 0, + NULL, + 0 + }, + +}; + +static MUI_ENTRY ptBRSelectFSEntries[] = +{ + { + 4, + 3, + " Instalao do ReactOS " KERNEL_VERSION_STR " ", + TEXT_STYLE_UNDERLINE + }, + { + 6, + 16, + "Selecione um sistema de arquivos para a nova partio na lista abaixo.", + 0 + }, + { + 6, + 17, + "Use as teclas SETA PARA CIMA e SETA PARA BAIXO para selecionar o", + 0 + }, + { + 6, + 18, + "sistema de arquivos de arquivos desejado e pressione ENTER.", + 0 + }, + { + 8, + 20, + "Se desejar selecionar uma partio diferente, pressione ESC.", + 0 + }, + { + 0, + 0, + "ENTER=Continuar ESC=Cancelar F3=Sair", + TEXT_TYPE_STATUS | TEXT_PADDING_BIG + }, + + { + 0, + 0, + NULL, + 0 + } +}; + +static MUI_ENTRY ptBRDeletePartitionEntries[] = +{ + { + 4, + 3, + " Instalao do ReactOS " KERNEL_VERSION_STR " ", + TEXT_STYLE_UNDERLINE + }, + { + 6, + 8, + "Voc solicitou a excluso da partio", + TEXT_STYLE_NORMAL + }, + { + 8, + 18, + "\x07 Para excluir esta partio, pressione D", + TEXT_STYLE_NORMAL + }, + { + 11, + 19, + "CUIDADO: todos os dados da partio sero perdidos!", + TEXT_STYLE_NORMAL + }, + { + 8, + 21, + "\x07 Para retornar tela anterior sem excluir", + TEXT_STYLE_NORMAL + }, + { + 11, + 22, + "a partio, pressione ESC.", + TEXT_STYLE_NORMAL + }, + { + 0, + 0, + "D=Excluir ESC=Cancelar F3=Sair", + TEXT_TYPE_STATUS | TEXT_PADDING_BIG + }, + { + 0, + 0, + NULL, + 0 + } +}; + +static MUI_ENTRY ptBRRegistryEntries[] = +{ + { + 4, + 3, + " Instalao do ReactOS " KERNEL_VERSION_STR " ", + TEXT_STYLE_UNDERLINE + }, + { + 6, + 8, + "O instalador est atualizando a configurao do sistema.", + TEXT_STYLE_NORMAL + }, + { + 0, + 0, + "Criando a estrutura de registro...", + TEXT_TYPE_STATUS | TEXT_PADDING_BIG + }, + { + 0, + 0, + NULL, + 0 + }, + +}; + +MUI_ERROR ptBRErrorEntries[] = +{ + { + //ERROR_NOT_INSTALLED + "O ReactOS no est completamente instalado no computador.\n" + "Se voc sair da instalao agora, precisar executa-la\n" + "novamente para instalar o ReactOS.\n" + "\n" + " \x07 Para continuar a instalao, pressione ENTER.\n" + " \x07 Para sair da instalao, pressione F3.", + "F3=Sair ENTER=Continuar" + }, + { + //ERROR_NO_HDD + "No foi possvel localizar um disco rdigo.\n", + "ENTER=Reiniciar" + }, + { + //ERROR_NO_SOURCE_DRIVE + "No foi possvel localizar a unidade de origem.\n", + "ENTER=Reiniciar" + }, + { + //ERROR_LOAD_TXTSETUPSIF + "No foi possvel carregar o arquivo TXTSETUP.SIF.\n", + "ENTER=Reiniciar" + }, + { + //ERROR_CORRUPT_TXTSETUPSIF + "O arquivos TXTSETUP.SIF est corrompido.\n", + "ENTER=Reiniciar" + }, + { + //ERROR_SIGNATURE_TXTSETUPSIF, + "O arquivo TXTSETUP.SIF est com a assinatura incorreta.\n", + "ENTER=Reiniciar" + }, + { + //ERROR_DRIVE_INFORMATION + "No foi possvel obter as informaes sobre o disco do sistema.\n", + "ENTER=Reiniciar" + }, + { + //ERROR_WRITE_BOOT, + "Erro ao escrever o cdigo de inicializao na partio do sistema.\n", + "ENTER=Reiniciar" + }, + { + //ERROR_LOAD_COMPUTER, + "No foi possvel carregar a lista de tipos de computadores.\n", + "ENTER=Reiniciar" + }, + { + //ERROR_LOAD_DISPLAY, + "No foi possvel carregar a lista de tipos de vdeo.\n", + "ENTER=Reiniciar" + }, + { + //ERROR_LOAD_KEYBOARD, + "No foi possvel carregar a lista de tipos de teclado.\n", + "ENTER=Reiniciar" + }, + { + //ERROR_LOAD_KBLAYOUT, + "No foi possvel carregar a lista de leiautes de teclado.\n", + "ENTER=Reiniciar" + }, + { + //ERROR_WARN_PARTITION, + "O instalador encontrou uma tabela de partio incompatvel\n" + "que no pode ser utilizada corretamente!\n" + "\n" + "Criar ou excluir parties pode destruir a tabela de partio.\n" + "\n" + " \x07 Para sair da instalao, pressione F3.\n" + " \x07 Para continuar, pressione ENTER.", + "F3=Sair ENTER=Continuar" + }, + { + //ERROR_NEW_PARTITION, + "Voc no pode criar uma partio dentro de\n" + "outra partio j existente!\n" + "\n" + " * Pressione qualquer tecla para continuar.", + NULL + }, + { + //ERROR_DELETE_SPACE, + "Voc no pode excluir um espao no-particionado!\n" + "\n" + " * Pressione qualquer tecla para continuar.", + NULL + }, + { + //ERROR_INSTALL_BOOTCODE, + "Erro ao instalar o cdigo de inicializao na partio do sistema.", + "ENTER=Reiniciar" + }, + { + //ERROR_NO_FLOPPY, + "No h disco na unidade A:.", + "ENTER=Continuar" + }, + { + //ERROR_UPDATE_KBSETTINGS, + "No foi possvel atualizar a configurao de leiaute de teclado.", + "ENTER=Reiniciar" + }, + { + //ERROR_UPDATE_DISPLAY_SETTINGS, + "No foi possvel atualizar a configurao de vdeo.", + "ENTER=Reiniciar" + }, + { + //ERROR_IMPORT_HIVE, + "No foi possvel importar o arquivo de estrutura.", + "ENTER=Reiniciar" + }, + { + //ERROR_FIND_REGISTRY + "No foi possvel encontrar os arquivos do registro.", + "ENTER=Reiniciar" + }, + { + //ERROR_CREATE_HIVE, + "No foi possvel criar as estruturas do registro.", + "ENTER=Reiniciar" + }, + { + //ERROR_INITIALIZE_REGISTRY, + "No foi possvel inicializar o registro.", + "ENTER=Reiniciar" + }, + { + //ERROR_INVALID_CABINET_INF, + "O arquivo cab no contm um arquivo inf vlido.\n", + "ENTER=Reiniciar" + }, + { + //ERROR_CABINET_MISSING, + "No foi possvel econtrar o arquivo cab.\n", + "ENTER=Reiniciar" + }, + { + //ERROR_CABINET_SCRIPT, + "O arquivo cab no contm um script de instalao.\n", + "ENTER=Reiniciar" + }, + { + //ERROR_COPY_QUEUE, + "No foi possvel abrir a lista de arquivos para cpia.\n", + "ENTER=Reiniciar" + }, + { + //ERROR_CREATE_DIR, + "No foi possvel criar os diretrios de instalao.", + "ENTER=Reiniciar" + }, + { + //ERROR_TXTSETUP_SECTION, + "No foi possvel encontrar a seo 'Directories' no\n" + "arquivo TXTSETUP.SIF.\n", + "ENTER=Reiniciar" + }, + { + //ERROR_CABINET_SECTION, + "No foi possvel encontrar a seo 'Directories' no\n" + "arquivo cab.\n", + "ENTER=Reiniciar" + }, + { + //ERROR_CREATE_INSTALL_DIR + "No foi possvel criar o diretrio de instalao.", + "ENTER=Reiniciar" + }, + { + //ERROR_FIND_SETUPDATA, + "No foi possvel encontrar a seo 'SetupData' no\n" + "arquivo TXTSETUP.SIF.\n", + "ENTER=Reiniciar" + }, + { + //ERROR_WRITE_PTABLE, + "No foi possvel escrever a tabela de parties.\n" + "ENTER=Reiniciar" + }, + { + //ERROR_ADDING_CODEPAGE, + "No foi possvel adicionar o cdigo de localidade no registro.\n" + "ENTER=Reiniciar" + }, + { + //ERROR_UPDATE_LOCALESETTINGS, + "No foi possvel configurar o idioma do sistema.\n" + "ENTER=Reiniciar" + }, + { + //ERROR_ADDING_KBLAYOUTS, + "No foi possvel adicionar o leiaute do teclado no registro.\n" + "ENTER=Reiniciar" + }, + { + //ERROR_UPDATE_GEOID, + "No foi possvel configurar a identificao geogrfica.\n" + "ENTER=Reiniciar" + }, + { + //ERROR_INSUFFICIENT_DISKSPACE, + "No h espao suficiente na partio selecionada.\n" + " * Pressione qualquer tecla para continuar.", + NULL + }, + { + NULL, + NULL + } +}; + +MUI_PAGE ptBRPages[] = +{ + { + LANGUAGE_PAGE, + ptBRLanguagePageEntries + }, + { + START_PAGE, + ptBRWelcomePageEntries + }, + { + INSTALL_INTRO_PAGE, + ptBRIntroPageEntries + }, + { + LICENSE_PAGE, + ptBRLicensePageEntries + }, + { + DEVICE_SETTINGS_PAGE, + ptBRDevicePageEntries + }, + { + REPAIR_INTRO_PAGE, + ptBRRepairPageEntries + }, + { + COMPUTER_SETTINGS_PAGE, + ptBRComputerPageEntries + }, + { + DISPLAY_SETTINGS_PAGE, + ptBRDisplayPageEntries + }, + { + FLUSH_PAGE, + ptBRFlushPageEntries + }, + { + SELECT_PARTITION_PAGE, + ptBRSelectPartitionEntries + }, + { + SELECT_FILE_SYSTEM_PAGE, + ptBRSelectFSEntries + }, + { + FORMAT_PARTITION_PAGE, + ptBRFormatPartitionEntries + }, + { + DELETE_PARTITION_PAGE, + ptBRDeletePartitionEntries + }, + { + INSTALL_DIRECTORY_PAGE, + ptBRInstallDirectoryEntries + }, + { + PREPARE_COPY_PAGE, + ptBRPrepareCopyEntries + }, + { + FILE_COPY_PAGE, + ptBRFileCopyEntries + }, + { + KEYBOARD_SETTINGS_PAGE, + ptBRKeyboardSettingsEntries + }, + { + BOOT_LOADER_PAGE, + ptBRBootLoaderEntries + }, + { + LAYOUT_SETTINGS_PAGE, + ptBRLayoutSettingsEntries + }, + { + QUIT_PAGE, + ptBRQuitPageEntries + }, + { + SUCCESS_PAGE, + ptBRSuccessPageEntries + }, + { + BOOT_LOADER_FLOPPY_PAGE, + ptBRBootPageEntries + }, + { + REGISTRY_PAGE, + ptBRRegistryEntries + }, + { + -1, + NULL + } +}; + +MUI_STRING ptBRStrings[] = +{ + {STRING_PLEASEWAIT, + " Por favor, aguarde..."}, + {STRING_INSTALLCREATEPARTITION, + " ENTER=Instalar C=Criar partio F3=Sair"}, + {STRING_INSTALLDELETEPARTITION, + " ENTER=Instalar D=Apagar partio F3=Sair"}, + {STRING_PARTITIONSIZE, + "Tamanho da nova partio:"}, + {STRING_CHOOSENEWPARTITION, + "Voc solicitou a criao de uma nova partio em"}, + {STRING_HDDSIZE, + "Por favor, insira o tamanho da nova partio em megabytes (MB)."}, + {STRING_CREATEPARTITION, + " ENTER=Criar partio ESC=Cancelar F3=Sair"}, + {STRING_PARTFORMAT, + "Esta partio ser formatada logo em seguida."}, + {STRING_NONFORMATTEDPART, + "Voc solicitou instalar o ReactOS em uma partio nova ou sem formato."}, + {STRING_INSTALLONPART, + "O instalador instala o ReactOS na partio"}, + {STRING_CHECKINGPART, + "O instalador est verificando a partio selecionada."}, + {STRING_QUITCONTINUE, + "F3=Sair ENTER=Continuar"}, + {STRING_REBOOTCOMPUTER, + "ENTER=Reiniciar"}, + {STRING_TXTSETUPFAILED, + "No foi possvel econtrar a seo '%S' no\narquivo TXTSETUP.SIF.\n"}, + {STRING_COPYING, + " Copiando arquivo: %S"}, + {STRING_SETUPCOPYINGFILES, + "O instalador est copiando os arquivos..."}, + {STRING_REGHIVEUPDATE, + " Atualizando a estrutura do registro..."}, + {STRING_IMPORTFILE, + " Importando %S..."}, + {STRING_DISPLAYETTINGSUPDATE, + " Atualizando as configuraes de vdeo..."}, + {STRING_LOCALESETTINGSUPDATE, + " Atualizando as configuraes regionais..."}, + {STRING_KEYBOARDSETTINGSUPDATE, + " Atualizando as configuraes de leiaute do teclado..."}, + {STRING_CODEPAGEINFOUPDATE, + " Adicionando as informaes de localidade no registro..."}, + {STRING_DONE, + " Pronto..."}, + {STRING_REBOOTCOMPUTER2, + " ENTER=Reiniciar"}, + {STRING_CONSOLEFAIL1, + "No foi possvel abrir o console\n\n"}, + {STRING_CONSOLEFAIL2, + "A causa mais comm a utilizao de um teclado USB\n"}, + {STRING_CONSOLEFAIL3, + "Os teclados USB ainda no so completamente suportados\n"}, + {STRING_FORMATTINGDISK, + "O instalador est formatando o disco"}, + {STRING_CHECKINGDISK, + "O instalador est verificando o disco"}, + {STRING_FORMATDISK1, + " Formatar a partio utilizando o sistema de arquivos %S (Rpido) "}, + {STRING_FORMATDISK2, + " Formatar a partio utilizando o sistema de arquivos %S "}, + {STRING_KEEPFORMAT, + " Manter o sistema de arquivos atual (sem alteraes) "}, + {STRING_HDINFOPARTCREATE, + "%I64u %s Disco %lu (Porta=%hu, Barramento=%hu, Id=%hu) em %wZ."}, + {STRING_HDDINFOUNK1, + "%I64u %s Disco %lu (Porta=%hu, Barramento=%hu, Id=%hu)."}, + {STRING_HDDINFOUNK2, + " %c%c Tipo %lu %I64u %s"}, + {STRING_HDINFOPARTDELETE, + "em %I64u %s Disco %lu (Porta=%hu, Barramento=%hu, Id=%hu) em %wZ."}, + {STRING_HDDINFOUNK3, + "em %I64u %s Disco %lu (Porta=%hu, Barramento=%hu, Id=%hu)."}, + {STRING_HDINFOPARTZEROED, + "Disco %lu (%I64u %s), Porta=%hu, Barramento=%hu, Id=%hu (%wZ)."}, + {STRING_HDDINFOUNK4, + "%c%c Tipo %lu %I64u %s"}, + {STRING_HDINFOPARTEXISTS, + "em Disco %lu (%I64u %s), Porta=%hu, Barramento=%hu, Id=%hu (%wZ)."}, + {STRING_HDDINFOUNK5, + "%c%c Tipo %-3u %6lu %s"}, + {STRING_HDINFOPARTSELECT, + "%6lu %s Disco %lu (Porta=%hu, Barramento=%hu, Id=%hu) em %S"}, + {STRING_HDDINFOUNK6, + "%6lu %s Disco %lu (Porta=%hu, Barramento=%hu, Id=%hu)"}, + {STRING_NEWPARTITION, + "O instalador criou uma nova partio em"}, + {STRING_UNPSPACE, + " Espao no particionado %6lu %s"}, + {STRING_MAXSIZE, + "MB (max. %lu MB)"}, + {STRING_UNFORMATTED, + "Novo (sem formato)"}, + {STRING_FORMATUNUSED, + "Livre"}, + {STRING_FORMATUNKNOWN, + "desconhecido"}, + {STRING_KB, + "KB"}, + {STRING_MB, + "MB"}, + {STRING_GB, + "GB"}, + {STRING_ADDKBLAYOUTS, + "Adicionando leiautes de teclado"}, + {0, 0} +}; diff --git a/base/setup/usetup/lang/ru-RU.h b/base/setup/usetup/lang/ru-RU.h index b74d17b8e1a..268fec4a7ff 100644 --- a/base/setup/usetup/lang/ru-RU.h +++ b/base/setup/usetup/lang/ru-RU.h @@ -986,18 +986,24 @@ static MUI_ENTRY ruRUBootLoaderEntries[] = { 8, 12, - "⠭ ⪨ (㧮 ᥪ).", + "Install bootloader on the harddisk (MBR and VBR).", TEXT_STYLE_NORMAL }, { 8, 13, - "⠭ .", + "Install bootloader on the harddisk (VBR only).", TEXT_STYLE_NORMAL }, { 8, 14, + "⠭ .", + TEXT_STYLE_NORMAL + }, + { + 8, + 15, " ⠭ 稪.", TEXT_STYLE_NORMAL }, diff --git a/base/setup/usetup/lang/sk-SK.h b/base/setup/usetup/lang/sk-SK.h index abc2d73665b..73117a45a46 100644 --- a/base/setup/usetup/lang/sk-SK.h +++ b/base/setup/usetup/lang/sk-SK.h @@ -993,18 +993,24 @@ static MUI_ENTRY skSKBootLoaderEntries[] = { 8, 12, - "Naintalova zavdza systmu na pevn disk (zavdzac sektor).", + "Install bootloader on the harddisk (MBR and VBR).", TEXT_STYLE_NORMAL }, { 8, 13, - "Naintalova zavdza systmu na disketu.", + "Install bootloader on the harddisk (VBR only).", TEXT_STYLE_NORMAL }, { 8, 14, + "Naintalova zavdza systmu na disketu.", + TEXT_STYLE_NORMAL + }, + { + 8, + 15, "Preskoi intalciu zavdzaa systmu.", TEXT_STYLE_NORMAL }, diff --git a/base/setup/usetup/lang/sv-SE.h b/base/setup/usetup/lang/sv-SE.h index 17b0fa5ddad..debbfc22b61 100644 --- a/base/setup/usetup/lang/sv-SE.h +++ b/base/setup/usetup/lang/sv-SE.h @@ -986,18 +986,24 @@ static MUI_ENTRY svSEBootLoaderEntries[] = { 8, 12, - "Install bootloader on the harddisk (MBR).", + "Install bootloader on the harddisk (MBR and VBR).", TEXT_STYLE_NORMAL }, { 8, 13, - "Install bootloader on a floppy disk.", + "Install bootloader on the harddisk (VBR only).", TEXT_STYLE_NORMAL }, { 8, 14, + "Install bootloader on a floppy disk.", + TEXT_STYLE_NORMAL + }, + { + 8, + 15, "Skip install bootloader.", TEXT_STYLE_NORMAL }, diff --git a/base/setup/usetup/lang/uk-UA.h b/base/setup/usetup/lang/uk-UA.h index f5da61e6e0c..fc970357058 100644 --- a/base/setup/usetup/lang/uk-UA.h +++ b/base/setup/usetup/lang/uk-UA.h @@ -991,18 +991,24 @@ static MUI_ENTRY ukUABootLoaderEntries[] = { 8, 12, - "⠭ bootloader ⪨ (bootsector).", + "Install bootloader on the harddisk (MBR and VBR).", TEXT_STYLE_NORMAL }, { 8, 13, - "⠭ bootloader ᪥.", + "Install bootloader on the harddisk (VBR only).", TEXT_STYLE_NORMAL }, { 8, 14, + "⠭ bootloader ᪥.", + TEXT_STYLE_NORMAL + }, + { + 8, + 15, " ⠭ bootloader.", TEXT_STYLE_NORMAL }, diff --git a/base/setup/usetup/muilanguages.h b/base/setup/usetup/muilanguages.h index ebf404ac306..0694b37f881 100644 --- a/base/setup/usetup/muilanguages.h +++ b/base/setup/usetup/muilanguages.h @@ -232,7 +232,7 @@ const MUI_LANGUAGE LanguageList[] = {L"00000814", L"1252", L"850", L"10000", L"Norwegian (Nynorsk)", L"47", enUSPages, enUSErrorEntries, enUSStrings, LatinFonts, nnNOLayouts }, {L"00000415", L"1250", L"852", L"10029", L"Polish", L"48", plPLPages, plPLErrorEntries, plPLStrings, LatinFonts, plPLLayouts }, {L"00000816", L"1252", L"850", L"10000", L"Portuguese (Portugal)", L"351", enUSPages, enUSErrorEntries, enUSStrings, LatinFonts, ptPTLayouts }, - {L"00000416", L"1252", L"850", L"10000", L"Portuguese (Brazil)", L"55", enUSPages, enUSErrorEntries, enUSStrings, LatinFonts, ptBRLayouts }, + {L"00000416", L"1252", L"850", L"10000", L"Portuguese (Brazil)", L"55", ptBRPages, ptBRErrorEntries, ptBRStrings, LatinFonts, ptBRLayouts }, {L"00000446", L"0", L"1", L"2", L"Punjabi (India)", L"91", enUSPages, enUSErrorEntries, enUSStrings, UnicodeFonts, paINLayouts }, {L"00000418", L"1250", L"852", L"10029", L"Romanian", L"40", enUSPages, enUSErrorEntries, enUSStrings, LatinFonts, roROLayouts }, {L"00000417", L"1252", L"850", L"10000", L"Romansh", L"41", enUSPages, enUSErrorEntries, enUSStrings, LatinFonts, rmCHLayouts }, diff --git a/base/setup/usetup/partlist.c b/base/setup/usetup/partlist.c index 5c553c2f537..7e2c7510976 100644 --- a/base/setup/usetup/partlist.c +++ b/base/setup/usetup/partlist.c @@ -701,6 +701,7 @@ AddDiskToList (HANDLE FileHandle, ULONG i; PLIST_ENTRY ListEntry; PBIOSDISKENTRY BiosDiskEntry; + ULONG LayoutBufferSize; Status = NtDeviceIoControlFile (FileHandle, NULL, @@ -870,9 +871,15 @@ AddDiskToList (HANDLE FileHandle, InsertAscendingList(&List->DiskListHead, DiskEntry, DISKENTRY, ListEntry, BiosDiskNumber); + /* + * Allocate a buffer for 26 logical drives (2 entries each == 52) + * plus the main partiton table (4 entries). Total 56 entries. + */ + LayoutBufferSize = sizeof(DRIVE_LAYOUT_INFORMATION) + + ((56 - ANYSIZE_ARRAY) * sizeof(PARTITION_INFORMATION)); LayoutBuffer = (DRIVE_LAYOUT_INFORMATION*)RtlAllocateHeap (ProcessHeap, 0, - 8192); + LayoutBufferSize); if (LayoutBuffer == NULL) { return; @@ -887,7 +894,7 @@ AddDiskToList (HANDLE FileHandle, NULL, 0, LayoutBuffer, - 8192); + LayoutBufferSize); if (NT_SUCCESS (Status)) { if (LayoutBuffer->PartitionCount == 0) @@ -1956,6 +1963,8 @@ CreateNewPartition (PPARTLIST List, PartEntry->FormatState = Unformatted; PartEntry->PartInfo[0].StartingOffset.QuadPart = PartEntry->UnpartitionedOffset + DiskEntry->TrackSize; + PartEntry->PartInfo[0].HiddenSectors = + PartEntry->PartInfo[0].StartingOffset.QuadPart / DiskEntry->BytesPerSector; PartEntry->PartInfo[0].PartitionLength.QuadPart = PartEntry->UnpartitionedLength - DiskEntry->TrackSize; PartEntry->PartInfo[0].PartitionType = PARTITION_ENTRY_UNUSED; @@ -1985,6 +1994,8 @@ CreateNewPartition (PPARTLIST List, PrevPartEntry->PartInfo[1].StartingOffset.QuadPart = PartEntry->PartInfo[0].StartingOffset.QuadPart - DiskEntry->TrackSize; + PrevPartEntry->PartInfo[1].HiddenSectors = + PrevPartEntry->PartInfo[1].StartingOffset.QuadPart / DiskEntry->BytesPerSector; if (DiskEntry->PartListHead.Flink == &PrevPartEntry->ListEntry) { @@ -2011,6 +2022,8 @@ CreateNewPartition (PPARTLIST List, PrevPartEntry->PartInfo[1].StartingOffset.QuadPart = PartEntry->PartInfo[0].StartingOffset.QuadPart - DiskEntry->TrackSize; + PrevPartEntry->PartInfo[1].HiddenSectors = + PrevPartEntry->PartInfo[1].StartingOffset.QuadPart / DiskEntry->BytesPerSector; if (DiskEntry->PartListHead.Flink == &PrevPartEntry->ListEntry) { @@ -2066,6 +2079,8 @@ CreateNewPartition (PPARTLIST List, NewPartEntry->FormatState = Unformatted; NewPartEntry->PartInfo[0].StartingOffset.QuadPart = PartEntry->UnpartitionedOffset + DiskEntry->TrackSize; + NewPartEntry->PartInfo[0].HiddenSectors = + NewPartEntry->PartInfo[0].StartingOffset.QuadPart / DiskEntry->BytesPerSector; NewPartEntry->PartInfo[0].PartitionLength.QuadPart = PartitionSize - DiskEntry->TrackSize; NewPartEntry->PartInfo[0].PartitionType = PARTITION_ENTRY_UNUSED; @@ -2095,6 +2110,8 @@ CreateNewPartition (PPARTLIST List, PrevPartEntry->PartInfo[1].StartingOffset.QuadPart = NewPartEntry->PartInfo[0].StartingOffset.QuadPart - DiskEntry->TrackSize; + PrevPartEntry->PartInfo[1].HiddenSectors = + PrevPartEntry->PartInfo[1].StartingOffset.QuadPart / DiskEntry->BytesPerSector; if (DiskEntry->PartListHead.Flink == &PrevPartEntry->ListEntry) { @@ -2121,6 +2138,8 @@ CreateNewPartition (PPARTLIST List, PrevPartEntry->PartInfo[1].StartingOffset.QuadPart = NewPartEntry->PartInfo[0].StartingOffset.QuadPart - DiskEntry->TrackSize; + PrevPartEntry->PartInfo[1].HiddenSectors = + PrevPartEntry->PartInfo[1].StartingOffset.QuadPart / DiskEntry->BytesPerSector; if (DiskEntry->PartListHead.Flink == &PrevPartEntry->ListEntry) { diff --git a/base/setup/usetup/usetup.h b/base/setup/usetup/usetup.h index b95ad66347a..bbb4212891c 100644 --- a/base/setup/usetup/usetup.h +++ b/base/setup/usetup/usetup.h @@ -50,6 +50,7 @@ /* Internal Headers */ #include "interface/consup.h" #include "partlist.h" +#include "infros.h" #include "inffile.h" #include "inicache.h" #include "progress.h" @@ -107,7 +108,8 @@ typedef enum _PAGE_NUMBER REGISTRY_PAGE, BOOT_LOADER_PAGE, BOOT_LOADER_FLOPPY_PAGE, - BOOT_LOADER_HARDDISK_PAGE, + BOOT_LOADER_HARDDISK_MBR_PAGE, + BOOT_LOADER_HARDDISK_VBR_PAGE, REPAIR_INTRO_PAGE, diff --git a/base/shell/explorer/explorer-uk.rc b/base/shell/explorer/explorer-uk.rc index 5406290e382..271ba94ccfd 100644 --- a/base/shell/explorer/explorer-uk.rc +++ b/base/shell/explorer/explorer-uk.rc @@ -145,7 +145,7 @@ BEGIN CONTROL "&:",-1,"Static",SS_LEFTNOWORDWRAP | WS_GROUP,3, 18,60,10 EDITTEXT 201,3,29,134,12,ES_AUTOHSCROLL - CONTROL "As &Symbol",214,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,3, + CONTROL "& ",214,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,3, 45,71,12 DEFPUSHBUTTON "&OK",1,158,6,47,14 PUSHBUTTON "&",2,158,23,47,14 @@ -169,7 +169,7 @@ END IDD_DESKBAR_DESKTOP DIALOGEX DISCARDABLE 0, 0, 212, 194 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION " " +CAPTION " " FONT 8, "MS Shell Dlg" BEGIN LTEXT " :", @@ -268,11 +268,11 @@ BEGIN BS_AUTORADIOBUTTON,7,62,118,10 CONTROL 170,IDC_STATIC,"Static",SS_BITMAP,145,23,15,13 CONTROL 171,IDC_STATIC,"Static",SS_BITMAP,145,57,15,13 - CONTROL "³ & ", + CONTROL "³ & ", IDC_SEPARATE_SUBFOLDERS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,90,135,10 - LTEXT "ֳ .", - IDC_STATIC,7,111,174,22 + LTEXT "ֳ .", + IDC_STATIC,7,109,174,24 DEFPUSHBUTTON "&OK",IDOK,29,136,50,14,WS_GROUP PUSHBUTTON "&",IDCANCEL,106,136,50,14 END diff --git a/base/shell/explorer/utility/utility.h b/base/shell/explorer/utility/utility.h index e095f77aa6d..835594a6d84 100644 --- a/base/shell/explorer/utility/utility.h +++ b/base/shell/explorer/utility/utility.h @@ -39,9 +39,7 @@ #include // for SelectBrush(), ListBox_SetSel(), SubclassWindow(), ... #include -#ifndef _MSC_VER #include -#endif #include // for VARIANT #include // for alloca() diff --git a/base/system/services/services.c b/base/system/services/services.c index 2d97ce44f4f..96aecd2a77b 100644 --- a/base/system/services/services.c +++ b/base/system/services/services.c @@ -80,6 +80,42 @@ ScmCreateStartEvent(PHANDLE StartEvent) } +static VOID +ScmWaitForLsass(VOID) +{ + HANDLE hEvent; + DWORD dwError; + + hEvent = CreateEventW(NULL, + TRUE, + FALSE, + L"LSA_RPC_SERVER_ACTIVE"); + if (hEvent == NULL) + { + dwError = GetLastError(); + DPRINT("Failed to create the notication event (Error %lu)\n", dwError); + + if (dwError == ERROR_ALREADY_EXISTS) + { + hEvent = OpenEventW(SYNCHRONIZE, + FALSE, + L"LSA_RPC_SERVER_ACTIVE"); + if (hEvent == NULL) + { + DPRINT1("Could not open the notification event (Error %lu)\n", GetLastError()); + return; + } + } + } + + DPRINT("Wait for the LSA server!\n"); + WaitForSingleObject(hEvent, INFINITE); + DPRINT("LSA server running!\n"); + + CloseHandle(hEvent); +} + + BOOL ScmNamedPipeHandleRequest(PVOID Request, DWORD RequestSize, @@ -304,9 +340,6 @@ wWinMain(HINSTANCE hInstance, DPRINT("SERVICES: Service Control Manager\n"); - /* Acquire privileges to load drivers */ - AcquireLoadDriverPrivilege(); - /* Create start event */ if (!ScmCreateStartEvent(&hScmStartEvent)) { @@ -346,6 +379,12 @@ wWinMain(HINSTANCE hInstance, /* Register event handler (used for system shutdown) */ SetConsoleCtrlHandler(ShutdownHandlerRoutine, TRUE); + /* Wait for the LSA server */ + ScmWaitForLsass(); + + /* Acquire privileges to load drivers */ + AcquireLoadDriverPrivilege(); + /* Start auto-start services */ ScmAutoStartServices(); diff --git a/base/system/winlogon/winlogon.c b/base/system/winlogon/winlogon.c index f711cf38085..3f977d0f9be 100644 --- a/base/system/winlogon/winlogon.c +++ b/base/system/winlogon/winlogon.c @@ -167,7 +167,7 @@ StartLsass(VOID) LPCWSTR ServiceString = L"lsass.exe"; BOOL res; - /* Start the service control manager (services.exe) */ + /* Start the local security authority subsystem (lsass.exe) */ ZeroMemory(&StartupInfo, sizeof(STARTUPINFOW)); StartupInfo.cb = sizeof(StartupInfo); StartupInfo.lpReserved = NULL; @@ -199,6 +199,43 @@ StartLsass(VOID) return res; } + +static VOID +WaitForLsass(VOID) +{ + HANDLE hEvent; + DWORD dwError; + + hEvent = CreateEventW(NULL, + TRUE, + FALSE, + L"LSA_RPC_SERVER_ACTIVE"); + if (hEvent == NULL) + { + dwError = GetLastError(); + TRACE("WL: Failed to create the notication event (Error %lu)\n", dwError); + + if (dwError == ERROR_ALREADY_EXISTS) + { + hEvent = OpenEventW(SYNCHRONIZE, + FALSE, + L"LSA_RPC_SERVER_ACTIVE"); + if (hEvent == NULL) + { + ERR("WL: Could not open the notification event (Error %lu)\n", GetLastError()); + return; + } + } + } + + TRACE("WL: Wait for the LSA server!\n"); + WaitForSingleObject(hEvent, INFINITE); + TRACE("WL: LSA server running!\n"); + + CloseHandle(hEvent); +} + + BOOL DisplayStatusMessage( IN PWLSESSION Session, @@ -348,6 +385,10 @@ WinMain( DisplayStatusMessage(WLSession, WLSession->WinlogonDesktop, IDS_REACTOSISSTARTINGUP); + + /* Wait for the LSA server */ + WaitForLsass(); + #if 0 /* Connect to NetLogon service (lsass.exe) */ /* Real winlogon uses "Winlogon" */ @@ -415,7 +456,7 @@ WinMain( /* Tell kernel that CurrentControlSet is good (needed * to support Last good known configuration boot) */ - NtInitializeRegistry(CM_BOOT_FLAG_ACCEPTED); + NtInitializeRegistry(CM_BOOT_FLAG_ACCEPTED | 1); /* Message loop for the SAS window */ while (GetMessageW(&Msg, WLSession->SASWindow, 0, 0)) diff --git a/boot/CMakeLists.txt b/boot/CMakeLists.txt index 6de591b74b2..bfd37be54ed 100644 --- a/boot/CMakeLists.txt +++ b/boot/CMakeLists.txt @@ -81,6 +81,7 @@ list(APPEND FREELDR_BASE_SOURCE freeldr/freeldr/video/palette.c freeldr/freeldr/video/video.c freeldr/freeldr/windows/conversion.c + freeldr/freeldr/windows/headless.c freeldr/freeldr/windows/peloader.c freeldr/freeldr/windows/winldr.c freeldr/freeldr/windows/wlmemory.c @@ -176,6 +177,7 @@ target_link_libraries(freeldr mini_hal) endif(ARCH MATCHES i386) target_link_libraries(freeldr + cportlib rossym cmlib rtl @@ -198,6 +200,7 @@ target_link_libraries(setupldr mini_hal) endif(ARCH MATCHES i386) target_link_libraries(setupldr + cportlib rossym cmlib rtl diff --git a/boot/bootdata/hivecls_amd64.inf b/boot/bootdata/hivecls_amd64.inf new file mode 100644 index 00000000000..350fe18e010 --- /dev/null +++ b/boot/bootdata/hivecls_amd64.inf @@ -0,0 +1,523 @@ +[Version] +Signature="$ReactOS$ + +[AddReg] +HKLM,"SOFTWARE\Classes",,0x00000010 + + +; Default key +HKCR,"*","",0x00000000,"" +HKCR,"*\shellex\ContextMenuHandlers\Open With","",0x00000000,"{09799AFB-AD67-11d1-ABCD-00C04FC30936}" + +; Folders +HKCR,"Folder","",0x00000000,"Folder" +;HKCR,"Folder\Defaulticon","",0x00000000,"%SystemRoot%\system32\shell32.dll,-4" +HKCR,"Folder\shell\open\command","",0x00000000,"explorer.exe ""%1""" +HKCR,"Folder\shell\explore\command","",0x00000000,"explorer.exe /e,""%1""" +HKCR,"Folder\shell\rootexplore","",0x00000000,"Explore from here" +HKCR,"Folder\shell\rootexplore\command","",0x00000000,"explorer.exe /e,/root,""%1""" + +; Drive property page +HKCR,"CLSID\{5F5295E0-429F-1069-A2E2-08002B30309D}","",0x00000000,"Drive Property Page Extension" +HKCR,"CLSID\{5F5295E0-429F-1069-A2E2-08002B30309D}\InProcServer32","",0x00000000,"shell32.dll" +HKCR,"CLSID\{5F5295E0-429F-1069-A2E2-08002B30309D}\InProcServer32","ThreadingModel",0x00000000,"Apartment" + +; New Object Service +HKCR,"CLSID\{D969A300-E7FF-11d0-A93B-00A0C90F2719}","",0x00000000,"ReactOS New Object Service" +HKCR,"CLSID\{D969A300-E7FF-11d0-A93B-00A0C90F2719}\InProcServer32","",0x00000000,"shell32.dll" +HKCR,"CLSID\{D969A300-E7FF-11d0-A93B-00A0C90F2719}\InProcServer32","ThreadingModel",0x00000000,"Apartment" + +; Rich Text Files +HKCR,".rtf","",0x00000000,"rtffile" +HKCR,".rtf\shellnew","",0x00000000,"" +HKCR,".rtf\shellnew","Data",0x00020000,"{\rtf1}" +HKCR,"rtffile","",0x00000000,"Rich Text Document" +HKCR,"rtffile","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\wordpad.exe,-1404" +HKCR,"rtffile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-2" +HKCR,"rtffile\shell\open","",0x00000000,"Open" +HKCR,"rtffile\shell\open\command","",0x00020000,"%SystemRoot%\system32\wordpad.exe %1" + +; Virtual Device Drivers +HKCR,".386","",0x00000000,"vxdfile" +HKCR,".vxd","",0x00000000,"vxdfile" +HKCR,"vxdfile","",0x00000000,"Virtual Device Driver" +HKCR,"vxdfile","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\shell32.dll,-156" + +; Animated Cursors +HKCR,".ani","",0x00000000,"anifile" +HKCR,"anifile","",0x00000000,"Animated Cursor" +HKCR,"anifile","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\main.cpl,-1039" +HKCR,"anifile\DefaultIcon","",0x00000000,"%1" + +; DOS Batch-Files +HKCR,".bat","",0x00000000,"batfile" +HKCR,"batfile","",0x00000000,"DOS Batch File" +HKCR,"batfile","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\shell32.dll,-158" +HKCR,"batfile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-153" +HKCR,"batfile\shell\edit\command","",0x00020000,"%SystemRoot%\system32\notepad.exe %1" +HKCR,"batfile\shell\open\command","",0x00000000,"""%1"" %*" + +HKCR,".cmd","",0x00000000,"cmdfile" +HKCR,"cmdfile","",0x00000000,"ReactOS Command Script" +HKCR,"cmdfile","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\shell32.dll,-159" +HKCR,"cmdfile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-153" +HKCR,"cmdfile\shell\edit\command","",0x00020000,"%SystemRoot%\system32\notepad.exe %1" +HKCR,"cmdfile\shell\open\command","",0x00000000,"""%1"" %*" + +; Get DOS Applications a Icon +HKCR,".com","",0x00000000,"comfile" +HKCR,"comfile","",0x00000000,"DOS Application" +HKCR,"comfile","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\shell32.dll,-160" +HKCR,"comfile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-3" + +; Control Panel extensions +HKCR,".cpl","",0x00000000,"cplfile" +HKCR,"cplfile","",0x00000000,"Control Panel Extension" +HKCR,"cplfile","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\shell32.dll,-161" +HKCR,"cplfile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-154" +HKCR,"cplfile\shell\cplopen","",0x00000000,"Open with Control Panel" +HKCR,"cplfile\shell\cplopen\command","",0x00020000,"%SystemRoot%\system32\rundll32.exe shell32.dll,Control_RunDLL %1,%*" + +; Cursors +HKCR,".cur","",0x00000000,"curfile" +HKCR,"curfile","",0x00000000,"Cursor" +HKCR,"curfile","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\shell32.dll,-162" +HKCR,"curfile\DefaultIcon","",0x00000000,"%1" + +; Dynamic Link Libraries +HKCR,".dll","",0x00000000,"dllfile" +HKCR,"dllfile","",0x00000000,"Dynamic Link Library" +HKCR,"dllfile","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\shell32.dll,-163" +HKCR,"dllfile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-154" + +; Device Drivers +HKCR,".drv","",0x00000000,"drvfile" +HKCR,"drvfile","",0x00000000,"Device Driver" +HKCR,"drvfile","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\shell32.dll,-164" +HKCR,"drvfile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-154" + +; Applicatons +HKCR,".exe","",0x00000000,"exefile" +HKCR,"exefile","",0x00000000,"ReactOS Application" +HKCR,"exefile","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\shell32.dll,-165" +HKCR,"exefile\Defaulticon","",0x00000000,"%1" +HKCR,"exefile\shell\open\command","",0x00000000,"""%1"" %*" + +; Fonts +HKCR,".fon","",0x00000000,"fonfile" +HKCR,"fonfile","",0x00000000,"Font File" +HKCR,"fonfile","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\shell32.dll,-166" +HKCR,"fonfile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-155" + +HKCR,".ttf","",0x00000000,"ttffile" +HKCR,"ttffile","",0x00000000,"TrueType Font File" +HKCR,"ttffile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-156" +HKCR,"ttffile","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\shell32.dll,-167" +HKCR,"ttffile\shell\open\command","",0x00020000,"%SystemRoot%\system32\fontview.exe %1" + +; Help Files +HKCR,".hlp","",0x00000000,"hlpfile" +HKCR,"hlpfile","",0x00000000,"Help File" +HKCR,"hlpfile","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\shell32.dll,-168" +HKCR,"hlpfile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-24" +HKCR,"hlpfile\shell\open\command","",0x00020000,"%SystemRoot%\system32\winhlp32.exe %1" + +HKCR,".chm","",0x00000000,"chm.file" +HKCR,"chm.file","",0x00000000,"Help File" +HKCR,"chm.file","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\shell32.dll,-168" +HKCR,"chm.file\DefaultIcon","",0x00020000,"%SystemRoot%\hh.exe,0" +HKCR,"chm.file\shell\open\command","",0x00020000,"%SystemRoot%\hh.exe %1" + +; set MIME type for .html and .htm because Tiny webserver needs it +HKCR,".htm","",0x00000000,"html" +HKCR,".htm","Content Type",0x00000000,"text/html" + +HKCR,".html","",0x00000000,"html" +HKCR,".html","Content Type",0x00000000,"text/html" + +; Icons +HKCR,".ico","",0x00000000,"icofile" +HKCR,"icofile","",0x00000000,"Icon" +HKCR,"icofile\DefaultIcon","",0x00000000,"%1" + +; JPEG Images +HKCR,".jpg","",0x00000000,"jpegfile" +HKCR,".jpeg","",0x00000000,"jpegfile" +HKCR,"jpegfile","",0x00000000,"JPEG Image" +HKCR,"jpegfile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shimgvw.dll,0" +HKCR,"jpegfile\shell\open\command","",0x00020000,"rundll32.exe %SystemRoot%\system32\shimgvw.dll,ImageView_Fullscreen %1" + +; Bitmap Images +HKCR,".bmp","",0x00000000,"bmpfile" +HKCR,"bmpfile","",0x00000000,"Bitmap Image" +HKCR,"bmpfile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shimgvw.dll,0" +HKCR,"bmpfile\shell\open\command","",0x00020000,"rundll32.exe %SystemRoot%\system32\shimgvw.dll,ImageView_Fullscreen %1" + +; PNG Images +HKCR,".png","",0x00000000,"pngfile" +HKCR,"pngfile","",0x00000000,"PNG Image" +HKCR,"pngfile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shimgvw.dll,0" +HKCR,"pngfile\shell\open\command","",0x00020000,"rundll32.exe %SystemRoot%\system32\shimgvw.dll,ImageView_Fullscreen %1" + +; GIF Images +HKCR,".gif","",0x00000000,"giffile" +HKCR,"giffile","",0x00000000,"GIF Image" +HKCR,"giffile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shimgvw.dll,0" +HKCR,"giffile\shell\open\command","",0x00020000,"rundll32.exe %SystemRoot%\system32\shimgvw.dll,ImageView_Fullscreen %1" + +; Configuration Files +HKCR,".ini","",0x00000000,"inifile" +HKCR,"inifile","",0x00000000,"Configuration Settings" +HKCR,"inifile","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\shell32.dll,-169" +HKCR,"inifile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-151" +HKCR,"inifile\shell\open\command","",0x00000000,"notepad.exe ""%1""" + +; Setup Information Files +HKCR,".inf","",0x00000000,"inffile" +HKCR,"inffile","",0x00000000,"Setup Information" +HKCR,"inffile\FriendlyTypeName","",0x00020000,"%SystemRoot%\system32\setupapi.dll,-2001" +HKCR,"inffile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-151" +HKCR,"inffile\shell\open\command","",0x00000000,"notepad.exe ""%1""" +HKCR,"inffile\shell\Install","",0x00000000,"Install" +HKCR,"inffile\shell\Install\command","",0x00020000,"%SystemRoot%\system32\rundll32.exe setupapi,InstallHinfSection DefaultInstall 132 %1" + +; Show icons for shortcuts in shell views (lnkfile is handled specially in shell32) +; Don't display extension for shortcuts +HKCR,".lnk","",0x00000000,"lnkfile" +HKCR,".lnk\shellnew","",0x00000000,"" +HKCR,".lnk\shellnew","command",0x00020000,"%SystemRoot%\system32\rundll32.exe appwiz.cpl,NewLinkHere %1" +HKCR,"lnkfile","",0x00000000,"Shortcut" +HKCR,"lnkfile","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\shell32.dll,-170" +HKCR,"lnkfile","NeverShowExt",0x00000000,"" +HKCR,"lnkfile","IsShortcut",0x00000000,"yes" +HKCR,"lnkfile\CLSID","",0x00000000,"{00021401-0000-0000-C000-000000000046}" +HKCR,"lnkfile\shellex\IconHandler","",0x00000000,"{00021401-0000-0000-C000-000000000046}" +HKCR,"lnkfile\shellex\ContextMenuHandlers\{00021401-0000-0000-C000-000000000046}","",0x00000000,"" +HKCR,"lnkfile\shellex\PropertySheetHandlers\Shellink Property Page", "", 0x00000000, "{00021401-0000-0000-C000-000000000046}" + +; Text Documents +HKCR,".log","",0x00000000,"txtfile" +HKCR,".txt","",0x00000000,"txtfile" +HKCR,".c","",0x00000000,"txtfile" +HKCR,".cpp","",0x00000000,"txtfile" +HKCR,".h","",0x00000000,"txtfile" +HKCR,".hpp","",0x00000000,"txtfile" +HKCR,".txt\shellnew","",0x00000000,"" +HKCR,".txt\shellnew","NullFile",0x00020000,"" +HKCR,"txtfile","",0x00000000,"Text Document" +HKCR,".txt","Content Type",0x00000000,"text/plain" +HKCR,"txtfile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-152" +HKCR,"txtfile\shell\open\command","",0x00020000,"%SystemRoot%\system32\notepad.exe %1" + +; XML Documents +HKCR,".xml","",0x00000000,"xmlfile" +HKCR,"xmlfile","",0x00000000,"XML Document" +HKCR,".xml","Content Type",0x00000000,"text/xml" +HKCR,"xmlfile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-151" +HKCR,"xmlfile\shell\open\command","",0x00020000,"%SystemRoot%\system32\notepad.exe %1" + +; MSI files +HKCR,".msi","",0x00000000,"MSI.Package" +HKCR,"Msi.Package\DefaultIcon","",0x00000000,"msiexec.exe" +HKCR,"Msi.Package\shell\Open\command","",0x00020000,"%SystemRoot%\system32\msiexec.exe /i ""%1""" +HKCR,"Msi.Package\shell\Repair\command","",0x00020000,"%SystemRoot%\system32\msiexec.exe /f ""%1""" +HKCR,"Msi.Package\shell\Uninstall\command","",0x00020000,"%SystemRoot%\system32\msiexec.exe /x ""%1""" + +HKCR,".pif","",0x00000000,"piffile" + +; Registration Entries +HKCR,".reg","",0x00000000,"regfile" +HKCR,"regfile","",0x00000000,"Registration Entries" +HKCR,"regfile","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\shell32.dll,-170" +HKCR,"regfile\DefaultIcon","",0x00020000,"%SystemRoot%\regedit.exe,1" +HKCR,"regfile\shell\edit\command","",0x00020000,"%SystemRoot%\system32\notepad.exe %1" +HKCR,"regfile\shell\open","",0x00000000,"Merge" +HKCR,"regfile\shell\open\command","",0x00000000,"regedit.exe ""%1""" + +; Screen Savers +HKCR,".scr","",0x00000000,"scrfile" +HKCR,"scrfile","",0x00000000,"Screen Saver" +HKCR,"scrfile\Defaulticon","",0x00000000,"%1" +HKCR,"scrfile\shell\config","",0x00000000,"Configure" +HKCR,"scrfile\shell\config\command","",0x00000000,"""%1""" +HKCR,"scrfile\shell\install","",0x00000000,"Install" +HKCR,"scrfile\shell\install\command","",0x00000000,"rundll32.exe desk.cpl,InstallScreenSaver %l" +HKCR,"scrfile\shell\open","",0x00000000,"Test" +HKCR,"scrfile\shell\open\command","",0x00000000,"""%1"" /S" + +; shell command files (e.g. "Show Desktop" in quicklaunch bar) +HKCR,".scf","",0x00000000,"SHCmdFile" +HKCR,"SHCmdFile","NeverShowExt",0x00000000,"" +HKCR,"SHCmdFile","IsShortcut",0x00000000,"yes" +HKCR,"SHCmdFile\shell\open\command","",0x00000000,"explorer.exe ""%1""" +HKCR,"SHCmdFile\CLSID","",0x00000000,"{57651662-CE3E-11D0-8D77-00C04FC99D61}" +HKCR,"SHCmdFile\shellex\IconHandler","",0x00000000,"{57651662-CE3E-11D0-8D77-00C04FC99D61}" + +; System-Files +HKCR,".sys","",0x00000000,"sysfile" +HKCR,"sysfile","",0x00000000,"System File" +HKCR,"regfile","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\shell32.dll,-171" +HKCR,"sysfile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-154" + +; URL shortcuts (e.g. used in favorites folder of IExplorer) +HKCR,".url","",0x00000000,"InternetShortcut" + +; Wave Sounds +HKCR,".wav","",0x00000000,"SoundRec" +HKCR,"SoundRec","",0x00000000,"Wave Sound" +HKCR,"SoundRec\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-225" +HKCR,"SoundRec\shell\open\command","",0x00020000,"%SystemRoot%\system32\mplay32.exe %1" + +; Midi Sounds +HKCR,".mid","",0x00000000,"MIDFile" +HKCR,".midi","",0x00000000,"MIDFile" +HKCR,"MIDFile","",0x00000000,"MIDI Sequence" +HKCR,"MIDFile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-225" +HKCR,"MIDFile\shell\open\command","",0x00020000,"%SystemRoot%\system32\mplay32.exe %1" + +; Audio CD +HKCR,".cda","",0x00000000,"CDAFile" +HKCR,"CDAFile","",0x00000000,"CD Audio Track" +HKCR,"CDAFile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-225" +HKCR,"CDAFile\shell\open\command","",0x00020000,"%SystemRoot%\system32\mplay32.exe %1" + +; Avi Files +HKCR,".avi","",0x00000000,"AVIFile" +HKCR,"AVIFile","",0x00000000,"Video Clip" +HKCR,"AVIFile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-224" +HKCR,"AVIFile\shell\open\command","",0x00020000,"%SystemRoot%\system32\mplay32.exe %1" + +HKCR,"CLSID",,0x00000012 + +; For Shell32.dll +HKCR,"CLSID\{00021400-0000-0000-C000-000000000046}","",0x00000000,"Desktop" +HKCR,"CLSID\{00021400-0000-0000-C000-000000000046}\InProcServer32","",0x00000000,"shell32.dll" +HKCR,"CLSID\{00021400-0000-0000-C000-000000000046}\InProcServer32","ThreadingModel",0x00000000,"Apartment" +HKCR,"CLSID\{00021401-0000-0000-C000-000000000046}","",0x00000000,"Shortcut" +HKCR,"CLSID\{00021401-0000-0000-C000-000000000046}\InProcServer32","",0x00000000,"shell32.dll" +HKCR,"CLSID\{00021401-0000-0000-C000-000000000046}\InProcServer32","ThreadingModel",0x00000000,"Apartment" +HKCR,"CLSID\{00021401-0000-0000-C000-000000000046}\shellex\MayChangeDefaultMenu","",0x00000000,"" +HKCR,"CLSID\{000214E6-0000-0000-C000-000000000046}","",0x00000000,"Shellfolder" +HKCR,"CLSID\{000214E6-0000-0000-C000-000000000046}\InProcServer32","",0x00000000,"shell32.dll" +HKCR,"CLSID\{000214E6-0000-0000-C000-000000000046}\InProcServer32","ThreadingModel",0x00000000,"Apartment" +HKCR,"CLSID\{000214EE-0000-0000-C000-000000000046}","",0x00000000,"IShellLinkA" +HKCR,"CLSID\{000214EE-0000-0000-C000-000000000046}\InProcServer32","",0x00000000,"shell32.dll" +HKCR,"CLSID\{000214EE-0000-0000-C000-000000000046}\InProcServer32","ThreadingModel",0x00000000,"Apartment" +HKCR,"CLSID\{000214F9-0000-0000-C000-000000000046}","",0x00000000,"IShellLinkW" +HKCR,"CLSID\{000214F9-0000-0000-C000-000000000046}\InProcServer32","",0x00000000,"shell32.dll" +HKCR,"CLSID\{000214F9-0000-0000-C000-000000000046}\InProcServer32","ThreadingModel",0x00000000,"Apartment" + +HKCR,"CLSID\{1F4DE370-D627-11D1-BA4F-00A0C91EEDBA}","",0x00000000,"Computer Search Results Folder" +HKCR,"CLSID\{1F4DE370-D627-11D1-BA4F-00A0C91EEDBA}","LocalizedString",0x00020000,"@%SystemRoot%\system32\shell32.dll,-30521" +HKCR,"CLSID\{1F4DE370-D627-11D1-BA4F-00A0C91EEDBA}\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-135" +HKCR,"CLSID\{1F4DE370-D627-11D1-BA4F-00A0C91EEDBA}\InProcServer32","",0x00020000,"%SystemRoot%\system32\shell32.dll" +HKCR,"CLSID\{1F4DE370-D627-11D1-BA4F-00A0C91EEDBA}\InProcServer32","ThreadingModel",0x00000000,"Apartment" +HKCR,"CLSID\{1F4DE370-D627-11D1-BA4F-00A0C91EEDBA}\ShellFolder","Attributes",0x00010001,0x20180000 + +HKCR,"CLSID\{4657278A-411B-11d2-839A-00C04FD918D0}","",0x00000000,"Shell Drag and Drop helper" +HKCR,"CLSID\{4657278A-411B-11d2-839A-00C04FD918D0}\InProcServer32","",0x00020000,"%SystemRoot%\system32\shell32.dll" +HKCR,"CLSID\{4657278A-411B-11d2-839A-00C04FD918D0}\InProcServer32","ThreadingModel",0x00000000,"Apartment" + +; Folder Options CPL +HKCR,"CLSID\{6DFD7C5C-2451-11d3-A299-00C04F8EF6AF}","",0x00000000,"Folder Options" +HKCR,"CLSID\{6DFD7C5C-2451-11d3-A299-00C04F8EF6AF}","LocalizedString",0x00020000,"@%SystemRoot%\system32\shell32.dll,-150" +HKCR,"CLSID\{6DFD7C5C-2451-11d3-A299-00C04F8EF6AF}\InProcServer32","",0x00000000,"shell32.dll" +HKCR,"CLSID\{6DFD7C5C-2451-11d3-A299-00C04F8EF6AF}\InProcServer32","ThreadingModel",0x00000000,"Apartment" +HKCR,"CLSID\{6DFD7C5C-2451-11d3-A299-00C04F8EF6AF}\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-210" +HKCR,"CLSID\{6DFD7C5C-2451-11d3-A299-00C04F8EF6AF}\shell\Open\command","",0x00000000,"rundll32.exe shell32.dll,Options_RunDLL 0" +HKCR,"CLSID\{6DFD7C5C-2451-11d3-A299-00C04F8EF6AF}\shell\RunAs\command","",0x00000000,"rundll32.exe shell32.dll,Options_RunDLL 0" +HKCR,"CLSID\{6DFD7C5C-2451-11d3-A299-00C04F8EF6AF}\ShellFolder","Attributes",0x00010001,0x00000000 + +; Open With shell extension +HKCR,"CLSID\{09799AFB-AD67-11d1-ABCD-00C04FC30936}","",0x00000000,"Open With Context Menu Handler" +HKCR,"CLSID\{09799AFB-AD67-11d1-ABCD-00C04FC30936}\InProcServer32","",0x00000000,"shell32.dll" +HKCR,"CLSID\{09799AFB-AD67-11d1-ABCD-00C04FC30936}\InProcServer32","ThreadingModel",0x00000000,"Apartment" +HKCR,"CLSID\{09799AFB-AD67-11d1-ABCD-00C04FC30936}\shellex\MayChangeDefaultMenu","",0x00000000,"" +HKCR,"SystemFileAssociations","",0x00000000,"" +HKCR,"Applications","",0x00000000,"" + +; Recycle bin is not implemented +;HKCR,"CLSID\{645FF040-5081-101B-9F08-00AA002F954E}","",0x00000000,"Recycle Bin" +;HKCR,"CLSID\{645FF040-5081-101B-9F08-00AA002F954E}","LocalizedString",0x00020000,"@%SystemRoot%\system32\shell32.dll,-8964" +;HKCR,"CLSID\{645FF040-5081-101B-9F08-00AA002F954E}","InfoTip",0x00020000,"@%SystemRoot%\system32\shell32.dll,-22915" +;HKCR,"CLSID\{645FF040-5081-101B-9F08-00AA002F954E}","IntroText",0x00020000,"@%SystemRoot%\system32\shell32.dll,-31748" +;HKCR,"CLSID\{645FF040-5081-101B-9F08-00AA002F954E}","SortOrderIndex",0x00010001,0x00000060 +;HKCR,"CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,31" +;HKCR,"CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\DefaultIcon","Empty",0x00020000,"%SystemRoot%\system32\shell32.dll,31" +;HKCR,"CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\DefaultIcon","Full",0x00020000,"%SystemRoot%\system32\shell32.dll,32" +;HKCR,"CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\InProcServer32","",0x00020000,"%SystemRoot%\system32\shell32.dll" +;HKCR,"CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\InProcServer32","ThreadingModel",0x00000000,"Apartment" +;HKCR,"CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\ShellFolder","Attributes",0x00010001,0x20000140 +;HKCR,"CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\ShellFolder","CallForAttributes",0x00010001,0x00000040 +;HKCR,"CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\shellex\ContextMenuHandlers\{645FF040-5081-101B-9F08-00AA002F954E}","",0x00000000,"" +;HKCR,"CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\shellex\PropertySheetHandlers\{645FF040-5081-101B-9F08-00AA002F954E}","",0x00000000,"" + +; deskadp.dll shell extension +HKCR,"CLSID\{42071712-76d4-11d1-8b24-00a0c9068ff3}","",0x00000000,"Display Adapter CPL Extension" +HKCR,"CLSID\{42071712-76d4-11d1-8b24-00a0c9068ff3}\InProcServer32","",0x00020000,"%SystemRoot%\system32\deskadp.dll" +HKCR,"CLSID\{42071712-76d4-11d1-8b24-00a0c9068ff3}\InProcServer32","ThreadingModel",0x00000000,"Apartment" + +; deskmon.dll shell extension +HKCR,"CLSID\{42071713-76d4-11d1-8b24-00a0c9068ff3}","",0x00000000,"Display Monitor CPL Extension" +HKCR,"CLSID\{42071713-76d4-11d1-8b24-00a0c9068ff3}\InProcServer32","",0x00020000,"%SystemRoot%\system32\deskmon.dll" +HKCR,"CLSID\{42071713-76d4-11d1-8b24-00a0c9068ff3}\InProcServer32","ThreadingModel",0x00000000,"Apartment" + +; For TCPIP Protocol property page +HKCR,"CLSID\{A907657F-6FDF-11D0-8EFB-00C04FD912B2}","",0x00000000,"TCP/IP Configuration Notify Object" +HKCR,"CLSID\{A907657F-6FDF-11D0-8EFB-00C04FD912B2}\InProcServer32","",0x00000000,"netcfgx.dll" +HKCR,"CLSID\{A907657F-6FDF-11D0-8EFB-00C04FD912B2}\InProcServer32","ThreadingModel",0x00000000,"Both" + +; For dxdiagn.dll +HKCR,"CLSID\{A65B8071-3BFE-4213-9A5B-491DA4461CA7}","",0x00000000,"DxDiagProvider Class" +HKCR,"CLSID\{A65B8071-3BFE-4213-9A5B-491DA4461CA7}\InProcServer32","",0x00000000,"%SystemRoot%\system32\dxdiagn.dll" +HKCR,"CLSID\{A65B8071-3BFE-4213-9A5B-491DA4461CA7}\InProcServer32","ThreadingModel",0x00000000,"Apartment" +HKCR,"CLSID\{A65B8071-3BFE-4213-9A5B-491DA4461CA7}\ProgID","",0x00000000,"DxDiag.DxDiagProvider.1" +HKCR,"CLSID\{A65B8071-3BFE-4213-9A5B-491DA4461CA7}\VersionIndependentProgID","",0x00000000,"DxDiag.DxDiagProvider" + + +HKCR,"NDS\Clsid","",0x00000002,"{323991f0-7bad-11cf-b03d-00aa006e0975}" + +HKCR,"WinNT\Clsid","",0x00000002,"{8b20cd60-0f29-11cf-abc4-02608c9e7553}" + + +; For language support: + +HKCR,"MIME",,0x00000012 +HKCR,"MIME\Database",,0x00000012 +HKCR,"MIME\Database\Rfc1766",,0x00000012 +HKCR,"MIME\Database\Rfc1766","0436",0x00000000,"af;Afrikaans" +HKCR,"MIME\Database\Rfc1766","041C",0x00000000,"sq;Albanian" +HKCR,"MIME\Database\Rfc1766","0001",0x00000000,"ar;Arabic" +HKCR,"MIME\Database\Rfc1766","1401",0x00000000,"ar-dz;Arabic (Algeria)" +HKCR,"MIME\Database\Rfc1766","3C01",0x00000000,"ar-bh;Arabic (Bahrain)" +HKCR,"MIME\Database\Rfc1766","0C01",0x00000000,"ar-eg;Arabic (Egypt)" +HKCR,"MIME\Database\Rfc1766","0801",0x00000000,"ar-iq;Arabic (Iraq)" +HKCR,"MIME\Database\Rfc1766","2C01",0x00000000,"ar-jo;Arabic (Jordan)" +HKCR,"MIME\Database\Rfc1766","3401",0x00000000,"ar-kw;Arabic (Kuwait)" +HKCR,"MIME\Database\Rfc1766","3001",0x00000000,"ar-lb;Arabic (Lebanon)" +HKCR,"MIME\Database\Rfc1766","1001",0x00000000,"ar-ly;Arabic (Libya)" +HKCR,"MIME\Database\Rfc1766","1801",0x00000000,"ar-ma;Arabic (Morocco)" +HKCR,"MIME\Database\Rfc1766","2001",0x00000000,"ar-om;Arabic (Oman)" +HKCR,"MIME\Database\Rfc1766","4001",0x00000000,"ar-qa;Arabic (Qatar)" +HKCR,"MIME\Database\Rfc1766","0401",0x00000000,"ar-sa;Arabic (Saudi Arabia)" +HKCR,"MIME\Database\Rfc1766","2801",0x00000000,"ar-sy;Arabic (Syria)" +HKCR,"MIME\Database\Rfc1766","1C01",0x00000000,"ar-tn;Arabic (Tunisia)" +HKCR,"MIME\Database\Rfc1766","3801",0x00000000,"ar-ae;Arabic (U.A.E.)" +HKCR,"MIME\Database\Rfc1766","2401",0x00000000,"ar-ye;Arabic (Yemen)" +HKCR,"MIME\Database\Rfc1766","042B",0x00000000,"hy;Armenian" +HKCR,"MIME\Database\Rfc1766","042D",0x00000000,"eu;Basque" +HKCR,"MIME\Database\Rfc1766","0423",0x00000000,"be;Belarusian" +HKCR,"MIME\Database\Rfc1766","0445",0x00000000,"bn;Bengali" +HKCR,"MIME\Database\Rfc1766","0402",0x00000000,"bg;Bulgarian" +HKCR,"MIME\Database\Rfc1766","0403",0x00000000,"ca;Catalan" +HKCR,"MIME\Database\Rfc1766","0004",0x00000000,"zh;Chinese" +HKCR,"MIME\Database\Rfc1766","0804",0x00000000,"zh-cn;Chinese (China)" +HKCR,"MIME\Database\Rfc1766","0C04",0x00000000,"zh-hk;Chinese (Hong Kong SAR)" +HKCR,"MIME\Database\Rfc1766","1004",0x00000000,"zh-sg;Chinese (Singapore)" +HKCR,"MIME\Database\Rfc1766","0404",0x00000000,"zh-tw;Chinese (Taiwan)" +HKCR,"MIME\Database\Rfc1766","041A",0x00000000,"hr;Croatian" +HKCR,"MIME\Database\Rfc1766","0405",0x00000000,"cs;Czech" +HKCR,"MIME\Database\Rfc1766","0406",0x00000000,"da;Danish" +HKCR,"MIME\Database\Rfc1766","0813",0x00000000,"nl-be;Dutch (Belgium)" +HKCR,"MIME\Database\Rfc1766","0413",0x00000000,"nl;Dutch (Netherlands)" +HKCR,"MIME\Database\Rfc1766","0009",0x00000000,"en;English" +HKCR,"MIME\Database\Rfc1766","0C09",0x00000000,"en-au;English (Australia)" +HKCR,"MIME\Database\Rfc1766","2809",0x00000000,"en-bz;English (Belize)" +HKCR,"MIME\Database\Rfc1766","1009",0x00000000,"en-ca;English (Canada)" +HKCR,"MIME\Database\Rfc1766","1809",0x00000000,"en-ie;English (Ireland)" +HKCR,"MIME\Database\Rfc1766","2009",0x00000000,"en-jm;English (Jamaica)" +HKCR,"MIME\Database\Rfc1766","1409",0x00000000,"en-nz;English (New Zealand)" +HKCR,"MIME\Database\Rfc1766","1C09",0x00000000,"en-za;English (South Africa)" +HKCR,"MIME\Database\Rfc1766","2C09",0x00000000,"en-tt;English (Trinidad)" +HKCR,"MIME\Database\Rfc1766","0809",0x00000000,"en-gb;English (United Kingdom)" +HKCR,"MIME\Database\Rfc1766","0409",0x00000000,"en-us;English (United States)" +HKCR,"MIME\Database\Rfc1766","048F",0x00000000,"eo;Esperanto" +HKCR,"MIME\Database\Rfc1766","0425",0x00000000,"et;Estonian" +HKCR,"MIME\Database\Rfc1766","0438",0x00000000,"fo;Faeroese" +HKCR,"MIME\Database\Rfc1766","0429",0x00000000,"fa;Farsi" +HKCR,"MIME\Database\Rfc1766","040B",0x00000000,"fi;Finnish" +HKCR,"MIME\Database\Rfc1766","080C",0x00000000,"fr-be;French (Belgium)" +HKCR,"MIME\Database\Rfc1766","0C0C",0x00000000,"fr-ca;French (Canada)" +HKCR,"MIME\Database\Rfc1766","040C",0x00000000,"fr;French (France)" +HKCR,"MIME\Database\Rfc1766","140C",0x00000000,"fr-lu;French (Luxembourg)" +HKCR,"MIME\Database\Rfc1766","100C",0x00000000,"fr-ch;French (Switzerland)" +HKCR,"MIME\Database\Rfc1766","043C",0x00000000,"gd;Gaelic" +HKCR,"MIME\Database\Rfc1766","0C07",0x00000000,"de-at;German (Austria)" +HKCR,"MIME\Database\Rfc1766","0407",0x00000000,"de;German (Germany)" +HKCR,"MIME\Database\Rfc1766","1407",0x00000000,"de-li;German (Liechtenstein)" +HKCR,"MIME\Database\Rfc1766","1007",0x00000000,"de-lu;German (Luxembourg)" +HKCR,"MIME\Database\Rfc1766","0807",0x00000000,"de-ch;German (Switzerland)" +HKCR,"MIME\Database\Rfc1766","0408",0x00000000,"el;Greek" +HKCR,"MIME\Database\Rfc1766","040D",0x00000000,"he;Hebrew" +HKCR,"MIME\Database\Rfc1766","0439",0x00000000,"hi;Hindi" +HKCR,"MIME\Database\Rfc1766","040E",0x00000000,"hu;Hungarian" +HKCR,"MIME\Database\Rfc1766","040F",0x00000000,"is;Icelandic" +HKCR,"MIME\Database\Rfc1766","0421",0x00000000,"in;Indonesian" +HKCR,"MIME\Database\Rfc1766","0410",0x00000000,"it;Italian (Italy)" +HKCR,"MIME\Database\Rfc1766","0810",0x00000000,"it-ch;Italian (Switzerland)" +HKCR,"MIME\Database\Rfc1766","0411",0x00000000,"ja;Japanese" +HKCR,"MIME\Database\Rfc1766","0412",0x00000000,"ko;Korean" +HKCR,"MIME\Database\Rfc1766","0426",0x00000000,"lv;Latvian" +HKCR,"MIME\Database\Rfc1766","0427",0x00000000,"lt;Lithuanian" +HKCR,"MIME\Database\Rfc1766","042F",0x00000000,"mk;FYRO Macedonian" +HKCR,"MIME\Database\Rfc1766","043E",0x00000000,"ms;Malay (Malaysia)" +HKCR,"MIME\Database\Rfc1766","043A",0x00000000,"mt;Maltese" +HKCR,"MIME\Database\Rfc1766","0414",0x00000000,"no;Norwegian (Bokmal)" +HKCR,"MIME\Database\Rfc1766","0814",0x00000000,"no;Norwegian (Nynorsk)" +HKCR,"MIME\Database\Rfc1766","0415",0x00000000,"pl;Polish" +HKCR,"MIME\Database\Rfc1766","0416",0x00000000,"pt-br;Portuguese (Brazil)" +HKCR,"MIME\Database\Rfc1766","0816",0x00000000,"pt;Portuguese (Portugal)" +HKCR,"MIME\Database\Rfc1766","0417",0x00000000,"rm;Rhaeto-Romanic" +HKCR,"MIME\Database\Rfc1766","0418",0x00000000,"ro;Romanian" +HKCR,"MIME\Database\Rfc1766","0818",0x00000000,"ro-mo;Romanian (Moldova)" +HKCR,"MIME\Database\Rfc1766","0419",0x00000000,"ru;Russian" +HKCR,"MIME\Database\Rfc1766","0819",0x00000000,"ru-mo;Russian (Moldova)" +HKCR,"MIME\Database\Rfc1766","0C1A",0x00000000,"sr;Serbian (Cyrillic)" +HKCR,"MIME\Database\Rfc1766","081A",0x00000000,"sr;Serbian (Latin)" +HKCR,"MIME\Database\Rfc1766","041B",0x00000000,"sk;Slovak" +HKCR,"MIME\Database\Rfc1766","0424",0x00000000,"sl;Slovenian" +HKCR,"MIME\Database\Rfc1766","042E",0x00000000,"sb;Sorbian" +HKCR,"MIME\Database\Rfc1766","2C0A",0x00000000,"es-ar;Spanish (Argentina)" +HKCR,"MIME\Database\Rfc1766","400A",0x00000000,"es-bo;Spanish (Bolivia)" +HKCR,"MIME\Database\Rfc1766","340A",0x00000000,"es-cl;Spanish (Chile)" +HKCR,"MIME\Database\Rfc1766","240A",0x00000000,"es-co;Spanish (Colombia)" +HKCR,"MIME\Database\Rfc1766","140A",0x00000000,"es-cr;Spanish (Costa Rica)" +HKCR,"MIME\Database\Rfc1766","1C0A",0x00000000,"es-do;Spanish (Dominican Republic)" +HKCR,"MIME\Database\Rfc1766","300A",0x00000000,"es-ec;Spanish (Ecuador)" +HKCR,"MIME\Database\Rfc1766","440A",0x00000000,"es-sv;Spanish (El Salvador)" +HKCR,"MIME\Database\Rfc1766","100A",0x00000000,"es-gt;Spanish (Guatemala)" +HKCR,"MIME\Database\Rfc1766","480A",0x00000000,"es-hn;Spanish (Honduras)" +HKCR,"MIME\Database\Rfc1766","0C0A",0x00000000,"es;Spanish (International Sort)" +HKCR,"MIME\Database\Rfc1766","080A",0x00000000,"es-mx;Spanish (Mexico)" +HKCR,"MIME\Database\Rfc1766","4C0A",0x00000000,"es-ni;Spanish (Nicaragua)" +HKCR,"MIME\Database\Rfc1766","180A",0x00000000,"es-pa;Spanish (Panama)" +HKCR,"MIME\Database\Rfc1766","3C0A",0x00000000,"es-py;Spanish (Paraguay)" +HKCR,"MIME\Database\Rfc1766","280A",0x00000000,"es-pe;Spanish (Peru)" +HKCR,"MIME\Database\Rfc1766","500A",0x00000000,"es-pr;Spanish (Puerto Rico)" +HKCR,"MIME\Database\Rfc1766","040A",0x00000000,"es;Spanish (Traditional Sort)" +HKCR,"MIME\Database\Rfc1766","380A",0x00000000,"es-uy;Spanish (Uruguay)" +HKCR,"MIME\Database\Rfc1766","200A",0x00000000,"es-ve;Spanish (Venezuela)" +HKCR,"MIME\Database\Rfc1766","0430",0x00000000,"sx;Sutu" +HKCR,"MIME\Database\Rfc1766","041D",0x00000000,"sv;Swedish" +HKCR,"MIME\Database\Rfc1766","081D",0x00000000,"sv-fi;Swedish (Finland)" +HKCR,"MIME\Database\Rfc1766","041E",0x00000000,"th;Thai" +HKCR,"MIME\Database\Rfc1766","0431",0x00000000,"ts;Tsonga" +HKCR,"MIME\Database\Rfc1766","0432",0x00000000,"tn;Tswana" +HKCR,"MIME\Database\Rfc1766","041F",0x00000000,"tr;Turkish" +HKCR,"MIME\Database\Rfc1766","0422",0x00000000,"uk;Ukrainian" +HKCR,"MIME\Database\Rfc1766","0420",0x00000000,"ur;Urdu" +HKCR,"MIME\Database\Rfc1766","042A",0x00000000,"vi;Vietnamese" +HKCR,"MIME\Database\Rfc1766","0490",0x00000000,"wa;Walloon" +HKCR,"MIME\Database\Rfc1766","0434",0x00000000,"xh;Xhosa" +HKCR,"MIME\Database\Rfc1766","043D",0x00000000,"ji;Yiddish" +HKCR,"MIME\Database\Rfc1766","0435",0x00000000,"zu;Zulu" + +HKCR,TypeLib\{00020430-0000-0000-C000-000000000046}\1.0,,,"OLE Automation" +HKCR,TypeLib\{00020430-0000-0000-C000-000000000046}\1.0\0\win16,,,"stdole.tlb" +HKCR,TypeLib\{00020430-0000-0000-C000-000000000046}\1.0\0\win32,,,"stdole32.tlb" +HKCR,TypeLib\{00020430-0000-0000-C000-000000000046}\1.0\FLAGS,,,"1" +HKCR,TypeLib\{00020430-0000-0000-C000-000000000046}\2.0,,,"OLE Automation" +HKCR,TypeLib\{00020430-0000-0000-C000-000000000046}\2.0\0\win32,,,"stdole2.tlb" +HKCR,TypeLib\{00020430-0000-0000-C000-000000000046}\2.0\FLAGS,,,"0" + +; EOF diff --git a/boot/bootdata/hivedef_amd64.inf b/boot/bootdata/hivedef_amd64.inf new file mode 100644 index 00000000000..404953a6257 --- /dev/null +++ b/boot/bootdata/hivedef_amd64.inf @@ -0,0 +1,1871 @@ +[Version] +Signature="$ReactOS$ + +[AddReg] + +HKCU,"Console","CursorSize",0x00010003,25 +HKCU,"Console","FaceName",0x00000002,"" +HKCU,"Console","FontFamily",0x00010003,0 +HKCU,"Console","FontSize",0x00010003,0 +HKCU,"Console","FontWeight",0x00010003,0 +HKCU,"Console","FullScreen",0x00010003,0 +HKCU,"Console","HistoryBufferSize",0x00010003,50 +HKCU,"Console","InsertMode",0x00010003,1 +HKCU,"Console","LoadConIme",0x00010003,1 +HKCU,"Console","NumberOfHistoryBuffers",0x00010003,4 +HKCU,"Console","PopupColors",0x00010003,245 +HKCU,"Console","QuickEdit",0x00010003,0 +HKCU,"Console","ScreenBufferSize",0x00010003,19660880 +HKCU,"Console","ScreenColors",0x00010003,7 +HKCU,"Console","WindowSize",0x00010003,1638480 +HKCU,"Console","ColorTable00",0x00010003,0 +HKCU,"Console","ColorTable01",0x00010003,8388608 +HKCU,"Console","ColorTable02",0x00010003,32768 +HKCU,"Console","ColorTable03",0x00010003,8421376 +HKCU,"Console","ColorTable04",0x00010003,128 +HKCU,"Console","ColorTable05",0x00010003,8388736 +HKCU,"Console","ColorTable06",0x00010003,32896 +HKCU,"Console","ColorTable07",0x00010003,12632256 +HKCU,"Console","ColorTable08",0x00010003,8421504 +HKCU,"Console","ColorTable09",0x00010003,16711680 +HKCU,"Console","ColorTable10",0x00010003,65280 +HKCU,"Console","ColorTable11",0x00010003,16776960 +HKCU,"Console","ColorTable12",0x00010003,255 +HKCU,"Console","ColorTable13",0x00010003,16711935 +HKCU,"Console","ColorTable14",0x00010003,65535 +HKCU,"Console","ColorTable15",0x00010003,16777215 + +HKCU,"Control Panel",,0x00000012 + +; Accessibility +HKCU,"Control Panel\Accessibility",,0x00000012 +HKCU,"Control Panel\Accessibility\Keyboard Preference",,0x00000012 +HKCU,"Control Panel\Accessibility\Keyboard Preference","On",2,"0" +HKCU,"Control Panel\Accessibility\HighContrast","Flags",2,"126" +HKCU,"Control Panel\Accessibility\HighContrast","High Contrast Scheme",2,"High Contrast Black (large)" +HKCU,"Control Panel\Accessibility\Keyboard Response","AutoRepeatDelay",2,"1000" +HKCU,"Control Panel\Accessibility\Keyboard Response","AutoRepeatRate",2,"500" +HKCU,"Control Panel\Accessibility\Keyboard Response","BounceTime",2,"0" +HKCU,"Control Panel\Accessibility\Keyboard Response","DelayBeforeAcceptance",2,"1000" +HKCU,"Control Panel\Accessibility\Keyboard Response","Flags",2,"126" +HKCU,"Control Panel\Accessibility\MouseKeys","Flags",2,"62" +HKCU,"Control Panel\Accessibility\MouseKeys","MaximumSpeed",2,"80" +HKCU,"Control Panel\Accessibility\MouseKeys","TimeToMaximumSpeed",2,"3000" +HKCU,"Control Panel\Accessibility\ShowSounds","On",2,"0" +HKCU,"Control Panel\Accessibility\SoundSentry","Flags",2,"2" +HKCU,"Control Panel\Accessibility\SoundSentry","FSTextEffect",2,"0" +HKCU,"Control Panel\Accessibility\SoundSentry","WindowsEffect",2,"1" +HKCU,"Control Panel\Accessibility\StickyKeys","Flags",2,"510" +HKCU,"Control Panel\Accessibility\TimeOut","Flags",2,"2" +HKCU,"Control Panel\Accessibility\TimeOut","TimeToWait",2,"300000" +HKCU,"Control Panel\Accessibility\ToggleKeys","Flags",2,"62" +HKCU,"Control Panel\Accessibility\Blind Access","On",2,"0" + +HKCU,"Control Panel\Mouse","MouseTrails",0x00000002,"0" +HKCU,"Control Panel\Mouse","SnapToDefaultButton",0x00000002,"0" +HKCU,"Control Panel\Mouse","MouseSpeed",0x00000002,"1" +HKCU,"Control Panel\Mouse","MouseThreshold1",0x00000002,"6" +HKCU,"Control Panel\Mouse","MouseThreshold2",0x00000002,"10" +HKCU,"Control Panel\Mouse","DoubleClickSpeed",0x00000002,"500" +HKCU,"Control Panel\Mouse","SwapMouseButtons",0x00000002,"0" +HKCU,"Control Panel\Mouse","MouseSensitivity",0x00000002,"10" +HKCU,"Control Panel\Mouse","MouseHoverTime",0x00000002,"400" +HKCU,"Control Panel\Mouse","MouseHoverWidth",0x00000002,"4" +HKCU,"Control Panel\Mouse","MouseHoverHeight",0x00000002,"4" +HKCU,"Control Panel\Mouse","DoubleClickWidth",0x00000002,"4" +HKCU,"Control Panel\Mouse","DoubleClickHeight",0x00000002,"4" + +HKCU,"Control Panel\Keyboard","InitialKeyboardIndicators",2,"0x80000000" +HKCU,"Control Panel\Keyboard","KeyboardDelay",2,"1" +HKCU,"Control Panel\Keyboard","KeyboardSpeed",2,"31" + +HKCU,"Control Panel\Desktop","ActiveWndTrkTimeout",0x00010003,0x00000000 +HKCU,"Control Panel\Desktop","AutoEndTasks",2,"0" +HKCU,"Control Panel\Desktop","CaretWidth",0x00010003,0x00000001 +HKCU,"Control Panel\Desktop","CoolSwitch",2,"1" +HKCU,"Control Panel\Desktop","CoolSwitchColumns",2,"7" +HKCU,"Control Panel\Desktop","CoolSwitchRows",2,"3" +HKCU,"Control Panel\Desktop","CursorBlinkRate",2,"530" +HKCU,"Control Panel\Desktop","DragFullWindows",2,"0" +HKCU,"Control Panel\Desktop","DragHeight",0x00000000,"4" +HKCU,"Control Panel\Desktop","DragWidth",0x00000000,"4" +HKCU,"Control Panel\Desktop","PaintDesktopVersion",0x00010001,"0" +HKCU,"Control Panel\Desktop","HungAppTimeout",2,"5000" +HKCU,"Control Panel\Desktop","SCRNSAVE.EXE",0,"" +HKCU,"Control Panel\Desktop","ScreenSaveActive",2,"1" +HKCU,"Control Panel\Desktop","ScreenSaverIsSecure",2,"1" +HKCU,"Control Panel\Desktop","ScreenSaveTimeOut",0,"600" +HKCU,"Control Panel\Desktop","WaitToKillAppTimeout",2,"20000" +HKCU,"Control Panel\Desktop","Wallpaper",0x00000000,"" +HKCU,"Control Panel\Desktop","FontSmoothing",2,"0" +HKCU,"Control Panel\Desktop","FontSmoothingOrientation",0x00010003,0x00000001 +HKCU,"Control Panel\Desktop","FontSmoothingType",0x00010003,0x00000001 +HKCU,"Control Panel\Desktop","ForegroundFlashCount",0x00010003,0x00000003 +HKCU,"Control Panel\Desktop","ForegroundLockTimeout",0x00010003,0x00030d40 +HKCU,"Control Panel\Desktop","GridGranularity",2,"0" +HKCU,"Control Panel\Desktop","SmoothScroll",3,00,00,00,00 +HKCU,"Control Panel\Desktop","UserPreferencesMask",3,10,00,00,80 +HKCU,"Control Panel\Desktop","LowPowerActive",2,"0" +HKCU,"Control Panel\Desktop","LowPowerTimeOut",2,"0" +HKCU,"Control Panel\Desktop","PowerOffActive",2,"0" +HKCU,"Control Panel\Desktop","PowerOffTimeOut",2,"0" +HKCU,"Control Panel\Desktop","MenuShowDelay",2,"400" +HKCU,"Control Panel\Desktop","WheelScrollLines",2,"3" +HKCU,"Control Panel\Desktop","WheelScrollChars",2,"3" +HKCU,"Control Panel\Desktop","TileWallpaper",2,"0" +HKCU,"Control Panel\Desktop","Pattern",2,"(None)" + +HKCU,"Control Panel\Desktop\WindowMetrics","ScrollWidth",2,"16" +HKCU,"Control Panel\Desktop\WindowMetrics","ScrollHeight",2,"16" +HKCU,"Control Panel\Desktop\WindowMetrics","CaptionWidth",2,"18" +HKCU,"Control Panel\Desktop\WindowMetrics","CaptionHeight",2,"18" +HKCU,"Control Panel\Desktop\WindowMetrics","SmCaptionWidth",2,"13" +HKCU,"Control Panel\Desktop\WindowMetrics","SmCaptionHeight",2,"15" +HKCU,"Control Panel\Desktop\WindowMetrics","MenuWidth",2,"18" +HKCU,"Control Panel\Desktop\WindowMetrics","MenuHeight",2,"18" +HKCU,"Control Panel\Desktop\WindowMetrics","BorderWidth",2,"1" +HKCU,"Control Panel\Desktop\WindowMetrics","Shell Icon Size",2,"32" +HKCU, "Control Panel\Desktop\WindowMetrics","CaptionFont",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,01,00,00,00,00,54,00,61,00,68,00,6f,00,6d,\ +00,61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU, "Control Panel\Desktop\WindowMetrics","IconFont",0x00000001,f5,ff,ff,ff,00,00,00,00,\ +00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,01,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,\ +61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU, "Control Panel\Desktop\WindowMetrics","MenuFont",0x00000001,f5,ff,ff,ff,00,00,00,00,\ +00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,01,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,\ +61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU, "Control Panel\Desktop\WindowMetrics","MessageFont",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,01,00,00,00,00,54,00,61,00,68,00,6f,00,6d,\ +00,61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU, "Control Panel\Desktop\WindowMetrics","SmCaptionFont",0x00000001,f5,ff,ff,ff,00,00,\ +00,00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,01,00,00,00,00,54,00,61,00,68,00,6f,00,\ +6d,00,61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU, "Control Panel\Desktop\WindowMetrics","StatusFont",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,01,00,00,00,00,54,00,61,00,68,00,6f,00,6d,\ +00,61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 + +; Input Methods +HKCU,"Control Panel\Input Method\Hot Keys",,0x00000012 +HKCU,"Control Panel\Input Method\Hot Keys\00000010","Key Modifiers",0x00030003,02,c0,00,00 +HKCU,"Control Panel\Input Method\Hot Keys\00000010","Target IME",0x00030003,00,00,00,00 +HKCU,"Control Panel\Input Method\Hot Keys\00000010","Virtual Key",0x00030003,20,00,00,00 +HKCU,"Control Panel\Input Method\Hot Keys\00000011","Key Modifiers",0x00030003,04,c0,00,00 +HKCU,"Control Panel\Input Method\Hot Keys\00000011","Target IME",0x00030003,00,00,00,00 +HKCU,"Control Panel\Input Method\Hot Keys\00000011","Virtual Key",0x00030003,20,00,00,00 +HKCU,"Control Panel\Input Method\Hot Keys\00000012","Key Modifiers",0x00030003,02,c0,00,00 +HKCU,"Control Panel\Input Method\Hot Keys\00000012","Target IME",0x00030003,00,00,00,00 +HKCU,"Control Panel\Input Method\Hot Keys\00000012","Virtual Key",0x00030003,be,00,00,00 +HKCU,"Control Panel\Input Method\Hot Keys\00000070","Key Modifiers",0x00030003,02,c0,00,00 +HKCU,"Control Panel\Input Method\Hot Keys\00000070","Target IME",0x00030003,00,00,00,00 +HKCU,"Control Panel\Input Method\Hot Keys\00000070","Virtual Key",0x00030003,20,00,00,00 +HKCU,"Control Panel\Input Method\Hot Keys\00000071","Key Modifiers",0x00030003,04,c0,00,00 +HKCU,"Control Panel\Input Method\Hot Keys\00000071","Target IME",0x00030003,00,00,00,00 +HKCU,"Control Panel\Input Method\Hot Keys\00000071","Virtual Key",0x00030003,20,00,00,00 +HKCU,"Control Panel\Input Method\Hot Keys\00000072","Key Modifiers",0x00030003,03,c0,00,00 +HKCU,"Control Panel\Input Method\Hot Keys\00000072","Target IME",0x00030003,00,00,00,00 +HKCU,"Control Panel\Input Method\Hot Keys\00000072","Virtual Key",0x00030003,bc,00,00,00 +HKCU,"Control Panel\Input Method\Hot Keys\00000200","Key Modifiers",0x00030003,03,C0,00,00 +HKCU,"Control Panel\Input Method\Hot Keys\00000200","Target IME",0x00030003,00,00,00,00 +HKCU,"Control Panel\Input Method\Hot Keys\00000200","Virtual Key",0x00030003,47,00,00,00 +HKCU,"Control Panel\Input Method\Hot Keys\00000201","Key Modifiers",0x00030003,03,c0,00,00 +HKCU,"Control Panel\Input Method\Hot Keys\00000201","Target IME",0x00030003,00,00,00,00 +HKCU,"Control Panel\Input Method\Hot Keys\00000201","Virtual Key",0x00030003,4b,00,00,00 +HKCU,"Control Panel\Input Method\Hot Keys\00000202","Key Modifiers",0x00030003,03,c0,00,00 +HKCU,"Control Panel\Input Method\Hot Keys\00000202","Target IME",0x00030003,00,00,00,00 +HKCU,"Control Panel\Input Method\Hot Keys\00000202","Virtual Key",0x00030003,4c,00,00,00 + +; International keys +HKCU,"Control Panel\International",,0x00000012 +HKCU,"Control Panel\International","Locale",0x00000000,"0409" +HKCU,"Control Panel\International","iCountry",2,"1" +HKCU,"Control Panel\International","iCurrDigits",2,"2" +HKCU,"Control Panel\International","iCurrency",2,"0" +HKCU,"Control Panel\International","iDate",2,"0" +HKCU,"Control Panel\International","iDigits",2,"2" +HKCU,"Control Panel\International","iLZero",2,"1" +HKCU,"Control Panel\International","iMeasure",2,"1" +HKCU,"Control Panel\International","iNegCurr",2,"0" +HKCU,"Control Panel\International","iTime",2,"0" +HKCU,"Control Panel\International","iTLZero",2,"0" +HKCU,"Control Panel\International","s1159",2,"AM" +HKCU,"Control Panel\International","s2359",2,"PM" +HKCU,"Control Panel\International","sCountry",2,"United States" +HKCU,"Control Panel\International","sCurrency",2,"$" +HKCU,"Control Panel\International","sDate",2,"/" +HKCU,"Control Panel\International","sDecimal",2,"." +;HKCU,"Control Panel\International","sLanguage",2,"ENU" +HKCU,"Control Panel\International","sList",2,"," +HKCU,"Control Panel\International","sLongDate",2,"dddd, MMMM dd, yyyy" +HKCU,"Control Panel\International","sShortDate",2,"M/d/yyyy" +HKCU,"Control Panel\International","sThousand",2,"," +HKCU,"Control Panel\International","sTime",2,":" +HKCU,"Control Panel\International\Geo","Nation",0x00000000,"1" + +; Cursors Schemes +HKCU,"Control Panel\Cursors",,,"ReactOS Default" +HKCU,"Control Panel\Cursors","Scheme Source",0x00010001,0x00000002 + +; PowerCfg +HKCU,"Control Panel\PowerCfg","CurrentPowerPolicy",2,"0" +HKCU,"Control Panel\PowerCfg\GlobalPowerPolicy","Policies",0x00030003,01,00,00,00,00,\ +00,00,00,03,00,00,00,10,00,00,00,00,00,00,00,03,00,00,00,10,00,00,00,02,00,00,00,03,\ +00,00,00,00,00,00,00,02,00,00,00,03,00,00,00,00,00,00,00,02,00,00,00,01,00,00,00,00,\ +00,00,00,02,00,00,00,01,00,00,00,00,00,00,00,01,00,00,00,03,00,00,00,03,00,00,00,00,\ +00,00,C0,01,00,00,00,05,00,00,00,01,00,00,00,0A,00,00,00,00,00,00,00,03,00,00,00,01,\ +00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,16,\ +00,00,00 + +HKCU,"Control Panel\PowerCfg\PowerPolicies\0","Name",2,"Home/Office Desk" +HKCU,"Control Panel\PowerCfg\PowerPolicies\0","Description",2,"This scheme is suited to most home or desktop computers that are left plugged in all the time." +HKCU,"Control Panel\PowerCfg\PowerPolicies\0","Policies",0x00030003,01,00,00,00,02,00,\ +00,00,01,00,00,00,00,00,00,00,02,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,2C,01,\ +00,00,32,32,00,03,04,00,00,00,04,00,00,00,00,00,00,00,00,00,00,00,B0,04,00,00,2C,01,\ +00,00,00,00,00,00,58,02,00,00,01,01,64,50,64,64,00,00 + +HKCU,"Control Panel\PowerCfg\PowerPolicies\1","Name",2,"Portable/Laptop" +HKCU,"Control Panel\PowerCfg\PowerPolicies\1","Description",2,"This scheme is designed for extended battery life for portable computers on the road." +HKCU,"Control Panel\PowerCfg\PowerPolicies\1","Policies",0x00030003,01,00,00,00,02,00,\ +00,00,01,00,00,00,00,00,00,00,02,00,00,00,01,00,00,00,00,00,00,00,B0,04,00,00,2C,01,\ +00,00,32,32,03,03,04,00,00,00,04,00,00,00,00,00,00,00,00,00,00,00,84,03,00,00,2C,01,\ +00,00,08,07,00,00,2C,01,00,00,01,01,64,50,64,64,00,00 + +HKCU,"Control Panel\PowerCfg\PowerPolicies\2","Name",2,"Presentation" +HKCU,"Control Panel\PowerCfg\PowerPolicies\2","Description",2,"This scheme keeps the monitor on for doing presentations." +HKCU,"Control Panel\PowerCfg\PowerPolicies\2","Policies",0x00030003,01,00,00,00,02,00,\ +00,00,01,00,00,00,00,00,00,00,02,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,84,03,\ +00,00,32,32,03,02,04,00,00,00,04,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,2C,01,00,00,01,01,50,50,64,64,00,00 + +HKCU,"Control Panel\PowerCfg\PowerPolicies\3","Name",2,"Always On" +HKCU,"Control Panel\PowerCfg\PowerPolicies\3","Description",2,"This scheme keeps the computer running so that it can be accessed from the network. Use this scheme if you do not have network wakeup hardware." +HKCU,"Control Panel\PowerCfg\PowerPolicies\3","Policies",0x00030003,01,00,00,00,02,00,\ +00,00,01,00,00,00,00,00,00,00,02,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,32,32,00,00,04,00,00,00,04,00,00,00,00,00,00,00,00,00,00,00,B0,04,00,00,84,03,\ +00,00,00,00,00,00,08,07,00,00,00,01,64,64,64,64,00,00 + +HKCU,"Control Panel\PowerCfg\PowerPolicies\4","Name",2,"Minimal Power Management" +HKCU,"Control Panel\PowerCfg\PowerPolicies\4","Description",2,"This scheme keeps the computer on and optimizes it for high performance." +HKCU,"Control Panel\PowerCfg\PowerPolicies\4","Policies",0x00030003,01,00,00,00,02,00,\ +00,00,01,00,00,00,00,00,00,00,02,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,2C,01,\ +00,00,32,32,03,03,04,00,00,00,04,00,00,00,00,00,00,00,00,00,00,00,84,03,00,00,2C,01,\ +00,00,00,00,00,00,84,03,00,00,00,01,64,64,64,64,00,00 + +HKCU,"Control Panel\PowerCfg\PowerPolicies\5","Name",2,"Max Battery" +HKCU,"Control Panel\PowerCfg\PowerPolicies\5","Description",2,"This scheme is extremely aggressive for saving power." +HKCU,"Control Panel\PowerCfg\PowerPolicies\5","Policies",0x00030003,01,00,00,00,02,00,\ +00,00,01,00,00,00,00,00,00,00,02,00,00,00,05,00,00,00,00,00,00,00,B0,04,00,00,78,00,\ +00,00,32,32,03,02,04,00,00,00,04,00,00,00,00,00,00,00,00,00,00,00,84,03,00,00,3C,00,\ +00,00,00,00,00,00,B4,00,00,00,01,01,64,32,64,64,00,00 + +; Color schemes +HKCU,"Control Panel\Current","Color Schemes",0x00020000,"ReactOS Standard" +HKCU,"Control Panel\Appearance","Current",0x00020000,"ReactOS Standard" +HKCU,"Control Panel\Appearance","NewCurrent",0x00020000,"ReactOS Standard" +HKCU,"Control Panel\Appearance\New Schemes","SelectedSize",0x00020000,"0" +HKCU,"Control Panel\Appearance\New Schemes","SelectedStyle",0x00020000,"0" +; ReactOS Standard +HKCU,"Control Panel\Appearance\New Schemes\0","DisplayName",0x00020000,"@themeui.dll,-883" +HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" +HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Flat Menus",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #0",0x00010001,0x00c8d0d4 +HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #1",0x00010001,0x00a56e3a +HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #2",0x00010001,0x006a240a +HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #3",0x00010001,0x00808080 +HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #4",0x00010001,0x00c8d0d4 +HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #5",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #6",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #7",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #8",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #9",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #10",0x00010001,0x00c8d0d4 +HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #11",0x00010001,0x00c8d0d4 +HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #12",0x00010001,0x00808080 +HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #13",0x00010001,0x006a240a +HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #14",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #15",0x00010001,0x00c8d0d4 +HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #16",0x00010001,0x00808080 +HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #17",0x00010001,0x00808080 +HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #18",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #19",0x00010001,0x00c8d0d4 +HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #20",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #21",0x00010001,0x00404040 +HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #22",0x00010001,0x00c8d0d4 +HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #23",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #24",0x00010001,0x00e1ffff +HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #25",0x00010001,0x00b5b5b5 +HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #26",0x00010001,0x00800000 +HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #27",0x00010001,0x00f0caa6 +HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #28",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #29",0x00010001,0x006a240a +HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #30",0x00010001,0x00c8d0d4 +HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Contrast",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","LegacyName",0x00020000,"ReactOS Standard" +; Brick +HKCU,"Control Panel\Appearance\New Schemes\1","DisplayName",0x00020000,"@themeui.dll,-851" +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Flat Menus",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #0",0x00010001,0x02d2e0e1 +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #1",0x00010001,0x00000042 +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #2",0x00010001,0x00000080 +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #3",0x00010001,0x0061898d +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #4",0x00010001,0x00a5bfc2 +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #5",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #6",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #7",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #8",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #9",0x00010001,0x00d2e0e1 +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #10",0x00010001,0x00a5bfc2 +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #11",0x00010001,0x00a5bfc2 +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #12",0x00010001,0x00d2e0e1 +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #13",0x00010001,0x0061898d +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #14",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #15",0x00010001,0x00a5bfc2 +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #16",0x00010001,0x0261898d +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #17",0x00010001,0x0261898d +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #18",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #19",0x00010001,0x00d2e0e1 +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #20",0x00010001,0x02d2e0e1 +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #21",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #22",0x00010001,0x02a5bfc2 +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #23",0x00010001,0x00000080 +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #24",0x00010001,0x00d2e0e1 +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #25",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #26",0x00010001,0x02000080 +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #27",0x00010001,0x004074b0 +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #28",0x00010001,0x0070b8c8 +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #29",0x00010001,0x00808000 +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #30",0x00010001,0x00a5bfc2 +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Contrast",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","LegacyName",0x00020000,"Brick" +; Eggplant +HKCU,"Control Panel\Appearance\New Schemes\2","DisplayName",0x00020000,"@themeui.dll,-851" +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Flat Menus",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #0",0x00010001,0x02a8b090 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #1",0x00010001,0x00400040 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #2",0x00010001,0x00788058 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #3",0x00010001,0x00a8b090 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #4",0x00010001,0x00a8b090 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #5",0x00010001,0x02ffffff +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #6",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #7",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #8",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #9",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #10",0x00010001,0x02a8b090 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #11",0x00010001,0x02a8b090 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #12",0x00010001,0x02808080 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #13",0x00010001,0x00788058 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #14",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #15",0x00010001,0x02a8b090 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #16",0x00010001,0x02788058 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #17",0x00010001,0x02788058 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #18",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #19",0x00010001,0x00788058 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #20",0x00010001,0x02d8d8c8 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #21",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #22",0x00010001,0x02a8b090 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #23",0x00010001,0x00800080 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #24",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #25",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #26",0x00010001,0x02788058 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #27",0x00010001,0x00834b83 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #28",0x00010001,0x00d2bdcb +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #29",0x00010001,0x00788058 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #30",0x00010001,0x00a8b090 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Contrast",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","LegacyName",0x00020000,"Eggplant" +; Green Olive +HKCU,"Control Panel\Appearance\New Schemes\3","DisplayName",0x00020000,"@themeui.dll,-877" +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Flat Menus",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #0",0x00010001,0x02d3e3d0 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #1",0x00010001,0x00213f21 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #2",0x00010001,0x00649759 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #3",0x00010001,0x00808080 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #4",0x00010001,0x00a9c8a2 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #5",0x00010001,0x02ffffff +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #6",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #7",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #8",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #9",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #10",0x00010001,0x02a9c8a2 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #11",0x00010001,0x02a9c8a2 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #12",0x00010001,0x02d3e3d0 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #13",0x00010001,0x00649759 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #14",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #15",0x00010001,0x02a9c8a2 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #16",0x00010001,0x02649759 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #17",0x00010001,0x02649759 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #18",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #19",0x00010001,0x00d3e3d0 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #20",0x00010001,0x02d3e3d0 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #21",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #22",0x00010001,0x02a9c8a2 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #23",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #24",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #25",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #26",0x00010001,0x02649759 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #27",0x00010001,0x00e8c898 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #28",0x00010001,0x00b0cca8 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #29",0x00010001,0x00649759 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #30",0x00010001,0x00a9c8a2 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Contrast",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","LegacyName",0x00020000,"Green Olive" +; High Contrast 1 +HKCU,"Control Panel\Appearance\New Schemes\4","DisplayName",0x00020000,"@themeui.dll,-851" +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Flat Menus",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #0",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #1",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #2",0x00010001,0x00ff0000 +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #3",0x00010001,0x00ffff00 +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #4",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #5",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #6",0x00010001,0x02ffffff +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #7",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #8",0x00010001,0x0000ffff +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #9",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #10",0x00010001,0x00ff0000 +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #11",0x00010001,0x00ffff00 +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #12",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #13",0x00010001,0x00008000 +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #14",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #15",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #16",0x00010001,0x02808080 +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #17",0x00010001,0x0200ff00 +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #18",0x00010001,0x02ffffff +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #19",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #20",0x00010001,0x02c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #21",0x00010001,0x02ffffff +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #22",0x00010001,0x02ffffff +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #23",0x00010001,0x0000ffff +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #24",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #25",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #26",0x00010001,0x02800080 +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #27",0x00010001,0x00ff0000 +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #28",0x00010001,0x00ffff00 +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #29",0x00010001,0x00008000 +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #30",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Contrast",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","LegacyName",0x00020000,"High Contrast 1" +; High Contrast 2 +HKCU,"Control Panel\Appearance\New Schemes\5","DisplayName",0x00020000,"@themeui.dll,-851" +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Flat Menus",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #0",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #1",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #2",0x00010001,0x00ffff00 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #3",0x00010001,0x00ff0000 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #4",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #5",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #6",0x00010001,0x02ffffff +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #7",0x00010001,0x0000ff00 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #8",0x00010001,0x0000ff00 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #9",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #10",0x00010001,0x00ffff00 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #11",0x00010001,0x00ff0000 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #12",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #13",0x00010001,0x00ff0000 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #14",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #15",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #16",0x00010001,0x02808080 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #17",0x00010001,0x0200ff00 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #18",0x00010001,0x0000ff00 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #19",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #20",0x00010001,0x02c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #21",0x00010001,0x02ffffff +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #22",0x00010001,0x02ffffff +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #23",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #24",0x00010001,0x0000ffff +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #25",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #26",0x00010001,0x02800080 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #27",0x00010001,0x00ffff00 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #28",0x00010001,0x00ff0000 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #29",0x00010001,0x00ff0000 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #30",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Contrast",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","LegacyName",0x00020000,"High Contrast 2" +; High Contrast Black +HKCU,"Control Panel\Appearance\New Schemes\6","DisplayName",0x00020000,"@themeui.dll,-851" +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Flat Menus",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #0",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #1",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #2",0x00010001,0x00800080 +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #3",0x00010001,0x00008000 +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #4",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #5",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #6",0x00010001,0x02ffffff +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #7",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #8",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #9",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #10",0x00010001,0x0200ffff +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #11",0x00010001,0x02008000 +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #12",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #13",0x00010001,0x00800080 +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #14",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #15",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #16",0x00010001,0x02808080 +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #17",0x00010001,0x0200ff00 +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #18",0x00010001,0x02ffffff +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #19",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #20",0x00010001,0x02c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #21",0x00010001,0x02ffffff +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #22",0x00010001,0x02ffffff +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #23",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #24",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #25",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #26",0x00010001,0x02800080 +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #27",0x00010001,0x00800080 +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #28",0x00010001,0x00008000 +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #29",0x00010001,0x00800080 +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #30",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Contrast",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","LegacyName",0x00020000,"High Contrast Black" +; High Contrast White +HKCU,"Control Panel\Appearance\New Schemes\7","DisplayName",0x00020000,"@themeui.dll,-851" +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Flat Menus",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #0",0x00010001,0x02ffffff +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #1",0x00010001,0x02ffffff +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #2",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #3",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #4",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #5",0x00010001,0x02ffffff +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #6",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #7",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #8",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #9",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #10",0x00010001,0x02808080 +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #11",0x00010001,0x02c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #12",0x00010001,0x02808080 +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #13",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #14",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #15",0x00010001,0x02ffffff +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #16",0x00010001,0x02808080 +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #17",0x00010001,0x0200ff00 +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #18",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #19",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #20",0x00010001,0x02c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #21",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #22",0x00010001,0x02c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #23",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #24",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #25",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #26",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #27",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #28",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #29",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #30",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Contrast",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","LegacyName",0x00020000,"High Contrast White" +; Lilac +HKCU,"Control Panel\Appearance\New Schemes\8","DisplayName",0x00020000,"@themeui.dll,-851" +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Flat Menus",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #0",0x00010001,0x02d9a8ae +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #1",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #2",0x00010001,0x00b14e5a +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #3",0x00010001,0x00808080 +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #4",0x00010001,0x00d9a8ae +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #5",0x00010001,0x02ffffff +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #6",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #7",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #8",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #9",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #10",0x00010001,0x02d9a8ae +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #11",0x00010001,0x02d9a8ae +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #12",0x00010001,0x02b14e5a +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #13",0x00010001,0x00b14e5a +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #14",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #15",0x00010001,0x02d9a8ae +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #16",0x00010001,0x02b14e5a +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #17",0x00010001,0x02b14e5a +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #18",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #19",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #20",0x00010001,0x02ecd5d8 +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #21",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #22",0x00010001,0x02d9a8ae +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #23",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #24",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #25",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #26",0x00010001,0x02b14e5a +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #27",0x00010001,0x00cb8fb6 +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #28",0x00010001,0x00d0b4b8 +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #29",0x00010001,0x00b14e5a +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #30",0x00010001,0x00d9a8ae +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Contrast",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","LegacyName",0x00020000,"Lilac" +; Maple +HKCU,"Control Panel\Appearance\New Schemes\9","DisplayName",0x00020000,"@themeui.dll,-851" +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Flat Menus",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #0",0x00010001,0x02d7ecf2 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #1",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #2",0x00010001,0x00000080 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #3",0x00010001,0x0046a6c6 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #4",0x00010001,0x00aed8e6 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #5",0x00010001,0x02ffffff +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #6",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #7",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #8",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #9",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #10",0x00010001,0x02aed8e6 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #11",0x00010001,0x02aed8e6 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #12",0x00010001,0x0246a6c6 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #13",0x00010001,0x0046a6c6 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #14",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #15",0x00010001,0x02aed8e6 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #16",0x00010001,0x0246a6c6 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #17",0x00010001,0x0246a6c6 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #18",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #19",0x00010001,0x00d7ecf2 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #20",0x00010001,0x02d7ecf2 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #21",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #22",0x00010001,0x02aed8e6 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #23",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #24",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #25",0x00010001,0x02c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #26",0x00010001,0x0246a6c6 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #27",0x00010001,0x00389cc0 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #28",0x00010001,0x0088c8e0 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #29",0x00010001,0x0046a6c6 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #30",0x00010001,0x00aed8e6 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Contrast",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","LegacyName",0x00020000,"Maple" +; Marine +HKCU,"Control Panel\Appearance\New Schemes\10","DisplayName",0x00020000,"@themeui.dll,-851" +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Flat Menus",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #0",0x00010001,0x02d8e0c8 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #1",0x00010001,0x00474e2c +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #2",0x00010001,0x00800000 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #3",0x00010001,0x00889048 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #4",0x00010001,0x00b8c088 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #5",0x00010001,0x02d8e0c8 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #6",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #7",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #8",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #9",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #10",0x00010001,0x02b8c088 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #11",0x00010001,0x02b8c088 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #12",0x00010001,0x00848d4b +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #13",0x00010001,0x00800000 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #14",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #15",0x00010001,0x02b8c088 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #16",0x00010001,0x02889048 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #17",0x00010001,0x02889048 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #18",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #19",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #20",0x00010001,0x02d8e0c8 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #21",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #22",0x00010001,0x02b8c088 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #23",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #24",0x00010001,0x00d8e0c8 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #25",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #26",0x00010001,0x02800000 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #27",0x00010001,0x00c0b418 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #28",0x00010001,0x00d8cc78 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #29",0x00010001,0x00800000 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #30",0x00010001,0x00b8c088 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Contrast",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","LegacyName",0x00020000,"Marine" +; Plum +HKCU,"Control Panel\Appearance\New Schemes\11","DisplayName",0x00020000,"@themeui.dll,-869" +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Flat Menus",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #0",0x00010001,0x00c8d0d8 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #1",0x00010001,0x00402840 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #2",0x00010001,0x00604048 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #3",0x00010001,0x00586078 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #4",0x00010001,0x009098a8 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #5",0x00010001,0x00c8d0d8 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #6",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #7",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #8",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #9",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #10",0x00010001,0x009098a8 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #11",0x00010001,0x009098a8 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #12",0x00010001,0x005a6374 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #13",0x00010001,0x00808000 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #14",0x00010001,0x00c8d0d8 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #15",0x00010001,0x009098a8 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #16",0x00010001,0x00586078 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #17",0x00010001,0x00586078 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #18",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #19",0x00010001,0x009098a8 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #20",0x00010001,0x00c8d0d8 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #21",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #22",0x00010001,0x009098a8 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #23",0x00010001,0x00580030 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #24",0x00010001,0x00c8ccd5 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #25",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #26",0x00010001,0x00604048 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #27",0x00010001,0x00b884a0 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #28",0x00010001,0x007898a8 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #29",0x00010001,0x00808000 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #30",0x00010001,0x009098a8 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Contrast",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","LegacyName",0x00020000,"Plum" +; Pumpkin +HKCU,"Control Panel\Appearance\New Schemes\12","DisplayName",0x00020000,"@themeui.dll,-851" +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Flat Menus",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #0",0x00010001,0x02cfeaf5 +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #1",0x00010001,0x00420042 +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #2",0x00010001,0x002fa5d7 +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #3",0x00010001,0x00a4a0a0 +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #4",0x00010001,0x009dd5ec +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #5",0x00010001,0x02ffffff +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #6",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #7",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #8",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #9",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #10",0x00010001,0x029dd5ec +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #11",0x00010001,0x029dd5ec +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #12",0x00010001,0x02cfeaf5 +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #13",0x00010001,0x00800080 +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #14",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #15",0x00010001,0x029dd5ec +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #16",0x00010001,0x022fa5d7 +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #17",0x00010001,0x022fa5d7 +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #18",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #19",0x00010001,0x00cfeaf5 +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #20",0x00010001,0x02cfeaf5 +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #21",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #22",0x00010001,0x029dd5ec +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #23",0x00010001,0x00800080 +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #24",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #25",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #26",0x00010001,0x022fa5d7 +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #27",0x00010001,0x0088cce0 +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #28",0x00010001,0x0090ccd0 +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #29",0x00010001,0x00800080 +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #30",0x00010001,0x009dd5ec +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Contrast",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","LegacyName",0x00020000,"Pumpkin" +; Rainy Day +HKCU,"Control Panel\Appearance\New Schemes\13","DisplayName",0x00020000,"@themeui.dll,-851" +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Flat Menus",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #0",0x00010001,0x02d9ccc1 +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #1",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #2",0x00010001,0x007d654f +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #3",0x00010001,0x00808080 +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #4",0x00010001,0x00b19983 +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #5",0x00010001,0x02ffffff +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #6",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #7",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #8",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #9",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #10",0x00010001,0x02b19983 +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #11",0x00010001,0x02b19983 +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #12",0x00010001,0x02808080 +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #13",0x00010001,0x007d654f +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #14",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #15",0x00010001,0x02b19983 +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #16",0x00010001,0x027d654f +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #17",0x00010001,0x027d654f +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #18",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #19",0x00010001,0x00d9ccc1 +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #20",0x00010001,0x02d9ccc1 +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #21",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #22",0x00010001,0x02b19983 +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #23",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #24",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #25",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #26",0x00010001,0x027d654f +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #27",0x00010001,0x00d0b480 +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #28",0x00010001,0x00d0bcb0 +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #29",0x00010001,0x007d654f +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #30",0x00010001,0x00b19983 +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Contrast",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","LegacyName",0x00020000,"Rainy Day" +; ReactOS Classic +HKCU,"Control Panel\Appearance\New Schemes\14","DisplayName",0x00020000,"@themeui.dll,-880" +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Flat Menus",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #0",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #1",0x00010001,0x00a56e3a +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #2",0x00010001,0x00800000 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #3",0x00010001,0x00808080 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #4",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #5",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #6",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #7",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #8",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #9",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #10",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #11",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #12",0x00010001,0x00808080 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #13",0x00010001,0x00800000 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #14",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #15",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #16",0x00010001,0x00808080 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #17",0x00010001,0x00808080 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #18",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #19",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #20",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #21",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #22",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #23",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #24",0x00010001,0x00e1ffff +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #25",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #26",0x00010001,0x00800000 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #27",0x00010001,0x00d08410 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #28",0x00010001,0x00b5b5b5 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #29",0x00010001,0x00800000 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #30",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Contrast",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","LegacyName",0x00020000,"ReactOS Classic" +; Rose +HKCU,"Control Panel\Appearance\New Schemes\15","DisplayName",0x00020000,"@themeui.dll,-851" +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Flat Menus",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #0",0x00010001,0x02b7afcf +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #1",0x00010001,0x02808080 +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #2",0x00010001,0x0070609f +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #3",0x00010001,0x00a4a0a0 +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #4",0x00010001,0x00b7afcf +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #5",0x00010001,0x02ffffff +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #6",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #7",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #8",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #9",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #10",0x00010001,0x02b7afcf +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #11",0x00010001,0x02b7afcf +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #12",0x00010001,0x0270609f +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #13",0x00010001,0x0070609f +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #14",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #15",0x00010001,0x02b7afcf +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #16",0x00010001,0x0270609f +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #17",0x00010001,0x0270609f +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #18",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #19",0x00010001,0x007d7d7d +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #20",0x00010001,0x02dcd8e7 +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #21",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #22",0x00010001,0x02b7afcf +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #23",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #24",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #25",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #26",0x00010001,0x0270609f +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #27",0x00010001,0x00d0ccd8 +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #28",0x00010001,0x00d0d4d0 +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #29",0x00010001,0x0070609f +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #30",0x00010001,0x00b7afcf +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Contrast",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","LegacyName",0x00020000,"Rose" +; Sand +HKCU,"Control Panel\Appearance\New Schemes\16","DisplayName",0x00020000,"@themeui.dll,-851" +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Flat Menus",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #0",0x00010001,0x02dde6ea +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #1",0x00010001,0x02688da2 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #2",0x00010001,0x00808000 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #3",0x00010001,0x00688da2 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #4",0x00010001,0x00bbccd5 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #5",0x00010001,0x02ffffff +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #6",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #7",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #8",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #9",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #10",0x00010001,0x02bbccd5 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #11",0x00010001,0x02bbccd5 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #12",0x00010001,0x02688da2 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #13",0x00010001,0x00808000 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #14",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #15",0x00010001,0x02bbccd5 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #16",0x00010001,0x02688da2 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #17",0x00010001,0x02688da2 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #18",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #19",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #20",0x00010001,0x02dde6ea +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #21",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #22",0x00010001,0x02bbccd5 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #23",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #24",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #25",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #26",0x00010001,0x02808000 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #27",0x00010001,0x00aabd84 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #28",0x00010001,0x0080d0e8 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #29",0x00010001,0x00808000 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #30",0x00010001,0x00bbccd5 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Contrast",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","LegacyName",0x00020000,"Sand" +; Sky (WinXP-like) +HKCU,"Control Panel\Appearance\New Schemes\17","DisplayName",0x00020000,"@themeui.dll,-851" +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Flat Menus",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #0",0x00010001,0x00c8d0d4 +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #1",0x00010001,0x00984e00 +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #2",0x00010001,0x00e35400 +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #3",0x00010001,0x00df967a +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #4",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #5",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #6",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #7",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #8",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #9",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #10",0x00010001,0x00c8d0d4 +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #11",0x00010001,0x00c8d0d4 +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #12",0x00010001,0x00808080 +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #13",0x00010001,0x00c56a31 +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #14",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #15",0x00010001,0x00d8e9ec +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #16",0x00010001,0x0099a8ac +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #17",0x00010001,0x0099a8ac +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #18",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #19",0x00010001,0x00f8e4d8 +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #20",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #21",0x00010001,0x00646f71 +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #22",0x00010001,0x00e2eff1 +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #23",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #24",0x00010001,0x00e1ffff +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #25",0x00010001,0x00b5b5b5 +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #26",0x00010001,0x00800000 +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #27",0x00010001,0x00ff953d +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #28",0x00010001,0x00ebb99d +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #29",0x00010001,0x00c56a31 +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #30",0x00010001,0x00d8e9ec +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Contrast",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","LegacyName",0x00020000,"Sky" +; Slate +HKCU,"Control Panel\Appearance\New Schemes\18","DisplayName",0x00020000,"@themeui.dll,-851" +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Flat Menus",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #0",0x00010001,0x02e3dcce +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #1",0x00010001,0x00414141 +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #2",0x00010001,0x00978055 +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #3",0x00010001,0x00808080 +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #4",0x00010001,0x00c8b99d +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #5",0x00010001,0x02ffffff +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #6",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #7",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #8",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #9",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #10",0x00010001,0x02c8b99d +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #11",0x00010001,0x02c8b99d +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #12",0x00010001,0x00424242 +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #13",0x00010001,0x00978055 +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #14",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #15",0x00010001,0x02c8b99d +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #16",0x00010001,0x02978055 +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #17",0x00010001,0x02978055 +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #18",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #19",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #20",0x00010001,0x02e3dcce +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #21",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #22",0x00010001,0x02c8b99d +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #23",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #24",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #25",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #26",0x00010001,0x02978055 +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #27",0x00010001,0x00d8b888 +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #28",0x00010001,0x00c8bca0 +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #29",0x00010001,0x00978055 +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #30",0x00010001,0x00c8b99d +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Contrast",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","LegacyName",0x00020000,"Slate" +; Storm +HKCU,"Control Panel\Appearance\New Schemes\19","DisplayName",0x00020000,"@themeui.dll,-851" +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Flat Menus",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #0",0x00010001,0x02c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #1",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #2",0x00010001,0x00800080 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #3",0x00010001,0x00808080 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #4",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #5",0x00010001,0x02ffffff +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #6",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #7",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #8",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #9",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #10",0x00010001,0x02c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #11",0x00010001,0x02c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #12",0x00010001,0x02808080 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #13",0x00010001,0x00800080 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #14",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #15",0x00010001,0x02c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #16",0x00010001,0x02808080 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #17",0x00010001,0x02808080 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #18",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #19",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #20",0x00010001,0x02ffffff +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #21",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #22",0x00010001,0x02c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #23",0x00010001,0x00800080 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #24",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #25",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #26",0x00010001,0x02800080 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #27",0x00010001,0x00b08c38 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #28",0x00010001,0x00a8aca8 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #29",0x00010001,0x00800080 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #30",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Contrast",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","LegacyName",0x00020000,"Storm" +; Teal +HKCU,"Control Panel\Appearance\New Schemes\20","DisplayName",0x00020000,"@themeui.dll,-851" +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Flat Menus",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #0",0x00010001,0x02c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #1",0x00010001,0x00404000 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #2",0x00010001,0x00808000 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #3",0x00010001,0x00808080 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #4",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #5",0x00010001,0x02ffffff +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #6",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #7",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #8",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #9",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #10",0x00010001,0x02c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #11",0x00010001,0x02c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #12",0x00010001,0x02808080 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #13",0x00010001,0x00808000 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #14",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #15",0x00010001,0x02c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #16",0x00010001,0x02808080 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #17",0x00010001,0x02808080 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #18",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #19",0x00010001,0x00f0fbff +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #20",0x00010001,0x02ffffff +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #21",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #22",0x00010001,0x02c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #23",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #24",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #25",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #26",0x00010001,0x02808000 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #27",0x00010001,0x00d8cc00 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #28",0x00010001,0x00b8c898 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #29",0x00010001,0x00808000 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #30",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Contrast",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","LegacyName",0x00020000,"Teal" +; Wheat +HKCU,"Control Panel\Appearance\New Schemes\21","DisplayName",0x00020000,"@themeui.dll,-851" +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Flat Menus",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #0",0x00010001,0x02d0eeee +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #1",0x00010001,0x021d4000 +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #2",0x00010001,0x00008080 +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #3",0x00010001,0x0041bcbc +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #4",0x00010001,0x00a0dede +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #5",0x00010001,0x02ffffff +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #6",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #7",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #8",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #9",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #10",0x00010001,0x02a0dede +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #11",0x00010001,0x02a0dede +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #12",0x00010001,0x0241bcbc +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #13",0x00010001,0x00008080 +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #14",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #15",0x00010001,0x02a0dede +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #16",0x00010001,0x0241bcbc +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #17",0x00010001,0x0241bcbc +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #18",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #19",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #20",0x00010001,0x02d0eeee +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #21",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #22",0x00010001,0x02a0dede +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #23",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #24",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #25",0x00010001,0x02c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #26",0x00010001,0x02008080 +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #27",0x00010001,0x0048b0c8 +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #28",0x00010001,0x0080b8b8 +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #29",0x00010001,0x00008080 +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #30",0x00010001,0x00a0dede +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Contrast",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","LegacyName",0x00020000,"Wheat" + +HKCU,"Control Panel\Sound","Beep",2,"yes" +HKCU,"Control Panel\Sound","ExtendedSounds",2,"yes" + +HKCU,"Environment",,0x00000012 +HKCU,"Environment","TEMP",0x00020000,"%USERPROFILE%\Local Settings\Temp" +HKCU,"Environment","TMP",0x00020000,"%USERPROFILE%\Local Settings\Temp" + +HKCU,"SOFTWARE",,0x00000012 +HKCU,"SOFTWARE\Policies",,0x00000012 +HKCU,"SOFTWARE\Microsoft",,0x00000012 + +; DirectX version report as DirectX 9.0 +HKCU,"SOFTWARE\Microsoft\DirectX","Debug",0x00010001,0x00000000 +HKCU,"SOFTWARE\Microsoft\DirectX","InstalledVersion",0x00000001,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x00 +HKCU,"SOFTWARE\Microsoft\DirectX","InstallMDX",0x00010001,0x00000001 +HKCU,"SOFTWARE\Microsoft\DirectX","RC",0x00010001,0x00000000 +HKCU,"SOFTWARE\Microsoft\DirectX","Version",0x00000000,"5.03.2600.2180" + +; Open With settings +HKCU,"SOFTWARE\Classes",,0x00000012 +HKCU,"SOFTWARE\Classes\Applications",,0x00000012 + +; Current user shell folder settings +HKCU,"SOFTWARE\Microsoft\Windows",,0x00000012 +HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion",,0x00000012 +HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer",,0x00000012 +HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders",,0x00000012 +HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders",,0x00000012 +HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts",,0x00000012 +HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons",,0x00000012 +HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\ClassicStartMenu",,0x00000012 +HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\ClassicStartMenu","{208D2C60-3AEA-1069-A2D7-08002B30309D}",0x00010001,0x00000000 +HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}",,0x00000012 + +; default shell +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon",,0x00000012 +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon","Shell",0x00020000,"%SystemRoot%\explorer.exe" + +HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Policies",,0x00000012 +HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Run",,0x00000012 +HKCU,"Software\Microsoft\Windows\CurrentVersion\Telephony",,0x00000012 +HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall",,0x00000012 + +HKCU,"SOFTWARE\Microsoft\Windows NT",,0x00000012 +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion",,0x00000012 +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Devices",,0x00000012 +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Network",,0x00000012 +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\PrinterPorts",,0x00000012 +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Program Manager",,0x00000012 + +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows","DebugOptions",2,"2048" +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows","device",2,"" +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows","Documents",2,"" +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows","DosPrint",2,"no" +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows","load",2,"" +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows","NetMessage",2,"no" +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows","NullPort",2,"None" +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows","Programs",2,"com exe bat pif cmd" + +; Application compatibility settings for Windows 95 +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN95","MajorVersion",0x00010001,0x00000004 +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN95","MinorVersion",0x00010001,0x0000000A +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN95","BuildNumber",0x00010001,0x000003B6 +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN95","PlatformId",0x00010001,0x00000001 +; Application compatibility settings for Windows 98/ME +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN98","MajorVersion",0x00010001,0x00000004 +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN98","MinorVersion",0x00010001,0x00000000 +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN98","BuildNumber",0x00010001,0x000008AE +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN98","PlatformId",0x00010001,0x00000001 +; Application compatibility settings for Windows NT 4 Service Pack 5 +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\NT4SP5","MajorVersion",0x00010001,0x00000004 +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\NT4SP5","MinorVersion",0x00010001,0x00000000 +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\NT4SP5","BuildNumber",0x00010001,0x00000565 +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\NT4SP5","PlatformId",0x00010001,0x00000002 +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\NT4SP5","SPMajorVersion",0x00010001,0x00000005 +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\NT4SP5","SPMinorVersion",0x00010001,0x00000000 +; Application compatibility settings for Windows 2000 +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN2000","MajorVersion",0x00010001,0x00000005 +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN2000","MinorVersion",0x00010001,0x00000000 +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN2000","BuildNumber",0x00010001,0x00000893 +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN2000","PlatformId",0x00010001,0x00000002 +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN2000","SPMajorVersion",0x00010001,0x00000003 +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN2000","SPMinorVersion",0x00010001,0x00000000 +; Application compatibility settings for Windows XP +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WINXP","MajorVersion",0x00010001,0x00000005 +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WINXP","MinorVersion",0x00010001,0x00000001 +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WINXP","BuildNumber",0x00010001,0x00000A28 +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WINXP","PlatformId",0x00010001,0x00000002 +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WINXP","SPMajorVersion",0x00010001,0x00000001 +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WINXP","SPMinorVersion",0x00010001,0x00000000 + +; DEBUG: Windows Messages SPY configuration +HKCU,"SOFTWARE\ReactOS\Debug","SpyInclude",0x00020000,"INCLUDEALL" +;HKCU,"SOFTWARE\ReactOS\Debug","SpyExclude",0x00020000,"" +;HKCU,"SOFTWARE\ReactOS\Debug","SpyExcludeDWP",0x00020000,"" + +; Internet Explorer + +HKCU,Software\Wine\MSHTML,"GeckoUrl",,"http://source.winehq.org/winegecko.php" +HKCU,Software\Wine\MSHTML,"GeckoCabDir",0x00020000,"%SystemRoot%\" + +; Sound Schemes +HKCU,"AppEvents",,0x00000012 +HKCU,"AppEvents\Schemes","",0x00000000,".Default" +HKCU,"AppEvents\Schemes\Apps",,0x00000012 +HKCU,"AppEvents\Schemes\Apps\.Default","",0x00000000,"ReactOS" +HKCU,"AppEvents\Schemes\Apps\.Default","DispFileName",0x00000000,"@mmsys.cpl,-5856" +HKCU,"AppEvents\Schemes\Apps\.Default\.Default",,0x00000012 +HKCU,"AppEvents\Schemes\Apps\.Default\.Default\.Current","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\.Default\.Default","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\AppGPFault",,0x00000012 +HKCU,"AppEvents\Schemes\Apps\.Default\AppGPFault\.Current","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\AppGPFault\.Default","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\Close",,0x00000012 +HKCU,"AppEvents\Schemes\Apps\.Default\Close\.Current","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\Close\.Default","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\CriticalBatteryAlarm",,0x00000012 +HKCU,"AppEvents\Schemes\Apps\.Default\CriticalBatteryAlarm\.Current","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\CriticalBatteryAlarm\.Default","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\DeviceConnect",,0x00000012 +HKCU,"AppEvents\Schemes\Apps\.Default\DeviceConnect\.Current","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\DeviceConnect\.Default","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\DeviceDisconnect",,0x00000012 +HKCU,"AppEvents\Schemes\Apps\.Default\DeviceDisconnect\.Current","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\DeviceDisconnect\.Default","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\DeviceFail",,0x00000012 +HKCU,"AppEvents\Schemes\Apps\.Default\DeviceFail\.Current","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\DeviceFail\.Default","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\LowBatteryAlarm",,0x00000012 +HKCU,"AppEvents\Schemes\Apps\.Default\LowBatteryAlarm\.Current","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\LowBatteryAlarm\.Default","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\MailBeep",,0x00000012 +HKCU,"AppEvents\Schemes\Apps\.Default\MailBeep\.Current","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\MailBeep\.Default","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\Maximize",,0x00000012 +HKCU,"AppEvents\Schemes\Apps\.Default\Maximize\.Current","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\Maximize\.Default","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\MenuCommand",,0x00000012 +HKCU,"AppEvents\Schemes\Apps\.Default\MenuCommand\.Current","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\MenuCommand\.Default","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\MenuPopup",,0x00000012 +HKCU,"AppEvents\Schemes\Apps\.Default\MenuPopup\.Current","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\MenuPopup\.Default","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\Minimize",,0x00000012 +HKCU,"AppEvents\Schemes\Apps\.Default\Minimize\.Current","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\Minimize\.Default","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\Open",,0x00000012 +HKCU,"AppEvents\Schemes\Apps\.Default\Open\.Current","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\Open\.Default","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\PrintComplete",,0x00000012 +HKCU,"AppEvents\Schemes\Apps\.Default\PrintComplete\.Current","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\PrintComplete\.Default","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\RestoreDown",,0x00000012 +HKCU,"AppEvents\Schemes\Apps\.Default\RestoreDown\.Current","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\RestoreDown\.Default","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\RestoreUp",,0x00000012 +HKCU,"AppEvents\Schemes\Apps\.Default\RestoreUp\.Current","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\RestoreUp\.Default","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\SystemAsterisk",,0x00000012 +HKCU,"AppEvents\Schemes\Apps\.Default\SystemAsterisk\.Current","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\SystemAsterisk\.Default","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\SystemExclamation",,0x00000012 +HKCU,"AppEvents\Schemes\Apps\.Default\SystemExclamation\.Current","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\SystemExclamation\.Default","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\SystemExit",,0x00000012 +HKCU,"AppEvents\Schemes\Apps\.Default\SystemExit\.Current","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\SystemExit\.Default","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\SystemHand",,0x00000012 +HKCU,"AppEvents\Schemes\Apps\.Default\SystemHand\.Current","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\SystemHand\.Default","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\SystemNotification",,0x00000012 +HKCU,"AppEvents\Schemes\Apps\.Default\SystemNotification\.Current","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\SystemNotification\.Default","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\SystemQuestion",,0x00000012 +HKCU,"AppEvents\Schemes\Apps\.Default\SystemQuestion\.Current","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\SystemQuestion\.Default","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\SystemStart",,0x00000012 +HKCU,"AppEvents\Schemes\Apps\.Default\SystemStart\.Current","",0x00020000,"%SystemRoot%\media\ReactOS_LogOn.wav" +HKCU,"AppEvents\Schemes\Apps\.Default\SystemStart\.Default","",0x00020000,"%SystemRoot%\media\ReactOS_LogOn.wav" +HKCU,"AppEvents\Schemes\Apps\.Default\WindowsLogoff",,0x00000012 +HKCU,"AppEvents\Schemes\Apps\.Default\WindowsLogoff\.Current","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\WindowsLogoff\.Default","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\WindowsLogon",,0x00000012 +HKCU,"AppEvents\Schemes\Apps\.Default\WindowsLogon\.Current","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\WindowsLogon\.Default","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\Explorer","",0x00000002,"ReactOS Explorer" +HKCU,"AppEvents\Schemes\Apps\Explorer","DispFileName",0x00000000,"@mmsys.cpl,-5854" +HKCU,"AppEvents\Schemes\Apps\Explorer\EmptyRecycleBin",,0x00000012 +HKCU,"AppEvents\Schemes\Apps\Explorer\EmptyRecycleBin\.Current","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\Explorer\EmptyRecycleBin\.Default","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\Explorer\Navigating",,0x00000012 +HKCU,"AppEvents\Schemes\Apps\Explorer\Navigating\.Current","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\Explorer\Navigating\.Default","",0x00020000,"" +HKCU,"AppEvents\Schemes\Names",,0x00000012 +HKCU,"AppEvents\Schemes\Names\.Default","",0x00000002,"ReactOS Default" +HKCU,"AppEvents\Schemes\Names\.None","",0x00000002,"No sounds" + +HKCU,"AppEvents\EventLabels",,0x00000012 +HKCU,"AppEvents\EventLabels\.Default","",0x00000000,"Default Beep" +HKCU,"AppEvents\EventLabels\.Default","DispFileName",0x00000000,"@mmsys.cpl,-5824" +HKCU,"AppEvents\EventLabels\AppGPFault","",0x00000000,"Program error" +HKCU,"AppEvents\EventLabels\AppGPFault","DispFileName",0x00000000,"@mmsys.cpl,-5825" +HKCU,"AppEvents\EventLabels\Close","",0x00000000,"Close program" +HKCU,"AppEvents\EventLabels\Close","DispFileName",0x00000000,"@mmsys.cpl,-5826" +HKCU,"AppEvents\EventLabels\CriticalBatteryAlarm","",0x00000000,"Critical Battery Alarm" +HKCU,"AppEvents\EventLabels\CriticalBatteryAlarm","DispFileName",0x00000000,"@mmsys.cpl,-5827" +HKCU,"AppEvents\EventLabels\DeviceConnect","",0x00000000,"Device Connect" +HKCU,"AppEvents\EventLabels\DeviceConnect","DispFileName",0x00000000,"@mmsys.cpl,-5828" +HKCU,"AppEvents\EventLabels\DeviceDisconnect","",0x00000000,"Device Disconnect" +HKCU,"AppEvents\EventLabels\DeviceDisconnect","DispFileName",0x00000000,"@mmsys.cpl,-5829" +HKCU,"AppEvents\EventLabels\DeviceFail","",0x00000000,"Device Failed to Connect" +HKCU,"AppEvents\EventLabels\DeviceFail","DispFileName",0x00000000,"@mmsys.cpl,-5830" +HKCU,"AppEvents\EventLabels\EmptyRecycleBin","",0x00000000,"Empty Recycle Bin" +HKCU,"AppEvents\EventLabels\EmptyRecycleBin","DispFileName",0x00000000,"@mmsys.cpl,-5831" +HKCU,"AppEvents\EventLabels\LowBatteryAlarm","",0x00000000,"Low Battery Alarm" +HKCU,"AppEvents\EventLabels\LowBatteryAlarm","DispFileName",0x00000000,"@mmsys.cpl,-5832" +HKCU,"AppEvents\EventLabels\Maximize","",0x00000000,"Maximize" +HKCU,"AppEvents\EventLabels\Maximize","DispFileName",0x00000000,"@mmsys.cpl,-5833" +HKCU,"AppEvents\EventLabels\MenuCommand","",0x00000000,"Menu command" +HKCU,"AppEvents\EventLabels\MenuCommand","DispFileName",0x00000000,"@mmsys.cpl,-5834" +HKCU,"AppEvents\EventLabels\MenuPopup","",0x00000000,"Menu popup" +HKCU,"AppEvents\EventLabels\MenuPopup","DispFileName",0x00000000,"@mmsys.cpl,-5835" +HKCU,"AppEvents\EventLabels\Minimize","",0x00000000,"Minimize" +HKCU,"AppEvents\EventLabels\Minimize","DispFileName",0x00000000,"@mmsys.cpl,-5836" +HKCU,"AppEvents\EventLabels\MailBeep","",0x00000000,"New Mail Notification" +HKCU,"AppEvents\EventLabels\MailBeep","DispFileName",0x00000000,"@mmsys.cpl,-5837" +HKCU,"AppEvents\EventLabels\Navigating","",0x00000000,"Start Navigation" +HKCU,"AppEvents\EventLabels\Navigating","DispFileName",0x00000000,"@mmsys.cpl,-5838" +HKCU,"AppEvents\EventLabels\Open","",0x00000000,"Open program" +HKCU,"AppEvents\EventLabels\Open","DispFileName",0x00000000,"@mmsys.cpl,-5839" +HKCU,"AppEvents\EventLabels\PrintComplete","",0x00000000,"Print Complete" +HKCU,"AppEvents\EventLabels\PrintComplete","DispFileName",0x00000000,"@mmsys.cpl,-5840" +HKCU,"AppEvents\EventLabels\RestoreDown","",0x00000000,"Restore Down" +HKCU,"AppEvents\EventLabels\RestoreDown","DispFileName",0x00000000,"@mmsys.cpl,-5841" +HKCU,"AppEvents\EventLabels\RestoreUp","",0x00000000,"Restore Up" +HKCU,"AppEvents\EventLabels\RestoreUp","DispFileName",0x00000000,"@mmsys.cpl,-5842" +HKCU,"AppEvents\EventLabels\SystemAsterisk","",0x00000000,"Asterisk" +HKCU,"AppEvents\EventLabels\SystemAsterisk","DispFileName",0x00000000,"@mmsys.cpl,-5843" +HKCU,"AppEvents\EventLabels\SystemExclamation","",0x00000000,"Exclamation" +HKCU,"AppEvents\EventLabels\SystemExclamation","DispFileName",0x00000000,"@mmsys.cpl,-5845" +HKCU,"AppEvents\EventLabels\SystemExit","",0x00000000,"Exit ReactOS" +HKCU,"AppEvents\EventLabels\SystemExit","DispFileName",0x00000000,"@mmsys.cpl,-5846" +HKCU,"AppEvents\EventLabels\SystemHand","",0x00000000,"Critical Stop" +HKCU,"AppEvents\EventLabels\SystemHand","DispFileName",0x00000000,"@mmsys.cpl,-5847" +HKCU,"AppEvents\EventLabels\SystemNotification","",0x00000000,"System Notification" +HKCU,"AppEvents\EventLabels\SystemNotification","DispFileName",0x00000000,"@mmsys.cpl,-5848" +HKCU,"AppEvents\EventLabels\SystemQuestion","",0x00000000,"Question" +HKCU,"AppEvents\EventLabels\SystemQuestion","DispFileName",0x00000000,"@mmsys.cpl,-5849" +HKCU,"AppEvents\EventLabels\SystemStart","",0x00000000,"Start ReactOS" +HKCU,"AppEvents\EventLabels\SystemStart","DispFileName",0x00000000,"@mmsys.cpl,-5850" +HKCU,"AppEvents\EventLabels\WindowsLogoff","",0x00000000,"ReactOS Logoff" +HKCU,"AppEvents\EventLabels\WindowsLogoff","DispFileName",0x00000000,"@mmsys.cpl,-5852" +HKCU,"AppEvents\EventLabels\WindowsLogon","",0x00000000,"ReactOS Logon" +HKCU,"AppEvents\EventLabels\WindowsLogon","DispFileName",0x00000000,"@mmsys.cpl,-5853" + +; EOF diff --git a/boot/bootdata/hivesft_amd64.inf b/boot/bootdata/hivesft_amd64.inf new file mode 100644 index 00000000000..006796e8779 --- /dev/null +++ b/boot/bootdata/hivesft_amd64.inf @@ -0,0 +1,1265 @@ +[Version] +Signature="$ReactOS$ + +[AddReg] + +; Internet Explorer +HKLM,"SOFTWARE\Microsoft\Internet Explorer","Build",,"62800" +HKLM,"SOFTWARE\Microsoft\Internet Explorer","Version",,"6.0.2800.3959" +HKLM,"SOFTWARE\Microsoft\Internet Explorer","W2kVersion",,"6.0.2800.3959" + +; DirectX +HKLM,"SOFTWARE\Microsoft\DirectX","Version",0x00000000,"4.09.00.0904" + +; RPC +HKLM,"SOFTWARE\Microsoft\Rpc",,0x00000012 +HKLM,"SOFTWARE\Microsoft\Rpc\NetBios",,0x00000012 +HKLM,"SOFTWARE\Microsoft\Rpc","DCOM Protocols",0x00010002,"ncacn_ip_tcp" +HKLM,"SOFTWARE\Microsoft\Rpc\ClientProtocols","ncacn_np",0x00000000,"rpcrt4.dll" +HKLM,"SOFTWARE\Microsoft\Rpc\NameService","DefaultSyntax",2,"3" +HKLM,"SOFTWARE\Microsoft\Rpc\NameService","Endpoint",2,"\pipe\locator" +HKLM,"SOFTWARE\Microsoft\Rpc\NameService","NetworkAddress",2,"\\." +HKLM,"SOFTWARE\Microsoft\Rpc\NameService","Protocol",2,"ncacn_np" +HKLM,"SOFTWARE\Microsoft\Rpc\NameService","ServerNetworkAddress",2,"\\." +HKLM,"SOFTWARE\Microsoft\Rpc\SecurityService","1",2,"secur32.dll" +HKLM,"SOFTWARE\Microsoft\Rpc\SecurityService","10",2,"secur32.dll" +HKLM,"SOFTWARE\Microsoft\Rpc\SecurityService","14",2,"schannel.dll" +HKLM,"SOFTWARE\Microsoft\Rpc\SecurityService","16",2,"secur32.dll" +HKLM,"SOFTWARE\Microsoft\Rpc\SecurityService","18",2,"secur32.dll" +HKLM,"SOFTWARE\Microsoft\Rpc\SecurityService","68",2,"netlogon.dll" +HKLM,"SOFTWARE\Microsoft\Rpc\SecurityService","9",2,"secur32.dll" + +HKLM,"SOFTWARE\Microsoft\Secure",,0x00000012 + +; WBem +HKLM,"SOFTWARE\Microsoft\wbem\ess",,0x00000012 +HKLM,"SOFTWARE\Microsoft\wbem\Transports",,0x00000012 +HKLM,"SOFTWARE\Microsoft\wbem\Scripting",,0x00000012 +HKLM,"SOFTWARE\Microsoft\wbem","Installation Directory",0x00020000,"%SystemRoot%\system32\wbem" +HKLM,"SOFTWARE\Microsoft\wbem","MOF Self-Install Directory",0x00020000,"%SystemRoot%\system32\wbem\mof" + +; HTML Help +HKLM,"SOFTWARE\Microsoft\Active Setup\Installed Components\{de5aed00-a4bf-11d1-9948-00c04f98bbc9}",,2,"HTML Help" +HKLM,"SOFTWARE\Microsoft\Active Setup\Installed Components\{de5aed00-a4bf-11d1-9948-00c04f98bbc9}","ComponentID",2,"HTMLHelp" +HKLM,"SOFTWARE\Microsoft\Active Setup\Installed Components\{de5aed00-a4bf-11d1-9948-00c04f98bbc9}","IsInstalled",2,1 +HKLM,"SOFTWARE\Microsoft\Active Setup\Installed Components\{de5aed00-a4bf-11d1-9948-00c04f98bbc9}","Locale",2,"*" +HKLM,"SOFTWARE\Microsoft\Active Setup\Installed Components\{de5aed00-a4bf-11d1-9948-00c04f98bbc9}","Version",2,"4,74,9273,0" + +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion","DevicePath",0x00020002,"%SystemRoot%\inf" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion","MediaPathUnexpanded",0x00020000,"%SystemRoot%\Media" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths",,0x00000012 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Applets",,0x00000012 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Control Panel\Cpls",,0x00000012 +; Cursors Schemes +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Control Panel\Cursors\Schemes","ReactOS Default",0x00020000,""",,,,,,,,,,,,,""" + +; Common shell folders +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders",,0x00000012 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders",,0x00000012 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\DefragPath",,0x00000012 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\DefragPath","",0x00020000,"%systemroot%\system32\dfrg.msc %c:" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\BackupPath",,0x00000012 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\BackupPath","",0x00020000,"%SystemRoot%\system32\ntbackup.exe" + +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Run",,0x00000012 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce",,0x00000012 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx",,0x00000012 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Setup",,0x00000012 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Setup","DriverCachePath",0x00020002,"%SystemRoot%\Driver Cache" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDlls",,0x00000012 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions",,0x00000012 + +HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons",,0x00000012 +HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\ClassicStartMenu",,0x00000012 +HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\ClassicStartMenu","{208D2C60-3AEA-1069-A2D7-08002B30309D}",0x00010001,0x00000000 +HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Bitbucket",,0x00000012 +HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Bitbucket\Volume",,0x00000012 + +; CMD Settings +HKLM,"SOFTWARE\Microsoft\Command Processor","AutoRun",0x00020000,"" + +; Uninstall Application list +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall",,0x00000012 + +; Version Information +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion","CurrentVersion",0x00020000,"5.2" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion","CSDVersion",0x00020000,"Service Pack 2" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion","CurrentBuildNumber",0x00020000,"3790" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion","InstallDate",0x00010003,0 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion","ProductName",2,"ReactOS" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion","RegDone",0x00000002,"" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion","RegisteredOrganization",2,"" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion","RegisteredOwner",2,"" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion","SoftwareType",2,"System" + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Accessibility",,0x00000012 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Compatibility",,0x00000012 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Compatibility32",,0x00000012 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Network",,0x00000012 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Network\Shared Parameters",,0x00000012 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Network\SMAddOns",,0x00000012 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Network\UMAddOns",,0x00000012 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Network\World Full Access Shared Parameters",,0x00000012 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console",,0x00000012 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\Nls","00000409",2,"" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont","0",2,"Lucida Console" + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers",,0x00000012 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\drivers.desc",,0x00000012 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontMapper",,0x00000012 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\HotFix",,0x00000012 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\IME Compatibility",,0x00000012 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\IMM","LoadIMM",0x00010003,0 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\IMM","LoadCTFIME",0x00010003,0 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ports","COM1:",2,"9600,n,8,1" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ports","COM2:",2,"9600,n,8,1" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ports","COM3:",2,"9600,n,8,1" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ports","COM4:",2,"9600,n,8,1" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ports","FILE:",2,"" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ports","LPT1:",2,"" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ports","LPT2:",2,"" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ports","LPT3:",2,"" + +; Image File Execution Options (NtGlobalFlag with FLG_SHOW_LDR_SNAPS set for loadlib.exe) +HKLM,"Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\loadlib.exe","GlobalFlag",0x00000000,"0x00000002" +;HKLM,"Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\loaddll.exe","GlobalFlag",0x00000000,"0x00000002" +;HKLM,"Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\soffice.exe","GlobalFlag",0x00000000,"0x00000002" +;HKLM,"Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\tlstest.exe","GlobalFlag",0x00000000,"0x00000002" + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32","midimapper",0x00000000,"midimap.dll" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32","wavemapper",0x00000000,"msacm32.drv" +;HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32","wave",0x00000000,"sndblst.dll" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32","midi",0x00000000,"beepmidi.dll" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32","msacm.msadpcm",0x00000000,"msadp32.acm" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32","msacm.msg711",0x00000000,"msg711.acm" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32","msacm.msgsm610",0x00000000,"msgsm32.acm" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32","msacm.imaadpcm",0x00000000,"imaadp32.acm" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32","msacm.winemp3",0x00000000,"winemp3.acm" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32","vidc.cvid",0x00000000,"iccvid.dll" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32","vidc.mrle",0x00000000,"msrle32.dll" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32","vidc.msvc",0x00000000,"msvidc32.dll" + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI32","AVIVideo",0x00000002,"mciavi32.dll" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI32","CDAudio",0x00000002,"mcicda.dll" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI32","Sequencer",0x00000002,"mciseq.dll" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI32","WaveAudio",0x00000002,"mciwave.dll" + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","aifc",0x00000002,"MPEGVideo" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","asf",0x00000002,"MPEGVideo" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","asx",0x00000002,"MPEGVideo" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","au",0x00000002,"MPEGVideo" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","avi",0x00000002,"AVIVideo" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","cda",0x00000002,"CDAudio" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","lsf",0x00000002,"MPEGVideo" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","lsx",0x00000002,"MPEGVideo" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","m1v",0x00000002,"MPEGVideo" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","m3u",0x00000002,"MPEGVideo" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","mid",0x00000002,"Sequencer" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","midi",0x00000002,"Sequencer" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","mp2",0x00000002,"MPEGVideo" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","mp2v",0x00000002,"MPEGVideo" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","mp3",0x00000002,"MPEGVideo" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","mpa",0x00000002,"MPEGVideo" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","mpe",0x00000002,"MPEGVideo" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","mpeg",0x00000002,"MPEGVideo" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","mpg",0x00000002,"MPEGVideo" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","mpv",0x00000002,"MPEGVideo" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","mpv2",0x00000002,"MPEGVideo" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","rmi",0x00000002,"MPEGVideo" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","rmi",0x00000002,"Sequencer" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","snd",0x00000002,"MPEGVideo" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","wav",0x00000002,"WaveAudio" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","wax",0x00000002,"MPEGVideo" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","wm",0x00000002,"MPEGVideo" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","wma",0x00000002,"MPEGVideo" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","wmp",0x00000002,"MPEGVideo" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","wmv",0x00000002,"MPEGVideo" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","wmx",0x00000002,"MPEGVideo" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","wvx",0x00000002,"MPEGVideo" + +; Mesa OpenGL Driver +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\OpenGLDrivers","DefaultDriver",0x00000000,"Mesa" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\OpenGLDrivers\Mesa","Version",0x00010001,0x00000002 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\OpenGLDrivers\Mesa","Dll",0x00000000,"mesa32" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\OpenGLDrivers\Mesa","DriverVersion",0x00010001,0x00000010 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\OpenGLDrivers\Mesa","Flags",0x00010001,0x00000001 + +; User Profile List +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList",,0x00000012 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList","ProfilesDirectory",0x00020000,"%SystemDrive%\Documents and Settings" + +; Font substitutes +; SysFontSubstitutes are also returned by EnumFontFamilies, FontSubstitutes aren't +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts",,0x00000012 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes",,0x00000012 + +; Time zone settings +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones",,0x00000012 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones","IndexMapping",0x00010000,\ + "409", "4",\ + "1009", "4",\ + "2809", "20",\ + "80a", "30",\ + "440a", "30",\ + "480a", "30",\ + "4c0a", "30",\ + "140a", "30",\ + "100a", "33",\ + "c0c", "35",\ + "2009", "35",\ + "240a", "45",\ + "280a", "45",\ + "300a", "45",\ + "180a", "45",\ + "500a", "50",\ + "2409", "50",\ + "1c0a", "50",\ + "2c09", "50",\ + "200a", "55",\ + "3c0a", "55",\ + "400a", "55",\ + "340a", "56",\ + "416", "65",\ + "2c0a", "70",\ + "380a", "70",\ + "438", "85",\ + "48f", "85",\ + "809", "85",\ + "816", "85",\ + "1809", "85",\ + "40f", "90",\ + "1801", "90",\ + "41c", "95",\ + "405", "95",\ + "40e", "95",\ + "424", "95",\ + "41b", "95",\ + "81a", "95",\ + "c1a", "95",\ + "415", "100",\ + "1401", "100",\ + "41a", "100",\ + "42f", "100",\ + "140c", "100",\ + "180c", "100",\ + "1c01", "100",\ + "403", "105",\ + "406", "105",\ + "813", "105",\ + "827", "105",\ + "40a", "105",\ + "40c", "105",\ + "42d", "105",\ + "80c", "105",\ + "c0a", "105",\ + "490", "105",\ + "407", "110",\ + "410", "110",\ + "413", "110",\ + "414", "110",\ + "417", "110",\ + "807", "110",\ + "810", "110",\ + "814", "110",\ + "1007", "110",\ + "1407", "110",\ + "41d", "110",\ + "c07", "110",\ + "100c", "110",\ + "1001", "115",\ + "2801", "115",\ + "3001", "115",\ + "43e", "115",\ + "2c01", "115",\ + "423", "115",\ + "c01", "120",\ + "425", "125",\ + "426", "125",\ + "40b", "125",\ + "81d", "125",\ + "422", "125",\ + "402", "125",\ + "427", "125",\ + "408", "130",\ + "41f", "130",\ + "418", "130",\ + "40d", "135",\ + "436", "140",\ + "3009", "140",\ + "1c09", "140",\ + "419", "145",\ + "401", "150",\ + "4001", "150",\ + "3c01", "150",\ + "3401", "150",\ + "441", "155",\ + "801", "158",\ + "2401", "158",\ + "429", "160",\ + "2001", "165",\ + "3801", "165",\ + "42b", "170",\ + "420", "185",\ + "439", "190",\ + "445", "190",\ + "421", "205",\ + "41e", "205",\ + "42a", "205",\ + "804", "210",\ + "c04", "210",\ + "1404", "210",\ + "83e", "210",\ + "1004", "215",\ + "404", "220",\ + "3409", "220",\ + "412", "230",\ + "812", "230",\ + "411", "235",\ + "c09", "255",\ + "1409", "290" + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Dateline Standard Time","Display",0x00000000,"(GMT-12:00) International Date Line West" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Dateline Standard Time","Dlt",0x00000000,"Dateline Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Dateline Standard Time","Std",0x00000000,"Dateline Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Dateline Standard Time","Index",0x00010001,0 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Dateline Standard Time","TZI",0x00000001,\ +0xd0,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Samoa Standard Time","Display",0x00000000,"(GMT-11:00) Midway Island, Samoa" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Samoa Standard Time","Dlt",0x00000000,"Samoa Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Samoa Standard Time","Std",0x00000000,"Samoa Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Samoa Standard Time","Index",0x00010001,1 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Samoa Standard Time","TZI",0x00000001,\ +0x94,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Hawaiian Standard Time","Display",0x00000000,"(GMT-10:00) Hawaii" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Hawaiian Standard Time","Dlt",0x00000000,"Hawaiian Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Hawaiian Standard Time","Std",0x00000000,"Hawaiian Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Hawaiian Standard Time","Index",0x00010001,2 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Hawaiian Standard Time","TZI",0x00000001,\ +0x58,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Alaskan Standard Time","Display",0x00000000,"(GMT-09:00) Alaska" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Alaskan Standard Time","Dlt",0x00000000,"Alaskan Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Alaskan Standard Time","Std",0x00000000,"Alaskan Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Alaskan Standard Time","Index",0x00010001,3 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Alaskan Standard Time","TZI",0x00000001,\ +0x1c,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Pacific Standard Time","Display",0x00000000,"(GMT-08:00) Pacific Time (US & Canada)" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Pacific Standard Time","Dlt",0x00000000,"Pacific Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Pacific Standard Time","Std",0x00000000,"Pacific Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Pacific Standard Time","Index",0x00010001,4 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Pacific Standard Time","TZI",0x00000001,\ +0xe0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Mountain Standard Time","Display",0x00000000,"(GMT-07:00) Mountain Time (US & Canada)" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Mountain Standard Time","Dlt",0x00000000,"Mountain Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Mountain Standard Time","Std",0x00000000,"Mountain Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Mountain Standard Time","Index",0x00010001,10 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Mountain Standard Time","TZI",0x00000001,\ +0xa4,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Mountain Standard Time (Mexico)","Display",0x00000000,"(GMT-07:00) Chihuahua, La Paz, Mazatlan" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Mountain Standard Time (Mexico)","Dlt",0x00000000,"Mountain Daylight Time (Mexico)" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Mountain Standard Time (Mexico)","Std",0x00000000,"Mountain Standard Time (Mexico)" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Mountain Standard Time (Mexico)","Index",0x00010001,13 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Mountain Standard Time (Mexico)","TZI",0x00000001,\ +0xa4,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x0a,0x00,0x00,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x04,0x00,0x00,0x00,0x01,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\US Mountain Standard Time","Display",0x00000000,"(GMT-07:00) Arizona" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\US Mountain Standard Time","Dlt",0x00000000,"US Mountain Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\US Mountain Standard Time","Std",0x00000000,"US Mountain Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\US Mountain Standard Time","Index",0x00010001,15 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\US Mountain Standard Time","TZI",0x00000001,\ +0xa4,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Standard Time","Display",0x00000000,"(GMT-06:00) Central Time (US & Canada)" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Standard Time","Dlt",0x00000000,"Central Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Standard Time","Std",0x00000000,"Central Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Standard Time","Index",0x00010001,20 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Standard Time","TZI",0x00000001,\ +0x68,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Canada Central Standard Time","Display",0x00000000,"(GMT-06:00) Saskatchewan" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Canada Central Standard Time","Dlt",0x00000000,"Canada Central Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Canada Central Standard Time","Std",0x00000000,"Canada Central Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Canada Central Standard Time","Index",0x00010001,25 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Canada Central Standard Time","TZI",0x00000001,\ +0x68,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Standard Time (Mexico)","Display",0x00000000,"(GMT-06:00) Guadalajara, Mexico City, Monterrey" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Standard Time (Mexico)","Dlt",0x00000000,"Central Daylight Time (Mexico)" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Standard Time (Mexico)","Std",0x00000000,"Central Standard Time (Mexico)" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Standard Time (Mexico)","Index",0x00010001,30 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Standard Time (Mexico)","TZI",0x00000001,\ +0x68,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x0a,0x00,0x00,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x04,0x00,0x00,0x00,0x01,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central America Standard Time","Display",0x00000000,"(GMT-06:00) Central America" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central America Standard Time","Dlt",0x00000000,"Central America Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central America Standard Time","Std",0x00000000,"Central America Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central America Standard Time","Index",0x00010001,33 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central America Standard Time","TZI",0x00000001,\ +0x68,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Eastern Standard Time","Display",0x00000000,"(GMT-05:00) Eastern Time (US & Canada)" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Eastern Standard Time","Dlt",0x00000000,"Eastern Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Eastern Standard Time","Std",0x00000000,"Eastern Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Eastern Standard Time","Index",0x00010001,35 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Eastern Standard Time","TZI",0x00000001,\ +0x2c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\US Eastern Standard Time","Display",0x00000000,"(GMT-05:00) Indiana (East)" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\US Eastern Standard Time","Dlt",0x00000000,"US Eastern Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\US Eastern Standard Time","Std",0x00000000,"US Eastern Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\US Eastern Standard Time","Index",0x00010001,40 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\US Eastern Standard Time","TZI",0x00000001,\ +0x2c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\SA Pacific Standard Time","Display",0x00000000,"(GMT-05:00) Bogota, Lima, Quito, Rio Branco" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\SA Pacific Standard Time","Dlt",0x00000000,"SA Pacific Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\SA Pacific Standard Time","Std",0x00000000,"SA Pacific Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\SA Pacific Standard Time","Index",0x00010001,45 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\SA Pacific Standard Time","TZI",0x00000001,\ +0x2c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Atlantic Standard Time","Display",0x00000000,"(GMT-04:00) Atlantic Time (Canada)" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Atlantic Standard Time","Dlt",0x00000000,"Atlantic Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Atlantic Standard Time","Std",0x00000000,"Atlantic Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Atlantic Standard Time","Index",0x00010001,50 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Atlantic Standard Time","TZI",0x00000001,\ +0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\SA Western Standard Time","Display",0x00000000,"(GMT-04:00) La Paz" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\SA Western Standard Time","Dlt",0x00000000,"SA Western Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\SA Western Standard Time","Std",0x00000000,"SA Western Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\SA Western Standard Time","Index",0x00010001,55 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\SA Western Standard Time","TZI",0x00000001,\ +0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Pacific SA Standard Time","Display",0x00000000,"(GMT-04:00) Santiago" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Pacific SA Standard Time","Dlt",0x00000000,"Pacific SA Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Pacific SA Standard Time","Std",0x00000000,"Pacific SA Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Pacific SA Standard Time","Index",0x00010001,56 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Pacific SA Standard Time","TZI",0x00000001,\ +0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x03,0x00,0x06,0x00,0x02,0x00,0x17,0x00,0x3b,0x00,0x3b,0x00,0xe7,0x03,\ +0x00,0x00,0x0a,0x00,0x06,0x00,0x02,0x00,0x17,0x00,0x3b,0x00,0x3b,0x00,0xe7,0x03 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Newfoundland Standard Time","Display",0x00000000,"(GMT-03:30) Newfoundland" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Newfoundland Standard Time","Dlt",0x00000000,"Newfoundland Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Newfoundland Standard Time","Std",0x00000000,"Newfoundland Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Newfoundland Standard Time","Index",0x00010001,60 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Newfoundland Standard Time","TZI",0x00000001,\ +0xd2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\E. South America Standard Time","Display",0x00000000,"(GMT-03:00) Brasilia" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\E. South America Standard Time","Dlt",0x00000000,"E. South America Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\E. South America Standard Time","Std",0x00000000,"E. South America Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\E. South America Standard Time","Index",0x00010001,65 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\E. South America Standard Time","TZI",0x00000001,\ +0xb4,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x02,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\SA Eastern Standard Time","Display",0x00000000,"(GMT-03:00) Buenos Aires, Georgetown" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\SA Eastern Standard Time","Dlt",0x00000000,"SA Eastern Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\SA Eastern Standard Time","Std",0x00000000,"SA Eastern Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\SA Eastern Standard Time","Index",0x00010001,70 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\SA Eastern Standard Time","TZI",0x00000001,\ +0xb4,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Greenland Standard Time","Display",0x00000000,"(GMT-03:00) Greenland" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Greenland Standard Time","Dlt",0x00000000,"Greenland Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Greenland Standard Time","Std",0x00000000,"Greenland Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Greenland Standard Time","Index",0x00010001,73 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Greenland Standard Time","TZI",0x00000001,\ +0xb4,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x0a,0x00,0x00,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x04,0x00,0x00,0x00,0x01,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Mid-Atlantic Standard Time","Display",0x00000000,"(GMT-02:00) Mid-Atlantic" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Mid-Atlantic Standard Time","Dlt",0x00000000,"Mid-Atlantic Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Mid-Atlantic Standard Time","Std",0x00000000,"Mid-Atlantic Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Mid-Atlantic Standard Time","Index",0x00010001,75 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Mid-Atlantic Standard Time","TZI",0x00000001,\ +0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x09,0x00,0x00,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x03,0x00,0x00,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Azores Standard Time","Display",0x00000000,"(GMT-01:00) Azores" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Azores Standard Time","Dlt",0x00000000,"Azores Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Azores Standard Time","Std",0x00000000,"Azores Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Azores Standard Time","Index",0x00010001,80 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Azores Standard Time","TZI",0x00000001,\ +0x3c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x0a,0x00,0x00,0x00,0x05,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x03,0x00,0x00,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Cape Verde Standard Time","Display",0x00000000,"(GMT-01:00) Cape Verde Is." +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Cape Verde Standard Time","Dlt",0x00000000,"Cape Verde Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Cape Verde Standard Time","Std",0x00000000,"Cape Verde Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Cape Verde Standard Time","Index",0x00010001,83 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Cape Verde Standard Time","TZI",0x00000001,\ +0x3c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\GMT Standard Time","Display",0x00000000,"(GMT) Greenwich Mean Time: Dublin, Edinburgh, Lisbon, London" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\GMT Standard Time","Dlt",0x00000000,"GMT Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\GMT Standard Time","Std",0x00000000,"GMT Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\GMT Standard Time","Index",0x00010001,85 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\GMT Standard Time","TZI",0x00000001,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x0a,0x00,0x00,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x03,0x00,0x00,0x00,0x05,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Greenwich Standard Time","Display",0x00000000,"(GMT) Casablanca, Monrovia, Reykjavik" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Greenwich Standard Time","Dlt",0x00000000,"Greenwich Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Greenwich Standard Time","Std",0x00000000,"Greenwich Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Greenwich Standard Time","Index",0x00010001,90 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Greenwich Standard Time","TZI",0x00000001,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Europe Standard Time","Display",0x00000000,"(GMT+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Europe Standard Time","Dlt",0x00000000,"Central Europe Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Europe Standard Time","Std",0x00000000,"Central Europe Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Europe Standard Time","Index",0x00010001,95 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Europe Standard Time","TZI",0x00000001,\ +0xc4,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x0a,0x00,0x00,0x00,0x05,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x03,0x00,0x00,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central European Standard Time","Display",0x00000000,"(GMT+01:00) Sarajevo, Skopje, Warsaw, Zagreb" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central European Standard Time","Dlt",0x00000000,"Central European Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central European Standard Time","Std",0x00000000,"Central European Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central European Standard Time","Index",0x00010001,100 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central European Standard Time","TZI",0x00000001,\ +0xc4,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x0a,0x00,0x00,0x00,0x05,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x03,0x00,0x00,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Romance Standard Time","Display",0x00000000,"(GMT+01:00) Brussels, Copenhagen, Madrid, Paris" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Romance Standard Time","Dlt",0x00000000,"Romance Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Romance Standard Time","Std",0x00000000,"Romance Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Romance Standard Time","Index",0x00010001,105 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Romance Standard Time","TZI",0x00000001,\ +0xc4,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x0a,0x00,0x00,0x00,0x05,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x03,0x00,0x00,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\W. Europe Standard Time","Display",0x00000000,"(GMT+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\W. Europe Standard Time","Dlt",0x00000000,"W. Europe Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\W. Europe Standard Time","Std",0x00000000,"W. Europe Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\W. Europe Standard Time","Index",0x00010001,110 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\W. Europe Standard Time","TZI",0x00000001,\ +0xc4,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x0a,0x00,0x00,0x00,0x05,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x03,0x00,0x00,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\E. Europe Standard Time","Display",0x00000000,"(GMT+02:00) Minsk" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\E. Europe Standard Time","Dlt",0x00000000,"E. Europe Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\E. Europe Standard Time","Std",0x00000000,"E. Europe Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\E. Europe Standard Time","Index",0x00010001,115 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\E. Europe Standard Time","TZI",0x00000001,\ +0x88,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x0a,0x00,0x00,0x00,0x05,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x03,0x00,0x00,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Egypt Standard Time","Display",0x00000000,"(GMT+02:00) Cairo" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Egypt Standard Time","Dlt",0x00000000,"Egypt Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Egypt Standard Time","Std",0x00000000,"Egypt Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Egypt Standard Time","Index",0x00010001,120 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Egypt Standard Time","TZI",0x00000001,\ +0x88,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x09,0x00,0x04,0x00,0x05,0x00,0x17,0x00,0x3b,0x00,0x3b,0x00,0x00,0x00,\ +0x00,0x00,0x04,0x00,0x04,0x00,0x05,0x00,0x17,0x00,0x3b,0x00,0x3b,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\FLE Standard Time","Display",0x00000000,"(GMT+02:00) Helsinki, Kyiv, Riga, Sofia, Tallinn, Vilnius" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\FLE Standard Time","Dlt",0x00000000,"FLE Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\FLE Standard Time","Std",0x00000000,"FLE Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\FLE Standard Time","Index",0x00010001,125 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\FLE Standard Time","TZI",0x00000001,\ +0x88,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x0a,0x00,0x00,0x00,0x05,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x03,0x00,0x00,0x00,0x05,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\GTB Standard Time","Display",0x00000000,"(GMT+02:00) Athens, Bucharest, Istanbul" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\GTB Standard Time","Dlt",0x00000000,"GTB Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\GTB Standard Time","Std",0x00000000,"GTB Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\GTB Standard Time","Index",0x00010001,130 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\GTB Standard Time","TZI",0x00000001,\ +0x88,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x0a,0x00,0x00,0x00,0x05,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x03,0x00,0x00,0x00,0x05,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Israel Standard Time","Display",0x00000000,"(GMT+02:00) Jerusalem" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Israel Standard Time","Dlt",0x00000000,"Israel Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Israel Standard Time","Std",0x00000000,"Israel Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Israel Standard Time","Index",0x00010001,135 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Israel Standard Time","TZI",0x00000001,\ +0x88,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x0a,0x00,0x05,0x00,0x05,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x03,0x00,0x05,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\South Africa Standard Time","Display",0x00000000,"(GMT+02:00) Harare, Pretoria" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\South Africa Standard Time","Dlt",0x00000000,"South Africa Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\South Africa Standard Time","Std",0x00000000,"South Africa Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\South Africa Standard Time","Index",0x00010001,140 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\South Africa Standard Time","TZI",0x00000001,\ +0x88,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Russian Standard Time","Display",0x00000000,"(GMT+03:00) Moscow, St. Petersburg, Volgograd" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Russian Standard Time","Dlt",0x00000000,"Russian Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Russian Standard Time","Std",0x00000000,"Russian Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Russian Standard Time","Index",0x00010001,145 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Russian Standard Time","TZI",0x00000001,\ +0x4c,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x0a,0x00,0x00,0x00,0x05,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x03,0x00,0x00,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Arab Standard Time","Display",0x00000000,"(GMT+03:00) Kuwait, Riyadh" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Arab Standard Time","Dlt",0x00000000,"Arab Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Arab Standard Time","Std",0x00000000,"Arab Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Arab Standard Time","Index",0x00010001,150 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Arab Standard Time","TZI",0x00000001,\ +0x4c,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\E. Africa Standard Time","Display",0x00000000,"(GMT+03:00) Nairobi" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\E. Africa Standard Time","Dlt",0x00000000,"E. Africa Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\E. Africa Standard Time","Std",0x00000000,"E. Africa Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\E. Africa Standard Time","Index",0x00010001,155 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\E. Africa Standard Time","TZI",0x00000001,\ +0x4c,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Arabic Standard Time","Display",0x00000000,"(GMT+03:00) Baghdad" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Arabic Standard Time","Dlt",0x00000000,"Arabic Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Arabic Standard Time","Std",0x00000000,"Arabic Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Arabic Standard Time","Index",0x00010001,158 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Arabic Standard Time","TZI",0x00000001,\ +0x4c,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x04,0x00,0x00,0x00,0x01,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Iran Standard Time","Display",0x00000000,"(GMT+03:30) Tehran" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Iran Standard Time","Dlt",0x00000000,"Iran Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Iran Standard Time","Std",0x00000000,"Iran Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Iran Standard Time","Index",0x00010001,160 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Iran Standard Time","TZI",0x00000001,\ +0x2e,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Arabian Standard Time","Display",0x00000000,"(GMT+04:00) Abu Dhabi, Muscat" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Arabian Standard Time","Dlt",0x00000000,"Arabian Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Arabian Standard Time","Std",0x00000000,"Arabian Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Arabian Standard Time","Index",0x00010001,165 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Arabian Standard Time","TZI",0x00000001,\ +0x10,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Caucasus Standard Time","Display",0x00000000,"(GMT+04:00) Caucasus Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Caucasus Standard Time","Dlt",0x00000000,"Caucasus Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Caucasus Standard Time","Std",0x00000000,"Caucasus Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Caucasus Standard Time","Index",0x00010001,170 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Caucasus Standard Time","TZI",0x00000001,\ +0x10,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Afghanistan Standard Time","Display",0x00000000,"(GMT+04:30) Kabul" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Afghanistan Standard Time","Dlt",0x00000000,"Afghanistan Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Afghanistan Standard Time","Std",0x00000000,"Afghanistan Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Afghanistan Standard Time","Index",0x00010001,175 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Afghanistan Standard Time","TZI",0x00000001,\ +0xf2,0xfe,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Ekaterinburg Standard Time","Display",0x00000000,"(GMT+05:00) Ekaterinburg" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Ekaterinburg Standard Time","Dlt",0x00000000,"Ekaterinburg Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Ekaterinburg Standard Time","Std",0x00000000,"Ekaterinburg Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Ekaterinburg Standard Time","Index",0x00010001,180 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Ekaterinburg Standard Time","TZI",0x00000001,\ +0xd4,0xfe,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x0a,0x00,0x00,0x00,0x05,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x03,0x00,0x00,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\West Asia Standard Time","Display",0x00000000,"(GMT+05:00) Islamabad, Karachi, Tashkent" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\West Asia Standard Time","Dlt",0x00000000,"West Asia Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\West Asia Standard Time","Std",0x00000000,"West Asia Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\West Asia Standard Time","Index",0x00010001,185 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\West Asia Standard Time","TZI",0x00000001,\ +0xd4,0xfe,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\India Standard Time","Display",0x00000000,"(GMT+05:30) Chennai, Kolkata, Mumbai, New Delhi" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\India Standard Time","Dlt",0x00000000,"India Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\India Standard Time","Std",0x00000000,"India Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\India Standard Time","Index",0x00010001,190 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\India Standard Time","TZI",0x00000001,\ +0xb6,0xfe,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Nepal Standard Time","Display",0x00000000,"(GMT+05:45) Kathmandu" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Nepal Standard Time","Dlt",0x00000000,"Nepal Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Nepal Standard Time","Std",0x00000000,"Nepal Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Nepal Standard Time","Index",0x00010001,193 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Nepal Standard Time","TZI",0x00000001,\ +0xa7,0xfe,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Sri Lanka Standard Time","Display",0x00000000,"(GMT+05:30) Sri Jayawardenepura" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Sri Lanka Standard Time","Dlt",0x00000000,"Sri Lanka Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Sri Lanka Standard Time","Std",0x00000000,"Sri Lanka Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Sri Lanka Standard Time","Index",0x00010001,194 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Sri Lanka Standard Time","TZI",0x00000001,\ +0xb6,0xfe,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Asia Standard Time","Display",0x00000000,"(GMT+06:00) Astana, Dhaka" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Asia Standard Time","Dlt",0x00000000,"Central Asia Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Asia Standard Time","Std",0x00000000,"Central Asia Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Asia Standard Time","Index",0x00010001,195 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Asia Standard Time","TZI",0x00000001,\ +0x98,0xfe,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\N. Central Asia Standard Time","Display",0x00000000,"(GMT+06:00) Almaty, Novosibirsk" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\N. Central Asia Standard Time","Dlt",0x00000000,"N. Central Asia Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\N. Central Asia Standard Time","Std",0x00000000,"N. Central Asia Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\N. Central Asia Standard Time","Index",0x00010001,201 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\N. Central Asia Standard Time","TZI",0x00000001,\ +0x98,0xfe,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x0a,0x00,0x00,0x00,0x05,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x03,0x00,0x00,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Myanmar Standard Time","Display",0x00000000,"(GMT+06:30) Yangon (Rangoon)" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Myanmar Standard Time","Dlt",0x00000000,"Myanmar Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Myanmar Standard Time","Std",0x00000000,"Myanmar Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Myanmar Standard Time","Index",0x00010001,203 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Myanmar Standard Time","TZI",0x00000001,\ +0x7a,0xfe,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\SE Asia Standard Time","Display",0x00000000,"(GMT+07:00) Bangkok, Hanoi, Jakarta" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\SE Asia Standard Time","Dlt",0x00000000,"SE Asia Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\SE Asia Standard Time","Std",0x00000000,"SE Asia Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\SE Asia Standard Time","Index",0x00010001,205 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\SE Asia Standard Time","TZI",0x00000001,\ +0x5c,0xfe,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\North Asia Standard Time","Display",0x00000000,"(GMT+07:00) Krasnoyarsk" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\North Asia Standard Time","Dlt",0x00000000,"North Asia Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\North Asia Standard Time","Std",0x00000000,"North Asia Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\North Asia Standard Time","Index",0x00010001,207 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\North Asia Standard Time","TZI",0x00000001,\ +0x5c,0xfe,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x0a,0x00,0x00,0x00,0x05,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x03,0x00,0x00,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\China Standard Time","Display",0x00000000,"(GMT+08:00) Beijing, Chongqing, Hong Kong, Urumqi" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\China Standard Time","Dlt",0x00000000,"China Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\China Standard Time","Std",0x00000000,"China Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\China Standard Time","Index",0x00010001,210 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\China Standard Time","TZI",0x00000001,\ +0x20,0xfe,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Singapore Standard Time","Display",0x00000000,"(GMT+08:00) Kuala Lumpur, Singapore" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Singapore Standard Time","Dlt",0x00000000,"Singapore Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Singapore Standard Time","Std",0x00000000,"Singapore Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Singapore Standard Time","Index",0x00010001,215 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Singapore Standard Time","TZI",0x00000001,\ +0x20,0xfe,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Taipei Standard Time","Display",0x00000000,"(GMT+08:00) Taipei" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Taipei Standard Time","Dlt",0x00000000,"Taipei Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Taipei Standard Time","Std",0x00000000,"Taipei Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Taipei Standard Time","Index",0x00010001,220 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Taipei Standard Time","TZI",0x00000001,\ +0x20,0xfe,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\W. Australia Standard Time","Display",0x00000000,"(GMT+08:00) Perth" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\W. Australia Standard Time","Dlt",0x00000000,"W. Australia Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\W. Australia Standard Time","Std",0x00000000,"W. Australia Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\W. Australia Standard Time","Index",0x00010001,225 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\W. Australia Standard Time","TZI",0x00000001,\ +0x20,0xfe,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x03,0x00,0x00,0x00,0x05,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x0a,0x00,0x00,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\North Asia East Standard Time","Display",0x00000000,"(GMT+08:00) Irkutsk, Ulaan Bataar" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\North Asia East Standard Time","Dlt",0x00000000,"North Asia East Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\North Asia East Standard Time","Std",0x00000000,"North Asia East Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\North Asia East Standard Time","Index",0x00010001,227 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\North Asia East Standard Time","TZI",0x00000001,\ +0x20,0xfe,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x0a,0x00,0x00,0x00,0x05,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x03,0x00,0x00,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Korea Standard Time","Display",0x00000000,"(GMT+09:00) Seoul" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Korea Standard Time","Dlt",0x00000000,"Korea Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Korea Standard Time","Std",0x00000000,"Korea Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Korea Standard Time","Index",0x00010001,230 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Korea Standard Time","TZI",0x00000001,\ +0xe4,0xfd,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Tokyo Standard Time","Display",0x00000000,"(GMT+09:00) Osaka, Sapporo, Tokyo" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Tokyo Standard Time","Dlt",0x00000000,"Tokyo Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Tokyo Standard Time","Std",0x00000000,"Tokyo Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Tokyo Standard Time","Index",0x00010001,235 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Tokyo Standard Time","TZI",0x00000001,\ +0xe4,0xfd,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Yakutsk Standard Time","Display",0x00000000,"(GMT+09:00) Yakutsk" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Yakutsk Standard Time","Dlt",0x00000000,"Yakutsk Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Yakutsk Standard Time","Std",0x00000000,"Yakutsk Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Yakutsk Standard Time","Index",0x00010001,240 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Yakutsk Standard Time","TZI",0x00000001,\ +0xe4,0xfd,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x0a,0x00,0x00,0x00,0x05,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x03,0x00,0x00,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\AUS Central Standard Time","Display",0x00000002,"(GMT+09:30) Darwin" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\AUS Central Standard Time","Dlt",0x00000002,"AUS Central Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\AUS Central Standard Time","Std",0x00000002,"AUS Central Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\AUS Central Standard Time","Index",0x00010001,245 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\AUS Central Standard Time","TZI",0x00000001,\ +0xc6,0xfd,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Cen. Australia Standard Time","Display",0x00000000,"(GMT+09:30) Adelaide" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Cen. Australia Standard Time","Dlt",0x00000000,"Cen. Australia Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Cen. Australia Standard Time","Std",0x00000000,"Cen. Australia Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Cen. Australia Standard Time","Index",0x00010001,250 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Cen. Australia Standard Time","TZI",0x00000001,\ +0xc6,0xfd,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x03,0x00,0x00,0x00,0x05,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x0a,0x00,0x00,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\AUS Eastern Standard Time","Display",0x00000000,"(GMT+10:00) Canberra, Melbourne, Sydney" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\AUS Eastern Standard Time","Dlt",0x00000000,"AUS Eastern Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\AUS Eastern Standard Time","Std",0x00000000,"AUS Eastern Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\AUS Eastern Standard Time","Index",0x00010001,255 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\AUS Eastern Standard Time","TZI",0x00000001,\ +0xa8,0xfd,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x03,0x00,0x00,0x00,0x05,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x0a,0x00,0x00,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\E. Australia Standard Time","Display",0x00000000,"(GMT+10:00) Brisbane" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\E. Australia Standard Time","Dlt",0x00000000,"E. Australia Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\E. Australia Standard Time","Std",0x00000000,"E. Australia Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\E. Australia Standard Time","Index",0x00010001,260 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\E. Australia Standard Time","TZI",0x00000001,\ +0xa8,0xfd,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Tasmania Standard Time","Display",0x00000000,"(GMT+10:00) Hobart" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Tasmania Standard Time","Dlt",0x00000000,"Tasmania Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Tasmania Standard Time","Std",0x00000000,"Tasmania Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Tasmania Standard Time","Index",0x00010001,265 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Tasmania Standard Time","TZI",0x00000001,\ +0xa8,0xfd,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x03,0x00,0x00,0x00,0x05,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x0a,0x00,0x00,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Vladivostok Standard Time","Display",0x00000000,"(GMT+10:00) Vladivostok" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Vladivostok Standard Time","Dlt",0x00000000,"Vladivostok Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Vladivostok Standard Time","Std",0x00000000,"Vladivostok Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Vladivostok Standard Time","Index",0x00010001,270 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Vladivostok Standard Time","TZI",0x00000001,\ +0xa8,0xfd,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x0a,0x00,0x00,0x00,0x05,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x03,0x00,0x00,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\West Pacific Standard Time","Display",0x00000000,"(GMT+10:00) Guam, Port Moresby" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\West Pacific Standard Time","Dlt",0x00000000,"West Pacific Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\West Pacific Standard Time","Std",0x00000000,"West Pacific Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\West Pacific Standard Time","Index",0x00010001,275 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\West Pacific Standard Time","TZI",0x00000001,\ +0xa8,0xfd,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Pacific Standard Time","Display",0x00000000,"(GMT+11:00) Magadan, Solomon Is., New Caledonia" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Pacific Standard Time","Dlt",0x00000000,"Central Pacific Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Pacific Standard Time","Std",0x00000000,"Central Pacific Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Pacific Standard Time","Index",0x00010001,280 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Pacific Standard Time","TZI",0x00000001,\ +0x6c,0xfd,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Fiji Standard Time","Display",0x00000000,"(GMT+12:00) Fiji, Kamchatka, Marshall Is." +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Fiji Standard Time","Dlt",0x00000000,"Fiji Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Fiji Standard Time","Std",0x00000000,"Fiji Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Fiji Standard Time","Index",0x00010001,285 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Fiji Standard Time","TZI",0x00000001,\ +0x30,0xfd,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\New Zealand Standard Time","Display",0x00000000,"(GMT+12:00) Auckland, Wellington" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\New Zealand Standard Time","Dlt",0x00000000,"New Zealand Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\New Zealand Standard Time","Std",0x00000000,"New Zealand Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\New Zealand Standard Time","Index",0x00010001,290 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\New Zealand Standard Time","TZI",0x00000001,\ +0x30,0xfd,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x04,0x00,0x00,0x00,0x01,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x09,0x00,0x00,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Tonga Standard Time","Display",0x00000000,"(GMT+13:00) Nuku'alofa" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Tonga Standard Time","Dlt",0x00000000,"Tonga Daylight Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Tonga Standard Time","Std",0x00000000,"Tonga Standard Time" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Tonga Standard Time","Index",0x00010001,300 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Tonga Standard Time","TZI",0x00000001,\ +0xf4,0xfc,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +; Available file systems +HKLM,"SOFTWARE\ReactOS\ReactOS\CurrentVersion\IFS","FAT",0x00000000,"ufat.dll" +HKLM,"SOFTWARE\ReactOS\ReactOS\CurrentVersion\IFS","FAT32",0x00000000,"ufat.dll" +HKLM,"SOFTWARE\ReactOS\ReactOS\CurrentVersion\IFS","FATX",0x00000000,"ufatx.dll" + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon","ConsoleShell",0x00020000,"%SystemRoot%\system32\cmd.exe" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon","Shell",0x00020000,"%SystemRoot%\explorer.exe" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon","StartServices",0x00010001,0x00000001 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon","StartLsass",0x00010001,0x00000001 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon","Userinit",0x00020000,"%SystemRoot%\system32\userinit.exe" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon","AutoAdminLogon",0x00000000,"1" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon","DefaultUserName",0x00000000,"Administrator" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon","DefaultPassword",0x00000000,"Secret" + +;Time Zone Servers +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\DateTime\Servers","1",0x00000000,"pool.ntp.org" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\DateTime\Servers","2",0x00000000,"asia.pool.ntp.org" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\DateTime\Servers","3",0x00000000,"europe.pool.ntp.org" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\DateTime\Servers","4",0x00000000,"north-america.pool.ntp.org" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\DateTime\Servers","5",0x00000000,"oceania.pool.ntp.org" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\DateTime\Servers","6",0x00000000,"south-america.pool.ntp.org" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\DateTime\Servers","7",0x00000000,"time.windows.com" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\DateTime\Servers","8",0x00000000,"time.nist.gov" + +; Telephony +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony",,0x00000012 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Locations","DisableCallWaiting",0x00010003,3 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Locations","DisableCallWaiting0",2,"*70," +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Locations","DisableCallWaiting1",2,"70#," +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Locations","DisableCallWaiting2",2,"1170," +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\tapi3",,0x00000012 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Terminal Manager",,0x00000012 + +; Country Codes +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List",,0x00000012 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List","CountryListVersion",0x00010001,0x00000019 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\1","CountryCode",0x00010001,0x00000001 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\1","Name",0x00000000,"United States of America" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\106","CountryCode",0x00010001,0x0000006A +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\106","Name",0x00000000,"British Virgin Islands" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\107","CountryCode",0x00010001,0x0000006B +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\107","Name",0x00000000,"Canada" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\109","CountryCode",0x00010001,0x0000006D +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\109","Name",0x00000000,"Dominica" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\110","CountryCode",0x00010001,0x0000006E +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\110","Name",0x00000000,"Dominican Republic" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\20","CountryCode",0x00010001,0x00000014 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\20","Name",0x00000000,"Egypt" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\268","CountryCode",0x00010001,0x0000010c +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\268","Name",0x00000000,"Swaziland" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\27","CountryCode",0x00010001,0x0000001b +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\27","Name",0x00000000,"South Africa" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\30","CountryCode",0x00010001,0x0000001e +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\30","Name",0x00000000,"Greece" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\31","CountryCode",0x00010001,0x0000001f +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\31","Name",0x00000000,"Netherlands" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\32","CountryCode",0x00010001,0x00000020 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\32","Name",0x00000000,"Belgium" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\33","CountryCode",0x00010001,0x00000021 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\33","Name",0x00000000,"France" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\34","CountryCode",0x00010001,0x00000022 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\34","Name",0x00000000,"Spain" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\351","CountryCode",0x00010001,0x0000015f +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\351","Name",0x00000000,"Portugal" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\352","CountryCode",0x00010001,0x00000160 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\352","Name",0x00000000,"Luxembourg" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\353","CountryCode",0x00010001,0x00000161 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\353","Name",0x00000000,"Ireland" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\354","CountryCode",0x00010001,0x00000162 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\354","Name",0x00000000,"Iceland" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\355","CountryCode",0x00010001,0x00000163 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\355","Name",0x00000000,"Albania" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\358","CountryCode",0x00010001,0x00000166 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\358","Name",0x00000000,"Finland" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\359","CountryCode",0x00010001,0x00000167 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\359","Name",0x00000000,"Bulgaria" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\36","CountryCode",0x00010001,0x00000024 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\36","Name",0x00000000,"Hungary" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\370","CountryCode",0x00010001,0x00000172 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\370","Name",0x00000000,"Lithuania" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\371","CountryCode",0x00010001,0x00000173 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\371","Name",0x00000000,"Latvia" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\372","CountryCode",0x00010001,0x00000174 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\372","Name",0x00000000,"Estonia" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\373","CountryCode",0x00010001,0x00000175 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\373","Name",0x00000000,"Moldova" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\374","CountryCode",0x00010001,0x00000176 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\374","Name",0x00000000,"Armenia" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\380","CountryCode",0x00010001,0x0000017c +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\380","Name",0x00000000,"Ukraine" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\381","CountryCode",0x00010001,0x0000017d +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\381","Name",0x00000000,"Yugoslavia" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\385","CountryCode",0x00010001,0x00000181 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\385","Name",0x00000000,"Croatia" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\386","CountryCode",0x00010001,0x00000182 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\386","Name",0x00000000,"Slovenia" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\387","CountryCode",0x00010001,0x00000183 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\387","Name",0x00000000,"Bosnia and Herzegovina" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\39","CountryCode",0x00010001,0x00000027 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\39","Name",0x00000000,"Italy" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\40","CountryCode",0x00010001,0x00000028 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\40","Name",0x00000000,"Romania" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\41","CountryCode",0x00010001,0x00000029 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\41","Name",0x00000000,"Switzerland" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\420","CountryCode",0x00010001,0x000001a4 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\420","Name",0x00000000,"Czech Republic" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\421","CountryCode",0x00010001,0x000001a5 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\421","Name",0x00000000,"Slovakia" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\423","CountryCode",0x00010001,0x000001a7 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\423","Name",0x00000000,"Liechtenstein" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\43","CountryCode",0x00010001,0x0000002b +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\43","Name",0x00000000,"Austria" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\44","CountryCode",0x00010001,0x0000002c +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\44","Name",0x00000000,"United Kingdom" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\45","CountryCode",0x00010001,0x0000002D +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\45","Name",0x00000000,"Denmark" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\46","CountryCode",0x00010001,0x0000002e +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\46","Name",0x00000000,"Sweden" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\47","CountryCode",0x00010001,0x0000002f +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\47","Name",0x00000000,"Norway" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\48","CountryCode",0x00010001,0x00000030 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\48","Name",0x00000000,"Poland" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\49","CountryCode",0x00010001,0x00000031 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\49","Name",0x00000000,"Germany" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\52","CountryCode",0x00010001,0x00000034 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\52","Name",0x00000000,"Mexico" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\54","CountryCode",0x00010001,0x00000036 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\54","Name",0x00000000,"Argentina" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\55","CountryCode",0x00010001,0x00000037 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\55","Name",0x00000000,"Brazil" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\56","CountryCode",0x00010001,0x00000038 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\56","Name",0x00000000,"Chile" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\57","CountryCode",0x00010001,0x00000039 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\57","Name",0x00000000,"Colombia" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\58","CountryCode",0x00010001,0x0000003a +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\58","Name",0x00000000,"Venezuela" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\60","CountryCode",0x00010001,0x0000003c +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\60","Name",0x00000000,"Malaysia" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\61","CountryCode",0x00010001,0x0000003d +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\61","Name",0x00000000,"Australia" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\62","CountryCode",0x00010001,0x0000003e +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\62","Name",0x00000000,"Indonesia" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\63","CountryCode",0x00010001,0x0000003f +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\63","Name",0x00000000,"Philippines" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\64","CountryCode",0x00010001,0x00000040 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\64","Name",0x00000000,"New Zealand" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\66","CountryCode",0x00010001,0x00000042 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\66","Name",0x00000000,"Thailand" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\7","CountryCode",0x00010001,0x00000007 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\7","Name",0x00000000,"Russia" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\705","CountryCode",0x00010001,0x000002C1 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\705","Name",0x00000000,"Kazakhstan" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\708","CountryCode",0x00010001,0x000002C4 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\708","Name",0x00000000,"Tajikistan" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\81","CountryCode",0x00010001,0x00000051 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\81","Name",0x00000000,"Japan" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\82","CountryCode",0x00010001,0x00000052 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\82","Name",0x00000000,"Korea (Republic of)" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\850","CountryCode",0x00010001,0x00000352 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\850","Name",0x00000000,"Korea (North)" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\86","CountryCode",0x00010001,0x00000056 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\86","Name",0x00000000,"China" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\886","CountryCode",0x00010001,0x00000376 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\886","Name",0x00000000,"Taiwan" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\90","CountryCode",0x00010001,0x0000005a +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\90","Name",0x00000000,"Turkey" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\91","CountryCode",0x00010001,0x0000005b +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\91","Name",0x00000000,"India" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\93","CountryCode",0x00010001,0x0000005d +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\93","Name",0x00000000,"Afghanistan" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\960","CountryCode",0x00010001,0x000003c0 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\960","Name",0x00000000,"Maldives" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\964","CountryCode",0x00010001,0x000003c4 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\964","Name",0x00000000,"Iraq" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\966","CountryCode",0x00010001,0x000003c6 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\966","Name",0x00000000,"Saudi Arabia" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\971","CountryCode",0x00010001,0x000003cb +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\971","Name",0x00000000,"United Arab Emirates" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\972","CountryCode",0x00010001,0x000003cc +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\972","Name",0x00000000,"Israel" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\974","CountryCode",0x00010001,0x000003ce +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\974","Name",0x00000000,"Qatar" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\976","CountryCode",0x00010001,0x000003d0 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\976","Name",0x00000000,"Mongolia" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\977","CountryCode",0x00010001,0x000003d1 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\977","Name",0x00000000,"Nepal" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\98","CountryCode",0x00010001,0x00000062 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\98","Name",0x00000000,"Iran" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\993","CountryCode",0x00010001,0x000003e1 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\993","Name",0x00000000,"Turkmenistan" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\994","CountryCode",0x00010001,0x000003e2 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\994","Name",0x00000000,"Azerbaijan" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\995","CountryCode",0x00010001,0x000003e3 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\995","Name",0x00000000,"Georgia" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\996","CountryCode",0x00010001,0x000003e4 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\996","Name",0x00000000,"Kyrgyzstan" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\998","CountryCode",0x00010001,0x000003e6 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\998","Name",0x00000000,"Uzbekistan" + +; PowerCfg +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg","LastID",0x00000002,"0" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg","DiskSpinDownMax",0x00000002,"3600" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg","DiskSpinDownMin",0x00000002,"3" + +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg\GlobalPowerPolicy","Policies",0x00030003,\ +01,00,00,00,01,00,00,00,01,00,00,00,03,00,00,00 + +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg\PowerPolicies\0","Policies",0x00030003,\ +01,00,00,00,02,00,00,00,04,00,00,00,02,00,00,00,02,00,00,00,00,00,00,00,84,03,00,00,00,00,00,00,84,03,00,00,32,\ +32,00,00,02,00,00,00,04,00,00,C0,00,00,00,00,02,00,00,00,04,00,00,C0,00,00,00,00 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg\PowerPolicies\1","Policies",0x00030003,\ +01,00,00,00,02,00,00,00,03,00,00,00,03,00,00,00,03,00,00,00,60,09,00,00,2C,01,00,00,80,25,00,00,F4,1A,00,00,32,\ +32,00,00,02,00,00,00,04,00,00,C0,00,00,00,00,02,00,00,00,04,00,00,C0,00,00,00,00 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg\PowerPolicies\2","Policies",0x00030003,\ +01,00,00,00,02,00,00,00,03,00,00,00,02,00,00,00,02,00,00,00,00,00,00,00,84,03,00,00,00,00,00,00,9C,18,00,00,32,\ +32,00,00,02,00,00,00,04,00,00,C0,00,00,00,00,02,00,00,00,04,00,00,C0,00,00,00,00 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg\PowerPolicies\3","Policies",0x00030003,\ +01,00,00,00,02,00,00,00,04,00,00,00,02,00,00,00,02,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,5A,\ +5A,00,00,02,00,00,00,04,00,00,C0,00,00,00,00,02,00,00,00,04,00,00,C0,00,00,00,00 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg\PowerPolicies\4","Policies",0x00030003,\ +01,00,00,00,02,00,00,00,04,00,00,00,02,00,00,00,02,00,00,00,00,00,00,00,08,07,00,00,00,00,00,00,04,29,00,00,5A,\ +5A,00,00,02,00,00,00,04,00,00,C0,00,00,00,00,02,00,00,00,04,00,00,C0,00,00,00,00 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg\PowerPolicies\5","Policies",0x00030003,\ +01,00,00,00,02,00,00,00,04,00,00,00,03,00,00,00,03,00,00,00,DC,05,00,00,B4,00,00,00,DC,05,00,00,98,0D,00,00,32,\ +0A,00,00,02,00,00,00,04,00,00,C0,00,00,00,00,02,00,00,00,04,00,00,C0,00,00,00,00 + +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg\ProcessorPolicies\0","Policies",0x00030001,\ +01,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,28,32,00,00,02,00,\ +00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,28,3C,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,28,50,00,00,\ +01,00,00,00,01,00,00,00,03,00,00,00,00,00,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,0A,14,00,00,02,00,\ +00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,14,28,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,14,46,00,00,\ +01,00,00,00 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg\ProcessorPolicies\1","Policies",0x00030001,\ +01,00,00,00,01,00,00,00,03,00,00,00,00,00,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,28,32,00,00,02,00,\ +00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,28,3C,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,28,50,00,00,\ +01,00,00,00,01,00,00,00,03,00,00,00,00,00,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,0A,14,00,00,02,00,\ +00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,14,28,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,14,46,00,00,\ +01,00,00,00 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg\ProcessorPolicies\2","Policies",0x00030001,\ +01,00,00,00,01,00,00,00,03,00,00,00,00,00,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,28,32,00,00,02,00,\ +00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,28,3C,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,28,50,00,00,\ +01,00,00,00,01,00,00,00,02,00,00,00,00,00,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,0A,14,00,00,02,00,\ +00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,14,28,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,14,46,00,00,\ +01,00,00,00 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg\ProcessorPolicies\3","Policies",0x00030001,\ +01,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,28,32,00,00,02,00,\ +00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,28,3C,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,28,50,00,00,\ +01,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,0A,14,00,00,02,00,\ +00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,14,28,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,14,50,00,00,\ +01,00,00,00 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg\ProcessorPolicies\4","Policies",0x00030001,\ +01,00,00,00,01,00,00,00,03,00,00,00,00,00,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,28,32,00,00,02,00,\ +00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,28,3C,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,28,50,00,00,\ +01,00,00,00,01,00,00,00,03,00,00,00,00,00,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,0A,14,00,00,02,00,\ +00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,14,28,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,14,46,00,00,\ +01,00,00,00 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg\ProcessorPolicies\5","Policies",0x00030001,\ +01,00,00,00,01,00,00,00,03,00,00,00,00,00,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,28,32,00,00,02,00,\ +00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,28,3C,00,00,02,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,28,50,00,00,\ +01,00,00,00,01,00,00,00,02,00,00,00,00,00,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,0A,14,00,00,02,00,\ +00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,14,28,00,00,02,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,14,41,00,00,\ +01,00,00,00 + +; deskadp.dll shell extension +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\Device\shellex\PropertySheetHandlers\Display Adapter CPL Extension","",0x00000000,"{42071712-76d4-11d1-8b24-00a0c9068ff3}" + +; deskmon.dll shell extension +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\Device\shellex\PropertySheetHandlers\Display Monitor CPL Extension","",0x00000000,"{42071713-76d4-11d1-8b24-00a0c9068ff3}" + +HKLM,"SOFTWARE\Microsoft\Ole","EnableDCOM",0x00000000,"Y" +HKLM,"SOFTWARE\Microsoft\Ole","EnableRemoteConnect",0x00000000,"N" + +; Keyboard layout switcher +;HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Run","kbswitch",0x00000000,"kbswitch.exe" + +; EOF diff --git a/boot/bootdata/hivesys_amd64.inf b/boot/bootdata/hivesys_amd64.inf new file mode 100644 index 00000000000..977ea93d55b --- /dev/null +++ b/boot/bootdata/hivesys_amd64.inf @@ -0,0 +1,1318 @@ +[Version] +Signature = "$ReactOS$" + +[AddReg] + +HKLM,"SYSTEM\CurrentControlSet\Control","CurrentUser",2,"USERNAME" +HKLM,"SYSTEM\CurrentControlSet\Control","WaitToKillServiceTimeout",2,"20000" +HKLM,"SYSTEM\CurrentControlSet\Control\Biosinfo","InfName",2,"biosinfo.inf" +HKLM,"SYSTEM\CurrentControlSet\Control\PnP",,0x00000012 + +HKLM,"SYSTEM\CurrentControlSet\Control\FileSystem","NtfsDisable8dot3NameCreation",0x00010003,0 +HKLM,"SYSTEM\CurrentControlSet\Control\FileSystem","Win31FileSystem",0x00010001,0 +HKLM,"SYSTEM\CurrentControlSet\Control\FileSystem","Win95TruncatedExtensions",0x00010001,1 + +; Device classes (this list is incomplete... and should be generated from .inf files during installation) +HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E973-E325-11CE-BFC1-08002BE10318}",,0x00000000,"Network Client" +HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E973-E325-11CE-BFC1-08002BE10318}","Class",0x00000000,"NetClient" +HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E973-E325-11CE-BFC1-08002BE10318}","Icon",0x00000000,"-7" +HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E973-E325-11CE-BFC1-08002BE10318}","Installer32",0x00000000,"NetCfgx.dll,NetClassInstaller" +HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E973-E325-11CE-BFC1-08002BE10318}","NoDisplayClass",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E973-E325-11CE-BFC1-08002BE10318}","NoInstallClass",0x00000000,"1" + +HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E974-E325-11CE-BFC1-08002BE10318}",,0x00000000,"Network Service" +HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E974-E325-11CE-BFC1-08002BE10318}","Class",0x00000000,"NetService" +HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E974-E325-11CE-BFC1-08002BE10318}","Icon",0x00000000,"-7" +HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E974-E325-11CE-BFC1-08002BE10318}","Installer32",0x00000000,"NetCfgx.dll,NetClassInstaller" +HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E974-E325-11CE-BFC1-08002BE10318}","NoDisplayClass",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E974-E325-11CE-BFC1-08002BE10318}","NoInstallClass",0x00000000,"1" + +HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E975-E325-11CE-BFC1-08002BE10318}",,0x00000000,"Network Protocol" +HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E975-E325-11CE-BFC1-08002BE10318}","Class",0x00000000,"NetTrans" +HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E975-E325-11CE-BFC1-08002BE10318}","Icon",0x00000000,"-6" +HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E975-E325-11CE-BFC1-08002BE10318}","Installer32",0x00000000,"NetCfgx.dll,NetClassInstaller" +HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E975-E325-11CE-BFC1-08002BE10318}","NoDisplayClass",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E975-E325-11CE-BFC1-08002BE10318}","NoInstallClass",0x00000000,"1" + +HKLM,"SYSTEM\CurrentControlSet\Control\Class\{9D6D66A6-0B0C-4563-9077-A0E9A7955AE4}",,0x00000000,"Ramdisk" +HKLM,"SYSTEM\CurrentControlSet\Control\Class\{9D6D66A6-0B0C-4563-9077-A0E9A7955AE4}","Class",0x00000000,"Ramdisk" +HKLM,"SYSTEM\CurrentControlSet\Control\Class\{9D6D66A6-0B0C-4563-9077-A0E9A7955AE4}","Icon",0x00000000,"-5" + +; Default computer name settings +HKLM,"SYSTEM\CurrentControlSet\Control\ComputerName",,0x00000012 +HKLM,"SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName","ComputerName",0x00000002,"COMPUTERNAME" + +; Device classes key +HKLM,"SYSTEM\CurrentControlSet\Control\DeviceClasses",,0x00000012 + +; HAL Chipset Hacks +HKLM,"SYSTEM\CurrentControlSet\Control\HAL","10390530",0x00010001,0x1 +HKLM,"SYSTEM\CurrentControlSet\Control\HAL","10390620",0x00010001,0x1 +HKLM,"SYSTEM\CurrentControlSet\Control\HAL","10B90533",0x00010001,0x1 +HKLM,"SYSTEM\CurrentControlSet\Control\HAL","10B91533",0x00010001,0x1 +HKLM,"SYSTEM\CurrentControlSet\Control\HAL","11060596",0x00010001,0x1 +HKLM,"SYSTEM\CurrentControlSet\Control\HAL","11060686",0x00010001,0x5 +HKLM,"SYSTEM\CurrentControlSet\Control\HAL","1166004F",0x00010001,0x1 +HKLM,"SYSTEM\CurrentControlSet\Control\HAL","11660050",0x00010001,0x1 +HKLM,"SYSTEM\CurrentControlSet\Control\HAL","11660200",0x00010001,0x1 +HKLM,"SYSTEM\CurrentControlSet\Control\HAL","80862410",0x00010001,0x8 +HKLM,"SYSTEM\CurrentControlSet\Control\HAL","80862420",0x00010001,0x8 +HKLM,"SYSTEM\CurrentControlSet\Control\HAL","80862440",0x00010001,0x8 +HKLM,"SYSTEM\CurrentControlSet\Control\HAL","8086244C",0x00010001,0x8 +HKLM,"SYSTEM\CurrentControlSet\Control\HAL","80862480",0x00010001,0x8 +HKLM,"SYSTEM\CurrentControlSet\Control\HAL","8086248C",0x00010001,0x8 +HKLM,"SYSTEM\CurrentControlSet\Control\HAL","80867110",0x00010001,0x1 + +; Hardware profile settings +HKLM,"SYSTEM\CurrentControlSet\Control\IDConfigDB",,0x00000012 +HKLM,"SYSTEM\CurrentControlSet\Control\IDConfigDB","CurrentConfig",0x00010001,0x00000000 +HKLM,"SYSTEM\CurrentControlSet\Control\IDConfigDB\Hardware Profiles\0000","FriendlyName",0x00000000,"New Hardware Profile" + +; Keyboard Layouts +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000401","Layout File",0x00000000,"kbda1.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000401","Layout Text",0x00000000,"Arabic (101)" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000401","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5084" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010401","Layout File",0x00000000,"kbda2.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010401","Layout Text",0x00000000,"Arabic (102)" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010401","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5085" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00020401","Layout File",0x00000000,"kbda3.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00020401","Layout Text",0x00000000,"Arabic (102) AZERTY" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00020401","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5086" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000402","Layout File",0x00000000,"kbdbgm.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000402","Layout Text",0x00000000,"Bulgarian BDS 5237-1978" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000402","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5136" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00020402","Layout File",0x00000000,"kbdbgt.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00020402","Layout Text",0x00000000,"Bulgarian phonetic classic" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00020402","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5134" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00030402","Layout File",0x00000000,"kbdbga.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00030402","Layout Text",0x00000000,"Bulgarian phonetic BDS 5237-2006" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00030402","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5135" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000406","Layout File",0x00000000,"kbdda.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000406","Layout Text",0x00000000,"Danish" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000406","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5007" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00030407","Layout File",0x00000000,"kbdgerg.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00030407","Layout Text",0x00000000,"German (de_ergo)" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00030407","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5139" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00020407","Layout File",0x00000000,"kbdgneo.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00020407","Layout Text",0x00000000,"German (NEO-1.1)" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00020407","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5138" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010407","Layout File",0x00000000,"kbdgrist.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010407","Layout Text",0x00000000,"German (RISTOME)" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010407","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5137" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000407","Layout File",0x00000000,"kbdgr.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000407","Layout Text",0x00000000,"German" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000407","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5011" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000807","Layout File",0x00000000,"kbdsg.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000807","Layout Text",0x00000000,"Swiss (German)" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000807","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5024" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000408","Layout File",0x00000000,"kbdhe.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000408","Layout Text",0x00000000,"Greek" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000408","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5046" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000409","Layout File",0x00000000,"kbdus.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000409","Layout Text",0x00000000,"United States" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000409","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5000" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000809","Layout File",0x00000000,"kbduk.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000809","Layout Text",0x00000000,"United Kingdom" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000809","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5025" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010409","Layout File",0x00000000,"kbddv.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010409","Layout Id", 0x00000000,"0002" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010409","Layout Text",0x00000000,"US-Dvorak" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010409","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5092" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00020409","Layout File",0x00000000,"kbdusx.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00020409","Layout Id", 0x00000000,"0001" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00020409","Layout Text",0x00000000,"US International" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00020409","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5026" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00030409","Layout File",0x00000000,"kbdusl.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00030409","Layout Id", 0x00000000,"001A" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00030409","Layout Text",0x00000000,"US Dvorak for left hand" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00030409","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5027" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00040409","Layout File",0x00000000,"kbdusr.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00040409","Layout Id", 0x00000000,"001B" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00040409","Layout Text",0x00000000,"US Dvorak for right hand" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00040409","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5028" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00050409","Layout File",0x00000000,"kbdusa.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00050409","Layout Id", 0x00000000,"000B" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00050409","Layout Text",0x00000000,"US English (IBM Arabic 238_L)" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00050409","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5123" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00001809","Layout File",0x00000000,"kbdir.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00001809","Layout Text",0x00000000,"Irish" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00001809","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5014" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040a","Layout File",0x00000000,"kbdes.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040a","Layout Text",0x00000000,"Spanish" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040a","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5020" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000080a","Layout File",0x00000000,"kbdla.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000080a","Layout Text",0x00000000,"Latin American" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000080a","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5017" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040b","Layout File",0x00000000,"kbdfi.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040b","Layout Text",0x00000000,"Finnish" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040b","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5009" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040c","Layout File",0x00000000,"kbdfr.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040c","Layout Text",0x00000000,"French" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040c","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5010" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040d","Layout File",0x00000000,"kbdheb.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040d","Layout Text",0x00000000,"Hebrew" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040d","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5083" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040e","Layout File",0x00000000,"kbdhu.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040e","Layout Text",0x00000000,"Hungarian" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040e","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5033" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040f","Layout File",0x00000000,"kbdic.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040f","Layout Text",0x00000000,"Icelandic" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040f","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5013" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000410","Layout File",0x00000000,"kbdit.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000410","Layout Text",0x00000000,"Italian" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000410","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5015" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000411","Layout File",0x00000000,"kbdja.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000411","Layout Text",0x00000000,"Japanese" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000411","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5061" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000041c","Layout File",0x00000000,"kbdal.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000041c","Layout Text",0x00000000,"Albanian" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000041c","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5029" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000041f","Layout File",0x00000000,"kbdtuq.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000041f","Layout Text",0x00000000,"Turkish Q" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000041f","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5060" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0001041f","Layout File",0x00000000,"kbdtuf.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0001041f","Layout Text",0x00000000,"Turkish F" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0001041f","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5059" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0001041f","Layout Id",0x00000000,"0014" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000080c","Layout File",0x00000000,"kbdbe.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000080c","Layout Text",0x00000000,"Belgian (French)" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000080c","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5002" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000413","Layout File",0x00000000,"kbdne.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000413","Layout Text",0x00000000,"Dutch" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000413","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5008" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000813","Layout File",0x00000000,"kbdbe.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000813","Layout Text",0x00000000,"Belgian (Dutch)" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000813","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5001" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000415","Layout File",0x00000000,"kbdpl1.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000415","Layout Text",0x00000000,"Polish (Programmers)" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000415","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5035" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010416","Layout File",0x00000000,"kbdbr.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010416","Layout Text",0x00000000,"Portuguese (Brazilian ABNT2)" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010416","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5126" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000816","Layout File",0x00000000,"kbdpo.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000816","Layout Text",0x00000000,"Portuguese (Portugal)" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000816","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5019" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000418","Layout File",0x00000000,"kbdro.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000418","Layout Text",0x00000000,"Romanian" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000418","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5037" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000419","Layout File",0x00000000,"kbdru.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000419","Layout Text",0x00000000,"Russian" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000419","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5055" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010419","Layout File",0x00000000,"kbdru1.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010419","Layout Text",0x00000000,"Russian (Typewriter)" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010419","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5056" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000041a","Layout File",0x00000000,"kbdcr.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000041a","Layout Text",0x00000000,"Croatian" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000041a","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5030" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000041b","Layout File",0x00000000,"kbdsk.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000041b","Layout Text",0x00000000,"Slovak" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000041b","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5039" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0001041b","Layout File",0x00000000,"kbdsk1.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0001041b","Layout Text",0x00000000,"Slovak (QWERTY)" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0001041b","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5040" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000041d","Layout File",0x00000000,"kbdsw.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000041d","Layout Text",0x00000000,"Swedish" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000041d","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5022" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000041e","Layout File",0x00000000,"kbdth0.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000041e","Layout Text",0x00000000,"Thai Kedmanee" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000041e","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5079" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0001041e","Layout File",0x00000000,"kbdth1.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0001041e","Layout Text",0x00000000,"Thai Pattachote" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0001041e","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5080" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0002041e","Layout File",0x00000000,"kbdth2.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0002041e","Layout Text",0x00000000,"Thai Kedmanee (non-ShiftLock)" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0002041e","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5081" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0003041e","Layout File",0x00000000,"kbdth3.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0003041e","Layout Text",0x00000000,"Thai Pattachote (non-ShiftLock)" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0003041e","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5082" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000422","Layout File",0x00000000,"kbdur.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000422","Layout Text",0x00000000,"Ukrainian" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000422","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5058" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010422","Layout File",0x00000000,"kbdurs.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010422","Layout Text",0x00000000,"Ukrainian (Student)" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010422","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5141" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000423","Layout File",0x00000000,"kbdblr.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000423","Layout Text",0x00000000,"Belarusian" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000423","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5052" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000425","Layout File",0x00000000,"kbdest.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000425","Layout Text",0x00000000,"Estonian" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000425","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5042" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000426","Layout File",0x00000000,"kbdlv.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000426","Layout Text",0x00000000,"Latvian" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000426","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5043" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010427","Layout File",0x00000000,"kbdlt1.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010427","Layout Text",0x00000000,"Lithuanian" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010427","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5088" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000042a","Layout File",0x00000000,"kbdvntc.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000042a","Layout Text",0x00000000,"Vietnamese" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000042a","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5118" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000042b","Layout File",0x00000000,"kbdarme.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000042b","Layout Text",0x00000000,"Armenian Eastern" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000042b","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5120" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0001042b","Layout File",0x00000000,"kbdarmw.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0001042b","Layout Text",0x00000000,"Armenian Western" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0001042b","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5121" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000042c","Layout File",0x00000000,"kbdazel.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000042c","Layout Text",0x00000000,"Azeri Latin" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000042c","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5117" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000082c","Layout File",0x00000000,"kbdaze.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000082c","Layout Text",0x00000000,"Azeri Cyrillic" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000082c","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5115" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000042f","Layout File",0x00000000,"kbdmac.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000042f","Layout Text",0x00000000,"Macedonian (FYRO)" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000042f","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5109" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000437","Layout File",0x00000000,"kbdgeo.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000437","Layout Text",0x00000000,"Georgian" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000437","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5119" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000439","Layout File",0x00000000,"kbdindev.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000439","Layout Text",0x00000000,"Devanagari - INSCRIPT" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000439","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5096" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000043f","Layout File",0x00000000,"kbdkaz.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000043f","Layout Text",0x00000000,"Kazakh" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000043f","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5113" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000843","Layout File",0x00000000,"kbduzb.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000843","Layout Text",0x00000000,"Uzbek (Cyrillic)" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000843","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5114" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000444","Layout File",0x00000000,"kbdtat.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000444","Layout Text",0x00000000,"Tatar" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000444","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5116" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000445","Layout File",0x00000000,"kbdinben.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000445","Layout Text",0x00000000,"Bengali" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000445","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5135" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000447","Layout File",0x00000000,"kbdinguj.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000447","Layout Text",0x00000000,"Gujarati" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000447","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5097" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000044c","Layout File",0x00000000,"kbdinmal.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000044c","Layout Text",0x00000000,"Malayalam" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000044c","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5139" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000044d","Layout File",0x00000000,"kbdinasa.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000044d","Layout Text",0x00000000,"ASSAMESE - INSCRIPT" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000044d","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5177" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000455","Layout File",0x00000000,"kbdbur.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000455","Layout Text",0x00000000,"Burmese" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000455","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5140" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000414","Layout File",0x00000000,"kbdno.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000414","Layout Text",0x00000000,"Norwegian" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000414","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5018" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000405","Layout File",0x00000000,"kbdcz.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000405","Layout Text",0x00000000,"Czech" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000405","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5031" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010405","Layout File",0x00000000,"kbdcz1.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010405","Layout Text",0x00000000,"Czech (QWERTY)" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010405","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5032" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00011009","Layout File",0x00000000,"kbdcan.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00011009","Layout Id", 0x00000000,"0020" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00011009","Layout Text",0x00000000,"Canadian Multilingual Standard" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00011009","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5110" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000c0c","Layout File",0x00000000,"kbdfc.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000c0c","Layout Text",0x00000000,"Canadian French (Legacy)" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000c0c","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5005" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000c1a","Layout File",0x00000000,"kbdycc.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000c1a","Layout Text",0x00000000,"Serbian (Cyrillic)" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000c1a","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5057" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000081a","Layout File",0x00000000,"kbdycl.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000081a","Layout Text",0x00000000,"Serbian (Latin)" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000081a","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5038" + +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000412","Layout File",0x00000000,"kbdko.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000412","Layout Text",0x00000000,"Korean" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000412","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5063" + +; Keyboard layouts +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout",,0x00000012 +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000402",2,"bg" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000404",2,"ch" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000405",2,"cz" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000406",2,"dk" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000407",2,"gr" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000408",2,"gk" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000409",2,"us" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","0000040A",2,"sp" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","0000040B",2,"su" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","0000040C",2,"fr" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","0000040E",2,"hu" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","0000040F",2,"is" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000410",2,"it" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000411",2,"jp" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000412",2,"ko" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000413",2,"nl" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000414",2,"no" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000415",2,"pl" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000416",2,"br" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000418",2,"ro" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000419",2,"ru" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","0000041A",2,"yu" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","0000041B",2,"sl" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","0000041C",2,"us" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","0000041D",2,"sv" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","0000041F",2,"tr" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000422",2,"us" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000423",2,"us" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000424",2,"yu" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000425",2,"et" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000426",2,"us" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000427",2,"us" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000804",2,"ch" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000807",2,"sg" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000809",2,"uk" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","0000080A",2,"la" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","0000080C",2,"be" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000813",2,"be" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000816",2,"po" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000C0C",2,"cf" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000C1A",2,"us" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00001009",2,"us" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","0000100C",2,"sf" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00001809",2,"us" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00010402",2,"us" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00010405",2,"cz" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00010407",2,"gr" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00010408",2,"gk" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00010409",2,"dv" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","0001040A",2,"sp" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","0001040E",2,"hu" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00010410",2,"it" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00010415",2,"pl" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00010419",2,"ru" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","0001041B",2,"sl" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","0001041F",2,"tr" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00010426",2,"us" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00010C0C",2,"cf" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00010C1A",2,"us" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00020408",2,"gk" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00020409",2,"us" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00030409",2,"usl" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00040409",2,"usr" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00050408",2,"gk" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybIDs","00000410",2,"141" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybIDs","0000041F",2,"179" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybIDs","00010408",2,"220" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybIDs","00010410",2,"142" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybIDs","00010415",2,"214" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybIDs","0001041F",2,"440" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybIDs","00020408",2,"319" + +; Network +HKLM,"SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}",,0x00000000,"Network Adapters" +HKLM,"SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}","Class",0x00000000,"Net" +HKLM,"SYSTEM\CurrentControlSet\Control\Network\{4D36E973-E325-11CE-BFC1-08002BE10318}",,0x00000000,"Network Client" +HKLM,"SYSTEM\CurrentControlSet\Control\Network\{4D36E973-E325-11CE-BFC1-08002BE10318}","Class",0x00000000,"NetClient" +HKLM,"SYSTEM\CurrentControlSet\Control\Network\{4D36E974-E325-11CE-BFC1-08002BE10318}",,0x00000000,"Network Service" +HKLM,"SYSTEM\CurrentControlSet\Control\Network\{4D36E974-E325-11CE-BFC1-08002BE10318}","Class",0x00000000,"NetService" +HKLM,"SYSTEM\CurrentControlSet\Control\Network\{4D36E975-E325-11CE-BFC1-08002BE10318}",,0x00000000,"Network Protocol" +HKLM,"SYSTEM\CurrentControlSet\Control\Network\{4D36E975-E325-11CE-BFC1-08002BE10318}","Class",0x00000000,"NetTrans" +HKLM,"SYSTEM\CurrentControlSet\Control\NetworkProvider\Order","ProviderOrder",0x00000000,"" + +; NLS Files +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","37",0x00000000,"c_037.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","424",0x00000000,"c_424.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","437",0x00000000,"c_437.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","500",0x00000000,"c_500.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","737",0x00000000,"c_737.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","775",0x00000000,"c_775.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","850",0x00000000,"c_850.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","852",0x00000000,"c_852.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","855",0x00000000,"c_855.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","856",0x00000000,"c_856.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","857",0x00000000,"c_857.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","860",0x00000000,"c_860.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","861",0x00000000,"c_861.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","862",0x00000000,"c_862.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","863",0x00000000,"c_863.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","864",0x00000000,"c_864.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","865",0x00000000,"c_865.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","866",0x00000000,"c_866.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","869",0x00000000,"c_869.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","874",0x00000000,"c_874.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","875",0x00000000,"c_875.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","878",0x00000000,"c_878.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","932",0x00000000,"c_932.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","936",0x00000000,"c_936.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","949",0x00000000,"c_949.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","950",0x00000000,"c_950.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","1006",0x00000000,"c_1006.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","1026",0x00000000,"c_1026.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","1250",0x00000000,"c_1250.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","1251",0x00000000,"c_1251.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","1252",0x00000000,"c_1252.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","1253",0x00000000,"c_1253.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","1254",0x00000000,"c_1254.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","1255",0x00000000,"c_1255.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","1256",0x00000000,"c_1256.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","1257",0x00000000,"c_1257.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","1258",0x00000000,"c_1258.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","10000",0x00000000,"c_10000.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","10006",0x00000000,"c_10006.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","10007",0x00000000,"c_10007.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","10029",0x00000000,"c_10029.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","10079",0x00000000,"c_10079.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","10081",0x00000000,"c_10081.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","20866",0x00000000,"c_20866.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","21866",0x00000000,"c_21866.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","28591",0x00000000,"c_28591.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","28592",0x00000000,"c_28592.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","28593",0x00000000,"c_28593.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","28594",0x00000000,"c_28594.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","28595",0x00000000,"c_28595.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","28596",0x00000000,"c_28596.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","28597",0x00000000,"c_28597.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","28598",0x00000000,"c_28598.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","28599",0x00000000,"c_28599.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","28600",0x00000000,"c_28600.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","28603",0x00000000,"c_28603.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","28604",0x00000000,"c_28604.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","28605",0x00000000,"c_28605.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","28606",0x00000000,"c_28606.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","ACP",0x00000000,"1252" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","OEMCP",0x00000000,"437" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","MACCP",0x00000000,"10000" + +HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage\EUDCCodeRange","932",2,"F040-F9FC" +HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage\EUDCCodeRange","936",2,"AAA1-AFFE,F8A1-FEFE,A140-A7A0" +HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage\EUDCCodeRange","949",2,"C9A1-C9FE,FEA1-FEFE" +HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage\EUDCCodeRange","950",2,"FA40-FEFE,8E40-A0FE,8140-8DFE,C6A1-C8FE" +HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage\EUDCCodeRange","Unicode",2,"E000-F8FF" + +; NLS Language settings +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0402",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0403",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0404",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0804",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0c04",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","1004",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","1404",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0405",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0406",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0407",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0807",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0c07",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","1407",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0408",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0409",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0809",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0c09",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","1009",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","1409",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","1809",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","1c09",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","2009",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","3009",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","3409",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","040a",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","080a",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0c0a",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","100a",0x00000000,"l_intl.nls" +;HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","140a",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","180a",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","1c0a",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","200a",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","240a",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","280a",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","2c0a",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","300a",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","340a",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","380a",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","3c0a",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","400a",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","440a",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","480a",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","4c0a",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","500a",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","040b",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","040c",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","080c",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0c0c",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","100c",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","140c",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","180c",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","040d",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","040e",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","040f",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0410",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0810",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0411",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0412",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0413",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0414",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0813",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0414",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0814",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0415",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0416",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0816",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0417",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0418",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0419",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","041a",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","081a",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0c1a",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","041b",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","041c",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","041d",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","081d",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","041e",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","041f",0x00000000,"l_intl.nls" +;HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0420",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0421",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0422",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0423",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0424",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0425",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0426",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0427",0x00000000,"l_intl.nls" +;HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0429",0x00000000,"l_intl.nls" +;HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","042a",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","042b",0x00000000,"l_intl.nls" +;HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","042c",0x00000000,"l_intl.nls" +;HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","082c",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","042d",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","042f",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0436",0x00000000,"l_intl.nls" +;HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0437",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0438",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0439",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","043e",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","083e",0x00000000,"l_intl.nls" +;HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","043f",0x00000000,"l_intl.nls" +;HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0440",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0441",0x00000000,"l_intl.nls" +;HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0443",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0843",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0445",0x00000000,"l_intl.nls" +;HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0455",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0456",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","048f",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0490",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","Default",0x00000000,"0409" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","InstallLanguage",0x00000000,"0409" + +; Supported and installed locales +; If you add/uncomment an entry here, please also add the appropriate Language +; in the previous section. +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale",,0x00000012 +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000402",0x00000000,"5" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000403",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000404",0x00000000,"9" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000804",0x00000000,"a" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000405",0x00000000,"2" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000406",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000407",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000807",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000c07",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00001407",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000408",0x00000000,"4" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000409",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000809",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000c09",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00001009",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00001409",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00001809",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00001c09",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00002009",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00003009",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00003409",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000040a",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000080a",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000c0a",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000100a",0x00000000,"1" +;HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000140a",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000180a",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00001c0a",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000200a",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000240a",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000280a",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00002c0a",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000300a",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000340a",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000380a",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00003c0a",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000400a",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000440a",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000480a",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00004c0a",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000500a",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000040b",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000040c",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000080c",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000c0c",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000100c",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000140c",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000180c",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000040d",0x00000000,"c" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000040e",0x00000000,"2" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000040f",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000410",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000810",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000411",0x00000000,"7" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000412",0x00000000,"8" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000413",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000813",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000414",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000814",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000415",0x00000000,"2" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000416",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000816",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000417",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000418",0x00000000,"2" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000419",0x00000000,"5" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000041a",0x00000000,"2" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000081a",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000c1a",0x00000000,"5" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000041b",0x00000000,"2" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000041c",0x00000000,"2" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000041d",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000081d",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000041e",0x00000000,"b" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000041f",0x00000000,"6" +;HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000420",0x00000000,"" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000421",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000422",0x00000000,"5" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000423",0x00000000,"5" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000424",0x00000000,"2" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000425",0x00000000,"3" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000426",0x00000000,"3" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000427",0x00000000,"3" +;HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000429",0x00000000,"" +;HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000042a",0x00000000,"" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000042b",0x00000000,"11" +;HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000042c",0x00000000,"6" +;HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000082c",0x00000000,"5" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000042d",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000042f",0x00000000,"5" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000436",0x00000000,"1" +;HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000437",0x00000000,"10" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000438",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000439",0x00000000,"f" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000043e",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000083e",0x00000000,"1" +;HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000043f",0x00000000,"5" +;HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000440",0x00000000,"5" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000441",0x00000000,"1" +;HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000443",0x00000000,"6" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000843",0x00000000,"5" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000445",0x00000000,"f" +;HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000455",0x00000000,"" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000456",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000048f",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000490",0x00000000,"1" + +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language Groups","1",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language Groups","2",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language Groups","3",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language Groups","4",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language Groups","5",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language Groups","6",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language Groups","7",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language Groups","8",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language Groups","9",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language Groups","10",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language Groups","11",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language Groups","a",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language Groups","b",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language Groups","c",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language Groups","d",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language Groups","e",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language Groups","f",0x00000000,"1" + +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale\Alternate Sorts","00010407",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale\Alternate Sorts","0001040e",0x00000000,"2" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale\Alternate Sorts","00010437",0x00000000,"" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale\Alternate Sorts","00020804",0x00000000,"" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale\Alternate Sorts","00021004",0x00000000,"" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale\Alternate Sorts","00021404",0x00000000,"" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale\Alternate Sorts","00030404",0x00000000,"" + +HKLM,"SYSTEM\CurrentControlSet\Control\PnP\Pci\CardList","Intel 82441FX",0x00030003,\ +01,00,00,00,86,80,37,12,00,00,00,00,00,00,00,00 +HKLM,"SYSTEM\CurrentControlSet\Control\PnP\Pci\CardList","Intel 82439HX",0x00030003,\ +01,00,00,00,86,80,50,12,00,00,00,00,00,00,00,00 +HKLM,"SYSTEM\CurrentControlSet\Control\PnP\Pci\CardList","Intel 82439TX",0x00030003,\ +01,00,00,00,86,80,00,71,00,00,00,00,00,00,00,00 +HKLM,"SYSTEM\CurrentControlSet\Control\PnP\Pci\CardList","Intel 82443LX/EX",0x00030003,\ +01,00,00,00,86,80,80,71,00,00,00,00,00,00,00,00 +HKLM,"SYSTEM\CurrentControlSet\Control\PnP\Pci\CardList","Intel 82443BX1",0x00030003,\ +01,00,00,00,86,80,90,71,00,00,00,00,00,00,00,00 +HKLM,"SYSTEM\CurrentControlSet\Control\PnP\Pci\CardList","Intel 82443BX2",0x00030003,\ +01,00,00,00,86,80,92,71,00,00,00,00,00,00,00,00 +HKLM,"SYSTEM\CurrentControlSet\Control\PnP\Pci\CardList","Intel 82443GX",0x00030003,\ +01,00,00,00,86,80,a0,71,00,00,00,00,00,00,00,00 +HKLM,"SYSTEM\CurrentControlSet\Control\PnP\Pci\CardList","VIA Tech1",0x00030003,\ +01,00,00,00,06,11,01,05,00,00,00,00,00,00,00,00 +HKLM,"SYSTEM\CurrentControlSet\Control\PnP\Pci\CardList","VIA Tech2",0x00030003,\ +01,00,00,00,06,11,91,06,00,00,00,00,00,00,00,00 +HKLM,"SYSTEM\CurrentControlSet\Control\PnP\Pci\CardList","Toshiba",0x00030003,\ +01,00,00,00,79,11,01,06,00,00,00,00,00,00,00,00 +HKLM,"SYSTEM\CurrentControlSet\Control\PnP\Pci\CardList","Ali",0x00030003,\ +01,00,00,00,b9,10,21,15,00,00,00,00,00,00,00,00 + +HKLM,"SYSTEM\CurrentControlSet\Control\Print","MajorVersion",0x00010001,2 +HKLM,"SYSTEM\CurrentControlSet\Control\Print","MinorVersion",0x00010003,0 +HKLM,"SYSTEM\CurrentControlSet\Control\Print","PriorityClass",0x00010003,0 +HKLM,"SYSTEM\CurrentControlSet\Control\Print\Environments",,0x00000012 +HKLM,"SYSTEM\CurrentControlSet\Control\Print\Monitors",,0x00000012 +HKLM,"SYSTEM\CurrentControlSet\Control\Print\Monitors\Local Port","Driver",2,"localspl.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Print\Printers",,0x00000012 + +HKLM,"SYSTEM\CurrentControlSet\Control\ProductOptions","ProductType",2,"WinNT" +HKLM,"SYSTEM\CurrentControlSet\Control\ProductOptions","ProductSuite",0x00010002,"" + +HKLM,"SYSTEM\CurrentControlSet\Control\SecurityProviders","SecurityProviders",2,"schannel.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\SecurityProviders\SaslProfiles",,0x00000012 + +; Some installers check for SP6 +HKLM,"SYSTEM\CurrentControlSet\Control\Windows","CSDVersion",0x00010001,0x00000600 + +; Service groups +HKLM,"SYSTEM\CurrentControlSet\Control\ServiceGroupOrder","List",0x00010000, \ + "Boot Bus Extender", \ + "System Bus Extender", \ + "SCSI Port", \ + "SCSI Miniport", \ + "Primary Disk", \ + "SCSI Class Helper", \ + "SCSI Class", \ + "Boot File System", \ + "Base", \ + "Pointer Port", \ + "Keyboard Port", \ + "Pointer Class", \ + "Keyboard Class", \ + "Debug", \ + "Video Init", \ + "Video", \ + "Video Save", \ + "File System", \ + "Event log", \ + "NDIS", \ + "PNP_TDI", \ + "TDI", \ + "PlugPlay", \ + "SpoolerGroup", \ + "Extended Base" + +; Set the timeout for directx/ReactX graphic surface lock see _EDD_DIRECTDRAW_GLOBAL struct for more info +HKLM,"SYSTEM\CurrentControlSet\Control\GraphicsDrivers\DCI","Timeout",0x00010001,0x00000007 +HKLM,"SYSTEM\CurrentControlSet\Control\GraphicsDrivers\UseNewKey",,0x00000012 + +; Group order, the first DWORD is the count of entries, +; the following dwords are the tag entries for the load order. +HKLM,"SYSTEM\CurrentControlSet\Control\GroupOrderList","Video Save", 0x00000001, \ + 0x02, 0x00, 0x00, 0x00, \ + 0x01, 0x00, 0x00, 0x00, \ + 0x02, 0x00, 0x00, 0x00 +HKLM,"SYSTEM\CurrentControlSet\Control\GroupOrderList","SCSI Miniport", 0x00000001, \ + 0x02, 0x00, 0x00, 0x00, \ + 0x10, 0x00, 0x00, 0x00, \ + 0x20, 0x00, 0x00, 0x00 + +; Session Manager stuff +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager","BootExecute", 0x00010000, \ + "autocheck autochk *" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager","ObjectDirectories",0x00010000, \ + "\Windows", \ + "\RPC Control" + +; DOS devices +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\DOS Devices","AUX",0x00000000,"\DosDevices\COM1" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\DOS Devices","MAILSLOT",0x00000000,"\Device\MailSlot" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\DOS Devices","NUL",0x00000000,"\Device\Null" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\DOS Devices","PIPE",0x00000000,"\Device\NamedPipe" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\DOS Devices","PRN",0x00000000,"\DosDevices\LPT1" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\DOS Devices","UNC",0x00000000,"\Device\Mup" + +; System environment settings +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","ComSpec",0x00020000,"%SystemRoot%\system32\cmd.exe" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","OS",0x00020000,"ReactOS" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","Path",0x00020000,"%SystemRoot%\bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\system32\wbem" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","windir",0x00020000,"%SystemRoot%" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","TEMP",0x00020000,"%SystemDrive%\TEMP" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","TMP",0x00020000,"%SystemDrive%\TEMP" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","PATHEXT",0x00020000,".COM;.EXE;.BAT;.CMD" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","PROCESSOR_ARCHITECTURE",0x00020000,"x86" + + +; Known DLLs +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","DllDirectory",0x00020000,"%SystemRoot%\system32" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","advapi32",0x00000000,"advapi32.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","comdlg32",0x00000000,"comdlg32.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","gdi32",0x00000000,"gdi32.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","imagehlp",0x00000000,"imagehlp.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","kernel32",0x00000000,"kernel32.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","lz32",0x00000000,"lz32.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","ole32",0x00000000,"ole32.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","oleaut32",0x00000000,"oleaut32.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","olecli32",0x00000000,"olecli32.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","olesvr32",0x00000000,"olesvr32.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","olethk32",0x00000000,"olethk32.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","rpcrt4",0x00000000,"rpcrt4.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","shell32",0x00000000,"shell32.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","url",0x00000000,"url.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","urlmon",0x00000000,"urlmon.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","user32",0x00000000,"user32.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","version",0x00000000,"version.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","wininet",0x00000000,"wininet.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","wldap32",0x00000000,"wldap32.dll" + +; Pagefile settings +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management","PagingFiles",0x00010000, \ + "C:\pagefile.sys" + +; Subsystems +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Subsystems","Debug",0x00020000,"" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Subsystems","Kmode",0x00020000,"%SystemRoot%\system32\win32k.sys" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Subsystems","Optional",0x00010000,"Posix","Os2","Vms" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Subsystems","Os2",0x00020000,"%SystemRoot%\system32\csr.exe ObjectDirectory=\OS2 SharedSection=128 Windows=Off SubSystemType=Text ServerDll=os2srv,1 ProfileControl=Off RequestThreads=2 MaxRequestThreads=2 Sessions=Off" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Subsystems","Posix",0x00020000,"%SystemRoot%\system32\csr.exe ObjectDirectory=\POSIX SharedSection=128 Windows=Off SubSystemType=Text ServerDll=psxsrv,1 ProfileControl=Off RequestThreads=2 MaxRequestThreads=2 Sessions=Off" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Subsystems","Required",0x00010000,"Debug","Windows" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Subsystems","Vms",0x00020000,"%SystemRoot%\system32\csr.exe ObjectDirectory=\VMS SharedSection=128 Windows=Off SubSystemType=Text ServerDll=vmssrv,1 ProfileControl=Off RequestThreads=2 MaxRequestThreads=2 Sessions=Off" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Subsystems","Windows",0x00020000,"%SystemRoot%\system32\csrss.exe" + +; WOW Support +HKLM,"SYSTEM\CurrentControlSet\Control\Wow","",0x00000000,"" + +; PNP Root device +HKLM,"SYSTEM\CurrentControlSet\Enum\HTREE\ROOT\0","",0x00000000,"" + +; Afd driver +HKLM,"SYSTEM\CurrentControlSet\Services\Afd","ErrorControl",0x00010001,0x00000001 +HKLM,"SYSTEM\CurrentControlSet\Services\Afd","Group",0x00000000,"TDI" +HKLM,"SYSTEM\CurrentControlSet\Services\Afd","ImagePath",0x00020000,"system32\drivers\afd.sys" +HKLM,"SYSTEM\CurrentControlSet\Services\Afd","Start",0x00010001,0x00000001 +HKLM,"SYSTEM\CurrentControlSet\Services\Afd","Type",0x00010001,0x00000001 + +; UniATA/Atapi miniport driver +HKLM,"SYSTEM\CurrentControlSet\Services\UniATA","ErrorControl",0x00010001,0x00000000 +HKLM,"SYSTEM\CurrentControlSet\Services\UniATA","Group",0x00000000,"System Bus Extender" +HKLM,"SYSTEM\CurrentControlSet\Services\UniATA","ImagePath",0x00020000,"system32\drivers\uniata.sys" +HKLM,"SYSTEM\CurrentControlSet\Services\UniATA","Start",0x00010001,0x00000000 +HKLM,"SYSTEM\CurrentControlSet\Services\UniATA","Type",0x00010001,0x00000001 +HKLM,"SYSTEM\CurrentControlSet\Services\UniATA","Tag",0x00010001,0x00000010 + +; Audio Service +HKLM,"SYSTEM\CurrentControlSet\Services\RosAudioSrv","DisplayName",0x00000000,"Audio Service" +HKLM,"SYSTEM\CurrentControlSet\Services\RosAudioSrv","Description",0x00000000,"Provides audio facilities to applications" +HKLM,"SYSTEM\CurrentControlSet\Services\RosAudioSrv","ErrorControl",0x00010001,0x00000000 +HKLM,"SYSTEM\CurrentControlSet\Services\RosAudioSrv","Group",0x00000000,"Audio" +HKLM,"SYSTEM\CurrentControlSet\Services\RosAudioSrv","ImagePath",0x00020000,"%SystemRoot%\system32\audiosrv.exe" +HKLM,"SYSTEM\CurrentControlSet\Services\RosAudioSrv","Start",0x00010001,0x00000003 +HKLM,"SYSTEM\CurrentControlSet\Services\RosAudioSrv","Type",0x00010001,0x00000010 + +; BusLogic 958 miniport driver +HKLM,"SYSTEM\CurrentControlSet\Services\BusLogic","ErrorControl",0x00010001,0x00000000 +HKLM,"SYSTEM\CurrentControlSet\Services\BusLogic","Group",0x00000000,"SCSI Miniport" +HKLM,"SYSTEM\CurrentControlSet\Services\BusLogic","ImagePath",0x00020000,"system32\drivers\buslogic.sys" +HKLM,"SYSTEM\CurrentControlSet\Services\BusLogic","Start",0x00010001,0x00000000 +HKLM,"SYSTEM\CurrentControlSet\Services\BusLogic","Type",0x00010001,0x00000001 +HKLM,"SYSTEM\CurrentControlSet\Services\BusLogic","Tag",0x00010001,0x00000020 + +; Beep device driver +HKLM,"SYSTEM\CurrentControlSet\Services\Beep","ErrorControl",0x00010001,0x00000000 +HKLM,"SYSTEM\CurrentControlSet\Services\Beep","Group",0x00000000,"Base" +HKLM,"SYSTEM\CurrentControlSet\Services\Beep","ImagePath",0x00020000,"system32\drivers\beep.sys" +HKLM,"SYSTEM\CurrentControlSet\Services\Beep","Start",0x00010001,0x00000001 +HKLM,"SYSTEM\CurrentControlSet\Services\Beep","Type",0x00010001,0x00000001 + +; BlueScreen device driver +HKLM,"SYSTEM\CurrentControlSet\Services\Blue","ErrorControl",0x00010001,0x00000000 +HKLM,"SYSTEM\CurrentControlSet\Services\Blue","Group",0x00000000,"Video Init" +HKLM,"SYSTEM\CurrentControlSet\Services\Blue","ImagePath",0x00020000,"system32\drivers\blue.sys" +HKLM,"SYSTEM\CurrentControlSet\Services\Blue","Start",0x00010001,0x00000004 +HKLM,"SYSTEM\CurrentControlSet\Services\Blue","Type",0x00010001,0x00000001 + +; Cdfs (ISO96660) filesystem driver +HKLM,"SYSTEM\CurrentControlSet\Services\Cdfs","ErrorControl",0x00010001,0x00000000 +HKLM,"SYSTEM\CurrentControlSet\Services\Cdfs","Group",0x00000000,"File System" +HKLM,"SYSTEM\CurrentControlSet\Services\Cdfs","ImagePath",0x00020000,"system32\drivers\cdfs.sys" +HKLM,"SYSTEM\CurrentControlSet\Services\Cdfs","Start",0x00010001,0x00000004 +HKLM,"SYSTEM\CurrentControlSet\Services\Cdfs","Type",0x00010001,0x00000002 + +; Cdrom class driver +HKLM,"SYSTEM\CurrentControlSet\Services\Cdrom","ErrorControl",0x00010001,0x00000000 +HKLM,"SYSTEM\CurrentControlSet\Services\Cdrom","Group",0x00000000,"SCSI Class" +HKLM,"SYSTEM\CurrentControlSet\Services\Cdrom","ImagePath",0x00020000,"system32\drivers\cdrom.sys" +HKLM,"SYSTEM\CurrentControlSet\Services\Cdrom","Start",0x00010001,0x00000001 +HKLM,"SYSTEM\CurrentControlSet\Services\Cdrom","Type",0x00010001,0x00000001 + +; Class2 driver +HKLM,"SYSTEM\CurrentControlSet\Services\Class2","ErrorControl",0x00010001,0x00000000 +HKLM,"SYSTEM\CurrentControlSet\Services\Class2","Group",0x00000000,"SCSI Class Helper" +HKLM,"SYSTEM\CurrentControlSet\Services\Class2","ImagePath",0x00020000,"system32\drivers\class2.sys" +HKLM,"SYSTEM\CurrentControlSet\Services\Class2","Start",0x00010001,0x00000000 +HKLM,"SYSTEM\CurrentControlSet\Services\Class2","Type",0x00010001,0x00000001 + +; Debug output driver +HKLM,"SYSTEM\CurrentControlSet\Services\DebugOut","ErrorControl",0x00010001,0x00000000 +HKLM,"SYSTEM\CurrentControlSet\Services\DebugOut","Group",0x00000000,"Debug" +HKLM,"SYSTEM\CurrentControlSet\Services\DebugOut","ImagePath",0x00020000,"system32\drivers\debugout.sys" +HKLM,"SYSTEM\CurrentControlSet\Services\DebugOut","Start",0x00010001,0x00000004 +HKLM,"SYSTEM\CurrentControlSet\Services\DebugOut","Type",0x00010001,0x00000001 + +; Disk class driver +HKLM,"SYSTEM\CurrentControlSet\Services\Disk","ErrorControl",0x00010001,0x00000000 +HKLM,"SYSTEM\CurrentControlSet\Services\Disk","Group",0x00000000,"SCSI Class" +HKLM,"SYSTEM\CurrentControlSet\Services\Disk","ImagePath",0x00020000,"system32\drivers\disk.sys" +HKLM,"SYSTEM\CurrentControlSet\Services\Disk","Start",0x00010001,0x00000000 +HKLM,"SYSTEM\CurrentControlSet\Services\Disk","Type",0x00010001,0x00000001 + +; DHCP client service +HKLM,"SYSTEM\CurrentControlSet\Services\DHCP","DisplayName",0x00000000,"DHCP Client" +HKLM,"SYSTEM\CurrentControlSet\Services\DHCP","Description",0x00000000,"Attempts to obtain network settings automatically from an available DHCP server" +HKLM,"SYSTEM\CurrentControlSet\Services\DHCP","ErrorControl",0x00010001,0x00000000 +HKLM,"SYSTEM\CurrentControlSet\Services\DHCP","Group",0x00000000,"Network" +HKLM,"SYSTEM\CurrentControlSet\Services\DHCP","ImagePath",0x00020000,"%SystemRoot%\system32\dhcp.exe" +HKLM,"SYSTEM\CurrentControlSet\Services\DHCP","Start",0x00010001,0x00000002 +HKLM,"SYSTEM\CurrentControlSet\Services\DHCP","Type",0x00010001,0x00000010 + +; Event logging service +HKLM,"SYSTEM\CurrentControlSet\Services\EventLog",,0x00000010 +HKLM,"SYSTEM\CurrentControlSet\Services\EventLog","DisplayName",0x00000000,"Event Logger" +HKLM,"SYSTEM\CurrentControlSet\Services\EventLog","Description",0x00000000,"Logs events or messages sent by the operating system in a database accessible via the event log viewer" +HKLM,"SYSTEM\CurrentControlSet\Services\EventLog","ErrorControl",0x00010001,0x00000000 +HKLM,"SYSTEM\CurrentControlSet\Services\EventLog","Group",0x00000000,"Event log" +HKLM,"SYSTEM\CurrentControlSet\Services\EventLog","ImagePath",0x00020000,"%SystemRoot%\system32\eventlog.exe" +HKLM,"SYSTEM\CurrentControlSet\Services\EventLog","Start",0x00010001,0x00000002 +HKLM,"SYSTEM\CurrentControlSet\Services\EventLog","Type",0x00010001,0x00000010 + +HKLM,"SYSTEM\CurrentControlSet\Services\EventLog\Application",,0x00000010 +HKLM,"SYSTEM\CurrentControlSet\Services\EventLog\Application","File",0x00020000,"%SystemRoot%\system32\config\AppEvent.Evt" +HKLM,"SYSTEM\CurrentControlSet\Services\EventLog\Security",,0x00000010 +HKLM,"SYSTEM\CurrentControlSet\Services\EventLog\Security","File",0x00020000,"%SystemRoot%\system32\config\SecEvent.Evt" +HKLM,"SYSTEM\CurrentControlSet\Services\EventLog\System",,0x00000010 +HKLM,"SYSTEM\CurrentControlSet\Services\EventLog\System","File",0x00020000,"%SystemRoot%\system32\config\SysEvent.Evt" + +; Floppy driver +HKLM,"SYSTEM\CurrentControlSet\Services\Floppy","ErrorControl",0x00010001,0x00000000 +HKLM,"SYSTEM\CurrentControlSet\Services\Floppy","Group",0x00000000,"Primary Disk" +HKLM,"SYSTEM\CurrentControlSet\Services\Floppy","ImagePath",0x00020000,"system32\drivers\floppy.sys" +HKLM,"SYSTEM\CurrentControlSet\Services\Floppy","Start",0x00010001,0x00000001 +HKLM,"SYSTEM\CurrentControlSet\Services\Floppy","Type",0x00010001,0x00000001 + +; Filesystem recognizer driver +HKLM,"SYSTEM\CurrentControlSet\Services\Fs_Rec","ErrorControl",0x00010001,0x00000000 +HKLM,"SYSTEM\CurrentControlSet\Services\Fs_Rec","Group",0x00000000,"Boot file system" +HKLM,"SYSTEM\CurrentControlSet\Services\Fs_Rec","ImagePath",0x00020000,"system32\drivers\fs_rec.sys" +HKLM,"SYSTEM\CurrentControlSet\Services\Fs_Rec","Start",0x00010001,0x00000001 +HKLM,"SYSTEM\CurrentControlSet\Services\Fs_Rec","Type",0x00010001,0x00000008 + +; Kernel-Mode Tests +;HKLM,"SYSTEM\CurrentControlSet\Services\Kmtest","ErrorControl",0x00010001,0x00000000 +;HKLM,"SYSTEM\CurrentControlSet\Services\Kmtest","Group",0x00000000,"Base" +;HKLM,"SYSTEM\CurrentControlSet\Services\Kmtest","ImagePath",0x00020000,"system32\drivers\kmtest.sys" +;HKLM,"SYSTEM\CurrentControlSet\Services\Kmtest","Start",0x00010001,0x00000001 +;HKLM,"SYSTEM\CurrentControlSet\Services\Kmtest","Type",0x00010001,0x00000001 + +; Keyboard class driver +HKLM,"SYSTEM\CurrentControlSet\Services\kbdclass","ErrorControl",0x00010001,0x00000000 +HKLM,"SYSTEM\CurrentControlSet\Services\kbdclass","Group",0x00000000,"Keyboard Class" +HKLM,"SYSTEM\CurrentControlSet\Services\kbdclass","ImagePath",0x00020000,"system32\drivers\kbdclass.sys" +HKLM,"SYSTEM\CurrentControlSet\Services\kbdclass","Start",0x00010001,0x00000001 +HKLM,"SYSTEM\CurrentControlSet\Services\kbdclass","Type",0x00010001,0x00000001 +HKLM,"SYSTEM\CurrentControlSet\Services\kbdclass\Parameters","ConnectMultiplePorts",0x00010001,1 +HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E96B-E325-11CE-BFC1-08002BE10318}","UpperFilters",0x00010000,"kbdclass" + +; MPU-401 MIDI driver +HKLM,"SYSTEM\CurrentControlSet\Services\mpu401","Group",0x00000000,"Base" +HKLM,"SYSTEM\CurrentControlSet\Services\mpu401","ServiceType",0x00010001,0x00000001 +HKLM,"SYSTEM\CurrentControlSet\Services\mpu401","Type",0x00010001,0x00000001 +HKLM,"SYSTEM\CurrentControlSet\Services\mpu401","Start",0x00010001,0x00000004 +HKLM,"SYSTEM\CurrentControlSet\Services\mpu401","ErrorControl",0x00010001,0x00000001 +HKLM,"SYSTEM\CurrentControlSet\Services\mpu401","ImagePath",0x00020000,"system32\drivers\mpu401.sys" + +; Mouse class driver +HKLM,"SYSTEM\CurrentControlSet\Services\mouclass","ErrorControl",0x00010001,0x00000000 +HKLM,"SYSTEM\CurrentControlSet\Services\mouclass","Group",0x00000000,"Pointer Class" +HKLM,"SYSTEM\CurrentControlSet\Services\mouclass","ImagePath",0x00020000,"system32\drivers\mouclass.sys" +HKLM,"SYSTEM\CurrentControlSet\Services\mouclass","Start",0x00010001,0x00000001 +HKLM,"SYSTEM\CurrentControlSet\Services\mouclass","Type",0x00010001,0x00000001 +HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E96F-E325-11CE-BFC1-08002BE10318}","UpperFilters",0x00010000,"mouclass" + +; Mailslot filesystem driver +HKLM,"SYSTEM\CurrentControlSet\Services\Msfs","ErrorControl",0x00010001,0x00000000 +HKLM,"SYSTEM\CurrentControlSet\Services\Msfs","Group",0x00000000,"File System" +HKLM,"SYSTEM\CurrentControlSet\Services\Msfs","ImagePath",0x00020000,"system32\drivers\msfs.sys" +HKLM,"SYSTEM\CurrentControlSet\Services\Msfs","Start",0x00010001,0x00000001 +HKLM,"SYSTEM\CurrentControlSet\Services\Msfs","Type",0x00010001,0x00000002 + +; NDIS driver - the only boot-start network driver +HKLM,"SYSTEM\CurrentControlSet\Services\Ndis","ErrorControl",0x00010001,0x00000001 +HKLM,"SYSTEM\CurrentControlSet\Services\Ndis","Group",0x00000000,"NDIS" +HKLM,"SYSTEM\CurrentControlSet\Services\Ndis","ImagePath",0x00020000,"system32\drivers\ndis.sys" +HKLM,"SYSTEM\CurrentControlSet\Services\Ndis","Start",0x00010001,0x00000000 +HKLM,"SYSTEM\CurrentControlSet\Services\Ndis","Type",0x00010001,0x00000001 + +; NetLogon +;HKLM,"SYSTEM\CurrentControlSet\Services\NetLogon","DisplayName",0x00000000,"Net Logon" +;HKLM,"SYSTEM\CurrentControlSet\Services\NetLogon","Description",0x00000000,"Sets up a secure channel to a domain controller for domain authentication" +;HKLM,"SYSTEM\CurrentControlSet\Services\NetLogon","ErrorControl",0x00010001,0x00000001 +;HKLM,"SYSTEM\CurrentControlSet\Services\Netlogon","ImagePath",0x00020000,"%SystemRoot%\system32\lsass.exe" +;HKLM,"SYSTEM\CurrentControlSet\Services\NetLogon","Start",0x00010001,0x00000003 +;HKLM,"SYSTEM\CurrentControlSet\Services\Netlogon","Type",0x00010001,0x00000020 + +; Named Pipe filesystem driver +HKLM,"SYSTEM\CurrentControlSet\Services\Npfs","ErrorControl",0x00010001,0x00000000 +HKLM,"SYSTEM\CurrentControlSet\Services\Npfs","Group",0x00000000,"File System" +HKLM,"SYSTEM\CurrentControlSet\Services\Npfs","ImagePath",0x00020000,"system32\drivers\npfs.sys" +HKLM,"SYSTEM\CurrentControlSet\Services\Npfs","Start",0x00010001,0x00000001 +HKLM,"SYSTEM\CurrentControlSet\Services\Npfs","Type",0x00010001,0x00000002 + +; NTFS filesystem driver +HKLM,"SYSTEM\CurrentControlSet\Services\Ntfs","ErrorControl",0x00010001,0x00000000 +HKLM,"SYSTEM\CurrentControlSet\Services\Ntfs","Group",0x00000000,"File System" +HKLM,"SYSTEM\CurrentControlSet\Services\Ntfs","ImagePath",0x00020000,"system32\drivers\ntfs.sys" +HKLM,"SYSTEM\CurrentControlSet\Services\Ntfs","Start",0x00010001,0x00000004 +HKLM,"SYSTEM\CurrentControlSet\Services\Ntfs","Type",0x00010001,0x00000002 + +; Null device driver +HKLM,"SYSTEM\CurrentControlSet\Services\Null","ErrorControl",0x00010001,0x00000000 +HKLM,"SYSTEM\CurrentControlSet\Services\Null","Group",0x00000000,"Base" +HKLM,"SYSTEM\CurrentControlSet\Services\Null","ImagePath",0x00020000,"system32\drivers\null.sys" +HKLM,"SYSTEM\CurrentControlSet\Services\Null","Start",0x00010001,0x00000001 +HKLM,"SYSTEM\CurrentControlSet\Services\Null","Type",0x00010001,0x00000001 + +; Packet driver +HKLM,"SYSTEM\CurrentControlSet\Services\Packet","ErrorControl",0x00010001,0x00000001 +HKLM,"SYSTEM\CurrentControlSet\Services\Packet","Group",0x00000000,"PNP_TDI" +HKLM,"SYSTEM\CurrentControlSet\Services\Packet","ImagePath",0x00020000,"system32\drivers\packet.sys" +HKLM,"SYSTEM\CurrentControlSet\Services\Packet","Start",0x00010001,0x00000004 +HKLM,"SYSTEM\CurrentControlSet\Services\Packet","Type",0x00010001,0x00000001 + +; Plug and Play manager +HKLM,"SYSTEM\CurrentControlSet\Services\PlugPlay","DisplayName",0x00000000,"Plug and Play" +HKLM,"SYSTEM\CurrentControlSet\Services\PlugPlay","Description",0x00000000,"Detects hardware changes and installs needed software if possible" +HKLM,"SYSTEM\CurrentControlSet\Services\PlugPlay","ErrorControl",0x00010001,0x00000000 +HKLM,"SYSTEM\CurrentControlSet\Services\PlugPlay","Group",0x00000000,"PlugPlay" +HKLM,"SYSTEM\CurrentControlSet\Services\PlugPlay","ImagePath",0x00020000,"%SystemRoot%\system32\umpnpmgr.exe" +HKLM,"SYSTEM\CurrentControlSet\Services\PlugPlay","Start",0x00010001,0x00000004 +HKLM,"SYSTEM\CurrentControlSet\Services\PlugPlay","Type",0x00010001,0x00000010 + +; RPC service +HKLM,"SYSTEM\CurrentControlSet\Services\Rpcss","DisplayName",0x00000000,"Remote Procedure Call" +HKLM,"SYSTEM\CurrentControlSet\Services\Rpcss","Description",0x00000000,"RPC subsystem which is responsible for Remote procedure Calls on the local machine" +HKLM,"SYSTEM\CurrentControlSet\Services\Rpcss","ErrorControl",0x00010001,0x00000001 +HKLM,"SYSTEM\CurrentControlSet\Services\Rpcss","Group",0x00000000," RPC Service" +HKLM,"SYSTEM\CurrentControlSet\Services\Rpcss","ImagePath",0x00020000,"%SystemRoot%\system32\rpcss.exe" +HKLM,"SYSTEM\CurrentControlSet\Services\Rpcss","Start",0x00010001,0x00000002 +HKLM,"SYSTEM\CurrentControlSet\Services\Rpcss","Type",0x00010001,0x00000010 + +; Scsiport driver +HKLM,"SYSTEM\CurrentControlSet\Services\Scsiport","ErrorControl",0x00010001,0x00000000 +HKLM,"SYSTEM\CurrentControlSet\Services\Scsiport","Group",0x00000000,"SCSI Port" +HKLM,"SYSTEM\CurrentControlSet\Services\Scsiport","ImagePath",0x00020000,"system32\drivers\scsiport.sys" +HKLM,"SYSTEM\CurrentControlSet\Services\Scsiport","Start",0x00010001,0x00000000 +HKLM,"SYSTEM\CurrentControlSet\Services\Scsiport","Type",0x00010001,0x00000001 + +; Spooler service +HKLM,"SYSTEM\CurrentControlSet\Services\Spooler","DependOnService",0x00010000,"RPCSS" +HKLM,"SYSTEM\CurrentControlSet\Services\Spooler","DisplayName",0x00000000,"Printer Spooler" +HKLM,"SYSTEM\CurrentControlSet\Services\Spooler","Description",0x00000000,"Printer Spooler" +HKLM,"SYSTEM\CurrentControlSet\Services\Spooler","ErrorControl",0x00010001,0x00000001 +HKLM,"SYSTEM\CurrentControlSet\Services\Spooler","Group",0x00000000,"SpoolerGroup" +HKLM,"SYSTEM\CurrentControlSet\Services\Spooler","ImagePath",0x00020000,"%SystemRoot%\system32\spoolsv.exe" +HKLM,"SYSTEM\CurrentControlSet\Services\Spooler","ObjectName",0x00000000,"LocalSystem" +HKLM,"SYSTEM\CurrentControlSet\Services\Spooler","Start",0x00010001,0x00000002 +HKLM,"SYSTEM\CurrentControlSet\Services\Spooler","Type",0x00010001,0x00000110 + +; WLAN service +HKLM,"SYSTEM\CurrentControlSet\Services\WlanSvc","DependOnService",0x00010000,"RPCSS" +HKLM,"SYSTEM\CurrentControlSet\Services\WlanSvc","DisplayName",0x00000000,"WLAN Service" +HKLM,"SYSTEM\CurrentControlSet\Services\WlanSvc","Description",0x00000000,"WLAN Service" +HKLM,"SYSTEM\CurrentControlSet\Services\WlanSvc","ErrorControl",0x00010001,0x00000001 +HKLM,"SYSTEM\CurrentControlSet\Services\WlanSvc","Group",0x00000000,"TDI" +HKLM,"SYSTEM\CurrentControlSet\Services\WlanSvc","ImagePath",0x00020000,"%SystemRoot%\system32\wlansvc.exe" +HKLM,"SYSTEM\CurrentControlSet\Services\WlanSvc","ObjectName",0x00000000,"LocalSystem" +HKLM,"SYSTEM\CurrentControlSet\Services\WlanSvc","Start",0x00010001,0x00000003 +HKLM,"SYSTEM\CurrentControlSet\Services\WlanSvc","Type",0x00010001,0x00000110 + +; Simple TCP services +HKLM,"SYSTEM\CurrentControlSet\Services\tcpsvcs","Description",0x00000000,"Supports the following TCP/IP services: Chargen, Daytime, Discard, Echo, QOTD" +HKLM,"SYSTEM\CurrentControlSet\Services\tcpsvcs","DisplayName",0x00000000,"Simple TCP/IP Services" +HKLM,"SYSTEM\CurrentControlSet\Services\tcpsvcs","ErrorControl",0x00010001,0x00000001 +HKLM,"SYSTEM\CurrentControlSet\Services\tcpsvcs","Group",0x00000000,"Network" +HKLM,"SYSTEM\CurrentControlSet\Services\tcpsvcs","ImagePath",0x00020000,"%SystemRoot%\system32\tcpsvcs.exe" +HKLM,"SYSTEM\CurrentControlSet\Services\tcpsvcs","Start",0x00010001,0x00000003 +HKLM,"SYSTEM\CurrentControlSet\Services\tcpsvcs","Type",0x00010001,0x00000020 + +; ReactOS Telnet Daemon +HKLM,"SYSTEM\CurrentControlSet\Services\telnetd","Description",0x00000000,"ReactOS Telnet Daemon" +HKLM,"SYSTEM\CurrentControlSet\Services\telnetd","DisplayName",0x00000000,"ReactOS Telnet Daemon" +HKLM,"SYSTEM\CurrentControlSet\Services\telnetd","ErrorControl",0x00010001,0x00000001 +HKLM,"SYSTEM\CurrentControlSet\Services\telnetd","Group",0x00000000,"Network" +HKLM,"SYSTEM\CurrentControlSet\Services\telnetd","ImagePath",0x00020000,"%SystemRoot%\system32\telnetd.exe" +HKLM,"SYSTEM\CurrentControlSet\Services\telnetd","Start",0x00010001,0x00000003 +HKLM,"SYSTEM\CurrentControlSet\Services\telnetd","Type",0x00010001,0x00000020 + +; Sound Blaster (NT4) +;HKLM,"SYSTEM\CurrentControlSet\Services\sndblst","Description",0x00000000,"Sound Blaster (NT4)" +;HKLM,"SYSTEM\CurrentControlSet\Services\sndblst","ErrorControl",0x00010001,0x00000001 +;HKLM,"SYSTEM\CurrentControlSet\Services\sndblst","Group",0x00000000,"Base" +;HKLM,"SYSTEM\CurrentControlSet\Services\sndblst","ImagePath",0x00020000,"system32\drivers\sndblst.sys" +;HKLM,"SYSTEM\CurrentControlSet\Services\sndblst","Start",0x00010001,0x00000003 +;HKLM,"SYSTEM\CurrentControlSet\Services\sndblst","Type",0x00010001,0x00000001 + +; Virtual FAT filesystem driver +HKLM,"SYSTEM\CurrentControlSet\Services\fastfat","ErrorControl",0x00010001,0x00000000 +HKLM,"SYSTEM\CurrentControlSet\Services\fastfat","Group",0x00000000,"Boot File System" +HKLM,"SYSTEM\CurrentControlSet\Services\fastfat","ImagePath",0x00020000,"system32\drivers\fastfat.sys" +HKLM,"SYSTEM\CurrentControlSet\Services\fastfat","Start",0x00010001,0x00000000 +HKLM,"SYSTEM\CurrentControlSet\Services\fastfat","Type",0x00010001,0x00000002 + +; RAM Disk class driver +HKLM,"SYSTEM\CurrentControlSet\Services\RamDisk","ErrorControl",0x00010001,0x00000000 +HKLM,"SYSTEM\CurrentControlSet\Services\RamDisk","Group",0x00000000,"Boot File System" +HKLM,"SYSTEM\CurrentControlSet\Services\RamDisk","ImagePath",0x00020000,"system32\drivers\ramdisk.sys" +HKLM,"SYSTEM\CurrentControlSet\Services\RamDisk","Start",0x00010001,0x00000000 +HKLM,"SYSTEM\CurrentControlSet\Services\RamDisk","Type",0x00010001,0x00000002 + +; EXT2 Filesystem driver +HKLM,"SYSTEM\CurrentControlSet\Services\Ext2fs","ErrorControl",0x00010001,0x00000000 +HKLM,"SYSTEM\CurrentControlSet\Services\Ext2fs","Group",0x00000000,"Boot File System" +HKLM,"SYSTEM\CurrentControlSet\Services\Ext2fs","ImagePath",0x00020000,"system32\drivers\ext2.sys" +HKLM,"SYSTEM\CurrentControlSet\Services\Ext2fs","Start",0x00010001,0x00000004 +HKLM,"SYSTEM\CurrentControlSet\Services\Ext2fs","Type",0x00010001,0x00000002 + +; VBE SVGA driver +HKLM,"SYSTEM\CurrentControlSet\Services\VBE","ErrorControl",0x00010001,0x00000000 +HKLM,"SYSTEM\CurrentControlSet\Services\VBE","Group",0x00000000,"Video Save" +HKLM,"SYSTEM\CurrentControlSet\Services\VBE","ImagePath",0x00020000,"system32\drivers\vbemp.sys" +HKLM,"SYSTEM\CurrentControlSet\Services\VBE","Start",0x00010001,0x00000004 +HKLM,"SYSTEM\CurrentControlSet\Services\VBE","Type",0x00010001,0x00000001 +HKLM,"SYSTEM\CurrentControlSet\Services\VBE","Tag",0x00010001,0x00000001 + +HKLM,"SYSTEM\CurrentControlSet\Hardware Profiles\Current\System\CurrentControlSet\Services\VBE\Device0","InstalledDisplayDrivers",0x00010000,"framebuf" +HKLM,"SYSTEM\CurrentControlSet\Hardware Profiles\Current\System\CurrentControlSet\Services\VBE\Device0","DefaultSettings.VRefresh",0x00010001,1 +HKLM,"SYSTEM\CurrentControlSet\Hardware Profiles\Current\System\CurrentControlSet\Services\VBE\Device0","DefaultSettings.BitsPerPel",0x00010001,8 +HKLM,"SYSTEM\CurrentControlSet\Hardware Profiles\Current\System\CurrentControlSet\Services\VBE\Device0","DefaultSettings.XResolution",0x00010001,640 +HKLM,"SYSTEM\CurrentControlSet\Hardware Profiles\Current\System\CurrentControlSet\Services\VBE\Device0","DefaultSettings.YResolution",0x00010001,480 + +; VGA miniport driver +HKLM,"SYSTEM\CurrentControlSet\Services\Vga","ErrorControl",0x00010001,0x00000000 +HKLM,"SYSTEM\CurrentControlSet\Services\Vga","Group",0x00000000,"Video Save" +HKLM,"SYSTEM\CurrentControlSet\Services\Vga","ImagePath",0x00020000,"system32\drivers\vgamp.sys" +HKLM,"SYSTEM\CurrentControlSet\Services\Vga","Start",0x00010001,0x00000004 +HKLM,"SYSTEM\CurrentControlSet\Services\Vga","Type",0x00010001,0x00000001 +HKLM,"SYSTEM\CurrentControlSet\Services\Vga","Tag",0x00010001,0x00000002 + +HKLM,"SYSTEM\CurrentControlSet\Hardware Profiles\Current\System\CurrentControlSet\Services\Vga\Device0","InstalledDisplayDrivers",0x00010000,"vgaddi" +HKLM,"SYSTEM\CurrentControlSet\Hardware Profiles\Current\System\CurrentControlSet\Services\Vga\Device0","DefaultSettings.VRefresh",0x00010001,1 +HKLM,"SYSTEM\CurrentControlSet\Hardware Profiles\Current\System\CurrentControlSet\Services\Vga\Device0","DefaultSettings.BitsPerPel",0x00010001,8 +HKLM,"SYSTEM\CurrentControlSet\Hardware Profiles\Current\System\CurrentControlSet\Services\Vga\Device0","DefaultSettings.XResolution",0x00010001,640 +HKLM,"SYSTEM\CurrentControlSet\Hardware Profiles\Current\System\CurrentControlSet\Services\Vga\Device0","DefaultSettings.YResolution",0x00010001,480 + +; USB uhci/ehci driver +HKLM,"SYSTEM\CurrentControlSet\Services\usbdriver","ErrorControl",0x00010001,0x00000000 +HKLM,"SYSTEM\CurrentControlSet\Services\usbdriver","Group",0x00000000,"Base" +HKLM,"SYSTEM\CurrentControlSet\Services\usbdriver","ImagePath",0x00020000,"system32\drivers\usbdriver.sys" +HKLM,"SYSTEM\CurrentControlSet\Services\usbdriver","Start",0x00010001,0x00000001 +HKLM,"SYSTEM\CurrentControlSet\Services\usbdriver","Type",0x00010001,0x00000001 + +; USB storage driver +;HKLM,"SYSTEM\CurrentControlSet\Services\usbstor","ErrorControl",0x00010001,0x00000000 +;HKLM,"SYSTEM\CurrentControlSet\Services\usbstor","Group",0x00000000,"Extended Base" +;HKLM,"SYSTEM\CurrentControlSet\Services\usbstor","ImagePath",0x00020000,"system32\drivers\usbstor.sys" +;HKLM,"SYSTEM\CurrentControlSet\Services\usbstor","Start",0x00010001,0x00000003 +;HKLM,"SYSTEM\CurrentControlSet\Services\usbstor","Type",0x00010001,0x00000001 + +; Windows Installer Service +HKLM,"SYSTEM\CurrentControlSet\Services\MSIserver","DisplayName",0x00000000,"ReactOS Installer" +HKLM,"SYSTEM\CurrentControlSet\Services\MSIserver","Description",0x00000000,"Controls installation, maintenance, and removal of software packaged as an msi (Windows Installer)" +HKLM,"SYSTEM\CurrentControlSet\Services\MSIserver","Group",0x00000000,"Windows Installer" +HKLM,"SYSTEM\CurrentControlSet\Services\MSIserver","ErrorControl",0x00010001,0x00000001 +HKLM,"SYSTEM\CurrentControlSet\Services\MSIserver","ImagePath",0x00020000,"system32\msiexec.exe /V" +HKLM,"SYSTEM\CurrentControlSet\Services\MSIserver","Start",0x00010001,0x00000003 +HKLM,"SYSTEM\CurrentControlSet\Services\MSIserver","Type",0x00010001,0x00000020 + +; ControlSet selection settings +HKLM,"SYSTEM\Select","Current",0x00010001,0x00000001 +HKLM,"SYSTEM\Select","Default",0x00010001,0x00000001 +HKLM,"SYSTEM\Select","Failed",0x00010001,0x00000000 +HKLM,"SYSTEM\Select","LastKnownGood",0x00010001,0x00000000 + +; System setup settings +HKLM,"SYSTEM\Setup","CmdLine",0x00000000,"setup -newsetup" +HKLM,"SYSTEM\Setup","OsLoaderPath",0x00000000,"\" +HKLM,"SYSTEM\Setup","SetupType",0x00010001,0x00000001 +HKLM,"SYSTEM\Setup","SystemPartition",0x00000000,"\Device\Harddisk0\Partition1" +HKLM,"SYSTEM\Setup","SystemSetupInProgress",0x00010001,0x00000001 + +; Debug channels +;HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","DEBUGCHANNEL",0x00020000,"+ole,+rpc" + +; EOF diff --git a/boot/bootdata/packages/reactos.dff b/boot/bootdata/packages/reactos.dff index 8019828ae15..74e23dfd333 100644 --- a/boot/bootdata/packages/reactos.dff +++ b/boot/bootdata/packages/reactos.dff @@ -106,9 +106,9 @@ base\setup\setup\setup.exe 1 base\setup\vmwinst\vmwinst.exe 1 base\shell\cmd\cmd.exe 1 -base\shell\explorer\explorer.exe 4 -base\shell\explorer\explorer-cfg-template.xml 4 -base\shell\explorer\notifyhook\notifyhook.dll 1 +base\shell\explorer\explorer.exe 4 optional +base\shell\explorer\explorer-cfg-template.xml 4 optional +base\shell\explorer\notifyhook\notifyhook.dll 1 optional base\shell\explorer-new\explorer_new.exe 4 optional base\system\autochk\autochk.exe 1 @@ -687,7 +687,7 @@ boot\bootdata\bootcdregtest\regtest.cmd 7 optional subsystems\win32\csrss\csrss.exe 1 subsystems\win32\csrss\win32csr\win32csr.dll 1 subsystems\win32\csrss\csrsrv\csrsrv.dll 1 -subsystems\ntvdm\ntvdm.exe 1 +subsystems\ntvdm\ntvdm.exe 1 optional subsystems\win32\win32k\win32k.sys 1 ; Optional/proprietary files diff --git a/boot/freeldr/freeldr/arch/amd64/loader.c b/boot/freeldr/freeldr/arch/amd64/loader.c index cad77bf48d6..9970090cd3a 100644 --- a/boot/freeldr/freeldr/arch/amd64/loader.c +++ b/boot/freeldr/freeldr/arch/amd64/loader.c @@ -16,7 +16,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/boot/freeldr/freeldr/arch/i386/int386.S b/boot/freeldr/freeldr/arch/i386/int386.S index 3b467e59675..14086bf391f 100644 --- a/boot/freeldr/freeldr/arch/i386/int386.S +++ b/boot/freeldr/freeldr/arch/i386/int386.S @@ -23,6 +23,10 @@ #define ASM #include +/* Only these flags are propagated into Int386() */ +#define FLAGS_PROP (I386FLAG_CF | \ + I386FLAG_ZF | \ + I386FLAG_SF) Int386_REGS: @@ -85,6 +89,7 @@ EXTERN(_Int386) movl $Int386_REGS,%edi movl Int386_regsin,%esi movl $0x24,%ecx + cld rep movsb @@ -101,6 +106,16 @@ EXTERN(_Int386) movw %cs:Int386_gs,%ax movw %ax,%gs /* GS register */ + /* Prepare EFLAGS for recover */ + pushf + movw %cs:Int386_eflags, %ax + popw %cx + andw $FLAGS_PROP, %ax + andw $~FLAGS_PROP, %cx + orw %cx, %ax + pushw %ax + + /* Recover general purpose registers */ movl %cs:Int386_eax,%eax /* EAX register */ movl %cs:Int386_ebx,%ebx /* EBX register */ movl %cs:Int386_ecx,%ecx /* ECX register */ @@ -109,6 +124,9 @@ EXTERN(_Int386) movl %cs:Int386_esi,%esi /* ESI register */ movl %cs:Int386_edi,%edi /* EDI register */ + /* Recover previously prepared flags */ + popf + /* Do not set the flags register */ /* only return its value in regsout */ //pushl Int386_eflags @@ -149,6 +167,7 @@ Int386_vector_opcode: movl $Int386_REGS,%esi movl Int386_regsout,%edi movl $0x24,%ecx + cld rep movsb diff --git a/boot/freeldr/freeldr/arch/i386/pcrtc.c b/boot/freeldr/freeldr/arch/i386/pcrtc.c index 1141753aa92..6b53da8c066 100644 --- a/boot/freeldr/freeldr/arch/i386/pcrtc.c +++ b/boot/freeldr/freeldr/arch/i386/pcrtc.c @@ -27,56 +27,66 @@ PcGetTime(VOID) static TIMEINFO TimeInfo; REGS Regs; - /* Some BIOSes, such as the 1998/07/25 system ROM - * in the Compaq Deskpro EP/SB, leave CF unchanged - * if successful, so CF should be cleared before - * calling this function. */ - __writeeflags(__readeflags() & ~EFLAGS_CF); + for (;;) + { + /* Some BIOSes, such as the 1998/07/25 system ROM + * in the Compaq Deskpro EP/SB, leave CF unchanged + * if successful, so CF should be cleared before + * calling this function. */ + Regs.x.eflags = 0; +// __writeeflags(__readeflags() & ~EFLAGS_CF); - /* Int 1Ah AH=04h - * TIME - GET REAL-TIME CLOCK DATE (AT,XT286,PS) - * - * AH = 04h - * CF clear to avoid bug - * Return: - * CF clear if successful - * CH = century (BCD) - * CL = year (BCD) - * DH = month (BCD) - * DL = day (BCD) - * CF set on error - */ - Regs.b.ah = 0x04; - Int386(0x1A, &Regs, &Regs); + /* Int 1Ah AH=04h + * TIME - GET REAL-TIME CLOCK DATE (AT,XT286,PS) + * + * AH = 04h + * CF clear to avoid bug + * Return: + * CF clear if successful + * CH = century (BCD) + * CL = year (BCD) + * DH = month (BCD) + * DL = day (BCD) + * CF set on error + */ + Regs.b.ah = 0x04; + Int386(0x1A, &Regs, &Regs); - TimeInfo.Year = 100 * BCD_INT(Regs.b.ch) + BCD_INT(Regs.b.cl); - TimeInfo.Month = BCD_INT(Regs.b.dh); - TimeInfo.Day = BCD_INT(Regs.b.dl); + if (!INT386_SUCCESS(Regs)) continue; - /* Some BIOSes leave CF unchanged if successful, - * so CF should be cleared before calling this function. */ - __writeeflags(__readeflags() & ~EFLAGS_CF); + TimeInfo.Year = 100 * BCD_INT(Regs.b.ch) + BCD_INT(Regs.b.cl); + TimeInfo.Month = BCD_INT(Regs.b.dh); + TimeInfo.Day = BCD_INT(Regs.b.dl); - /* Int 1Ah AH=02h - * TIME - GET REAL-TIME CLOCK TIME (AT,XT286,PS) - * - * AH = 02h - * CF clear to avoid bug - * Return: - * CF clear if successful - * CH = hour (BCD) - * CL = minutes (BCD) - * DH = seconds (BCD) - * DL = daylight savings flag (00h standard time, 01h daylight time) - * CF set on error (i.e. clock not running or in middle of update) - */ - Regs.b.ah = 0x02; - Int386(0x1A, &Regs, &Regs); + /* Some BIOSes leave CF unchanged if successful, + * so CF should be cleared before calling this function. */ + Regs.x.eflags = 0; +// __writeeflags(__readeflags() & ~EFLAGS_CF); - TimeInfo.Hour = BCD_INT(Regs.b.ch); - TimeInfo.Minute = BCD_INT(Regs.b.cl); - TimeInfo.Second = BCD_INT(Regs.b.dh); + /* Int 1Ah AH=02h + * TIME - GET REAL-TIME CLOCK TIME (AT,XT286,PS) + * + * AH = 02h + * CF clear to avoid bug + * Return: + * CF clear if successful + * CH = hour (BCD) + * CL = minutes (BCD) + * DH = seconds (BCD) + * DL = daylight savings flag (00h standard time, 01h daylight time) + * CF set on error (i.e. clock not running or in middle of update) + */ + Regs.b.ah = 0x02; + Int386(0x1A, &Regs, &Regs); + if (!INT386_SUCCESS(Regs)) continue; + + TimeInfo.Hour = BCD_INT(Regs.b.ch); + TimeInfo.Minute = BCD_INT(Regs.b.cl); + TimeInfo.Second = BCD_INT(Regs.b.dh); + + break; + } return &TimeInfo; } diff --git a/boot/freeldr/freeldr/disk/scsiport.c b/boot/freeldr/freeldr/disk/scsiport.c index 81ba4a4efa2..ce306a39c3f 100644 --- a/boot/freeldr/freeldr/disk/scsiport.c +++ b/boot/freeldr/freeldr/disk/scsiport.c @@ -1636,7 +1636,6 @@ LoadBootDeviceDriver(VOID) } /* 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) diff --git a/boot/freeldr/freeldr/include/arch.h b/boot/freeldr/freeldr/include/arch.h index b9a6cc02386..ec374f4a82c 100644 --- a/boot/freeldr/freeldr/include/arch.h +++ b/boot/freeldr/freeldr/include/arch.h @@ -58,6 +58,19 @@ extern ULONG gDiskReadBuffer, gFileSysBuffer; #define EXTERN(x) .global x; x: +// Flag Masks +#define I386FLAG_CF 0x0001 // Carry Flag +#define I386FLAG_RESV1 0x0002 // Reserved - Must be 1 +#define I386FLAG_PF 0x0004 // Parity Flag +#define I386FLAG_RESV2 0x0008 // Reserved - Must be 0 +#define I386FLAG_AF 0x0010 // Auxiliary Flag +#define I386FLAG_RESV3 0x0020 // Reserved - Must be 0 +#define I386FLAG_ZF 0x0040 // Zero Flag +#define I386FLAG_SF 0x0080 // Sign Flag +#define I386FLAG_TF 0x0100 // Trap Flag (Single Step) +#define I386FLAG_IF 0x0200 // Interrupt Flag +#define I386FLAG_DF 0x0400 // Direction Flag +#define I386FLAG_OF 0x0800 // Overflow Flag #ifndef ASM @@ -148,20 +161,6 @@ typedef union // specifically handles linear addresses. int Int386(int ivec, REGS* in, REGS* out); -// Flag Masks -#define I386FLAG_CF 0x0001 // Carry Flag -#define I386FLAG_RESV1 0x0002 // Reserved - Must be 1 -#define I386FLAG_PF 0x0004 // Parity Flag -#define I386FLAG_RESV2 0x0008 // Reserved - Must be 0 -#define I386FLAG_AF 0x0010 // Auxiliary Flag -#define I386FLAG_RESV3 0x0020 // Reserved - Must be 0 -#define I386FLAG_ZF 0x0040 // Zero Flag -#define I386FLAG_SF 0x0080 // Sign Flag -#define I386FLAG_TF 0x0100 // Trap Flag (Single Step) -#define I386FLAG_IF 0x0200 // Interrupt Flag -#define I386FLAG_DF 0x0400 // Direction Flag -#define I386FLAG_OF 0x0800 // Overflow Flag - // This macro tests the Carry Flag // If CF is set then the call failed (usually) #define INT386_SUCCESS(regs) ((regs.x.eflags & I386FLAG_CF) == 0) diff --git a/boot/freeldr/freeldr/windows/headless.c b/boot/freeldr/freeldr/windows/headless.c new file mode 100644 index 00000000000..bcc0f6434b0 --- /dev/null +++ b/boot/freeldr/freeldr/windows/headless.c @@ -0,0 +1,311 @@ +/* + * PROJECT: ReactOS Boot Loader + * LICENSE: BSD - See COPYING.ARM in the top level directory + * FILE: boot/freeldr/windows/headless.c + * PURPOSE: Provides support for Windows Emergency Management Services + * PROGRAMMERS: ReactOS Portable Systems Group + */ + +/* INCLUDES *******************************************************************/ + +#include +#include + +/* Note: Move these to some smbios.h header */ +#define SYSID_TYPE_UUID "_UUID_" +#define SYSID_UUID_DATA_SIZE 16 +#include +typedef struct _SYSID_UUID_ENTRY +{ + UCHAR Type[6]; + UCHAR Checksum; + USHORT Length; + UCHAR UUID[SYSID_UUID_DATA_SIZE]; +} SYSID_UUID_ENTRY, *PSYSID_UUID_ENTRY; +#include + +/* GLOBALS ********************************************************************/ + +HEADLESS_LOADER_BLOCK LoaderRedirectionInformation; +BOOLEAN WinLdrTerminalConnected; +ULONG WinLdrTerminalDeviceId; +ULONG WinLdrTerminalDelay; + +CPPORT Port[4] = +{ + {NULL, 0, TRUE}, + {NULL, 0, TRUE}, + {NULL, 0, TRUE}, + {NULL, 0, TRUE} +}; + +/* FUNCTIONS ******************************************************************/ + +VOID +WinLdrLoadGUID(OUT PGUID SystemGuid) +{ + PSYSID_UUID_ENTRY CurrentAddress; + + CurrentAddress = (PSYSID_UUID_ENTRY)0xE0000; + while (CurrentAddress < (PSYSID_UUID_ENTRY)0x100000) + { + if (RtlCompareMemory(&CurrentAddress->Type, SYSID_TYPE_UUID, 6) == 6) + { + RtlCopyMemory(SystemGuid, &CurrentAddress->UUID, SYSID_UUID_DATA_SIZE); + return; + } + CurrentAddress = (PSYSID_UUID_ENTRY)((ULONG_PTR)CurrentAddress + 1); + } + + RtlZeroMemory(SystemGuid, SYSID_UUID_DATA_SIZE); +} + +BOOLEAN +WinLdrPortInitialize(IN ULONG BaudRate, + IN ULONG PortNumber, + IN PUCHAR PortAddress, + IN BOOLEAN TerminalConnected, + OUT PULONG PortId) +{ + /* Set default baud rate */ + if (BaudRate == 0) BaudRate = 19200; + + /* Check if port or address given */ + if (PortNumber) + { + /* Pick correct address for port */ + if (!PortAddress) + { + switch (PortNumber) + { + case 1: + PortAddress = (PUCHAR)0x3F8; + break; + + case 2: + PortAddress = (PUCHAR)0x2F8; + break; + + case 3: + PortAddress = (PUCHAR)0x3E8; + break; + + default: + PortNumber = 4; + PortAddress = (PUCHAR)0x2E8; + } + } + } + else + { + /* Pick correct port for address */ + PortAddress = (PUCHAR)0x2F8; + if (CpDoesPortExist(PortAddress)) + { + PortNumber = 2; + } + else + { + PortAddress = (PUCHAR)0x3F8; + if (!CpDoesPortExist(PortAddress)) return FALSE; + PortNumber = 1; + } + } + + /* Not yet supported */ + ASSERT(LoaderRedirectionInformation.IsMMIODevice == FALSE); + + /* Check if port exists */ + if ((CpDoesPortExist(PortAddress)) || (CpDoesPortExist(PortAddress))) + { + /* Initialize port for first time, or re-initialize if specified */ + if (((TerminalConnected) && (Port[PortNumber - 1].Address)) || + !(Port[PortNumber - 1].Address)) + { + /* Initialize the port, return it */ + CpInitialize(&Port[PortNumber - 1], PortAddress, BaudRate); + *PortId = PortNumber - 1; + return TRUE; + } + } + + return FALSE; +} + +VOID +WinLdrPortPutByte(IN ULONG PortId, + IN UCHAR Data) +{ + CpPutByte(&Port[PortId], Data); +} + +BOOLEAN +WinLdrPortGetByte(IN ULONG PortId, + OUT PUCHAR Data) +{ + return CpGetByte(&Port[PortId], Data, TRUE, FALSE) == CP_GET_SUCCESS; +} + +BOOLEAN +WinLdrPortPollOnly(IN ULONG PortId) +{ + UCHAR Dummy; + + return CpGetByte(&Port[PortId], &Dummy, FALSE, TRUE) == CP_GET_SUCCESS; +} + +VOID +WinLdrEnableFifo(IN ULONG PortId, + IN BOOLEAN Enable) +{ + CpEnableFifo(Port[PortId].Address, Enable); +} + +VOID +WinLdrInitializeHeadlessPort(VOID) +{ + ULONG PortNumber, BaudRate; + PUCHAR PortAddress; + PCHAR AnsiReset = "\x1B[m"; + ULONG i; + + PortNumber = LoaderRedirectionInformation.PortNumber; + PortAddress = LoaderRedirectionInformation.PortAddress; + BaudRate = LoaderRedirectionInformation.BaudRate; + + /* Pick a port address */ + if (PortNumber) + { + if (!PortAddress) + { + switch (PortNumber) + { + case 2: + LoaderRedirectionInformation.PortAddress = (PUCHAR)0x2F8; + break; + + case 3: + LoaderRedirectionInformation.PortAddress = (PUCHAR)0x3E8; + break; + + case 4: + LoaderRedirectionInformation.PortAddress = (PUCHAR)0x2E8; + break; + + default: + LoaderRedirectionInformation.PortAddress = (PUCHAR)0x3F8; + break; + } + } + } + else + { + /* No number, so no EMS */ + WinLdrTerminalConnected = FALSE; + return; + } + + /* Call arch code to initialize the port */ + PortAddress = LoaderRedirectionInformation.PortAddress; + WinLdrTerminalConnected = WinLdrPortInitialize( + BaudRate, + PortNumber, + PortAddress, + WinLdrTerminalConnected, + &WinLdrTerminalDeviceId); + + if (WinLdrTerminalConnected) + { + /* Port seems usable, set it up and get the BIOS GUID */ + WinLdrEnableFifo(WinLdrTerminalDeviceId, TRUE); + + WinLdrLoadGUID(&LoaderRedirectionInformation.SystemGUID); + + /* Calculate delay in us based on the baud, assume 9600 if none given */ + if (!BaudRate) + { + BaudRate = 9600; + LoaderRedirectionInformation.BaudRate = BaudRate; + } + + WinLdrTerminalDelay = (10 * 1000 * 1000) / (BaudRate / 10) / 6; + + /* Sent an ANSI reset sequence to get the terminal up and running */ + for (i = 0; i < strlen(AnsiReset); i++) + { + WinLdrPortPutByte(WinLdrTerminalDeviceId, AnsiReset[i]); + StallExecutionProcessor(WinLdrTerminalDelay); + } + } +} + +VOID +WinLdrSetupEms(IN PCHAR BootOptions) +{ + PCHAR RedirectPort; + + /* Start fresh */ + RtlZeroMemory(&LoaderRedirectionInformation, sizeof(HEADLESS_LOADER_BLOCK)); + + /* Use a direction port if one was given, or use ACPI to detect one instead */ + RedirectPort = strstr(BootOptions, "/redirect="); + + if (RedirectPort) + { + RedirectPort = strstr(RedirectPort, "com"); + if (RedirectPort) + { + RedirectPort += sizeof("com") - 1; + LoaderRedirectionInformation.PortNumber = atoi(RedirectPort); + } + else + { + RedirectPort = strstr(RedirectPort, "usebiossettings"); + if (RedirectPort) + { + UiDrawStatusText("ACPI SRT Table Not Supported..."); + } + else + { + LoaderRedirectionInformation.PortAddress = (PUCHAR)strtoul(RedirectPort, 0, 16); + if (LoaderRedirectionInformation.PortAddress) + { + LoaderRedirectionInformation.PortNumber = 3; + } + } + } + } + + /* Use a direction baudrate if one was given */ + RedirectPort = strstr(BootOptions, "/redirectbaudrate="); + if (RedirectPort) + { + if (strstr(RedirectPort, "115200")) + { + LoaderRedirectionInformation.BaudRate = 115200; + } + else if (strstr(RedirectPort, "57600")) + { + LoaderRedirectionInformation.BaudRate = 57600; + } + else if (strstr(RedirectPort, "19200")) + { + LoaderRedirectionInformation.BaudRate = 19200; + } + else + { + LoaderRedirectionInformation.BaudRate = 9600; + } + } + + /* Enable headless support if parameters were found */ + if (LoaderRedirectionInformation.PortNumber) + { + if (!LoaderRedirectionInformation.BaudRate) + { + LoaderRedirectionInformation.BaudRate = 9600; + } + + WinLdrInitializeHeadlessPort(); + } +} diff --git a/boot/freeldr/freeldr/windows/winldr.c b/boot/freeldr/freeldr/windows/winldr.c index c068517dd2b..3d5339083c0 100644 --- a/boot/freeldr/freeldr/windows/winldr.c +++ b/boot/freeldr/freeldr/windows/winldr.c @@ -203,6 +203,25 @@ WinLdrInitializePhase1(PLOADER_PARAMETER_BLOCK LoaderBlock, /* See KiRosFrldrLpbToNtLpb for details */ Extension->AcpiTable = (PVOID)1; } + + /* Set headless block pointer */ + extern HEADLESS_LOADER_BLOCK LoaderRedirectionInformation; + extern BOOLEAN WinLdrTerminalConnected; + if (WinLdrTerminalConnected) + { + Extension->HeadlessLoaderBlock = MmHeapAlloc(sizeof(HEADLESS_LOADER_BLOCK)); + if (Extension->HeadlessLoaderBlock == NULL) + { + UiMessageBox("Failed to allocate HLB Extension!"); + while (TRUE); + return; + } + RtlCopyMemory( + Extension->HeadlessLoaderBlock, + &LoaderRedirectionInformation, + sizeof(HEADLESS_LOADER_BLOCK)); + Extension->HeadlessLoaderBlock = PaToVa(Extension->HeadlessLoaderBlock); + } /* Load drivers database */ strcpy(MiscFiles, BootPath); @@ -215,6 +234,7 @@ WinLdrInitializePhase1(PLOADER_PARAMETER_BLOCK LoaderBlock, if (LoaderBlock->SetupLdrBlock) LoaderBlock->SetupLdrBlock = PaToVa(LoaderBlock->SetupLdrBlock); + } BOOLEAN @@ -513,6 +533,10 @@ LoadAndBootWindows(PCSTR OperatingSystemName, /* Allocate and minimalistic-initialize LPB */ AllocateAndInitLPB(&LoaderBlock); + + /* Setup redirection support */ + extern void WinLdrSetupEms(IN PCHAR BootOptions); + WinLdrSetupEms(BootOptions); /* Detect hardware */ UseRealHeap = TRUE; diff --git a/dll/cpl/desk/appearance.c b/dll/cpl/desk/appearance.c index b55e379577c..2c23b3cc614 100644 --- a/dll/cpl/desk/appearance.c +++ b/dll/cpl/desk/appearance.c @@ -5,7 +5,7 @@ * PURPOSE: Appearance property page * * PROGRAMMERS: Trevor McCort (lycan359@gmail.com) - * Timo Kreuzer (timo[dot]kreuzer[at]web[dot]de + * Timo Kreuzer (timo[dot]kreuzer[at]web[dot]de) */ #include "desk.h" @@ -115,6 +115,7 @@ AppearancePageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { PropSheet_Changed(GetParent(hwndDlg), hwndDlg); g->Theme = g->ThemeAdv; + g_GlobalData.desktop_color = g->Theme.crColor[COLOR_DESKTOP]; g->bHasChanged = TRUE; g->ThemeId = -1; /* Customized */ SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_COLORSCHEME, CB_SETCURSEL, (WPARAM)-1, 0); @@ -160,6 +161,14 @@ AppearancePageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) case PSN_KILLACTIVE: SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, (LONG_PTR)FALSE); return TRUE; + + case PSN_SETACTIVE: + if (g->Theme.crColor[COLOR_DESKTOP] != g_GlobalData.desktop_color) + { + g->Theme.crColor[COLOR_DESKTOP] = g_GlobalData.desktop_color; + SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_UPDATETHEME, 0, (LPARAM)&g->Theme); + } + break; } break; } diff --git a/dll/cpl/desk/background.c b/dll/cpl/desk/background.c index c03c66dc4a4..32d45c6892c 100644 --- a/dll/cpl/desk/background.c +++ b/dll/cpl/desk/background.c @@ -26,7 +26,7 @@ typedef struct } BackgroundItem; -typedef struct _GLOBAL_DATA +typedef struct _DATA { BackgroundItem backgroundItems[MAX_BACKGROUNDS]; @@ -35,7 +35,6 @@ typedef struct _GLOBAL_DATA int placementSelection; int backgroundSelection; - COLORREF backgroundDesktopColor; COLORREF custom_colors[16]; int listViewItemCount; @@ -43,13 +42,14 @@ typedef struct _GLOBAL_DATA HBITMAP hBitmap; int cxSource; int cySource; -} GLOBAL_DATA, *PGLOBAL_DATA; +} DATA, *PDATA; +GLOBAL_DATA g_GlobalData; /* Add the images in the C:\ReactOS directory and the current wallpaper if any */ static VOID -AddListViewItems(HWND hwndDlg, PGLOBAL_DATA pGlobalData) +AddListViewItems(HWND hwndDlg, PDATA pData) { WIN32_FIND_DATA fd; HANDLE hFind; @@ -85,7 +85,7 @@ AddListViewItems(HWND hwndDlg, PGLOBAL_DATA pGlobalData) (void)ListView_InsertColumn(hwndBackgroundList, 0, &dummy); /* Add the "None" item */ - backgroundItem = &pGlobalData->backgroundItems[pGlobalData->listViewItemCount]; + backgroundItem = &pData->backgroundItems[pData->listViewItemCount]; backgroundItem->bWallpaper = FALSE; LoadString(hApplet, IDS_NONE, @@ -97,16 +97,16 @@ AddListViewItems(HWND hwndDlg, PGLOBAL_DATA pGlobalData) listItem.state = 0; listItem.pszText = backgroundItem->szDisplayName; listItem.iImage = -1; - listItem.iItem = pGlobalData->listViewItemCount; - listItem.lParam = pGlobalData->listViewItemCount; + listItem.iItem = pData->listViewItemCount; + listItem.lParam = pData->listViewItemCount; (void)ListView_InsertItem(hwndBackgroundList, &listItem); ListView_SetItemState(hwndBackgroundList, - pGlobalData->listViewItemCount, + pData->listViewItemCount, LVIS_SELECTED, LVIS_SELECTED); - pGlobalData->listViewItemCount++; + pData->listViewItemCount++; /* Add current wallpaper if any */ RegOpenKeyEx(HKEY_CURRENT_USER, TEXT("Control Panel\\Desktop"), 0, KEY_ALL_ACCESS, ®Key); @@ -134,7 +134,7 @@ AddListViewItems(HWND hwndDlg, PGLOBAL_DATA pGlobalData) (void)ListView_SetImageList(hwndBackgroundList, himl, LVSIL_SMALL); } - backgroundItem = &pGlobalData->backgroundItems[pGlobalData->listViewItemCount]; + backgroundItem = &pData->backgroundItems[pData->listViewItemCount]; backgroundItem->bWallpaper = TRUE; @@ -149,16 +149,16 @@ AddListViewItems(HWND hwndDlg, PGLOBAL_DATA pGlobalData) listItem.state = 0; listItem.pszText = backgroundItem->szDisplayName; listItem.iImage = sfi.iIcon; - listItem.iItem = pGlobalData->listViewItemCount; - listItem.lParam = pGlobalData->listViewItemCount; + listItem.iItem = pData->listViewItemCount; + listItem.lParam = pData->listViewItemCount; (void)ListView_InsertItem(hwndBackgroundList, &listItem); ListView_SetItemState(hwndBackgroundList, - pGlobalData->listViewItemCount, + pData->listViewItemCount, LVIS_SELECTED, LVIS_SELECTED); - pGlobalData->listViewItemCount++; + pData->listViewItemCount++; } } @@ -203,7 +203,7 @@ AddListViewItems(HWND hwndDlg, PGLOBAL_DATA pGlobalData) (void)ListView_SetImageList(hwndBackgroundList, himl, LVSIL_SMALL); } - backgroundItem = &pGlobalData->backgroundItems[pGlobalData->listViewItemCount]; + backgroundItem = &pData->backgroundItems[pData->listViewItemCount]; backgroundItem->bWallpaper = TRUE; @@ -218,12 +218,12 @@ AddListViewItems(HWND hwndDlg, PGLOBAL_DATA pGlobalData) listItem.pszText = backgroundItem->szDisplayName; listItem.state = 0; listItem.iImage = sfi.iIcon; - listItem.iItem = pGlobalData->listViewItemCount; - listItem.lParam = pGlobalData->listViewItemCount; + listItem.iItem = pData->listViewItemCount; + listItem.lParam = pData->listViewItemCount; (void)ListView_InsertItem(hwndBackgroundList, &listItem); - pGlobalData->listViewItemCount++; + pData->listViewItemCount++; } if(!FindNextFile(hFind, &fd)) @@ -236,7 +236,7 @@ AddListViewItems(HWND hwndDlg, PGLOBAL_DATA pGlobalData) static VOID -InitBackgroundDialog(HWND hwndDlg, PGLOBAL_DATA pGlobalData) +InitBackgroundDialog(HWND hwndDlg, PDATA pData) { TCHAR szString[256]; HKEY regKey; @@ -246,9 +246,7 @@ InitBackgroundDialog(HWND hwndDlg, PGLOBAL_DATA pGlobalData) LONG result; BITMAP bitmap; - pGlobalData->backgroundDesktopColor = GetSysColor(COLOR_BACKGROUND); - - AddListViewItems(hwndDlg, pGlobalData); + AddListViewItems(hwndDlg, pData); LoadString(hApplet, IDS_CENTER, szString, sizeof(szString) / sizeof(TCHAR)); SendDlgItemMessage(hwndDlg, IDC_PLACEMENT_COMBO, CB_INSERTSTRING, PLACEMENT_CENTER, (LPARAM)szString); @@ -278,19 +276,19 @@ InitBackgroundDialog(HWND hwndDlg, PGLOBAL_DATA pGlobalData) if (_ttoi(szBuffer) == 0) { SendDlgItemMessage(hwndDlg, IDC_PLACEMENT_COMBO, CB_SETCURSEL, PLACEMENT_CENTER, 0); - pGlobalData->placementSelection = PLACEMENT_CENTER; + pData->placementSelection = PLACEMENT_CENTER; } if (_ttoi(szBuffer) == 2) { SendDlgItemMessage(hwndDlg, IDC_PLACEMENT_COMBO, CB_SETCURSEL, PLACEMENT_STRETCH, 0); - pGlobalData->placementSelection = PLACEMENT_STRETCH; + pData->placementSelection = PLACEMENT_STRETCH; } } else { SendDlgItemMessage(hwndDlg, IDC_PLACEMENT_COMBO, CB_SETCURSEL, PLACEMENT_CENTER, 0); - pGlobalData->placementSelection = PLACEMENT_CENTER; + pData->placementSelection = PLACEMENT_CENTER; } result = RegQueryValueEx(regKey, TEXT("TileWallpaper"), 0, &varType, (LPBYTE)szBuffer, &bufferSize); @@ -299,25 +297,25 @@ InitBackgroundDialog(HWND hwndDlg, PGLOBAL_DATA pGlobalData) if (_ttoi(szBuffer) == 1) { SendDlgItemMessage(hwndDlg, IDC_PLACEMENT_COMBO, CB_SETCURSEL, PLACEMENT_TILE, 0); - pGlobalData->placementSelection = PLACEMENT_TILE; + pData->placementSelection = PLACEMENT_TILE; } } RegCloseKey(regKey); - pGlobalData->hBitmap = (HBITMAP) LoadImage(hApplet, MAKEINTRESOURCE(IDC_MONITOR), IMAGE_BITMAP, 0, 0, LR_LOADTRANSPARENT); - if (pGlobalData->hBitmap != NULL) + pData->hBitmap = (HBITMAP) LoadImage(hApplet, MAKEINTRESOURCE(IDC_MONITOR), IMAGE_BITMAP, 0, 0, LR_LOADTRANSPARENT); + if (pData->hBitmap != NULL) { - GetObject(pGlobalData->hBitmap, sizeof(BITMAP), &bitmap); + GetObject(pData->hBitmap, sizeof(BITMAP), &bitmap); - pGlobalData->cxSource = bitmap.bmWidth; - pGlobalData->cySource = bitmap.bmHeight; + pData->cxSource = bitmap.bmWidth; + pData->cySource = bitmap.bmHeight; } } static VOID -OnColorButton(HWND hwndDlg, PGLOBAL_DATA pGlobalData) +OnColorButton(HWND hwndDlg, PDATA pData) { /* Load custom colors from Registry */ HKEY hKey = NULL; @@ -331,9 +329,9 @@ OnColorButton(HWND hwndDlg, PGLOBAL_DATA pGlobalData) { /* Key opened */ DWORD dwType = REG_BINARY; - DWORD cbData = sizeof(pGlobalData->custom_colors); + DWORD cbData = sizeof(pData->custom_colors); res = RegQueryValueEx(hKey, TEXT("CustomColors"), NULL, &dwType, - (LPBYTE)pGlobalData->custom_colors, &cbData); + (LPBYTE)pData->custom_colors, &cbData); RegCloseKey(hKey); hKey = NULL; } @@ -343,8 +341,8 @@ OnColorButton(HWND hwndDlg, PGLOBAL_DATA pGlobalData) cc.lStructSize = sizeof(CHOOSECOLOR); cc.hwndOwner = hwndDlg; cc.hInstance = NULL; - cc.rgbResult = pGlobalData->backgroundDesktopColor; - cc.lpCustColors = pGlobalData->custom_colors; + cc.rgbResult = g_GlobalData.desktop_color; + cc.lpCustColors = pData->custom_colors; cc.Flags = CC_ANYCOLOR | /* Causes the dialog box to display all available colors in the set of basic colors. */ CC_FULLOPEN | /* opens dialog in full size */ CC_RGBINIT ; /* init chosen color by rgbResult value */ @@ -354,7 +352,7 @@ OnColorButton(HWND hwndDlg, PGLOBAL_DATA pGlobalData) if (ChooseColor(&cc)) { /* Save selected color to var */ - pGlobalData->backgroundDesktopColor = cc.rgbResult; + g_GlobalData.desktop_color = cc.rgbResult; /* Apply button will be activated */ PropSheet_Changed(GetParent(hwndDlg), hwndDlg); @@ -369,7 +367,7 @@ OnColorButton(HWND hwndDlg, PGLOBAL_DATA pGlobalData) { /* Key opened */ RegSetValueEx(hKey, TEXT("CustomColors"), 0, REG_BINARY, - (const BYTE *)pGlobalData->custom_colors, sizeof(pGlobalData->custom_colors)); + (const BYTE *)pData->custom_colors, sizeof(pData->custom_colors)); RegCloseKey(hKey); hKey = NULL; } @@ -400,7 +398,7 @@ CheckListViewFilenameExists(HWND hwndList, LPCTSTR tszFileName) static VOID -OnBrowseButton(HWND hwndDlg, PGLOBAL_DATA pGlobalData) +OnBrowseButton(HWND hwndDlg, PDATA pData) { OPENFILENAME ofn; TCHAR filename[MAX_PATH]; @@ -439,7 +437,7 @@ OnBrowseButton(HWND hwndDlg, PGLOBAL_DATA pGlobalData) if (CheckListViewFilenameExists(hwndBackgroundList, ofn.lpstrFileTitle) == TRUE) return; - if (pGlobalData->listViewItemCount > (MAX_BACKGROUNDS - 1)) + if (pData->listViewItemCount > (MAX_BACKGROUNDS - 1)) return; SHGetFileInfo(filename, @@ -448,7 +446,7 @@ OnBrowseButton(HWND hwndDlg, PGLOBAL_DATA pGlobalData) sizeof(sfi), SHGFI_SYSICONINDEX | SHGFI_SMALLICON | SHGFI_DISPLAYNAME); - backgroundItem = &pGlobalData->backgroundItems[pGlobalData->listViewItemCount]; + backgroundItem = &pData->backgroundItems[pData->listViewItemCount]; backgroundItem->bWallpaper = TRUE; @@ -463,40 +461,40 @@ OnBrowseButton(HWND hwndDlg, PGLOBAL_DATA pGlobalData) listItem.state = 0; listItem.pszText = backgroundItem->szDisplayName; listItem.iImage = sfi.iIcon; - listItem.iItem = pGlobalData->listViewItemCount; - listItem.lParam = pGlobalData->listViewItemCount; + listItem.iItem = pData->listViewItemCount; + listItem.lParam = pData->listViewItemCount; (void)ListView_InsertItem(hwndBackgroundList, &listItem); ListView_SetItemState(hwndBackgroundList, - pGlobalData->listViewItemCount, + pData->listViewItemCount, LVIS_SELECTED, LVIS_SELECTED); SendMessage(hwndBackgroundList, WM_VSCROLL, SB_BOTTOM, 0); - pGlobalData->listViewItemCount++; + pData->listViewItemCount++; } } static VOID -ListViewItemChanged(HWND hwndDlg, PGLOBAL_DATA pGlobalData, int itemIndex) +ListViewItemChanged(HWND hwndDlg, PDATA pData, int itemIndex) { BackgroundItem *backgroundItem = NULL; - pGlobalData->backgroundSelection = itemIndex; - backgroundItem = &pGlobalData->backgroundItems[pGlobalData->backgroundSelection]; + pData->backgroundSelection = itemIndex; + backgroundItem = &pData->backgroundItems[pData->backgroundSelection]; - if (pGlobalData->pWallpaperBitmap != NULL) + if (pData->pWallpaperBitmap != NULL) { - DibFreeImage(pGlobalData->pWallpaperBitmap); - pGlobalData->pWallpaperBitmap = NULL; + DibFreeImage(pData->pWallpaperBitmap); + pData->pWallpaperBitmap = NULL; } if (backgroundItem->bWallpaper == TRUE) { - pGlobalData->pWallpaperBitmap = DibLoadImage(backgroundItem->szFilename); + pData->pWallpaperBitmap = DibLoadImage(backgroundItem->szFilename); - if (pGlobalData->pWallpaperBitmap == NULL) + if (pData->pWallpaperBitmap == NULL) return; } @@ -511,7 +509,7 @@ ListViewItemChanged(HWND hwndDlg, PGLOBAL_DATA pGlobalData, int itemIndex) static VOID -DrawBackgroundPreview(LPDRAWITEMSTRUCT draw, PGLOBAL_DATA pGlobalData) +DrawBackgroundPreview(LPDRAWITEMSTRUCT draw, PDATA pData) { float scaleX; float scaleY; @@ -523,23 +521,23 @@ DrawBackgroundPreview(LPDRAWITEMSTRUCT draw, PGLOBAL_DATA pGlobalData) int x; int y; - if (pGlobalData->backgroundItems[pGlobalData->backgroundSelection].bWallpaper == FALSE) + if (pData->backgroundItems[pData->backgroundSelection].bWallpaper == FALSE) { /* update desktop background color image */ - hBrush = CreateSolidBrush(pGlobalData->backgroundDesktopColor); + hBrush = CreateSolidBrush(g_GlobalData.desktop_color); FillRect(draw->hDC, &draw->rcItem, hBrush); DeleteObject(hBrush); return; } - if (pGlobalData->pWallpaperBitmap == NULL) + if (pData->pWallpaperBitmap == NULL) return; scaleX = ((float)GetSystemMetrics(SM_CXSCREEN) - 1) / (float)draw->rcItem.right; scaleY = ((float)GetSystemMetrics(SM_CYSCREEN) - 1) / (float)draw->rcItem.bottom; - scaledWidth = pGlobalData->pWallpaperBitmap->width / scaleX; - scaledHeight = pGlobalData->pWallpaperBitmap->height / scaleY; + scaledWidth = pData->pWallpaperBitmap->width / scaleX; + scaledHeight = pData->pWallpaperBitmap->height / scaleY; posX = (draw->rcItem.right / 2) - (scaledWidth / 2); posY = (draw->rcItem.bottom / 2) - (scaledHeight / 2); @@ -548,7 +546,7 @@ DrawBackgroundPreview(LPDRAWITEMSTRUCT draw, PGLOBAL_DATA pGlobalData) SetStretchBltMode(draw->hDC, COLORONCOLOR); - switch (pGlobalData->placementSelection) + switch (pData->placementSelection) { case PLACEMENT_CENTER: StretchDIBits(draw->hDC, @@ -558,10 +556,10 @@ DrawBackgroundPreview(LPDRAWITEMSTRUCT draw, PGLOBAL_DATA pGlobalData) scaledHeight, 0, 0, - pGlobalData->pWallpaperBitmap->width, - pGlobalData->pWallpaperBitmap->height, - pGlobalData->pWallpaperBitmap->bits, - pGlobalData->pWallpaperBitmap->info, + pData->pWallpaperBitmap->width, + pData->pWallpaperBitmap->height, + pData->pWallpaperBitmap->bits, + pData->pWallpaperBitmap->info, DIB_RGB_COLORS, SRCCOPY); break; @@ -574,10 +572,10 @@ DrawBackgroundPreview(LPDRAWITEMSTRUCT draw, PGLOBAL_DATA pGlobalData) draw->rcItem.bottom, 0, 0, - pGlobalData->pWallpaperBitmap->width, - pGlobalData->pWallpaperBitmap->height, - pGlobalData->pWallpaperBitmap->bits, - pGlobalData->pWallpaperBitmap->info, + pData->pWallpaperBitmap->width, + pData->pWallpaperBitmap->height, + pData->pWallpaperBitmap->bits, + pData->pWallpaperBitmap->info, DIB_RGB_COLORS, SRCCOPY); break; @@ -594,10 +592,10 @@ DrawBackgroundPreview(LPDRAWITEMSTRUCT draw, PGLOBAL_DATA pGlobalData) scaledHeight, 0, 0, - pGlobalData->pWallpaperBitmap->width, - pGlobalData->pWallpaperBitmap->height, - pGlobalData->pWallpaperBitmap->bits, - pGlobalData->pWallpaperBitmap->info, + pData->pWallpaperBitmap->width, + pData->pWallpaperBitmap->height, + pData->pWallpaperBitmap->bits, + pData->pWallpaperBitmap->info, DIB_RGB_COLORS, SRCCOPY); } @@ -608,25 +606,25 @@ DrawBackgroundPreview(LPDRAWITEMSTRUCT draw, PGLOBAL_DATA pGlobalData) static VOID -SetWallpaper(PGLOBAL_DATA pGlobalData) +SetWallpaper(PDATA pData) { HKEY regKey; RegOpenKeyEx(HKEY_CURRENT_USER, TEXT("Control Panel\\Desktop"), 0, KEY_ALL_ACCESS, ®Key); - if (pGlobalData->placementSelection == PLACEMENT_TILE) + if (pData->placementSelection == PLACEMENT_TILE) { RegSetValueEx(regKey, TEXT("TileWallpaper"), 0, REG_SZ, (BYTE *)TEXT("1"), sizeof(TCHAR) * 2); RegSetValueEx(regKey, TEXT("WallpaperStyle"), 0, REG_SZ, (BYTE *)TEXT("0"), sizeof(TCHAR) * 2); } - if (pGlobalData->placementSelection == PLACEMENT_CENTER) + if (pData->placementSelection == PLACEMENT_CENTER) { RegSetValueEx(regKey, TEXT("TileWallpaper"), 0, REG_SZ, (BYTE *)TEXT("0"), sizeof(TCHAR) * 2); RegSetValueEx(regKey, TEXT("WallpaperStyle"), 0, REG_SZ, (BYTE *)TEXT("0"), sizeof(TCHAR) * 2); } - if (pGlobalData->placementSelection == PLACEMENT_STRETCH) + if (pData->placementSelection == PLACEMENT_STRETCH) { RegSetValueEx(regKey, TEXT("TileWallpaper"), 0, REG_SZ, (BYTE *)TEXT("0"), sizeof(TCHAR) * 2); RegSetValueEx(regKey, TEXT("WallpaperStyle"), 0, REG_SZ, (BYTE *)TEXT("2"), sizeof(TCHAR) * 2); @@ -634,11 +632,11 @@ SetWallpaper(PGLOBAL_DATA pGlobalData) RegCloseKey(regKey); - if (pGlobalData->backgroundItems[pGlobalData->backgroundSelection].bWallpaper == TRUE) + if (pData->backgroundItems[pData->backgroundSelection].bWallpaper == TRUE) { SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, - pGlobalData->backgroundItems[pGlobalData->backgroundSelection].szFilename, + pData->backgroundItems[pData->backgroundSelection].szFilename, SPIF_UPDATEINIFILE); } else @@ -650,38 +648,33 @@ SetWallpaper(PGLOBAL_DATA pGlobalData) /* Change system color */ static VOID -SetDesktopBackColor(HWND hwndDlg, PGLOBAL_DATA pGlobalData) +SetDesktopBackColor(HWND hwndDlg, DATA *pData) { INT iElement = COLOR_BACKGROUND; HKEY hKey; LONG result; TCHAR clText[16]; - DWORD red, green, blue; + BYTE red, green, blue; + DWORD dwDispostion; - if( !SetSysColors( 1, &iElement, &pGlobalData->backgroundDesktopColor ) ) + if( !SetSysColors( 1, &iElement, &g_GlobalData.desktop_color ) ) MessageBox(hwndDlg, TEXT("SetSysColor() failed!"), /* these error texts can need internationalization? */ TEXT("Error!"), MB_ICONSTOP ); - /* Write color to registry key: HKEY_CURRENT_USER\Control Panel\Colors\Background */ - hKey = NULL; - result = ERROR_SUCCESS; - result = RegOpenKeyEx( HKEY_CURRENT_USER, TEXT("Control Panel\\Colors"), 0, KEY_WRITE, &hKey ); - if( result != ERROR_SUCCESS ) - { - /* Key open failed; maybe it does not exist? create it! */ - result = RegCreateKeyEx( HKEY_CURRENT_USER, TEXT("Control Panel\\Colors"), 0, NULL, 0, - KEY_ALL_ACCESS, NULL, &hKey, NULL ); - /* Now key must be created and opened and hKey must point at newly created key */ - /* On error result will not contain ERROR_SUCCESS. I don't know how to handle */ - /* this case :( */ - } - red = GetRValue(pGlobalData->backgroundDesktopColor); - green = GetGValue(pGlobalData->backgroundDesktopColor); - blue = GetBValue(pGlobalData->backgroundDesktopColor); - _stprintf(clText, TEXT("%d %d %d"), red, green, blue ); /* format string to be set to registry */ - RegSetValueEx(hKey, TEXT("Background"), 0, REG_SZ, (BYTE *)clText, lstrlen( clText )*sizeof(TCHAR) + sizeof(TCHAR) ); - RegCloseKey(hKey); -} + result = RegCreateKeyEx( HKEY_CURRENT_USER, TEXT("Control Panel\\Colors"), 0, NULL, 0, + KEY_ALL_ACCESS, NULL, &hKey, &dwDispostion ); + if (result != ERROR_SUCCESS) + { + red = GetRValue(g_GlobalData.desktop_color); + green = GetGValue(g_GlobalData.desktop_color); + blue = GetBValue(g_GlobalData.desktop_color); + /* format string to be set to registry */ + wsprintf(clText, TEXT("%d %d %d"), red, green, blue); + RegSetValueEx(hKey, TEXT("Background"), 0, REG_SZ, (BYTE *)clText, + (lstrlen(clText) + 1) * sizeof(TCHAR)); + RegCloseKey(hKey); + } +} INT_PTR CALLBACK BackgroundPageProc(HWND hwndDlg, @@ -689,16 +682,16 @@ BackgroundPageProc(HWND hwndDlg, WPARAM wParam, LPARAM lParam) { - PGLOBAL_DATA pGlobalData; + PDATA pData; - pGlobalData = (PGLOBAL_DATA)GetWindowLongPtr(hwndDlg, DWLP_USER); + pData = (PDATA)GetWindowLongPtr(hwndDlg, DWLP_USER); switch (uMsg) { case WM_INITDIALOG: - pGlobalData = (GLOBAL_DATA*) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(GLOBAL_DATA)); - SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pGlobalData); - InitBackgroundDialog(hwndDlg, pGlobalData); + pData = (DATA*) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DATA)); + SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pData); + InitBackgroundDialog(hwndDlg, pData); break; case WM_COMMAND: @@ -710,18 +703,18 @@ BackgroundPageProc(HWND hwndDlg, { case IDC_COLOR_BUTTON: if (command == BN_CLICKED) - OnColorButton(hwndDlg, pGlobalData); + OnColorButton(hwndDlg, pData); break; case IDC_BROWSE_BUTTON: if (command == BN_CLICKED) - OnBrowseButton(hwndDlg, pGlobalData); + OnBrowseButton(hwndDlg, pData); break; case IDC_PLACEMENT_COMBO: if (command == CBN_SELCHANGE) { - pGlobalData->placementSelection = (int)SendDlgItemMessage(hwndDlg, IDC_PLACEMENT_COMBO, CB_GETCURSEL, 0, 0); + pData->placementSelection = (int)SendDlgItemMessage(hwndDlg, IDC_PLACEMENT_COMBO, CB_GETCURSEL, 0, 0); InvalidateRect(GetDlgItem(hwndDlg, IDC_BACKGROUND_PREVIEW), NULL, TRUE); @@ -739,11 +732,11 @@ BackgroundPageProc(HWND hwndDlg, hdc = BeginPaint(hwndDlg, &ps); hdcMem = CreateCompatibleDC(hdc); - SelectObject(hdcMem, pGlobalData->hBitmap); + SelectObject(hdcMem, pData->hBitmap); /* TransparentBlt(hdc, 98, 0, - pGlobalData->cxSource, pGlobalData->cySource, hdcMem, 0, 0, - pGlobalData->cxSource, pGlobalData->cySource, 0xFF80FF); + pData->cxSource, pData->cySource, hdcMem, 0, 0, + pData->cxSource, pData->cySource, 0xFF80FF); */ DeleteDC(hdcMem); EndPaint(hwndDlg, &ps); @@ -757,7 +750,7 @@ BackgroundPageProc(HWND hwndDlg, if (drawItem->CtlID == IDC_BACKGROUND_PREVIEW) { - DrawBackgroundPreview(drawItem, pGlobalData); + DrawBackgroundPreview(drawItem, pData); } } @@ -770,8 +763,8 @@ BackgroundPageProc(HWND hwndDlg, switch(lpnm->code) { case PSN_APPLY: - SetWallpaper(pGlobalData); - SetDesktopBackColor(hwndDlg, pGlobalData); + SetWallpaper(pData); + SetDesktopBackColor(hwndDlg, pData); return TRUE; case LVN_ITEMCHANGED: @@ -781,23 +774,21 @@ BackgroundPageProc(HWND hwndDlg, if ((nm->uNewState & LVIS_SELECTED) == 0) return FALSE; - ListViewItemChanged(hwndDlg, pGlobalData, nm->iItem); - - } break; + ListViewItemChanged(hwndDlg, pData, nm->iItem); + } + break; } } break; case WM_DESTROY: - if (pGlobalData->pWallpaperBitmap != NULL) - DibFreeImage(pGlobalData->pWallpaperBitmap); + if (pData->pWallpaperBitmap != NULL) + DibFreeImage(pData->pWallpaperBitmap); - DeleteObject(pGlobalData->hBitmap); - HeapFree(GetProcessHeap(), 0, pGlobalData); + DeleteObject(pData->hBitmap); + HeapFree(GetProcessHeap(), 0, pData); break; } return FALSE; } - - diff --git a/dll/cpl/desk/desk.c b/dll/cpl/desk/desk.c index eb136076d0d..bb31e511956 100644 --- a/dll/cpl/desk/desk.c +++ b/dll/cpl/desk/desk.c @@ -132,6 +132,8 @@ DisplayApplet(HWND hwnd, UINT uMsg, LPARAM wParam, LPARAM lParam) UNREFERENCED_PARAMETER(uMsg); UNREFERENCED_PARAMETER(hwnd); + g_GlobalData.desktop_color = GetSysColor(COLOR_DESKTOP); + LoadString(hApplet, IDS_CPLNAME, Caption, sizeof(Caption) / sizeof(TCHAR)); ZeroMemory(&psh, sizeof(PROPSHEETHEADER)); diff --git a/dll/cpl/desk/desk.h b/dll/cpl/desk/desk.h index a486eadbe65..f1ac24de143 100644 --- a/dll/cpl/desk/desk.h +++ b/dll/cpl/desk/desk.h @@ -85,6 +85,13 @@ typedef struct _DISPLAY_DEVICE_ENTRY SETTINGS_ENTRY InitialSettings; } DISPLAY_DEVICE_ENTRY, *PDISPLAY_DEVICE_ENTRY; +typedef struct _GLOBAL_DATA +{ + COLORREF desktop_color; +} GLOBAL_DATA, *PGLOBAL_DATA; + +extern GLOBAL_DATA g_GlobalData; + BOOL DisplayAdvancedSettings(HWND hWndParent, PDISPLAY_DEVICE_ENTRY DisplayDevice); diff --git a/dll/cpl/desk/draw.c b/dll/cpl/desk/draw.c index ad84bcd42ea..982ac9c1401 100644 --- a/dll/cpl/desk/draw.c +++ b/dll/cpl/desk/draw.c @@ -541,11 +541,11 @@ MyDrawMenuBarTemp(HWND Wnd, HDC DC, LPRECT Rect, HMENU Menu, HFONT Font, THEME * { GetMenuStringW(Menu, i, Text, 128, MF_BYPOSITION); - rect.left = x; + rect.left = rect.right = x; rect.top = Rect->top; + rect.bottom = Rect->bottom; DrawTextW(DC, Text, -1, &rect, DT_SINGLELINE | DT_CALCRECT); - - rect.bottom = Rect->bottom; + rect.bottom = Rect->bottom; rect.right += MENU_BAR_ITEMS_SPACE; x += rect.right - rect.left; diff --git a/dll/cpl/desk/effappdlg.c b/dll/cpl/desk/effappdlg.c index ba5d7a74e85..910c5d3b395 100644 --- a/dll/cpl/desk/effappdlg.c +++ b/dll/cpl/desk/effappdlg.c @@ -28,7 +28,7 @@ UpdateControls(HWND hwndDlg, GLOBALS *g) g->ThemeAdv.Effects.bKeyboardCues = (state == BST_CHECKED) ? TRUE : FALSE; state = SendDlgItemMessage(hwndDlg, IDC_EFFAPPEARANCE_DRAGFULLWINDOWS, BM_GETCHECK, 0, 0); g->ThemeAdv.Effects.bDragFullWindows = (state == BST_CHECKED) ? TRUE : FALSE; - + g->bHasChanged = TRUE; } @@ -105,12 +105,12 @@ EffAppearanceDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { case IDOK: SaveCurrentValues(hwndDlg, g); - EndDialog(hwndDlg, 0); + EndDialog(hwndDlg, IDOK); break; case IDCANCEL: g->ThemeAdv = g->Theme; - EndDialog(hwndDlg, 0); + EndDialog(hwndDlg, IDCANCEL); break; case IDC_EFFAPPEARANCE_ANIMATION: diff --git a/dll/cpl/desk/preview.c b/dll/cpl/desk/preview.c index 1c35101646d..c6e6a3210b5 100644 --- a/dll/cpl/desk/preview.c +++ b/dll/cpl/desk/preview.c @@ -63,6 +63,7 @@ typedef struct _PREVIEW_DATA HFONT hCaptionFont; HFONT hMenuFont; HFONT hMessageFont; + HFONT hClientFont; HMENU hMenu; @@ -76,6 +77,7 @@ static VOID UpdatePreviewTheme(HWND hwnd, PPREVIEW_DATA pPreviewData, THEME *the pPreviewData->hbrScrollbar = CreateSolidBrush(theme->crColor[COLOR_SCROLLBAR]); if (pPreviewData->hbrDesktop != NULL) DeleteObject(pPreviewData->hbrDesktop); + pPreviewData->hbrDesktop = CreateSolidBrush(theme->crColor[COLOR_DESKTOP]); if (pPreviewData->hbrWindow != NULL) DeleteObject(pPreviewData->hbrWindow); @@ -112,6 +114,8 @@ OnCreate(HWND hwnd, PPREVIEW_DATA pPreviewData) { THEME *theme; + pPreviewData->hClientFont = (HFONT)GetStockObject(DEFAULT_GUI_FONT); + /* Load and modify the menu */ pPreviewData->hMenu = LoadMenu(hApplet, MAKEINTRESOURCE(IDR_PREVIEW_MENU)); EnableMenuItem(pPreviewData->hMenu, @@ -289,7 +293,7 @@ OnPaint(HWND hwnd, PPREVIEW_DATA pPreviewData) rc.left += 4; rc.top += 2; SetTextColor(hdc, theme->crColor[COLOR_WINDOWTEXT]); - hOldFont = SelectObject(hdc, pPreviewData->hCaptionFont); /* FIXME: client text is not caption text */ + hOldFont = SelectObject(hdc, pPreviewData->hClientFont); DrawText(hdc, pPreviewData->lpWinTxt, -1, &rc, DT_LEFT); SelectObject(hdc, hOldFont); diff --git a/dll/cpl/desk/screensaver.c b/dll/cpl/desk/screensaver.c index 00ce09568b2..37b8f0d576e 100644 --- a/dll/cpl/desk/screensaver.c +++ b/dll/cpl/desk/screensaver.c @@ -20,12 +20,12 @@ typedef struct } ScreenSaverItem; -typedef struct _GLOBAL_DATA +typedef struct _DATA { ScreenSaverItem ScreenSaverItems[MAX_SCREENSAVERS]; PROCESS_INFORMATION PrevWindowPi; int Selection; -} GLOBAL_DATA, *PGLOBAL_DATA; +} DATA, *PDATA; static LPTSTR @@ -75,7 +75,7 @@ GetCurrentScreenSaverValue(LPTSTR lpValue) static VOID -SelectionChanged(HWND hwndDlg, PGLOBAL_DATA pGlobalData) +SelectionChanged(HWND hwndDlg, PDATA pData) { HWND hwndCombo; BOOL bEnable; @@ -86,7 +86,7 @@ SelectionChanged(HWND hwndDlg, PGLOBAL_DATA pGlobalData) i = (INT)SendMessage(hwndCombo, CB_GETCURSEL, 0, 0); i = (INT)SendMessage(hwndCombo, CB_GETITEMDATA, i, 0); - pGlobalData->Selection = i; + pData->Selection = i; bEnable = (i != 0); @@ -101,31 +101,31 @@ SelectionChanged(HWND hwndDlg, PGLOBAL_DATA pGlobalData) static VOID -SetScreenSaverPreviewBox(HWND hwndDlg, PGLOBAL_DATA pGlobalData) +SetScreenSaverPreviewBox(HWND hwndDlg, PDATA pData) { HWND hPreview = GetDlgItem(hwndDlg, IDC_SCREENS_PREVIEW); STARTUPINFO si; TCHAR szCmdline[2048]; /* kill off the previous preview process*/ - if (pGlobalData->PrevWindowPi.hProcess) + if (pData->PrevWindowPi.hProcess) { - TerminateProcess(pGlobalData->PrevWindowPi.hProcess, 0); - CloseHandle(pGlobalData->PrevWindowPi.hProcess); - CloseHandle(pGlobalData->PrevWindowPi.hThread); - pGlobalData->PrevWindowPi.hThread = pGlobalData->PrevWindowPi.hProcess = NULL; + TerminateProcess(pData->PrevWindowPi.hProcess, 0); + CloseHandle(pData->PrevWindowPi.hProcess); + CloseHandle(pData->PrevWindowPi.hThread); + pData->PrevWindowPi.hThread = pData->PrevWindowPi.hProcess = NULL; } - if (pGlobalData->Selection > 0) + if (pData->Selection > 0) { _stprintf(szCmdline, _T("%s /p %u"), - pGlobalData->ScreenSaverItems[pGlobalData->Selection].szFilename, + pData->ScreenSaverItems[pData->Selection].szFilename, hPreview); ZeroMemory(&si, sizeof(si)); si.cb = sizeof(si); - ZeroMemory(&pGlobalData->PrevWindowPi, sizeof(pGlobalData->PrevWindowPi)); + ZeroMemory(&pData->PrevWindowPi, sizeof(pData->PrevWindowPi)); if (!CreateProcess(NULL, szCmdline, @@ -136,9 +136,9 @@ SetScreenSaverPreviewBox(HWND hwndDlg, PGLOBAL_DATA pGlobalData) NULL, NULL, &si, - &pGlobalData->PrevWindowPi)) + &pData->PrevWindowPi)) { - pGlobalData->PrevWindowPi.hThread = pGlobalData->PrevWindowPi.hProcess = NULL; + pData->PrevWindowPi.hThread = pData->PrevWindowPi.hProcess = NULL; } } } @@ -181,7 +181,7 @@ WaitForSettingsDialog(HWND hwndDlg, static VOID -ScreensaverConfig(HWND hwndDlg, PGLOBAL_DATA pGlobalData) +ScreensaverConfig(HWND hwndDlg, PDATA pData) { /* /c: Run configuration, hwnd is handle of calling window @@ -191,12 +191,12 @@ ScreensaverConfig(HWND hwndDlg, PGLOBAL_DATA pGlobalData) STARTUPINFO si; PROCESS_INFORMATION pi; - if (pGlobalData->Selection < 1) + if (pData->Selection < 1) return; _stprintf(szCmdline, _T("%s /c:%u"), - pGlobalData->ScreenSaverItems[pGlobalData->Selection].szFilename, + pData->ScreenSaverItems[pData->Selection].szFilename, hwndDlg); ZeroMemory(&si, sizeof(si)); @@ -214,22 +214,22 @@ ScreensaverConfig(HWND hwndDlg, PGLOBAL_DATA pGlobalData) &pi)) { /* kill off the previous preview process */ - if (pGlobalData->PrevWindowPi.hProcess) + if (pData->PrevWindowPi.hProcess) { - TerminateProcess(pGlobalData->PrevWindowPi.hProcess, 0); - CloseHandle(pGlobalData->PrevWindowPi.hProcess); - CloseHandle(pGlobalData->PrevWindowPi.hThread); - pGlobalData->PrevWindowPi.hThread = pGlobalData->PrevWindowPi.hProcess = NULL; + TerminateProcess(pData->PrevWindowPi.hProcess, 0); + CloseHandle(pData->PrevWindowPi.hProcess); + CloseHandle(pData->PrevWindowPi.hThread); + pData->PrevWindowPi.hThread = pData->PrevWindowPi.hProcess = NULL; } if (WaitForSettingsDialog(hwndDlg, pi.hProcess)) - SetScreenSaverPreviewBox(hwndDlg, pGlobalData); + SetScreenSaverPreviewBox(hwndDlg, pData); } } static VOID -ScreensaverPreview(HWND hwndDlg, PGLOBAL_DATA pGlobalData) +ScreensaverPreview(HWND hwndDlg, PDATA pData) { /* /s Run normal @@ -239,21 +239,21 @@ ScreensaverPreview(HWND hwndDlg, PGLOBAL_DATA pGlobalData) STARTUPINFO si; PROCESS_INFORMATION pi; - if (pGlobalData->Selection < 1) + if (pData->Selection < 1) return; /* kill off the previous preview process*/ - if (pGlobalData->PrevWindowPi.hProcess) + if (pData->PrevWindowPi.hProcess) { - TerminateProcess(pGlobalData->PrevWindowPi.hProcess, 0); - CloseHandle(pGlobalData->PrevWindowPi.hProcess); - CloseHandle(pGlobalData->PrevWindowPi.hThread); - pGlobalData->PrevWindowPi.hThread = pGlobalData->PrevWindowPi.hProcess = NULL; + TerminateProcess(pData->PrevWindowPi.hProcess, 0); + CloseHandle(pData->PrevWindowPi.hProcess); + CloseHandle(pData->PrevWindowPi.hThread); + pData->PrevWindowPi.hThread = pData->PrevWindowPi.hProcess = NULL; } _stprintf(szCmdline, _T("%s /s"), - pGlobalData->ScreenSaverItems[pGlobalData->Selection].szFilename); + pData->ScreenSaverItems[pData->Selection].szFilename); ZeroMemory(&si, sizeof(si)); si.cb = sizeof(si); @@ -322,7 +322,7 @@ CheckRegScreenSaverIsSecure(HWND hwndDlg) static VOID -AddScreenSavers(HWND hwndDlg, PGLOBAL_DATA pGlobalData) +AddScreenSavers(HWND hwndDlg, PDATA pData) { HWND hwndScreenSavers = GetDlgItem(hwndDlg, IDC_SCREENS_LIST); WIN32_FIND_DATA fd; @@ -334,7 +334,7 @@ AddScreenSavers(HWND hwndDlg, PGLOBAL_DATA pGlobalData) HANDLE hModule = NULL; /* Add the "None" item */ - ScreenSaverItem = &pGlobalData->ScreenSaverItems[ScreenSaverCount]; + ScreenSaverItem = &pData->ScreenSaverItems[ScreenSaverCount]; ScreenSaverItem->bIsScreenSaver = FALSE; @@ -374,7 +374,7 @@ AddScreenSavers(HWND hwndDlg, PGLOBAL_DATA pGlobalData) _tcscat(filename, TEXT("\\")); _tcscat(filename, fd.cFileName); - ScreenSaverItem = &pGlobalData->ScreenSaverItems[ScreenSaverCount]; + ScreenSaverItem = &pData->ScreenSaverItems[ScreenSaverCount]; ScreenSaverItem->bIsScreenSaver = TRUE; @@ -416,7 +416,7 @@ AddScreenSavers(HWND hwndDlg, PGLOBAL_DATA pGlobalData) static VOID -SetScreenSaver(HWND hwndDlg, PGLOBAL_DATA pGlobalData) +SetScreenSaver(HWND hwndDlg, PDATA pData) { HKEY regKey; @@ -432,14 +432,14 @@ SetScreenSaver(HWND hwndDlg, PGLOBAL_DATA pGlobalData) UINT Ret; /* set the screensaver */ - if (pGlobalData->ScreenSaverItems[pGlobalData->Selection].bIsScreenSaver) + if (pData->ScreenSaverItems[pData->Selection].bIsScreenSaver) { RegSetValueEx(regKey, _T("SCRNSAVE.EXE"), 0, REG_SZ, - (PBYTE)pGlobalData->ScreenSaverItems[pGlobalData->Selection].szFilename, - _tcslen(pGlobalData->ScreenSaverItems[pGlobalData->Selection].szFilename) * sizeof(TCHAR)); + (PBYTE)pData->ScreenSaverItems[pData->Selection].szFilename, + _tcslen(pData->ScreenSaverItems[pData->Selection].szFilename) * sizeof(TCHAR)); } else { @@ -485,16 +485,16 @@ SetScreenSaver(HWND hwndDlg, PGLOBAL_DATA pGlobalData) static BOOL -OnInitDialog(HWND hwndDlg, PGLOBAL_DATA pGlobalData) +OnInitDialog(HWND hwndDlg, PDATA pData) { LPTSTR lpCurSs; HWND hwndSSCombo = GetDlgItem(hwndDlg, IDC_SCREENS_LIST); INT Num; - pGlobalData = HeapAlloc(GetProcessHeap(), + pData = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, - sizeof(GLOBAL_DATA)); - if (!pGlobalData) + sizeof(DATA)); + if (!pData) { EndDialog(hwndDlg, -1); return FALSE; @@ -502,9 +502,9 @@ OnInitDialog(HWND hwndDlg, PGLOBAL_DATA pGlobalData) SetWindowLongPtr(hwndDlg, DWLP_USER, - (LONG_PTR)pGlobalData); + (LONG_PTR)pData); - pGlobalData->Selection = -1; + pData->Selection = -1; SendDlgItemMessage(hwndDlg, IDC_SCREENS_TIME, @@ -514,7 +514,7 @@ OnInitDialog(HWND hwndDlg, PGLOBAL_DATA pGlobalData) ((short) 240, (short) 1)); AddScreenSavers(hwndDlg, - pGlobalData); + pData); CheckRegScreenSaverIsSecure(hwndDlg); @@ -527,7 +527,7 @@ OnInitDialog(HWND hwndDlg, PGLOBAL_DATA pGlobalData) for (i = 0; i < MAX_SCREENSAVERS; i++) { - if (!_tcscmp(lpCurSs, pGlobalData->ScreenSaverItems[i].szFilename)) + if (!_tcscmp(lpCurSs, pData->ScreenSaverItems[i].szFilename)) { bFound = TRUE; break; @@ -539,7 +539,7 @@ OnInitDialog(HWND hwndDlg, PGLOBAL_DATA pGlobalData) Num = SendMessage(hwndSSCombo, CB_FINDSTRINGEXACT, -1, - (LPARAM)pGlobalData->ScreenSaverItems[i].szDisplayName); + (LPARAM)pData->ScreenSaverItems[i].szDisplayName); if (Num != CB_ERR) SendMessage(hwndSSCombo, CB_SETCURSEL, @@ -588,7 +588,7 @@ OnInitDialog(HWND hwndDlg, PGLOBAL_DATA pGlobalData) } SelectionChanged(hwndDlg, - pGlobalData); + pData); return TRUE; } @@ -600,36 +600,36 @@ ScreenSaverPageProc(HWND hwndDlg, WPARAM wParam, LPARAM lParam) { - PGLOBAL_DATA pGlobalData; + PDATA pData; - pGlobalData = (PGLOBAL_DATA)GetWindowLongPtr(hwndDlg, DWLP_USER); + pData = (PDATA)GetWindowLongPtr(hwndDlg, DWLP_USER); switch (uMsg) { case WM_INITDIALOG: { - OnInitDialog(hwndDlg, pGlobalData); + OnInitDialog(hwndDlg, pData); break; } case WM_DESTROY: { - if (pGlobalData->PrevWindowPi.hProcess) + if (pData->PrevWindowPi.hProcess) { - TerminateProcess(pGlobalData->PrevWindowPi.hProcess, 0); - CloseHandle(pGlobalData->PrevWindowPi.hProcess); - CloseHandle(pGlobalData->PrevWindowPi.hThread); + TerminateProcess(pData->PrevWindowPi.hProcess, 0); + CloseHandle(pData->PrevWindowPi.hProcess); + CloseHandle(pData->PrevWindowPi.hThread); } HeapFree(GetProcessHeap(), 0, - pGlobalData); + pData); break; } case WM_ENDSESSION: { SetScreenSaverPreviewBox(hwndDlg, - pGlobalData); + pData); break; } @@ -644,8 +644,8 @@ ScreenSaverPageProc(HWND hwndDlg, { if (HIWORD(wParam) == CBN_SELCHANGE) { - SelectionChanged(hwndDlg, pGlobalData); - SetScreenSaverPreviewBox(hwndDlg, pGlobalData); + SelectionChanged(hwndDlg, pData); + SetScreenSaverPreviewBox(hwndDlg, pData); PropSheet_Changed(GetParent(hwndDlg), hwndDlg); } break; @@ -668,8 +668,8 @@ ScreenSaverPageProc(HWND hwndDlg, { if(command == BN_CLICKED) { - ScreensaverPreview(hwndDlg, pGlobalData); - SetScreenSaverPreviewBox(hwndDlg, pGlobalData); + ScreensaverPreview(hwndDlg, pData); + SetScreenSaverPreviewBox(hwndDlg, pData); } break; } @@ -677,7 +677,7 @@ ScreenSaverPageProc(HWND hwndDlg, case IDC_SCREENS_SETTINGS: // Screensaver Settings { if (command == BN_CLICKED) - ScreensaverConfig(hwndDlg, pGlobalData); + ScreensaverConfig(hwndDlg, pData); break; } @@ -702,7 +702,7 @@ ScreenSaverPageProc(HWND hwndDlg, { case PSN_APPLY: { - SetScreenSaver(hwndDlg, pGlobalData); + SetScreenSaver(hwndDlg, pData); return TRUE; } @@ -710,7 +710,7 @@ ScreenSaverPageProc(HWND hwndDlg, { /* activate screen saver support */ SystemParametersInfoW(SPI_SETSCREENSAVEACTIVE, TRUE, 0, SPIF_SENDCHANGE); - SetScreenSaverPreviewBox(hwndDlg, pGlobalData); + SetScreenSaverPreviewBox(hwndDlg, pData); break; } @@ -718,12 +718,12 @@ ScreenSaverPageProc(HWND hwndDlg, { /* Disable screensaver support */ SystemParametersInfoW(SPI_SETSCREENSAVEACTIVE, FALSE, 0, SPIF_SENDCHANGE); - if (pGlobalData->PrevWindowPi.hProcess) + if (pData->PrevWindowPi.hProcess) { - TerminateProcess(pGlobalData->PrevWindowPi.hProcess, 0); - CloseHandle(pGlobalData->PrevWindowPi.hProcess); - CloseHandle(pGlobalData->PrevWindowPi.hThread); - pGlobalData->PrevWindowPi.hThread = pGlobalData->PrevWindowPi.hProcess = NULL; + TerminateProcess(pData->PrevWindowPi.hProcess, 0); + CloseHandle(pData->PrevWindowPi.hProcess); + CloseHandle(pData->PrevWindowPi.hThread); + pData->PrevWindowPi.hThread = pData->PrevWindowPi.hProcess = NULL; } break; } diff --git a/dll/cpl/desk/settings.c b/dll/cpl/desk/settings.c index 1ede0e78fce..cc6fb974f88 100644 --- a/dll/cpl/desk/settings.c +++ b/dll/cpl/desk/settings.c @@ -11,38 +11,38 @@ #include "desk.h" #include "monslctl.h" -typedef struct _GLOBAL_DATA +typedef struct _DATA { PDISPLAY_DEVICE_ENTRY DisplayDeviceList; PDISPLAY_DEVICE_ENTRY CurrentDisplayDevice; HBITMAP hSpectrumBitmaps[NUM_SPECTRUM_BITMAPS]; int cxSource[NUM_SPECTRUM_BITMAPS]; int cySource[NUM_SPECTRUM_BITMAPS]; -} GLOBAL_DATA, *PGLOBAL_DATA; +} DATA, *PDATA; static VOID -UpdateDisplay(IN HWND hwndDlg, PGLOBAL_DATA pGlobalData, IN BOOL bUpdateThumb) +UpdateDisplay(IN HWND hwndDlg, PDATA pData, IN BOOL bUpdateThumb) { TCHAR Buffer[64]; TCHAR Pixel[64]; DWORD index; LoadString(hApplet, IDS_PIXEL, Pixel, sizeof(Pixel) / sizeof(TCHAR)); - _stprintf(Buffer, Pixel, pGlobalData->CurrentDisplayDevice->CurrentSettings->dmPelsWidth, pGlobalData->CurrentDisplayDevice->CurrentSettings->dmPelsHeight, Pixel); + _stprintf(Buffer, Pixel, pData->CurrentDisplayDevice->CurrentSettings->dmPelsWidth, pData->CurrentDisplayDevice->CurrentSettings->dmPelsHeight, Pixel); SendDlgItemMessage(hwndDlg, IDC_SETTINGS_RESOLUTION_TEXT, WM_SETTEXT, 0, (LPARAM)Buffer); - for (index = 0; index < pGlobalData->CurrentDisplayDevice->ResolutionsCount; index++) + for (index = 0; index < pData->CurrentDisplayDevice->ResolutionsCount; index++) { - if (pGlobalData->CurrentDisplayDevice->Resolutions[index].dmPelsWidth == pGlobalData->CurrentDisplayDevice->CurrentSettings->dmPelsWidth && - pGlobalData->CurrentDisplayDevice->Resolutions[index].dmPelsHeight == pGlobalData->CurrentDisplayDevice->CurrentSettings->dmPelsHeight) + if (pData->CurrentDisplayDevice->Resolutions[index].dmPelsWidth == pData->CurrentDisplayDevice->CurrentSettings->dmPelsWidth && + pData->CurrentDisplayDevice->Resolutions[index].dmPelsHeight == pData->CurrentDisplayDevice->CurrentSettings->dmPelsHeight) { if (bUpdateThumb) SendDlgItemMessage(hwndDlg, IDC_SETTINGS_RESOLUTION, TBM_SETPOS, TRUE, index); break; } } - if (LoadString(hApplet, (2900 + pGlobalData->CurrentDisplayDevice->CurrentSettings->dmBitsPerPel), Buffer, sizeof(Buffer) / sizeof(TCHAR))) + if (LoadString(hApplet, (2900 + pData->CurrentDisplayDevice->CurrentSettings->dmBitsPerPel), Buffer, sizeof(Buffer) / sizeof(TCHAR))) SendDlgItemMessage(hwndDlg, IDC_SETTINGS_BPP, CB_SELECTSTRING, (WPARAM)-1, (LPARAM)Buffer); } @@ -140,7 +140,7 @@ GetPossibleSettings(IN LPCTSTR DeviceName, OUT DWORD* pSettingsCount, OUT PSETTI } static BOOL -AddDisplayDevice(IN PGLOBAL_DATA pGlobalData, IN const DISPLAY_DEVICE *DisplayDevice) +AddDisplayDevice(IN PDATA pData, IN const DISPLAY_DEVICE *DisplayDevice) { PDISPLAY_DEVICE_ENTRY newEntry = NULL; LPTSTR description = NULL; @@ -216,8 +216,8 @@ AddDisplayDevice(IN PGLOBAL_DATA pGlobalData, IN const DISPLAY_DEVICE *DisplayDe newEntry->DeviceKey = key; newEntry->DeviceID = devid; newEntry->DeviceStateFlags = DisplayDevice->StateFlags; - newEntry->Flink = pGlobalData->DisplayDeviceList; - pGlobalData->DisplayDeviceList = newEntry; + newEntry->Flink = pData->DisplayDeviceList; + pData->DisplayDeviceList = newEntry; return TRUE; ByeBye: @@ -247,12 +247,12 @@ ByeBye: } static VOID -OnDisplayDeviceChanged(IN HWND hwndDlg, IN PGLOBAL_DATA pGlobalData, IN PDISPLAY_DEVICE_ENTRY pDeviceEntry) +OnDisplayDeviceChanged(IN HWND hwndDlg, IN PDATA pData, IN PDISPLAY_DEVICE_ENTRY pDeviceEntry) { PSETTINGS_ENTRY Current; DWORD index; - pGlobalData->CurrentDisplayDevice = pDeviceEntry; /* Update global variable */ + pData->CurrentDisplayDevice = pDeviceEntry; /* Update variable */ /* Fill color depths combo box */ SendDlgItemMessage(hwndDlg, IDC_SETTINGS_BPP, CB_RESETCONTENT, 0, 0); @@ -274,7 +274,7 @@ OnDisplayDeviceChanged(IN HWND hwndDlg, IN PGLOBAL_DATA pGlobalData, IN PDISPLAY SendDlgItemMessage(hwndDlg, IDC_SETTINGS_RESOLUTION, TBM_CLEARTICS, TRUE, 0); SendDlgItemMessage(hwndDlg, IDC_SETTINGS_RESOLUTION, TBM_SETRANGE, TRUE, MAKELONG(0, pDeviceEntry->ResolutionsCount - 1)); - UpdateDisplay(hwndDlg, pGlobalData, TRUE); + UpdateDisplay(hwndDlg, pData, TRUE); } static VOID @@ -285,22 +285,22 @@ OnInitDialog(IN HWND hwndDlg) DWORD iDevNum = 0; DWORD i; DISPLAY_DEVICE displayDevice; - PGLOBAL_DATA pGlobalData; + PDATA pData; - pGlobalData = HeapAlloc(GetProcessHeap(), 0, sizeof(GLOBAL_DATA)); - if (pGlobalData == NULL) + pData = HeapAlloc(GetProcessHeap(), 0, sizeof(DATA)); + if (pData == NULL) return; - SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pGlobalData); + SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pData); /* Get video cards list */ - pGlobalData->DisplayDeviceList = NULL; + pData->DisplayDeviceList = NULL; displayDevice.cb = (DWORD)sizeof(DISPLAY_DEVICE); while (EnumDisplayDevices(NULL, iDevNum, &displayDevice, 0x1)) { if ((displayDevice.StateFlags & DISPLAY_DEVICE_ATTACHED_TO_DESKTOP) != 0) { - if (AddDisplayDevice(pGlobalData, &displayDevice)) + if (AddDisplayDevice(pData, &displayDevice)) Result++; } iDevNum++; @@ -316,7 +316,7 @@ OnInitDialog(IN HWND hwndDlg) ShowWindow(GetDlgItem(hwndDlg, IDC_SETTINGS_SPECTRUM), SW_HIDE); /* Do not initialize the color spectrum bitmaps */ - memset(pGlobalData->hSpectrumBitmaps, 0, sizeof(pGlobalData->hSpectrumBitmaps)); + memset(pData->hSpectrumBitmaps, 0, sizeof(pData->hSpectrumBitmaps)); return; } else if (Result == 1) @@ -324,12 +324,12 @@ OnInitDialog(IN HWND hwndDlg) MONSL_MONINFO monitors; /* Single video adapter */ - SendDlgItemMessage(hwndDlg, IDC_SETTINGS_DEVICE, WM_SETTEXT, 0, (LPARAM)pGlobalData->DisplayDeviceList->DeviceDescription); - OnDisplayDeviceChanged(hwndDlg, pGlobalData, pGlobalData->DisplayDeviceList); + SendDlgItemMessage(hwndDlg, IDC_SETTINGS_DEVICE, WM_SETTEXT, 0, (LPARAM)pData->DisplayDeviceList->DeviceDescription); + OnDisplayDeviceChanged(hwndDlg, pData, pData->DisplayDeviceList); monitors.Position.x = monitors.Position.y = 0; - monitors.Size.cx = pGlobalData->CurrentDisplayDevice->CurrentSettings->dmPelsWidth; - monitors.Size.cy = pGlobalData->CurrentDisplayDevice->CurrentSettings->dmPelsHeight; + monitors.Size.cx = pData->CurrentDisplayDevice->CurrentSettings->dmPelsWidth; + monitors.Size.cy = pData->CurrentDisplayDevice->CurrentSettings->dmPelsHeight; monitors.Flags = 0; SendDlgItemMessage(hwndDlg, IDC_SETTINGS_MONSEL, @@ -342,8 +342,8 @@ OnInitDialog(IN HWND hwndDlg) PMONSL_MONINFO pMonitors; DWORD i; - SendDlgItemMessage(hwndDlg, IDC_SETTINGS_DEVICE, WM_SETTEXT, 0, (LPARAM)pGlobalData->DisplayDeviceList->DeviceDescription); - OnDisplayDeviceChanged(hwndDlg, pGlobalData, pGlobalData->DisplayDeviceList); + SendDlgItemMessage(hwndDlg, IDC_SETTINGS_DEVICE, WM_SETTEXT, 0, (LPARAM)pData->DisplayDeviceList->DeviceDescription); + OnDisplayDeviceChanged(hwndDlg, pData, pData->DisplayDeviceList); pMonitors = (PMONSL_MONINFO)HeapAlloc(GetProcessHeap(), 0, sizeof(MONSL_MONINFO) * Result); if (pMonitors) @@ -353,8 +353,8 @@ OnInitDialog(IN HWND hwndDlg) { pMonitors[i].Position.x = hack * i; pMonitors[i].Position.y = 0; - pMonitors[i].Size.cx = pGlobalData->DisplayDeviceList->CurrentSettings->dmPelsWidth; - pMonitors[i].Size.cy = pGlobalData->DisplayDeviceList->CurrentSettings->dmPelsHeight; + pMonitors[i].Size.cx = pData->DisplayDeviceList->CurrentSettings->dmPelsWidth; + pMonitors[i].Size.cy = pData->DisplayDeviceList->CurrentSettings->dmPelsHeight; pMonitors[i].Flags = 0; } @@ -371,27 +371,27 @@ OnInitDialog(IN HWND hwndDlg) /* Initialize the color spectrum bitmaps */ for(i = 0; i < NUM_SPECTRUM_BITMAPS; i++) { - pGlobalData->hSpectrumBitmaps[i] = LoadImageW(hApplet, MAKEINTRESOURCEW(IDB_SPECTRUM_4 + i), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR); + pData->hSpectrumBitmaps[i] = LoadImageW(hApplet, MAKEINTRESOURCEW(IDB_SPECTRUM_4 + i), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR); - if (pGlobalData->hSpectrumBitmaps[i] != NULL) + if (pData->hSpectrumBitmaps[i] != NULL) { - if (GetObjectW(pGlobalData->hSpectrumBitmaps[i], sizeof(BITMAP), &bitmap) != 0) + if (GetObjectW(pData->hSpectrumBitmaps[i], sizeof(BITMAP), &bitmap) != 0) { - pGlobalData->cxSource[i] = bitmap.bmWidth; - pGlobalData->cySource[i] = bitmap.bmHeight; + pData->cxSource[i] = bitmap.bmWidth; + pData->cySource[i] = bitmap.bmHeight; } else { - pGlobalData->cxSource[i] = 0; - pGlobalData->cySource[i] = 0; + pData->cxSource[i] = 0; + pData->cySource[i] = 0; } } } } -/* Get the ID for GLOBAL_DATA::hSpectrumBitmaps */ +/* Get the ID for DATA::hSpectrumBitmaps */ static VOID -ShowColorSpectrum(IN HDC hDC, IN LPRECT client, IN DWORD BitsPerPel, IN PGLOBAL_DATA pGlobalData) +ShowColorSpectrum(IN HDC hDC, IN LPRECT client, IN DWORD BitsPerPel, IN PDATA pData) { HDC hdcMem; INT iBitmap; @@ -408,22 +408,22 @@ ShowColorSpectrum(IN HDC hDC, IN LPRECT client, IN DWORD BitsPerPel, IN PGLOBAL_ default: iBitmap = 2; } - if (SelectObject(hdcMem, pGlobalData->hSpectrumBitmaps[iBitmap])) + if (SelectObject(hdcMem, pData->hSpectrumBitmaps[iBitmap])) { StretchBlt(hDC, client->left, client->top, client->right - client->left, client->bottom - client->top, hdcMem, 0, 0, - pGlobalData->cxSource[iBitmap], - pGlobalData->cySource[iBitmap], SRCCOPY); + pData->cxSource[iBitmap], + pData->cySource[iBitmap], SRCCOPY); } DeleteDC(hdcMem); } static VOID -OnBPPChanged(IN HWND hwndDlg, IN PGLOBAL_DATA pGlobalData) +OnBPPChanged(IN HWND hwndDlg, IN PDATA pData) { /* if new BPP is not compatible with resolution: * 1) try to find the nearest smaller matching resolution @@ -443,10 +443,10 @@ OnBPPChanged(IN HWND hwndDlg, IN PGLOBAL_DATA pGlobalData) hSpectrumControl = GetDlgItem(hwndDlg, IDC_SETTINGS_SPECTRUM); hSpectrumDC = GetDC(hSpectrumControl); GetClientRect(hSpectrumControl, &client); - ShowColorSpectrum(hSpectrumDC, &client, dmNewBitsPerPel, pGlobalData); + ShowColorSpectrum(hSpectrumDC, &client, dmNewBitsPerPel, pData); /* find if new parameters are valid */ - Current = pGlobalData->CurrentDisplayDevice->CurrentSettings; + Current = pData->CurrentDisplayDevice->CurrentSettings; if (dmNewBitsPerPel == Current->dmBitsPerPel) { /* no change */ @@ -461,11 +461,11 @@ OnBPPChanged(IN HWND hwndDlg, IN PGLOBAL_DATA pGlobalData) while (Current != NULL) { if (Current->dmBitsPerPel == dmNewBitsPerPel - && Current->dmPelsHeight == pGlobalData->CurrentDisplayDevice->CurrentSettings->dmPelsHeight - && Current->dmPelsWidth == pGlobalData->CurrentDisplayDevice->CurrentSettings->dmPelsWidth) + && Current->dmPelsHeight == pData->CurrentDisplayDevice->CurrentSettings->dmPelsHeight + && Current->dmPelsWidth == pData->CurrentDisplayDevice->CurrentSettings->dmPelsWidth) { - pGlobalData->CurrentDisplayDevice->CurrentSettings = Current; - UpdateDisplay(hwndDlg, pGlobalData, TRUE); + pData->CurrentDisplayDevice->CurrentSettings = Current; + UpdateDisplay(hwndDlg, pData, TRUE); return; } Current = Current->Blink; @@ -477,11 +477,11 @@ OnBPPChanged(IN HWND hwndDlg, IN PGLOBAL_DATA pGlobalData) while (Current != NULL) { if (Current->dmBitsPerPel == dmNewBitsPerPel - && Current->dmPelsHeight == pGlobalData->CurrentDisplayDevice->CurrentSettings->dmPelsHeight - && Current->dmPelsWidth == pGlobalData->CurrentDisplayDevice->CurrentSettings->dmPelsWidth) + && Current->dmPelsHeight == pData->CurrentDisplayDevice->CurrentSettings->dmPelsHeight + && Current->dmPelsWidth == pData->CurrentDisplayDevice->CurrentSettings->dmPelsWidth) { - pGlobalData->CurrentDisplayDevice->CurrentSettings = Current; - UpdateDisplay(hwndDlg, pGlobalData, TRUE); + pData->CurrentDisplayDevice->CurrentSettings = Current; + UpdateDisplay(hwndDlg, pData, TRUE); return; } Current = Current->Flink; @@ -489,26 +489,26 @@ OnBPPChanged(IN HWND hwndDlg, IN PGLOBAL_DATA pGlobalData) } /* search smaller resolution compatible with current color depth */ - Current = pGlobalData->CurrentDisplayDevice->CurrentSettings->Blink; + Current = pData->CurrentDisplayDevice->CurrentSettings->Blink; while (Current != NULL) { if (Current->dmBitsPerPel == dmNewBitsPerPel) { - pGlobalData->CurrentDisplayDevice->CurrentSettings = Current; - UpdateDisplay(hwndDlg, pGlobalData, TRUE); + pData->CurrentDisplayDevice->CurrentSettings = Current; + UpdateDisplay(hwndDlg, pData, TRUE); return; } Current = Current->Blink; } /* search bigger resolution compatible with current color depth */ - Current = pGlobalData->CurrentDisplayDevice->CurrentSettings->Flink; + Current = pData->CurrentDisplayDevice->CurrentSettings->Flink; while (Current != NULL) { if (Current->dmBitsPerPel == dmNewBitsPerPel) { - pGlobalData->CurrentDisplayDevice->CurrentSettings = Current; - UpdateDisplay(hwndDlg, pGlobalData, TRUE); + pData->CurrentDisplayDevice->CurrentSettings = Current; + UpdateDisplay(hwndDlg, pData, TRUE); return; } Current = Current->Flink; @@ -518,7 +518,7 @@ OnBPPChanged(IN HWND hwndDlg, IN PGLOBAL_DATA pGlobalData) } static VOID -OnResolutionChanged(IN HWND hwndDlg, IN PGLOBAL_DATA pGlobalData, IN DWORD NewPosition, +OnResolutionChanged(IN HWND hwndDlg, IN PDATA pData, IN DWORD NewPosition, IN BOOL bUpdateThumb) { /* if new resolution is not compatible with color depth: @@ -526,11 +526,11 @@ OnResolutionChanged(IN HWND hwndDlg, IN PGLOBAL_DATA pGlobalData, IN DWORD NewPo * 2) otherwise, get the nearest smaller color depth */ PSETTINGS_ENTRY Current; - DWORD dmNewPelsHeight = pGlobalData->CurrentDisplayDevice->Resolutions[NewPosition].dmPelsHeight; - DWORD dmNewPelsWidth = pGlobalData->CurrentDisplayDevice->Resolutions[NewPosition].dmPelsWidth; + DWORD dmNewPelsHeight = pData->CurrentDisplayDevice->Resolutions[NewPosition].dmPelsHeight; + DWORD dmNewPelsWidth = pData->CurrentDisplayDevice->Resolutions[NewPosition].dmPelsWidth; /* find if new parameters are valid */ - Current = pGlobalData->CurrentDisplayDevice->CurrentSettings; + Current = pData->CurrentDisplayDevice->CurrentSettings; if (dmNewPelsHeight == Current->dmPelsHeight && dmNewPelsWidth == Current->dmPelsWidth) { /* no change */ @@ -546,10 +546,10 @@ OnResolutionChanged(IN HWND hwndDlg, IN PGLOBAL_DATA pGlobalData, IN DWORD NewPo { if (Current->dmPelsHeight == dmNewPelsHeight && Current->dmPelsWidth == dmNewPelsWidth - && Current->dmBitsPerPel == pGlobalData->CurrentDisplayDevice->CurrentSettings->dmBitsPerPel) + && Current->dmBitsPerPel == pData->CurrentDisplayDevice->CurrentSettings->dmBitsPerPel) { - pGlobalData->CurrentDisplayDevice->CurrentSettings = Current; - UpdateDisplay(hwndDlg, pGlobalData, bUpdateThumb); + pData->CurrentDisplayDevice->CurrentSettings = Current; + UpdateDisplay(hwndDlg, pData, bUpdateThumb); return; } Current = Current->Blink; @@ -562,10 +562,10 @@ OnResolutionChanged(IN HWND hwndDlg, IN PGLOBAL_DATA pGlobalData, IN DWORD NewPo { if (Current->dmPelsHeight == dmNewPelsHeight && Current->dmPelsWidth == dmNewPelsWidth - && Current->dmBitsPerPel == pGlobalData->CurrentDisplayDevice->CurrentSettings->dmBitsPerPel) + && Current->dmBitsPerPel == pData->CurrentDisplayDevice->CurrentSettings->dmBitsPerPel) { - pGlobalData->CurrentDisplayDevice->CurrentSettings = Current; - UpdateDisplay(hwndDlg, pGlobalData, bUpdateThumb); + pData->CurrentDisplayDevice->CurrentSettings = Current; + UpdateDisplay(hwndDlg, pData, bUpdateThumb); return; } Current = Current->Flink; @@ -573,26 +573,26 @@ OnResolutionChanged(IN HWND hwndDlg, IN PGLOBAL_DATA pGlobalData, IN DWORD NewPo } /* search bigger color depth compatible with current resolution */ - Current = pGlobalData->CurrentDisplayDevice->CurrentSettings->Flink; + Current = pData->CurrentDisplayDevice->CurrentSettings->Flink; while (Current != NULL) { if (dmNewPelsHeight == Current->dmPelsHeight && dmNewPelsWidth == Current->dmPelsWidth) { - pGlobalData->CurrentDisplayDevice->CurrentSettings = Current; - UpdateDisplay(hwndDlg, pGlobalData, bUpdateThumb); + pData->CurrentDisplayDevice->CurrentSettings = Current; + UpdateDisplay(hwndDlg, pData, bUpdateThumb); return; } Current = Current->Flink; } /* search smaller color depth compatible with current resolution */ - Current = pGlobalData->CurrentDisplayDevice->CurrentSettings->Blink; + Current = pData->CurrentDisplayDevice->CurrentSettings->Blink; while (Current != NULL) { if (dmNewPelsHeight == Current->dmPelsHeight && dmNewPelsWidth == Current->dmPelsWidth) { - pGlobalData->CurrentDisplayDevice->CurrentSettings = Current; - UpdateDisplay(hwndDlg, pGlobalData, bUpdateThumb); + pData->CurrentDisplayDevice->CurrentSettings = Current; + UpdateDisplay(hwndDlg, pData, bUpdateThumb); return; } Current = Current->Blink; @@ -625,10 +625,10 @@ SettingsPageCallbackProc(HWND hwnd, UINT uMsg, LPPROPSHEETPAGE ppsp) INT_PTR CALLBACK SettingsPageProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam) { - PGLOBAL_DATA pGlobalData; + PDATA pData; TCHAR Message[1024], Title[256]; - pGlobalData = (PGLOBAL_DATA)GetWindowLongPtr(hwndDlg, DWLP_USER); + pData = (PDATA)GetWindowLongPtr(hwndDlg, DWLP_USER); switch(uMsg) { @@ -643,7 +643,7 @@ SettingsPageProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lPar lpDrawItem = (LPDRAWITEMSTRUCT) lParam; if (lpDrawItem->CtlID == IDC_SETTINGS_SPECTRUM) - ShowColorSpectrum(lpDrawItem->hDC, &lpDrawItem->rcItem, pGlobalData->CurrentDisplayDevice->CurrentSettings->dmBitsPerPel, pGlobalData); + ShowColorSpectrum(lpDrawItem->hDC, &lpDrawItem->rcItem, pData->CurrentDisplayDevice->CurrentSettings->dmBitsPerPel, pData); break; } case WM_COMMAND: @@ -652,9 +652,9 @@ SettingsPageProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lPar DWORD command = HIWORD(wParam); if (controlId == IDC_SETTINGS_ADVANCED && command == BN_CLICKED) - DisplayAdvancedSettings(hwndDlg, pGlobalData->CurrentDisplayDevice); + DisplayAdvancedSettings(hwndDlg, pData->CurrentDisplayDevice); else if (controlId == IDC_SETTINGS_BPP && command == CBN_SELCHANGE) - OnBPPChanged(hwndDlg, pGlobalData); + OnBPPChanged(hwndDlg, pData); break; } case WM_HSCROLL: @@ -670,12 +670,12 @@ SettingsPageProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lPar case TB_ENDTRACK: { DWORD newPosition = (DWORD) SendDlgItemMessage(hwndDlg, IDC_SETTINGS_RESOLUTION, TBM_GETPOS, 0, 0); - OnResolutionChanged(hwndDlg, pGlobalData, newPosition, TRUE); + OnResolutionChanged(hwndDlg, pData, newPosition, TRUE); break; } case TB_THUMBTRACK: - OnResolutionChanged(hwndDlg, pGlobalData, HIWORD(wParam), FALSE); + OnResolutionChanged(hwndDlg, pData, HIWORD(wParam), FALSE); break; } break; @@ -685,9 +685,9 @@ SettingsPageProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lPar LPNMHDR lpnm = (LPNMHDR)lParam; if (lpnm->code == (UINT)PSN_APPLY) { - if (pGlobalData->CurrentDisplayDevice->CurrentSettings->dmPelsWidth != pGlobalData->CurrentDisplayDevice->InitialSettings.dmPelsWidth - || pGlobalData->CurrentDisplayDevice->CurrentSettings->dmPelsHeight != pGlobalData->CurrentDisplayDevice->InitialSettings.dmPelsHeight - || pGlobalData->CurrentDisplayDevice->CurrentSettings->dmBitsPerPel != pGlobalData->CurrentDisplayDevice->InitialSettings.dmBitsPerPel) + if (pData->CurrentDisplayDevice->CurrentSettings->dmPelsWidth != pData->CurrentDisplayDevice->InitialSettings.dmPelsWidth + || pData->CurrentDisplayDevice->CurrentSettings->dmPelsHeight != pData->CurrentDisplayDevice->InitialSettings.dmPelsHeight + || pData->CurrentDisplayDevice->CurrentSettings->dmBitsPerPel != pData->CurrentDisplayDevice->InitialSettings.dmBitsPerPel) { /* FIXME: Need to test changes */ /* Apply new settings */ @@ -695,13 +695,13 @@ SettingsPageProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lPar DEVMODE devmode; RtlZeroMemory(&devmode, sizeof(DEVMODE)); devmode.dmSize = (WORD)sizeof(DEVMODE); - devmode.dmPelsWidth = pGlobalData->CurrentDisplayDevice->CurrentSettings->dmPelsWidth; - devmode.dmPelsHeight = pGlobalData->CurrentDisplayDevice->CurrentSettings->dmPelsHeight; - devmode.dmBitsPerPel = pGlobalData->CurrentDisplayDevice->CurrentSettings->dmBitsPerPel; - devmode.dmDisplayFrequency = pGlobalData->CurrentDisplayDevice->CurrentSettings->dmDisplayFrequency; + devmode.dmPelsWidth = pData->CurrentDisplayDevice->CurrentSettings->dmPelsWidth; + devmode.dmPelsHeight = pData->CurrentDisplayDevice->CurrentSettings->dmPelsHeight; + devmode.dmBitsPerPel = pData->CurrentDisplayDevice->CurrentSettings->dmBitsPerPel; + devmode.dmDisplayFrequency = pData->CurrentDisplayDevice->CurrentSettings->dmDisplayFrequency; devmode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT | DM_BITSPERPEL | DM_DISPLAYFREQUENCY; rc = ChangeDisplaySettingsEx( - pGlobalData->CurrentDisplayDevice->DeviceName, + pData->CurrentDisplayDevice->DeviceName, &devmode, NULL, CDS_UPDATEREGISTRY, @@ -709,9 +709,9 @@ SettingsPageProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lPar switch (rc) { case DISP_CHANGE_SUCCESSFUL: - pGlobalData->CurrentDisplayDevice->InitialSettings.dmPelsWidth = pGlobalData->CurrentDisplayDevice->CurrentSettings->dmPelsWidth; - pGlobalData->CurrentDisplayDevice->InitialSettings.dmPelsHeight = pGlobalData->CurrentDisplayDevice->CurrentSettings->dmPelsHeight; - pGlobalData->CurrentDisplayDevice->InitialSettings.dmBitsPerPel = pGlobalData->CurrentDisplayDevice->CurrentSettings->dmBitsPerPel; + pData->CurrentDisplayDevice->InitialSettings.dmPelsWidth = pData->CurrentDisplayDevice->CurrentSettings->dmPelsWidth; + pData->CurrentDisplayDevice->InitialSettings.dmPelsHeight = pData->CurrentDisplayDevice->CurrentSettings->dmPelsHeight; + pData->CurrentDisplayDevice->InitialSettings.dmBitsPerPel = pData->CurrentDisplayDevice->CurrentSettings->dmBitsPerPel; break; case DISP_CHANGE_RESTART: LoadString(hApplet, IDS_DISPLAY_SETTINGS, Title, sizeof(Title) / sizeof(TCHAR)); @@ -833,7 +833,7 @@ SettingsPageProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lPar case WM_DESTROY: { DWORD i; - PDISPLAY_DEVICE_ENTRY Current = pGlobalData->DisplayDeviceList; + PDISPLAY_DEVICE_ENTRY Current = pData->DisplayDeviceList; while (Current != NULL) { @@ -851,11 +851,11 @@ SettingsPageProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lPar for (i = 0; i < NUM_SPECTRUM_BITMAPS; i++) { - if (pGlobalData->hSpectrumBitmaps[i]) - DeleteObject(pGlobalData->hSpectrumBitmaps[i]); + if (pData->hSpectrumBitmaps[i]) + DeleteObject(pData->hSpectrumBitmaps[i]); } - HeapFree(GetProcessHeap(), 0, pGlobalData); + HeapFree(GetProcessHeap(), 0, pData); } } return FALSE; diff --git a/dll/cpl/desk/theme.c b/dll/cpl/desk/theme.c index 511d2f826b4..04cebd51b73 100644 --- a/dll/cpl/desk/theme.c +++ b/dll/cpl/desk/theme.c @@ -124,8 +124,7 @@ VOID LoadCurrentTheme(THEME* theme) theme->Effects.bTooltipFade = theme->Effects.bMenuFade; /* show content of windows during dragging */ - //SystemParametersInfo(SPI_SETDRAGFULLWINDOWS, theme->Effects.bDragFullWindows, NULL, SPIF_SENDCHANGE | SPIF_UPDATEINIFILE); - SystemParametersInfoW(SPI_GETDRAGFULLWINDOWS, 0, &theme->Effects.bDragFullWindows, 0); + SystemParametersInfo(SPI_GETDRAGFULLWINDOWS, 0, &theme->Effects.bDragFullWindows, 0); /* "Hide underlined letters for keyboard navigation until I press the Alt key" */ SystemParametersInfo(SPI_GETKEYBOARDCUES, 0, &theme->Effects.bKeyboardCues, 0); @@ -307,7 +306,7 @@ VOID ApplyTheme(THEME* theme, INT ThemeId) */ theme->Effects.bTooltipAnimation = theme->Effects.bMenuAnimation; theme->Effects.bTooltipFade = theme->Effects.bMenuFade; - SystemParametersInfo(SPI_SETDRAGFULLWINDOWS, theme->Effects.bDragFullWindows, NULL, SPIF_UPDATEINIFILE|SPIF_SENDCHANGE); + SystemParametersInfo(SPI_SETDRAGFULLWINDOWS, theme->Effects.bDragFullWindows, (PVOID)&theme->Effects.bDragFullWindows, SPIF_SENDCHANGE | SPIF_UPDATEINIFILE); UPDATE_USERPREF(KEYBOARDCUES, &theme->Effects.bKeyboardCues); //UPDATE_USERPREF(ACTIVEWINDOWTRACKING, &theme->Effects.bActiveWindowTracking); //UPDATE_USERPREF(MENUANIMATION, &theme->Effects.bMenuAnimation); diff --git a/dll/ntdll/ldr/utils.c b/dll/ntdll/ldr/utils.c index 14512194832..fcbd21f800d 100644 --- a/dll/ntdll/ldr/utils.c +++ b/dll/ntdll/ldr/utils.c @@ -88,10 +88,10 @@ static __inline LONG LdrpDecrementLoadCount(PLDR_DATA_TABLE_ENTRY Module, BOOLEA RtlEnterCriticalSection (NtCurrentPeb()->LoaderLock); } LoadCount = Module->LoadCount; - if (Module->LoadCount > 0 && Module->LoadCount != LDRP_PROCESS_CREATION_TIME) - { + if (Module->LoadCount > 0 && Module->LoadCount != LDRP_PROCESS_CREATION_TIME) + { Module->LoadCount--; - } + } if (!Locked) { RtlLeaveCriticalSection(NtCurrentPeb()->LoaderLock); @@ -107,10 +107,10 @@ static __inline LONG LdrpIncrementLoadCount(PLDR_DATA_TABLE_ENTRY Module, BOOLEA RtlEnterCriticalSection (NtCurrentPeb()->LoaderLock); } LoadCount = Module->LoadCount; - if (Module->LoadCount != LDRP_PROCESS_CREATION_TIME) - { + if (Module->LoadCount != LDRP_PROCESS_CREATION_TIME) + { Module->LoadCount++; - } + } if (!Locked) { RtlLeaveCriticalSection(NtCurrentPeb()->LoaderLock); @@ -1388,7 +1388,7 @@ LdrPerformRelocations(PIMAGE_NT_HEADERS NTHeaders, ULONG Count, ProtectSize, OldProtect, OldProtect2; PVOID Page, ProtectPage, ProtectPage2; PUSHORT TypeOffset; - ULONG_PTR Delta; + LONG_PTR Delta; NTSTATUS Status; if (NTHeaders->FileHeader.Characteristics & IMAGE_FILE_RELOCS_STRIPPED) @@ -3464,54 +3464,15 @@ LdrQueryImageFileExecutionOptions (IN PUNICODE_STRING SubKey, } -PIMAGE_BASE_RELOCATION NTAPI -LdrProcessRelocationBlock(IN ULONG_PTR Address, - IN ULONG Count, - IN PUSHORT TypeOffset, - IN LONG_PTR Delta) +PIMAGE_BASE_RELOCATION +NTAPI +LdrProcessRelocationBlock( + IN ULONG_PTR Address, + IN ULONG Count, + IN PUSHORT TypeOffset, + IN LONG_PTR Delta) { - SHORT Offset; - USHORT Type; - USHORT i; - PUSHORT ShortPtr; - PULONG LongPtr; - - for (i = 0; i < Count; i++) - { - Offset = *TypeOffset & 0xFFF; - Type = *TypeOffset >> 12; - - switch (Type) - { - case IMAGE_REL_BASED_ABSOLUTE: - break; - - case IMAGE_REL_BASED_HIGH: - ShortPtr = (PUSHORT)((ULONG_PTR)Address + Offset); - *ShortPtr += HIWORD(Delta); - break; - - case IMAGE_REL_BASED_LOW: - ShortPtr = (PUSHORT)((ULONG_PTR)Address + Offset); - *ShortPtr += LOWORD(Delta); - break; - - case IMAGE_REL_BASED_HIGHLOW: - LongPtr = (PULONG)((ULONG_PTR)Address + Offset); - *LongPtr += Delta; - break; - - case IMAGE_REL_BASED_HIGHADJ: - case IMAGE_REL_BASED_MIPS_JMPADDR: - default: - DPRINT1("Unknown/unsupported fixup type %hu.\n", Type); - return NULL; - } - - TypeOffset++; - } - - return (PIMAGE_BASE_RELOCATION)TypeOffset; + return LdrProcessRelocationBlockLongLong(Address, Count, TypeOffset, Delta); } NTSTATUS diff --git a/dll/win32/advapi32/sec/misc.c b/dll/win32/advapi32/sec/misc.c index 03c4587a65f..f03c1a0bb9c 100644 --- a/dll/win32/advapi32/sec/misc.c +++ b/dll/win32/advapi32/sec/misc.c @@ -16,123 +16,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(advapi); -/* Needed for LookupAccountNameW implementation from Wine */ - -typedef struct _AccountSid -{ - WELL_KNOWN_SID_TYPE type; - LPCWSTR account; - LPCWSTR domain; - SID_NAME_USE name_use; -} AccountSid; - -static const WCHAR Account_Operators[] = { 'A','c','c','o','u','n','t',' ','O','p','e','r','a','t','o','r','s',0 }; -static const WCHAR Administrator[] = {'A','d','m','i','n','i','s','t','r','a','t','o','r',0 }; -static const WCHAR Administrators[] = { 'A','d','m','i','n','i','s','t','r','a','t','o','r','s',0 }; -static const WCHAR ANONYMOUS_LOGON[] = { 'A','N','O','N','Y','M','O','U','S',' ','L','O','G','O','N',0 }; -static const WCHAR Authenticated_Users[] = { 'A','u','t','h','e','n','t','i','c','a','t','e','d',' ','U','s','e','r','s',0 }; -static const WCHAR Backup_Operators[] = { 'B','a','c','k','u','p',' ','O','p','e','r','a','t','o','r','s',0 }; -static const WCHAR BATCH[] = { 'B','A','T','C','H',0 }; -static const WCHAR Blank[] = { 0 }; -static const WCHAR BUILTIN[] = { 'B','U','I','L','T','I','N',0 }; -static const WCHAR Cert_Publishers[] = { 'C','e','r','t',' ','P','u','b','l','i','s','h','e','r','s',0 }; -static const WCHAR CREATOR_GROUP[] = { 'C','R','E','A','T','O','R',' ','G','R','O','U','P',0 }; -static const WCHAR CREATOR_GROUP_SERVER[] = { 'C','R','E','A','T','O','R',' ','G','R','O','U','P',' ','S','E','R','V','E','R',0 }; -static const WCHAR CREATOR_OWNER[] = { 'C','R','E','A','T','O','R',' ','O','W','N','E','R',0 }; -static const WCHAR CREATOR_OWNER_SERVER[] = { 'C','R','E','A','T','O','R',' ','O','W','N','E','R',' ','S','E','R','V','E','R',0 }; -static const WCHAR DIALUP[] = { 'D','I','A','L','U','P',0 }; -static const WCHAR Digest_Authentication[] = { 'D','i','g','e','s','t',' ','A','u','t','h','e','n','t','i','c','a','t','i','o','n',0 }; -static const WCHAR DOMAIN[] = {'D','O','M','A','I','N',0}; -static const WCHAR Domain_Admins[] = { 'D','o','m','a','i','n',' ','A','d','m','i','n','s',0 }; -static const WCHAR Domain_Computers[] = { 'D','o','m','a','i','n',' ','C','o','m','p','u','t','e','r','s',0 }; -static const WCHAR Domain_Controllers[] = { 'D','o','m','a','i','n',' ','C','o','n','t','r','o','l','l','e','r','s',0 }; -static const WCHAR Domain_Guests[] = { 'D','o','m','a','i','n',' ','G','u','e','s','t','s',0 }; -static const WCHAR Domain_Users[] = { 'D','o','m','a','i','n',' ','U','s','e','r','s',0 }; -static const WCHAR Enterprise_Admins[] = { 'E','n','t','e','r','p','r','i','s','e',' ','A','d','m','i','n','s',0 }; -static const WCHAR ENTERPRISE_DOMAIN_CONTROLLERS[] = { 'E','N','T','E','R','P','R','I','S','E',' ','D','O','M','A','I','N',' ','C','O','N','T','R','O','L','L','E','R','S',0 }; -static const WCHAR Everyone[] = { 'E','v','e','r','y','o','n','e',0 }; -static const WCHAR Group_Policy_Creator_Owners[] = { 'G','r','o','u','p',' ','P','o','l','i','c','y',' ','C','r','e','a','t','o','r',' ','O','w','n','e','r','s',0 }; -static const WCHAR Guest[] = { 'G','u','e','s','t',0 }; -static const WCHAR Guests[] = { 'G','u','e','s','t','s',0 }; -static const WCHAR INTERACTIVE[] = { 'I','N','T','E','R','A','C','T','I','V','E',0 }; -static const WCHAR LOCAL[] = { 'L','O','C','A','L',0 }; -static const WCHAR LOCAL_SERVICE[] = { 'L','O','C','A','L',' ','S','E','R','V','I','C','E',0 }; -static const WCHAR NETWORK[] = { 'N','E','T','W','O','R','K',0 }; -static const WCHAR Network_Configuration_Operators[] = { 'N','e','t','w','o','r','k',' ','C','o','n','f','i','g','u','r','a','t','i','o','n',' ','O','p','e','r','a','t','o','r','s',0 }; -static const WCHAR NETWORK_SERVICE[] = { 'N','E','T','W','O','R','K',' ','S','E','R','V','I','C','E',0 }; -static const WCHAR NT_AUTHORITY[] = { 'N','T',' ','A','U','T','H','O','R','I','T','Y',0 }; -static const WCHAR NT_Pseudo_Domain[] = { 'N','T',' ','P','s','e','u','d','o',' ','D','o','m','a','i','n',0 }; -static const WCHAR NTML_Authentication[] = { 'N','T','M','L',' ','A','u','t','h','e','n','t','i','c','a','t','i','o','n',0 }; -static const WCHAR NULL_SID[] = { 'N','U','L','L',' ','S','I','D',0 }; -static const WCHAR Other_Organization[] = { 'O','t','h','e','r',' ','O','r','g','a','n','i','z','a','t','i','o','n',0 }; -static const WCHAR Performance_Log_Users[] = { 'P','e','r','f','o','r','m','a','n','c','e',' ','L','o','g',' ','U','s','e','r','s',0 }; -static const WCHAR Performance_Monitor_Users[] = { 'P','e','r','f','o','r','m','a','n','c','e',' ','M','o','n','i','t','o','r',' ','U','s','e','r','s',0 }; -static const WCHAR Power_Users[] = { 'P','o','w','e','r',' ','U','s','e','r','s',0 }; -static const WCHAR Pre_Windows_2000_Compatible_Access[] = { 'P','r','e','-','W','i','n','d','o','w','s',' ','2','0','0','0',' ','C','o','m','p','a','t','i','b','l','e',' ','A','c','c','e','s','s',0 }; -static const WCHAR Print_Operators[] = { 'P','r','i','n','t',' ','O','p','e','r','a','t','o','r','s',0 }; -static const WCHAR PROXY[] = { 'P','R','O','X','Y',0 }; -static const WCHAR RAS_and_IAS_Servers[] = { 'R','A','S',' ','a','n','d',' ','I','A','S',' ','S','e','r','v','e','r','s',0 }; -static const WCHAR Remote_Desktop_Users[] = { 'R','e','m','o','t','e',' ','D','e','s','k','t','o','p',' ','U','s','e','r','s',0 }; -static const WCHAR REMOTE_INTERACTIVE_LOGON[] = { 'R','E','M','O','T','E',' ','I','N','T','E','R','A','C','T','I','V','E',' ','L','O','G','O','N',0 }; -static const WCHAR Replicators[] = { 'R','e','p','l','i','c','a','t','o','r','s',0 }; -static const WCHAR RESTRICTED[] = { 'R','E','S','T','R','I','C','T','E','D',0 }; -static const WCHAR SChannel_Authentication[] = { 'S','C','h','a','n','n','e','l',' ','A','u','t','h','e','n','t','i','c','a','t','i','o','n',0 }; -static const WCHAR Schema_Admins[] = { 'S','c','h','e','m','a',' ','A','d','m','i','n','s',0 }; -static const WCHAR SELF[] = { 'S','E','L','F',0 }; -static const WCHAR Server_Operators[] = { 'S','e','r','v','e','r',' ','O','p','e','r','a','t','o','r','s',0 }; -static const WCHAR SERVICE[] = { 'S','E','R','V','I','C','E',0 }; -static const WCHAR SYSTEM[] = { 'S','Y','S','T','E','M',0 }; -static const WCHAR TERMINAL_SERVER_USER[] = { 'T','E','R','M','I','N','A','L',' ','S','E','R','V','E','R',' ','U','S','E','R',0 }; -static const WCHAR This_Organization[] = { 'T','h','i','s',' ','O','r','g','a','n','i','z','a','t','i','o','n',0 }; -static const WCHAR Users[] = { 'U','s','e','r','s',0 }; - -static const AccountSid ACCOUNT_SIDS[] = { - { WinNullSid, NULL_SID, Blank, SidTypeWellKnownGroup }, - { WinWorldSid, Everyone, Blank, SidTypeWellKnownGroup }, - { WinLocalSid, LOCAL, Blank, SidTypeWellKnownGroup }, - { WinCreatorOwnerSid, CREATOR_OWNER, Blank, SidTypeWellKnownGroup }, - { WinCreatorGroupSid, CREATOR_GROUP, Blank, SidTypeWellKnownGroup }, - { WinCreatorOwnerServerSid, CREATOR_OWNER_SERVER, Blank, SidTypeWellKnownGroup }, - { WinCreatorGroupServerSid, CREATOR_GROUP_SERVER, Blank, SidTypeWellKnownGroup }, - { WinNtAuthoritySid, NT_Pseudo_Domain, NT_Pseudo_Domain, SidTypeDomain }, - { WinDialupSid, DIALUP, NT_AUTHORITY, SidTypeWellKnownGroup }, - { WinNetworkSid, NETWORK, NT_AUTHORITY, SidTypeWellKnownGroup }, - { WinBatchSid, BATCH, NT_AUTHORITY, SidTypeWellKnownGroup }, - { WinInteractiveSid, INTERACTIVE, NT_AUTHORITY, SidTypeWellKnownGroup }, - { WinServiceSid, SERVICE, NT_AUTHORITY, SidTypeWellKnownGroup }, - { WinAnonymousSid, ANONYMOUS_LOGON, NT_AUTHORITY, SidTypeWellKnownGroup }, - { WinProxySid, PROXY, NT_AUTHORITY, SidTypeWellKnownGroup }, - { WinEnterpriseControllersSid, ENTERPRISE_DOMAIN_CONTROLLERS, NT_AUTHORITY, SidTypeWellKnownGroup }, - { WinSelfSid, SELF, NT_AUTHORITY, SidTypeWellKnownGroup }, - { WinAuthenticatedUserSid, Authenticated_Users, NT_AUTHORITY, SidTypeWellKnownGroup }, - { WinRestrictedCodeSid, RESTRICTED, NT_AUTHORITY, SidTypeWellKnownGroup }, - { WinTerminalServerSid, TERMINAL_SERVER_USER, NT_AUTHORITY, SidTypeWellKnownGroup }, - { WinRemoteLogonIdSid, REMOTE_INTERACTIVE_LOGON, NT_AUTHORITY, SidTypeWellKnownGroup }, - { WinLocalSystemSid, SYSTEM, NT_AUTHORITY, SidTypeWellKnownGroup }, - { WinLocalServiceSid, LOCAL_SERVICE, NT_AUTHORITY, SidTypeWellKnownGroup }, - { WinNetworkServiceSid, NETWORK_SERVICE, NT_AUTHORITY, SidTypeWellKnownGroup }, - { WinBuiltinDomainSid, BUILTIN, BUILTIN, SidTypeDomain }, - { WinBuiltinAdministratorsSid, Administrators, BUILTIN, SidTypeAlias }, - { WinBuiltinUsersSid, Users, BUILTIN, SidTypeAlias }, - { WinBuiltinGuestsSid, Guests, BUILTIN, SidTypeAlias }, - { WinBuiltinPowerUsersSid, Power_Users, BUILTIN, SidTypeAlias }, - { WinBuiltinAccountOperatorsSid, Account_Operators, BUILTIN, SidTypeAlias }, - { WinBuiltinSystemOperatorsSid, Server_Operators, BUILTIN, SidTypeAlias }, - { WinBuiltinPrintOperatorsSid, Print_Operators, BUILTIN, SidTypeAlias }, - { WinBuiltinBackupOperatorsSid, Backup_Operators, BUILTIN, SidTypeAlias }, - { WinBuiltinReplicatorSid, Replicators, BUILTIN, SidTypeAlias }, - { WinBuiltinPreWindows2000CompatibleAccessSid, Pre_Windows_2000_Compatible_Access, BUILTIN, SidTypeAlias }, - { WinBuiltinRemoteDesktopUsersSid, Remote_Desktop_Users, BUILTIN, SidTypeAlias }, - { WinBuiltinNetworkConfigurationOperatorsSid, Network_Configuration_Operators, BUILTIN, SidTypeAlias }, - { WinNTLMAuthenticationSid, NTML_Authentication, NT_AUTHORITY, SidTypeWellKnownGroup }, - { WinDigestAuthenticationSid, Digest_Authentication, NT_AUTHORITY, SidTypeWellKnownGroup }, - { WinSChannelAuthenticationSid, SChannel_Authentication, NT_AUTHORITY, SidTypeWellKnownGroup }, - { WinThisOrganizationSid, This_Organization, NT_AUTHORITY, SidTypeWellKnownGroup }, - { WinOtherOrganizationSid, Other_Organization, NT_AUTHORITY, SidTypeWellKnownGroup }, - { WinBuiltinPerfMonitoringUsersSid, Performance_Monitor_Users, BUILTIN, SidTypeAlias }, - { WinBuiltinPerfLoggingUsersSid, Performance_Log_Users, BUILTIN, SidTypeAlias }, -}; - /* Interface to ntmarta.dll ***************************************************/ diff --git a/dll/win32/atl/atl_main.c b/dll/win32/atl/atl_main.c index 696f7ef4c4d..f708d1c433b 100644 --- a/dll/win32/atl/atl_main.c +++ b/dll/win32/atl/atl_main.c @@ -259,7 +259,7 @@ HRESULT WINAPI AtlInternalQueryInterface(void* this, const _ATL_INTMAP_ENTRY* pE TRACE("Trying entry %i (%s %i %p)\n",i,debugstr_guid(pEntries[i].piid), pEntries[i].dw, pEntries[i].pFunc); - if (pEntries[i].piid && IsEqualGUID(iid,pEntries[i].piid)) + if (!pEntries[i].piid || IsEqualGUID(iid,pEntries[i].piid)) { TRACE("MATCH\n"); if (pEntries[i].pFunc == (_ATL_CREATORARGFUNC*)1) @@ -267,14 +267,15 @@ HRESULT WINAPI AtlInternalQueryInterface(void* this, const _ATL_INTMAP_ENTRY* pE TRACE("Offset\n"); *ppvObject = ((LPSTR)this+pEntries[i].dw); IUnknown_AddRef((IUnknown*)*ppvObject); - rc = S_OK; + return S_OK; } else { TRACE("Function\n"); rc = pEntries[i].pFunc(this, iid, ppvObject, pEntries[i].dw); + if(rc==S_OK || pEntries[i].piid) + return rc; } - break; } i++; } diff --git a/dll/win32/atl/atl_ros.diff b/dll/win32/atl/atl_ros.diff new file mode 100644 index 00000000000..d9d7f055629 --- /dev/null +++ b/dll/win32/atl/atl_ros.diff @@ -0,0 +1,13 @@ +Index: atl_main.c +=================================================================== +--- atl_main.c (revision 48273) ++++ atl_main.c (working copy) +@@ -60,7 +60,7 @@ + INT i; + UINT size; + +- FIXME("SEMI-STUB (%p %p %p)\n",pM,p,h); ++ //FIXME("SEMI-STUB (%p %p %p)\n",pM,p,h); + + size = pM->cbSize; + switch (size) diff --git a/dll/win32/avifil32/avifile_Cs.rc b/dll/win32/avifil32/avifile_Cs.rc index 180ac73838f..98301f11ad5 100644 --- a/dll/win32/avifil32/avifile_Cs.rc +++ b/dll/win32/avifil32/avifile_Cs.rc @@ -26,7 +26,7 @@ LANGUAGE LANG_CZECH, SUBLANG_DEFAULT /* Czech strings in CP1250 */ -IDD_SAVEOPTIONS DIALOG FIXED IMPURE 43, 37, 226, 82 +IDD_SAVEOPTIONS DIALOG 43, 37, 226, 82 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Nastaven komprese" FONT 8, "MS Shell Dlg" @@ -44,7 +44,7 @@ BEGIN PUSHBUTTON "Zruit",IDCANCEL,170,61,50,14 END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_WAVESTREAMFORMAT "Waveform: %s" IDS_WAVEFILETYPE "Waveform" diff --git a/dll/win32/avifil32/avifile_Da.rc b/dll/win32/avifil32/avifile_Da.rc index b8a5191242f..191e07e5093 100644 --- a/dll/win32/avifil32/avifile_Da.rc +++ b/dll/win32/avifil32/avifile_Da.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_DANISH, SUBLANG_DEFAULT -IDD_SAVEOPTIONS DIALOG FIXED IMPURE 43, 37, 226, 82 +IDD_SAVEOPTIONS DIALOG 43, 37, 226, 82 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Komprimerings indstillinger" FONT 8, "MS Shell Dlg" @@ -41,7 +41,7 @@ BEGIN PUSHBUTTON "Annuller",IDCANCEL,170,61,50,14 END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_WAVESTREAMFORMAT "Lydkurve: %s" IDS_WAVEFILETYPE "Lydkurve" diff --git a/dll/win32/avifil32/avifile_De.rc b/dll/win32/avifil32/avifile_De.rc index 0730046dc20..0448c9ea292 100644 --- a/dll/win32/avifil32/avifile_De.rc +++ b/dll/win32/avifil32/avifile_De.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL -IDD_SAVEOPTIONS DIALOG FIXED IMPURE 43, 37, 226, 82 +IDD_SAVEOPTIONS DIALOG 43, 37, 226, 82 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Komprimierungsoptionen" FONT 8, "MS Shell Dlg" @@ -40,7 +40,7 @@ BEGIN PUSHBUTTON "Abbrechen",IDCANCEL,170,61,50,14 END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_WAVESTREAMFORMAT "Waveform: %s" IDS_WAVEFILETYPE "Waveform" diff --git a/dll/win32/avifil32/avifile_En.rc b/dll/win32/avifil32/avifile_En.rc index e136569e044..98efdf7a3ba 100644 --- a/dll/win32/avifil32/avifile_En.rc +++ b/dll/win32/avifil32/avifile_En.rc @@ -20,7 +20,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT -IDD_SAVEOPTIONS DIALOG FIXED IMPURE 43, 37, 226, 82 +IDD_SAVEOPTIONS DIALOG 43, 37, 226, 82 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Compress options" FONT 8, "MS Shell Dlg" @@ -38,7 +38,7 @@ BEGIN PUSHBUTTON "Cancel",IDCANCEL,170,61,50,14 END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_WAVESTREAMFORMAT "Waveform: %s" IDS_WAVEFILETYPE "Waveform" diff --git a/dll/win32/avifil32/avifile_Es.rc b/dll/win32/avifil32/avifile_Es.rc index ddeee99f610..b62fe82c3bb 100644 --- a/dll/win32/avifil32/avifile_Es.rc +++ b/dll/win32/avifil32/avifile_Es.rc @@ -20,7 +20,7 @@ LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL -IDD_SAVEOPTIONS DIALOG FIXED IMPURE 43, 37, 226, 82 +IDD_SAVEOPTIONS DIALOG 43, 37, 226, 82 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Opciones de compresin" FONT 8, "MS Shell Dlg" @@ -38,7 +38,7 @@ BEGIN PUSHBUTTON "Cancelar",IDCANCEL,170,61,50,14 END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_WAVESTREAMFORMAT "Formato de ondas: %s" IDS_WAVEFILETYPE "Formato de ondas" diff --git a/dll/win32/avifil32/avifile_Fr.rc b/dll/win32/avifil32/avifile_Fr.rc index d313226b0a1..fc58730c486 100644 --- a/dll/win32/avifil32/avifile_Fr.rc +++ b/dll/win32/avifil32/avifile_Fr.rc @@ -27,7 +27,7 @@ LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL -IDD_SAVEOPTIONS DIALOG FIXED IMPURE 43, 37, 226, 82 +IDD_SAVEOPTIONS DIALOG 43, 37, 226, 82 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Options de compression" FONT 8, "MS Shell Dlg" @@ -45,7 +45,7 @@ BEGIN PUSHBUTTON "Annuler",IDCANCEL,170,61,50,14 END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_WAVESTREAMFORMAT "Waveform : %s" IDS_WAVEFILETYPE "Waveform" diff --git a/dll/win32/avifil32/avifile_Hu.rc b/dll/win32/avifil32/avifile_Hu.rc index 6c3e9c256ff..29652efa9b5 100644 --- a/dll/win32/avifil32/avifile_Hu.rc +++ b/dll/win32/avifil32/avifile_Hu.rc @@ -20,7 +20,7 @@ LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT -IDD_SAVEOPTIONS DIALOG FIXED IMPURE 43, 37, 226, 82 +IDD_SAVEOPTIONS DIALOG 43, 37, 226, 82 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Tmrtsi belltsok" FONT 8, "MS Shell Dlg" @@ -38,7 +38,7 @@ BEGIN PUSHBUTTON "Mgse",IDCANCEL,170,61,50,14 END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_WAVESTREAMFORMAT "Hullmforma: %s" IDS_WAVEFILETYPE "Hullmforma" diff --git a/dll/win32/avifil32/avifile_It.rc b/dll/win32/avifil32/avifile_It.rc index 314d34dc70b..9c4671cfb46 100644 --- a/dll/win32/avifil32/avifile_It.rc +++ b/dll/win32/avifil32/avifile_It.rc @@ -21,7 +21,7 @@ LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL -IDD_SAVEOPTIONS DIALOG FIXED IMPURE 43, 37, 226, 82 +IDD_SAVEOPTIONS DIALOG 43, 37, 226, 82 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Opzioni di compressione" FONT 8, "MS Shell Dlg" @@ -39,7 +39,7 @@ BEGIN PUSHBUTTON "Annulla",IDCANCEL,170,61,50,14 END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_WAVESTREAMFORMAT "Formato wave: %s" IDS_WAVEFILETYPE "Formato wave" diff --git a/dll/win32/avifil32/avifile_Ja.rc b/dll/win32/avifil32/avifile_Ja.rc index 847a1fd471f..c62c03fc05d 100644 --- a/dll/win32/avifil32/avifile_Ja.rc +++ b/dll/win32/avifil32/avifile_Ja.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT -IDD_SAVEOPTIONS DIALOG FIXED IMPURE 43, 37, 226, 82 +IDD_SAVEOPTIONS DIALOG 43, 37, 226, 82 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "圧縮オプション" FONT 9, "MS Shell Dlg" @@ -41,7 +41,7 @@ BEGIN PUSHBUTTON "キャンセル",IDCANCEL,170,61,50,14 END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_WAVESTREAMFORMAT "Waveファイル: %s" IDS_WAVEFILETYPE "Waveファイル" diff --git a/dll/win32/avifil32/avifile_Ko.rc b/dll/win32/avifil32/avifile_Ko.rc index 285a9a20fca..6b548e6a49f 100644 --- a/dll/win32/avifil32/avifile_Ko.rc +++ b/dll/win32/avifil32/avifile_Ko.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT -IDD_SAVEOPTIONS DIALOG FIXED IMPURE 43, 37, 226, 82 +IDD_SAVEOPTIONS DIALOG 43, 37, 226, 82 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "압축 옵션" FONT 9, "MS Shell Dlg" @@ -41,7 +41,7 @@ BEGIN PUSHBUTTON "취소",IDCANCEL,170,61,50,14 END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_WAVESTREAMFORMAT "파형: %s" IDS_WAVEFILETYPE "파형" diff --git a/dll/win32/avifil32/avifile_Lt.rc b/dll/win32/avifil32/avifile_Lt.rc index e4795b5ea03..353d830aac5 100644 --- a/dll/win32/avifil32/avifile_Lt.rc +++ b/dll/win32/avifil32/avifile_Lt.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL -IDD_SAVEOPTIONS DIALOG FIXED IMPURE 43, 37, 226, 82 +IDD_SAVEOPTIONS DIALOG 43, 37, 226, 82 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Glaudinimo parametrai" FONT 8, "MS Shell Dlg" @@ -41,7 +41,7 @@ BEGIN PUSHBUTTON "Atsisakyti",IDCANCEL,170,61,50,14 END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_WAVESTREAMFORMAT "Bangos forma: %s" IDS_WAVEFILETYPE "Bangos forma" diff --git a/dll/win32/avifil32/avifile_Nl.rc b/dll/win32/avifil32/avifile_Nl.rc index 29ddd17125b..d3ad0120e7d 100644 --- a/dll/win32/avifil32/avifile_Nl.rc +++ b/dll/win32/avifil32/avifile_Nl.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL -IDD_SAVEOPTIONS DIALOG FIXED IMPURE 43, 37, 226, 82 +IDD_SAVEOPTIONS DIALOG 43, 37, 226, 82 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Compressie-instellingen" FONT 8, "MS Shell Dlg" @@ -40,7 +40,7 @@ BEGIN PUSHBUTTON "Annuleren",IDCANCEL,170,61,50,14 END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_WAVESTREAMFORMAT "Waveform: %s" IDS_WAVEFILETYPE "Waveform" diff --git a/dll/win32/avifil32/avifile_No.rc b/dll/win32/avifil32/avifile_No.rc index 84198511762..193ee156847 100644 --- a/dll/win32/avifil32/avifile_No.rc +++ b/dll/win32/avifil32/avifile_No.rc @@ -20,7 +20,7 @@ LANGUAGE LANG_NORWEGIAN, SUBLANG_NORWEGIAN_BOKMAL -IDD_SAVEOPTIONS DIALOG FIXED IMPURE 43, 37, 226, 82 +IDD_SAVEOPTIONS DIALOG 43, 37, 226, 82 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Komprimeringsinnstillinger" FONT 8, "MS Shell Dlg" @@ -38,7 +38,7 @@ BEGIN PUSHBUTTON "Avbryt",IDCANCEL,170,61,50,14 END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_WAVESTREAMFORMAT "Lydformat: %s" IDS_WAVEFILETYPE "Lydformat" diff --git a/dll/win32/avifil32/avifile_Pl.rc b/dll/win32/avifil32/avifile_Pl.rc index f5e8edadc50..45caaae5e17 100644 --- a/dll/win32/avifil32/avifile_Pl.rc +++ b/dll/win32/avifil32/avifile_Pl.rc @@ -21,7 +21,7 @@ LANGUAGE LANG_POLISH, SUBLANG_DEFAULT -IDD_SAVEOPTIONS DIALOG FIXED IMPURE 43, 37, 226, 82 +IDD_SAVEOPTIONS DIALOG 43, 37, 226, 82 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Opcje kompresji" FONT 8, "MS Shell Dlg" @@ -39,7 +39,7 @@ BEGIN PUSHBUTTON "Anuluj",IDCANCEL,170,61,50,14 END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_WAVESTREAMFORMAT "Waveform: %s" IDS_WAVEFILETYPE "Waveform" diff --git a/dll/win32/avifil32/avifile_Pt.rc b/dll/win32/avifil32/avifile_Pt.rc index 9ef3abff9e5..5c1d3d3a111 100644 --- a/dll/win32/avifil32/avifile_Pt.rc +++ b/dll/win32/avifil32/avifile_Pt.rc @@ -24,7 +24,7 @@ LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN -IDD_SAVEOPTIONS DIALOG FIXED IMPURE 43, 37, 226, 82 +IDD_SAVEOPTIONS DIALOG 43, 37, 226, 82 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Opções de compressão" FONT 8, "MS Shell Dlg" @@ -44,7 +44,7 @@ END LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE -IDD_SAVEOPTIONS DIALOG FIXED IMPURE 43, 37, 226, 82 +IDD_SAVEOPTIONS DIALOG 43, 37, 226, 82 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Opções de compressão" FONT 8, "MS Shell Dlg" @@ -65,7 +65,7 @@ END LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_WAVESTREAMFORMAT "Formato wave: %s" IDS_WAVEFILETYPE "Formato wave" @@ -80,7 +80,7 @@ STRINGTABLE DISCARDABLE LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_WAVESTREAMFORMAT "Formato wave: %s" IDS_WAVEFILETYPE "Formato wave" diff --git a/dll/win32/avifil32/avifile_Ro.rc b/dll/win32/avifil32/avifile_Ro.rc index 6e63780045f..d7af7da00e3 100644 --- a/dll/win32/avifil32/avifile_Ro.rc +++ b/dll/win32/avifil32/avifile_Ro.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL -IDD_SAVEOPTIONS DIALOG FIXED IMPURE 43, 37, 226, 82 +IDD_SAVEOPTIONS DIALOG 43, 37, 226, 82 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Opțiuni de compresie" FONT 8, "MS Shell Dlg" @@ -43,7 +43,7 @@ BEGIN PUSHBUTTON "Renunță",IDCANCEL,170,61,50,14 END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_WAVESTREAMFORMAT "Forma de undă: %s" IDS_WAVEFILETYPE "Formă de undă" diff --git a/dll/win32/avifil32/avifile_Ru.rc b/dll/win32/avifil32/avifile_Ru.rc index 72e01d19094..b2a61b2c5ca 100644 --- a/dll/win32/avifil32/avifile_Ru.rc +++ b/dll/win32/avifil32/avifile_Ru.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT -IDD_SAVEOPTIONS DIALOG FIXED IMPURE 43, 37, 226, 82 +IDD_SAVEOPTIONS DIALOG 43, 37, 226, 82 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Настройки сжатия" FONT 8, "MS Shell Dlg" @@ -43,7 +43,7 @@ BEGIN PUSHBUTTON "Отмена",IDCANCEL,170,61,50,14 END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_WAVESTREAMFORMAT "Звуковой поток: %s" IDS_WAVEFILETYPE "Звуковой поток" diff --git a/dll/win32/avifil32/avifile_Si.rc b/dll/win32/avifil32/avifile_Si.rc index 0840321eaa1..160999fa19d 100644 --- a/dll/win32/avifil32/avifile_Si.rc +++ b/dll/win32/avifil32/avifile_Si.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT -IDD_SAVEOPTIONS DIALOG FIXED IMPURE 43, 37, 226, 82 +IDD_SAVEOPTIONS DIALOG 43, 37, 226, 82 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Možnosti stiskanja" FONT 8, "MS Shell Dlg" @@ -40,7 +40,7 @@ BEGIN PUSHBUTTON "Prekliči",IDCANCEL,170,61,50,14 END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_WAVESTREAMFORMAT "Waveform: %s" IDS_WAVEFILETYPE "Waveform" diff --git a/dll/win32/avifil32/avifile_Sv.rc b/dll/win32/avifil32/avifile_Sv.rc index 126bca6e6a1..2fba9211fba 100644 --- a/dll/win32/avifil32/avifile_Sv.rc +++ b/dll/win32/avifil32/avifile_Sv.rc @@ -20,7 +20,7 @@ LANGUAGE LANG_SWEDISH, SUBLANG_NEUTRAL -IDD_SAVEOPTIONS DIALOG FIXED IMPURE 43, 37, 226, 82 +IDD_SAVEOPTIONS DIALOG 43, 37, 226, 82 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Komprimeringsalternativ" FONT 8, "MS Shell Dlg" @@ -38,7 +38,7 @@ BEGIN PUSHBUTTON "Avbryt",IDCANCEL,170,61,50,14 END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_WAVESTREAMFORMAT "Vgform: %s" IDS_WAVEFILETYPE "Vgform" diff --git a/dll/win32/avifil32/avifile_Tr.rc b/dll/win32/avifil32/avifile_Tr.rc index c5dbf6e818d..37cdf950624 100644 --- a/dll/win32/avifil32/avifile_Tr.rc +++ b/dll/win32/avifil32/avifile_Tr.rc @@ -20,7 +20,7 @@ LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT -IDD_SAVEOPTIONS DIALOG FIXED IMPURE 43, 37, 226, 82 +IDD_SAVEOPTIONS DIALOG 43, 37, 226, 82 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Sktrma seenekleri" FONT 8, "MS Shell Dlg" @@ -38,7 +38,7 @@ BEGIN PUSHBUTTON "ptal",IDCANCEL,170,61,50,14 END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_WAVESTREAMFORMAT "Waveform: %s" IDS_WAVEFILETYPE "Waveform" diff --git a/dll/win32/avifil32/avifile_Uk.rc b/dll/win32/avifil32/avifile_Uk.rc index 9934ab411fa..f70335e5a19 100644 --- a/dll/win32/avifil32/avifile_Uk.rc +++ b/dll/win32/avifil32/avifile_Uk.rc @@ -20,7 +20,7 @@ LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT -IDD_SAVEOPTIONS DIALOG FIXED IMPURE 43, 37, 196, 82 +IDD_SAVEOPTIONS DIALOG 43, 37, 196, 82 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION " " FONT 8, "MS Shell Dlg" @@ -38,7 +38,7 @@ BEGIN PUSHBUTTON "",IDCANCEL,145,61,45,14 END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_WAVESTREAMFORMAT " : %s" IDS_WAVEFILETYPE " " diff --git a/dll/win32/avifil32/avifile_Zh.rc b/dll/win32/avifil32/avifile_Zh.rc index 5d962e7fdd5..3d1553e97ee 100644 --- a/dll/win32/avifil32/avifile_Zh.rc +++ b/dll/win32/avifil32/avifile_Zh.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED -IDD_SAVEOPTIONS DIALOG FIXED IMPURE 43, 37, 226, 82 +IDD_SAVEOPTIONS DIALOG 43, 37, 226, 82 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "压缩选项" FONT 9, "MS Shell Dlg" @@ -43,7 +43,7 @@ BEGIN PUSHBUTTON "取消",IDCANCEL,170,61,50,14 END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_WAVESTREAMFORMAT "波形: %s" IDS_WAVEFILETYPE "波形" @@ -58,7 +58,7 @@ STRINGTABLE DISCARDABLE LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL -IDD_SAVEOPTIONS DIALOG FIXED IMPURE 43, 37, 226, 82 +IDD_SAVEOPTIONS DIALOG 43, 37, 226, 82 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "壓縮選項" FONT 9, "MS Shell Dlg" @@ -76,7 +76,7 @@ BEGIN PUSHBUTTON "取消",IDCANCEL,170,61,50,14 END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_WAVESTREAMFORMAT "波形: %s" IDS_WAVEFILETYPE "波形" diff --git a/dll/win32/batt/batt.c b/dll/win32/batt/batt.c index 0a46a395cd0..b5e6c4ed199 100644 --- a/dll/win32/batt/batt.c +++ b/dll/win32/batt/batt.c @@ -38,7 +38,8 @@ DWORD WINAPI BatteryClassCoInstaller(IN DI_FUNCTION InstallFunction, IN HDEVINFO DeviceInfoSet, - IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL) + IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL, + IN OUT PCOINSTALLER_CONTEXT_DATA Context) { switch (InstallFunction) { diff --git a/dll/win32/batt/batt.spec b/dll/win32/batt/batt.spec index efb53f5578a..6c68fb232a3 100644 --- a/dll/win32/batt/batt.spec +++ b/dll/win32/batt/batt.spec @@ -1,3 +1,3 @@ -@ stdcall BatteryClassCoInstaller(long ptr ptr) +@ stdcall BatteryClassCoInstaller(long ptr ptr ptr) @ stdcall BatteryClassInstall(long ptr ptr) diff --git a/dll/win32/browseui/shellbrowser.cpp b/dll/win32/browseui/shellbrowser.cpp index 50e00d656cb..16bbaf9830d 100644 --- a/dll/win32/browseui/shellbrowser.cpp +++ b/dll/win32/browseui/shellbrowser.cpp @@ -124,9 +124,7 @@ TODO: "language='*'\"") #endif // __GNUC__ -#ifdef __GNUC__ #define SHANDLE_PTR LONG -#endif // __GNUC__ struct categoryCacheHeader { diff --git a/dll/win32/comctl32/comctl_Bg.rc b/dll/win32/comctl32/comctl_Bg.rc index 6c64f9ac0c8..a45bcd16f29 100644 --- a/dll/win32/comctl32/comctl_Bg.rc +++ b/dll/win32/comctl32/comctl_Bg.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_BULGARIAN, SUBLANG_DEFAULT -IDD_PROPSHEET DIALOG DISCARDABLE 0, 0, 220, 140 +IDD_PROPSHEET DIALOG 0, 0, 220, 140 STYLE DS_CONTEXTHELP | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE CAPTION " %s" FONT 8, "MS Shell Dlg" @@ -35,7 +35,7 @@ BEGIN END -IDD_WIZARD DIALOG DISCARDABLE 0, 0, 290, 159 +IDD_WIZARD DIALOG 0, 0, 290, 159 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE CAPTION "Wizard" FONT 8, "MS Shell Dlg" @@ -51,7 +51,7 @@ BEGIN END -IDD_TBCUSTOMIZE DIALOG DISCARDABLE 10, 20, 407, 125 /* 357 -> 407 ? */ +IDD_TBCUSTOMIZE DIALOG 10, 20, 407, 125 /* 357 -> 407 ? */ STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION " " FONT 8, "MS Shell Dlg" @@ -69,23 +69,23 @@ BEGIN LISTBOX IDC_TOOLBARBTN_LBOX, 192,17,120,100,LBS_NOTIFY | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_BORDER | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP /* 182 -> 192 ? */ END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_CLOSE "" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDM_TODAY ":" IDM_GOTODAY " " } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_SEPARATOR "" } -STRINGTABLE DISCARDABLE +STRINGTABLE { HKY_NONE "" } diff --git a/dll/win32/comctl32/comctl_Cs.rc b/dll/win32/comctl32/comctl_Cs.rc index e770e331e5c..d993c713a29 100644 --- a/dll/win32/comctl32/comctl_Cs.rc +++ b/dll/win32/comctl32/comctl_Cs.rc @@ -26,7 +26,7 @@ LANGUAGE LANG_CZECH, SUBLANG_DEFAULT /* Czech strings in CP1250 */ -IDD_PROPSHEET DIALOG DISCARDABLE 0, 0, 220, 140 +IDD_PROPSHEET DIALOG 0, 0, 220, 140 STYLE DS_CONTEXTHELP | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE CAPTION "Vlastnosti %s" FONT 8, "MS Shell Dlg" @@ -39,7 +39,7 @@ BEGIN END -IDD_WIZARD DIALOG DISCARDABLE 0, 0, 290, 159 +IDD_WIZARD DIALOG 0, 0, 290, 159 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE CAPTION "Prvodce" FONT 8, "MS Shell Dlg" @@ -55,7 +55,7 @@ BEGIN END -IDD_TBCUSTOMIZE DIALOG DISCARDABLE 10, 20, 357, 125 +IDD_TBCUSTOMIZE DIALOG 10, 20, 357, 125 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Nastaven panelu" FONT 8, "MS Shell Dlg" @@ -73,23 +73,23 @@ BEGIN LISTBOX IDC_TOOLBARBTN_LBOX, 182,17,120,100,LBS_NOTIFY | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_BORDER | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_CLOSE "Zavt" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDM_TODAY "Dnes:" IDM_GOTODAY "Jdi na dneek" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_SEPARATOR "Oddlova" } -STRINGTABLE DISCARDABLE +STRINGTABLE { HKY_NONE "dn" } diff --git a/dll/win32/comctl32/comctl_Da.rc b/dll/win32/comctl32/comctl_Da.rc index 07c177cf462..0dc1068f83b 100644 --- a/dll/win32/comctl32/comctl_Da.rc +++ b/dll/win32/comctl32/comctl_Da.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_DANISH, SUBLANG_DEFAULT -IDD_PROPSHEET DIALOG DISCARDABLE 0, 0, 220, 140 +IDD_PROPSHEET DIALOG 0, 0, 220, 140 STYLE DS_CONTEXTHELP | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE CAPTION "Egenskaber for %s" FONT 8, "MS Shell Dlg" @@ -36,7 +36,7 @@ BEGIN END -IDD_WIZARD DIALOG DISCARDABLE 0, 0, 290, 159 +IDD_WIZARD DIALOG 0, 0, 290, 159 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE CAPTION "Guide" FONT 8, "MS Shell Dlg" @@ -52,7 +52,7 @@ BEGIN END -IDD_TBCUSTOMIZE DIALOG DISCARDABLE 10, 20, 357, 125 +IDD_TBCUSTOMIZE DIALOG 10, 20, 357, 125 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Tilpas Værktøjslinje" FONT 8, "MS Shell Dlg" @@ -70,23 +70,23 @@ BEGIN LISTBOX IDC_TOOLBARBTN_LBOX, 182,17,120,100,LBS_NOTIFY | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_BORDER | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_CLOSE "Luk" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDM_TODAY "Idag:" IDM_GOTODAY "Gå til i dag" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_SEPARATOR "Separator" } -STRINGTABLE DISCARDABLE +STRINGTABLE { HKY_NONE "Ingen" } diff --git a/dll/win32/comctl32/comctl_De.rc b/dll/win32/comctl32/comctl_De.rc index 87730c881f9..afb2a844c1e 100644 --- a/dll/win32/comctl32/comctl_De.rc +++ b/dll/win32/comctl32/comctl_De.rc @@ -22,28 +22,28 @@ LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_CLOSE "Schließen" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDM_TODAY "Heute:" IDM_GOTODAY "Gehe zu Heute" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_SEPARATOR "Trennzeichen" } -STRINGTABLE DISCARDABLE +STRINGTABLE { HKY_NONE "Keiner" } -IDD_PROPSHEET DIALOG DISCARDABLE 0, 0, 220, 140 +IDD_PROPSHEET DIALOG 0, 0, 220, 140 STYLE DS_CONTEXTHELP | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE CAPTION "Eigenschaften für %s" FONT 8, "MS Shell Dlg" @@ -56,7 +56,7 @@ BEGIN END -IDD_WIZARD DIALOG DISCARDABLE 0, 0, 290, 159 +IDD_WIZARD DIALOG 0, 0, 290, 159 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE CAPTION "Wizard" FONT 8, "MS Shell Dlg" @@ -72,7 +72,7 @@ BEGIN END -IDD_TBCUSTOMIZE DIALOG DISCARDABLE 10, 20, 357, 125 +IDD_TBCUSTOMIZE DIALOG 10, 20, 357, 125 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Toolbar einrichten" FONT 8, "MS Shell Dlg" diff --git a/dll/win32/comctl32/comctl_El.rc b/dll/win32/comctl32/comctl_El.rc index de08357270d..284b3a287c4 100644 --- a/dll/win32/comctl32/comctl_El.rc +++ b/dll/win32/comctl32/comctl_El.rc @@ -20,7 +20,7 @@ LANGUAGE LANG_GREEK, SUBLANG_DEFAULT -IDD_PROPSHEET DIALOG DISCARDABLE 0, 0, 220, 140 +IDD_PROPSHEET DIALOG 0, 0, 220, 140 STYLE DS_CONTEXTHELP | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE CAPTION " %s" FONT 8, "MS Shell Dlg" @@ -33,7 +33,7 @@ BEGIN END -IDD_WIZARD DIALOG DISCARDABLE 0, 0, 290, 159 +IDD_WIZARD DIALOG 0, 0, 290, 159 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE CAPTION "" FONT 8, "MS Shell Dlg" @@ -49,7 +49,7 @@ BEGIN END -IDD_TBCUSTOMIZE DIALOG DISCARDABLE 10, 20, 357, 125 +IDD_TBCUSTOMIZE DIALOG 10, 20, 357, 125 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION " " FONT 8, "MS Shell Dlg" @@ -67,23 +67,23 @@ BEGIN LISTBOX IDC_TOOLBARBTN_LBOX, 182,17,120,100,LBS_NOTIFY | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_BORDER | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_CLOSE "" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDM_TODAY ":" IDM_GOTODAY " " } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_SEPARATOR "" } -STRINGTABLE DISCARDABLE +STRINGTABLE { HKY_NONE "" } diff --git a/dll/win32/comctl32/comctl_En.rc b/dll/win32/comctl32/comctl_En.rc index d8055e98f3f..c7ddc7a15c8 100644 --- a/dll/win32/comctl32/comctl_En.rc +++ b/dll/win32/comctl32/comctl_En.rc @@ -20,7 +20,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT -IDD_PROPSHEET DIALOG DISCARDABLE 0, 0, 220, 140 +IDD_PROPSHEET DIALOG 0, 0, 220, 140 STYLE DS_CONTEXTHELP | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE CAPTION "Properties for %s" FONT 8, "MS Shell Dlg" @@ -33,7 +33,7 @@ BEGIN END -IDD_WIZARD DIALOG DISCARDABLE 0, 0, 290, 159 +IDD_WIZARD DIALOG 0, 0, 290, 159 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE CAPTION "Wizard" FONT 8, "MS Shell Dlg" @@ -49,7 +49,7 @@ BEGIN END -IDD_TBCUSTOMIZE DIALOG DISCARDABLE 10, 20, 357, 125 +IDD_TBCUSTOMIZE DIALOG 10, 20, 357, 125 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Customize Toolbar" FONT 8, "MS Shell Dlg" @@ -67,23 +67,23 @@ BEGIN LISTBOX IDC_TOOLBARBTN_LBOX, 182,17,120,100,LBS_NOTIFY | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_BORDER | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_CLOSE "Close" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDM_TODAY "Today:" IDM_GOTODAY "Go to today" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_SEPARATOR "Separator" } -STRINGTABLE DISCARDABLE +STRINGTABLE { HKY_NONE "None" } diff --git a/dll/win32/comctl32/comctl_Es.rc b/dll/win32/comctl32/comctl_Es.rc index ce4621791f0..34e6f6c0a5d 100644 --- a/dll/win32/comctl32/comctl_Es.rc +++ b/dll/win32/comctl32/comctl_Es.rc @@ -20,7 +20,7 @@ LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL -IDD_PROPSHEET DIALOG DISCARDABLE 0, 0, 220, 140 +IDD_PROPSHEET DIALOG 0, 0, 220, 140 STYLE DS_CONTEXTHELP | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE CAPTION "Propiedades de %s" FONT 8, "MS Shell Dlg" @@ -33,7 +33,7 @@ BEGIN END -IDD_WIZARD DIALOG DISCARDABLE 0, 0, 290, 159 +IDD_WIZARD DIALOG 0, 0, 290, 159 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE CAPTION "Ayudante" FONT 8, "MS Shell Dlg" @@ -49,7 +49,7 @@ BEGIN END -IDD_TBCUSTOMIZE DIALOG DISCARDABLE 10, 20, 357, 125 +IDD_TBCUSTOMIZE DIALOG 10, 20, 357, 125 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Personalizar barra de herramientas" FONT 8, "MS Shell Dlg" @@ -67,23 +67,23 @@ BEGIN LISTBOX IDC_TOOLBARBTN_LBOX, 182,17,120,100,LBS_NOTIFY | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_BORDER | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_CLOSE "Cerrar" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDM_TODAY "Hoy:" IDM_GOTODAY "Ir a hoy" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_SEPARATOR "Separador" } -STRINGTABLE DISCARDABLE +STRINGTABLE { HKY_NONE "Ninguno" } diff --git a/dll/win32/comctl32/comctl_Fr.rc b/dll/win32/comctl32/comctl_Fr.rc index 6c766cf454d..fd8aa10eb49 100644 --- a/dll/win32/comctl32/comctl_Fr.rc +++ b/dll/win32/comctl32/comctl_Fr.rc @@ -27,7 +27,7 @@ LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL -IDD_PROPSHEET DIALOG DISCARDABLE 0, 0, 220, 140 +IDD_PROPSHEET DIALOG 0, 0, 220, 140 STYLE DS_CONTEXTHELP | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE CAPTION "Propriétés pour %s" FONT 8, "MS Shell Dlg" @@ -40,7 +40,7 @@ BEGIN END -IDD_WIZARD DIALOG DISCARDABLE 0, 0, 290, 159 +IDD_WIZARD DIALOG 0, 0, 290, 159 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE CAPTION "Assistant" FONT 8, "MS Shell Dlg" @@ -56,7 +56,7 @@ BEGIN END -IDD_TBCUSTOMIZE DIALOG DISCARDABLE 10, 20, 357, 125 +IDD_TBCUSTOMIZE DIALOG 10, 20, 357, 125 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Personnaliser la barre d'outils" FONT 8, "MS Shell Dlg" @@ -74,23 +74,23 @@ BEGIN LISTBOX IDC_TOOLBARBTN_LBOX, 182,17,120,100,LBS_NOTIFY | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_BORDER | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_CLOSE "Fermer" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDM_TODAY "Aujourd'hui :" IDM_GOTODAY "Aller à aujourd'hui" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_SEPARATOR "Séparateur" } -STRINGTABLE DISCARDABLE +STRINGTABLE { HKY_NONE "Aucun" } diff --git a/dll/win32/comctl32/comctl_Hu.rc b/dll/win32/comctl32/comctl_Hu.rc index 2ba1160efc1..87183c4038a 100644 --- a/dll/win32/comctl32/comctl_Hu.rc +++ b/dll/win32/comctl32/comctl_Hu.rc @@ -20,7 +20,7 @@ LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT -IDD_PROPSHEET DIALOG DISCARDABLE 0, 0, 220, 140 +IDD_PROPSHEET DIALOG 0, 0, 220, 140 STYLE DS_CONTEXTHELP | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE CAPTION "Tulajdonsgok: %s" FONT 8, "MS Shell Dlg" @@ -33,7 +33,7 @@ BEGIN END -IDD_WIZARD DIALOG DISCARDABLE 0, 0, 290, 159 +IDD_WIZARD DIALOG 0, 0, 290, 159 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE CAPTION "Varzsl" FONT 8, "MS Shell Dlg" @@ -49,7 +49,7 @@ BEGIN END -IDD_TBCUSTOMIZE DIALOG DISCARDABLE 10, 20, 357, 125 +IDD_TBCUSTOMIZE DIALOG 10, 20, 357, 125 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Eszkztr testreszabsa" FONT 8, "MS Shell Dlg" @@ -67,23 +67,23 @@ BEGIN LISTBOX IDC_TOOLBARBTN_LBOX, 182,17,120,100,LBS_NOTIFY | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_BORDER | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_CLOSE "Bezrs" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDM_TODAY "Ma:" IDM_GOTODAY "Ugrs mra" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_SEPARATOR "Elvlaszt" } -STRINGTABLE DISCARDABLE +STRINGTABLE { HKY_NONE "Nincs" } diff --git a/dll/win32/comctl32/comctl_It.rc b/dll/win32/comctl32/comctl_It.rc index 75bd9c19c4c..8253dab38ce 100644 --- a/dll/win32/comctl32/comctl_It.rc +++ b/dll/win32/comctl32/comctl_It.rc @@ -21,7 +21,7 @@ LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL -IDD_PROPSHEET DIALOG DISCARDABLE 0, 0, 220, 140 +IDD_PROPSHEET DIALOG 0, 0, 220, 140 STYLE DS_CONTEXTHELP | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE CAPTION "Propriet per %s" FONT 8, "MS Shell Dlg" @@ -34,7 +34,7 @@ BEGIN END -IDD_WIZARD DIALOG DISCARDABLE 0, 0, 290, 159 +IDD_WIZARD DIALOG 0, 0, 290, 159 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE CAPTION "Procedura guidata" FONT 8, "MS Shell Dlg" @@ -50,7 +50,7 @@ BEGIN END -IDD_TBCUSTOMIZE DIALOG DISCARDABLE 10, 20, 357, 125 +IDD_TBCUSTOMIZE DIALOG 10, 20, 357, 125 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Personalizza la barra degli strumenti" FONT 8, "MS Shell Dlg" @@ -68,23 +68,23 @@ BEGIN LISTBOX IDC_TOOLBARBTN_LBOX, 182,17,120,100,LBS_NOTIFY | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_BORDER | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_CLOSE "Chiudi" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDM_TODAY "Oggi:" IDM_GOTODAY "Vai a oggi" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_SEPARATOR "Separatore" } -STRINGTABLE DISCARDABLE +STRINGTABLE { HKY_NONE "Nessuno" } diff --git a/dll/win32/comctl32/comctl_Ja.rc b/dll/win32/comctl32/comctl_Ja.rc index ce16f5a2f53..156a00f60d0 100644 --- a/dll/win32/comctl32/comctl_Ja.rc +++ b/dll/win32/comctl32/comctl_Ja.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT -IDD_PROPSHEET DIALOG DISCARDABLE 0, 0, 220, 140 +IDD_PROPSHEET DIALOG 0, 0, 220, 140 STYLE DS_CONTEXTHELP | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE CAPTION "%sのプロパティ" FONT 9, "MS Shell Dlg" @@ -36,7 +36,7 @@ BEGIN END -IDD_WIZARD DIALOG DISCARDABLE 0, 0, 290, 159 +IDD_WIZARD DIALOG 0, 0, 290, 159 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE CAPTION "ウィザード" FONT 9, "MS Shell Dlg" @@ -52,7 +52,7 @@ BEGIN END -IDD_TBCUSTOMIZE DIALOG DISCARDABLE 10, 20, 357, 125 +IDD_TBCUSTOMIZE DIALOG 10, 20, 357, 125 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "ツールバーのカスタマイズ" FONT 9, "MS Shell Dlg" @@ -70,23 +70,23 @@ BEGIN LISTBOX IDC_TOOLBARBTN_LBOX, 182,17,120,100,LBS_NOTIFY | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_BORDER | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_CLOSE "閉じる" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDM_TODAY "今日:" IDM_GOTODAY "今日へ移動" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_SEPARATOR "区切り" } -STRINGTABLE DISCARDABLE +STRINGTABLE { HKY_NONE "なし" } diff --git a/dll/win32/comctl32/comctl_Ko.rc b/dll/win32/comctl32/comctl_Ko.rc index 4f9ec0aff25..31c625263bc 100644 --- a/dll/win32/comctl32/comctl_Ko.rc +++ b/dll/win32/comctl32/comctl_Ko.rc @@ -21,7 +21,7 @@ LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT -IDD_PROPSHEET DIALOG DISCARDABLE 0, 0, 220, 140 +IDD_PROPSHEET DIALOG 0, 0, 220, 140 STYLE DS_CONTEXTHELP | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE CAPTION "%s Ӽ" FONT 9, "MS Shell Dlg" @@ -34,7 +34,7 @@ BEGIN END -IDD_WIZARD DIALOG DISCARDABLE 0, 0, 290, 159 +IDD_WIZARD DIALOG 0, 0, 290, 159 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE CAPTION "" FONT 9, "MS Shell Dlg" @@ -50,7 +50,7 @@ BEGIN END -IDD_TBCUSTOMIZE DIALOG DISCARDABLE 10, 20, 357, 125 +IDD_TBCUSTOMIZE DIALOG 10, 20, 357, 125 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION " " FONT 9, "MS Shell Dlg" @@ -68,23 +68,23 @@ BEGIN LISTBOX IDC_TOOLBARBTN_LBOX, 182,17,120,100,LBS_NOTIFY | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_BORDER | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_CLOSE "ݱ" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDM_TODAY ":" IDM_GOTODAY "÷ " } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_SEPARATOR "и" } -STRINGTABLE DISCARDABLE +STRINGTABLE { HKY_NONE "" } diff --git a/dll/win32/comctl32/comctl_Lt.rc b/dll/win32/comctl32/comctl_Lt.rc index f5f329429cb..b723d223155 100644 --- a/dll/win32/comctl32/comctl_Lt.rc +++ b/dll/win32/comctl32/comctl_Lt.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL -IDD_PROPSHEET DIALOG DISCARDABLE 0, 0, 220, 140 +IDD_PROPSHEET DIALOG 0, 0, 220, 140 STYLE DS_CONTEXTHELP | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE CAPTION "%s savybės" FONT 8, "MS Shell Dlg" @@ -36,7 +36,7 @@ BEGIN END -IDD_WIZARD DIALOG DISCARDABLE 0, 0, 290, 159 +IDD_WIZARD DIALOG 0, 0, 290, 159 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE CAPTION "Vediklis" FONT 8, "MS Shell Dlg" @@ -52,7 +52,7 @@ BEGIN END -IDD_TBCUSTOMIZE DIALOG DISCARDABLE 10, 20, 357, 125 +IDD_TBCUSTOMIZE DIALOG 10, 20, 357, 125 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Tinkinti mygtukų juostą" FONT 8, "MS Shell Dlg" @@ -70,23 +70,23 @@ BEGIN LISTBOX IDC_TOOLBARBTN_LBOX, 182,17,120,100,LBS_NOTIFY | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_BORDER | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_CLOSE "Užverti" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDM_TODAY "Šiandien:" IDM_GOTODAY "Eiti į šiandien" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_SEPARATOR "Skirtukas" } -STRINGTABLE DISCARDABLE +STRINGTABLE { HKY_NONE "Joks" } diff --git a/dll/win32/comctl32/comctl_Nl.rc b/dll/win32/comctl32/comctl_Nl.rc index fe2bf7a9d4a..5e94680a2de 100644 --- a/dll/win32/comctl32/comctl_Nl.rc +++ b/dll/win32/comctl32/comctl_Nl.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL -IDD_PROPSHEET DIALOG DISCARDABLE 0, 0, 220, 140 +IDD_PROPSHEET DIALOG 0, 0, 220, 140 STYLE DS_CONTEXTHELP | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE CAPTION "Eigenschappen van %s" FONT 8, "MS Shell Dlg" @@ -35,7 +35,7 @@ BEGIN END -IDD_WIZARD DIALOG DISCARDABLE 0, 0, 290, 159 +IDD_WIZARD DIALOG 0, 0, 290, 159 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE CAPTION "Assistent" FONT 8, "MS Shell Dlg" @@ -51,7 +51,7 @@ BEGIN END -IDD_TBCUSTOMIZE DIALOG DISCARDABLE 10, 20, 357, 125 +IDD_TBCUSTOMIZE DIALOG 10, 20, 357, 125 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Gereedschappenbalk aanpassen" FONT 8, "MS Shell Dlg" @@ -69,23 +69,23 @@ BEGIN LISTBOX IDC_TOOLBARBTN_LBOX, 182,17,120,100,LBS_NOTIFY | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_BORDER | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_CLOSE "Sluiten" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDM_TODAY "Vandaag:" IDM_GOTODAY "Ga naar vandaag" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_SEPARATOR "Scheidingsteken" } -STRINGTABLE DISCARDABLE +STRINGTABLE { HKY_NONE "Geen" } diff --git a/dll/win32/comctl32/comctl_No.rc b/dll/win32/comctl32/comctl_No.rc index 6361f048943..ada1a47c4ca 100644 --- a/dll/win32/comctl32/comctl_No.rc +++ b/dll/win32/comctl32/comctl_No.rc @@ -20,7 +20,7 @@ LANGUAGE LANG_NORWEGIAN, SUBLANG_NORWEGIAN_BOKMAL -IDD_PROPSHEET DIALOG DISCARDABLE 0, 0, 220, 140 +IDD_PROPSHEET DIALOG 0, 0, 220, 140 STYLE DS_CONTEXTHELP | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE CAPTION "Egenskaper for %s" FONT 8, "MS Shell Dlg" @@ -33,7 +33,7 @@ BEGIN END -IDD_WIZARD DIALOG DISCARDABLE 0, 0, 290, 159 +IDD_WIZARD DIALOG 0, 0, 290, 159 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE CAPTION "Veiviser" FONT 8, "MS Shell Dlg" @@ -49,7 +49,7 @@ BEGIN END -IDD_TBCUSTOMIZE DIALOG DISCARDABLE 10, 20, 357, 125 +IDD_TBCUSTOMIZE DIALOG 10, 20, 357, 125 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Tilpass verktylinje" FONT 8, "MS Shell Dlg" @@ -67,23 +67,23 @@ BEGIN LISTBOX IDC_TOOLBARBTN_LBOX, 182,17,120,100,LBS_NOTIFY | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_BORDER | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_CLOSE "Lukk" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDM_TODAY "Idag:" IDM_GOTODAY "G til idag" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_SEPARATOR "Adskiller" } -STRINGTABLE DISCARDABLE +STRINGTABLE { HKY_NONE "Ingen" } diff --git a/dll/win32/comctl32/comctl_Pl.rc b/dll/win32/comctl32/comctl_Pl.rc index 12f13a63fa1..f3317e00e27 100644 --- a/dll/win32/comctl32/comctl_Pl.rc +++ b/dll/win32/comctl32/comctl_Pl.rc @@ -21,7 +21,7 @@ LANGUAGE LANG_POLISH, SUBLANG_DEFAULT -IDD_PROPSHEET DIALOG DISCARDABLE 0, 0, 220, 140 +IDD_PROPSHEET DIALOG 0, 0, 220, 140 STYLE DS_CONTEXTHELP | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE CAPTION "Waciwoci %s" FONT 8, "MS Shell Dlg" @@ -34,7 +34,7 @@ BEGIN END -IDD_WIZARD DIALOG DISCARDABLE 0, 0, 290, 159 +IDD_WIZARD DIALOG 0, 0, 290, 159 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE CAPTION "Kreator" FONT 8, "MS Shell Dlg" @@ -50,7 +50,7 @@ BEGIN END -IDD_TBCUSTOMIZE DIALOG DISCARDABLE 10, 20, 357, 125 +IDD_TBCUSTOMIZE DIALOG 10, 20, 357, 125 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Dostosowywanie paska narzdzi" FONT 8, "MS Shell Dlg" @@ -68,23 +68,23 @@ BEGIN LISTBOX IDC_TOOLBARBTN_LBOX, 182,17,120,100,LBS_NOTIFY | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_BORDER | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_CLOSE "Zamknij" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDM_TODAY "Dzi:" IDM_GOTODAY "Id do dzi" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_SEPARATOR "Odstp" } -STRINGTABLE DISCARDABLE +STRINGTABLE { HKY_NONE "Brak" } diff --git a/dll/win32/comctl32/comctl_Pt.rc b/dll/win32/comctl32/comctl_Pt.rc index 914c4c22439..ca60a59f130 100644 --- a/dll/win32/comctl32/comctl_Pt.rc +++ b/dll/win32/comctl32/comctl_Pt.rc @@ -24,7 +24,7 @@ LANGUAGE LANG_PORTUGUESE, SUBLANG_NEUTRAL -IDD_PROPSHEET DIALOG DISCARDABLE 0, 0, 220, 140 +IDD_PROPSHEET DIALOG 0, 0, 220, 140 STYLE DS_CONTEXTHELP | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE CAPTION "Propriedades de %s" FONT 8, "MS Shell Dlg" @@ -36,7 +36,7 @@ BEGIN CONTROL "Separador", IDC_TABCONTROL,"SysTabControl32",WS_CLIPSIBLINGS|WS_GROUP|WS_TABSTOP|TCS_MULTILINE,4,4,212,114 END -IDD_WIZARD DIALOG DISCARDABLE 0, 0, 290, 159 +IDD_WIZARD DIALOG 0, 0, 290, 159 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE CAPTION "Assistente" FONT 8, "MS Shell Dlg" @@ -51,7 +51,7 @@ BEGIN LTEXT "", IDC_SUNKEN_LINEHEADER,0,35,290,1,SS_LEFT | SS_SUNKEN | WS_CHILD | WS_VISIBLE END -IDD_TBCUSTOMIZE DIALOG DISCARDABLE 10, 20, 357, 125 +IDD_TBCUSTOMIZE DIALOG 10, 20, 357, 125 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Personalizar barra de ferramentas" FONT 8, "MS Shell Dlg" @@ -69,23 +69,23 @@ BEGIN LISTBOX IDC_TOOLBARBTN_LBOX, 182,17,120,100,LBS_NOTIFY | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_BORDER | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_CLOSE "Fechar" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDM_TODAY "Hoje:" IDM_GOTODAY "Ir para hoje" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_SEPARATOR "Separador" } -STRINGTABLE DISCARDABLE +STRINGTABLE { HKY_NONE "Nenhum" } diff --git a/dll/win32/comctl32/comctl_Ro.rc b/dll/win32/comctl32/comctl_Ro.rc index 497f626ee5b..fd6b1161ec8 100644 --- a/dll/win32/comctl32/comctl_Ro.rc +++ b/dll/win32/comctl32/comctl_Ro.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL #pragma code_page(65001) -IDD_PROPSHEET DIALOG DISCARDABLE 0, 0, 220, 140 +IDD_PROPSHEET DIALOG 0, 0, 220, 140 STYLE DS_CONTEXTHELP | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE CAPTION "Proprietăți pentru %s" FONT 8, "MS Shell Dlg" @@ -36,7 +36,7 @@ BEGIN END -IDD_WIZARD DIALOG DISCARDABLE 0, 0, 290, 159 +IDD_WIZARD DIALOG 0, 0, 290, 159 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE CAPTION "Expert" FONT 8, "MS Shell Dlg" @@ -52,7 +52,7 @@ BEGIN END -IDD_TBCUSTOMIZE DIALOG DISCARDABLE 10, 20, 357, 125 +IDD_TBCUSTOMIZE DIALOG 10, 20, 357, 125 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Personalizare toolbar" FONT 8, "MS Shell Dlg" @@ -70,23 +70,23 @@ BEGIN LISTBOX IDC_TOOLBARBTN_LBOX, 182,17,120,100,LBS_NOTIFY | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_BORDER | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_CLOSE "Închide" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDM_TODAY "Azi:" IDM_GOTODAY "Mergi la Azi" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_SEPARATOR "Separator" } -STRINGTABLE DISCARDABLE +STRINGTABLE { HKY_NONE "Nimic" } diff --git a/dll/win32/comctl32/comctl_Ru.rc b/dll/win32/comctl32/comctl_Ru.rc index e09817cf659..ce330609db4 100644 --- a/dll/win32/comctl32/comctl_Ru.rc +++ b/dll/win32/comctl32/comctl_Ru.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT -IDD_PROPSHEET DIALOG DISCARDABLE 0, 0, 220, 140 +IDD_PROPSHEET DIALOG 0, 0, 220, 140 STYLE DS_CONTEXTHELP | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE CAPTION "Свойства для %s" FONT 8, "MS Shell Dlg" @@ -38,7 +38,7 @@ BEGIN END -IDD_WIZARD DIALOG DISCARDABLE 0, 0, 290, 159 +IDD_WIZARD DIALOG 0, 0, 290, 159 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE CAPTION "Мастер" FONT 8, "MS Shell Dlg" @@ -54,7 +54,7 @@ BEGIN END -IDD_TBCUSTOMIZE DIALOG DISCARDABLE 10, 20, 357, 125 +IDD_TBCUSTOMIZE DIALOG 10, 20, 357, 125 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Настройка панели инструментов" FONT 8, "MS Shell Dlg" @@ -72,23 +72,23 @@ BEGIN LISTBOX IDC_TOOLBARBTN_LBOX, 182,17,120,100,LBS_NOTIFY | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_BORDER | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_CLOSE "Закрыть" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDM_TODAY "Сегодня:" IDM_GOTODAY "Текущая дата" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_SEPARATOR "Разделитель" } -STRINGTABLE DISCARDABLE +STRINGTABLE { HKY_NONE "Нет" } diff --git a/dll/win32/comctl32/comctl_Si.rc b/dll/win32/comctl32/comctl_Si.rc index cc1053f18f6..9d1b1f22a62 100644 --- a/dll/win32/comctl32/comctl_Si.rc +++ b/dll/win32/comctl32/comctl_Si.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT -IDD_PROPSHEET DIALOG DISCARDABLE 0, 0, 220, 140 +IDD_PROPSHEET DIALOG 0, 0, 220, 140 STYLE DS_CONTEXTHELP | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE CAPTION "Lastnosti %s" FONT 8, "MS Shell Dlg" @@ -35,7 +35,7 @@ BEGIN END -IDD_WIZARD DIALOG DISCARDABLE 0, 0, 290, 159 +IDD_WIZARD DIALOG 0, 0, 290, 159 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE CAPTION "Čarovnik" FONT 8, "MS Shell Dlg" @@ -51,7 +51,7 @@ BEGIN END -IDD_TBCUSTOMIZE DIALOG DISCARDABLE 10, 20, 357, 125 +IDD_TBCUSTOMIZE DIALOG 10, 20, 357, 125 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Prilagoditev orodne vrstice" FONT 8, "MS Shell Dlg" @@ -69,23 +69,23 @@ BEGIN LISTBOX IDC_TOOLBARBTN_LBOX, 182,17,120,100,LBS_NOTIFY | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_BORDER | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_CLOSE "Zapri" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDM_TODAY "Danes:" IDM_GOTODAY "Pojdi na danes" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_SEPARATOR "Ločilo" } -STRINGTABLE DISCARDABLE +STRINGTABLE { HKY_NONE "Brez" } diff --git a/dll/win32/comctl32/comctl_Sk.rc b/dll/win32/comctl32/comctl_Sk.rc index c543e376f30..4acd84c5ac5 100644 --- a/dll/win32/comctl32/comctl_Sk.rc +++ b/dll/win32/comctl32/comctl_Sk.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT -IDD_PROPSHEET DIALOG DISCARDABLE 0, 0, 220, 140 +IDD_PROPSHEET DIALOG 0, 0, 220, 140 STYLE DS_CONTEXTHELP | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE CAPTION "%s - vlastnosti" FONT 8, "MS Shell Dlg" @@ -36,7 +36,7 @@ BEGIN END -IDD_WIZARD DIALOG DISCARDABLE 0, 0, 290, 159 +IDD_WIZARD DIALOG 0, 0, 290, 159 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE CAPTION "Sprievodca" FONT 8, "MS Shell Dlg" @@ -52,7 +52,7 @@ BEGIN END -IDD_TBCUSTOMIZE DIALOG DISCARDABLE 10, 20, 357, 125 +IDD_TBCUSTOMIZE DIALOG 10, 20, 357, 125 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Prispsobenie panela nstrojov" FONT 8, "MS Shell Dlg" @@ -70,23 +70,23 @@ BEGIN LISTBOX IDC_TOOLBARBTN_LBOX, 182,17,120,100,LBS_NOTIFY | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_BORDER | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_CLOSE "Zavrie" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDM_TODAY "Dnes:" IDM_GOTODAY "Cho na dneok" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_SEPARATOR "Oddeova" } -STRINGTABLE DISCARDABLE +STRINGTABLE { HKY_NONE "iadne" } diff --git a/dll/win32/comctl32/comctl_Sr.rc b/dll/win32/comctl32/comctl_Sr.rc new file mode 100644 index 00000000000..8681ecbe629 --- /dev/null +++ b/dll/win32/comctl32/comctl_Sr.rc @@ -0,0 +1,162 @@ +/* + * Copyright 2010 Nenad Vujic + * Paul Vriens + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include "comctl32.h" + +#pragma code_page(65001) + +LANGUAGE LANG_SERBIAN, SUBLANG_SERBIAN_LATIN + +IDD_PROPSHEET DIALOG 0, 0, 220, 140 +STYLE DS_CONTEXTHELP | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE +CAPTION "Detalji za %s" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "OK", IDOK,4,122,50,14, WS_TABSTOP | WS_GROUP + PUSHBUTTON "Otkaži", IDCANCEL,58,122,50,14 + PUSHBUTTON "&Primeni", IDC_APPLY_BUTTON,112,122,50,14,WS_DISABLED + PUSHBUTTON "Pomoć", IDHELP,166,122,50,14,WS_TABSTOP|WS_GROUP + CONTROL "Tab", IDC_TABCONTROL,"SysTabControl32",WS_CLIPSIBLINGS|WS_GROUP|WS_TABSTOP|TCS_MULTILINE,4,4,212,114 +END + + +IDD_WIZARD DIALOG 0, 0, 290, 159 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE +CAPTION "Čarobnjak" +FONT 8, "MS Shell Dlg" +BEGIN + PUSHBUTTON "< &Nazad", IDC_BACK_BUTTON,71,138,50,14 + DEFPUSHBUTTON "&Sledeće >", IDC_NEXT_BUTTON,121,138,50,14 + DEFPUSHBUTTON "Završi", IDC_FINISH_BUTTON,121,138,50,14 + PUSHBUTTON "Otkaži", IDCANCEL,178,138,50,14 + PUSHBUTTON "Pomoć", IDHELP,235,138,50,14,WS_GROUP + LTEXT "", IDC_SUNKEN_LINE,7,129,278,1,SS_SUNKEN + CONTROL "Tab", IDC_TABCONTROL,"SysTabControl32",WS_CLIPSIBLINGS | WS_DISABLED,7,7,258,5 + LTEXT "", IDC_SUNKEN_LINEHEADER,0,35,290,1,SS_LEFT | SS_SUNKEN | WS_CHILD | WS_VISIBLE +END + + +IDD_TBCUSTOMIZE DIALOG 10, 20, 357, 125 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Podesi Toolbar" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Zatvori", IDCANCEL,308,6,44,14 + PUSHBUTTON "R&esetuj", IDC_RESET_BTN,308,23,44,14 + PUSHBUTTON "&Pomoć", IDC_HELP_BTN,308,40,44,14 + PUSHBUTTON "Pomeri &Gore", IDC_MOVEUP_BTN,308,74,44,14 + PUSHBUTTON "Pomeri &Dole", IDC_MOVEDN_BTN,308,91,44,14 + LTEXT "D&ostupni tasteri:", -1,4,5,84,10 + LISTBOX IDC_AVAILBTN_LBOX,4,17,120,100, LBS_NOTIFY | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_BORDER | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP + PUSHBUTTON "&Dodaj ->", IDOK, 131, 42, 44, 14 + PUSHBUTTON "<- &Ukloni", IDC_REMOVE_BTN,131,62,44,14 + LTEXT "&Toolbar tasteri:", -1,182,5,78,10 + LISTBOX IDC_TOOLBARBTN_LBOX, 182,17,120,100,LBS_NOTIFY | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_BORDER | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP +END + +STRINGTABLE +{ + IDS_CLOSE "Zatvori" +} + +STRINGTABLE +{ + IDM_TODAY "Danas:" + IDM_GOTODAY "Idi na danas" +} + +STRINGTABLE +{ + IDS_SEPARATOR "Odvajanje" +} + +STRINGTABLE +{ + HKY_NONE "Ništa" +} + +LANGUAGE LANG_SERBIAN, SUBLANG_SERBIAN_CYRILLIC + +IDD_PROPSHEET DIALOG 0, 0, 220, 140 +STYLE DS_CONTEXTHELP | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE +CAPTION "Детаљи за %s" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "ОK", IDOK,4,122,50,14, WS_TABSTOP | WS_GROUP + PUSHBUTTON "Откажи", IDCANCEL,58,122,50,14 + PUSHBUTTON "&Примени", IDC_APPLY_BUTTON,112,122,50,14,WS_DISABLED + PUSHBUTTON "Помоћ", IDHELP,166,122,50,14,WS_TABSTOP|WS_GROUP + CONTROL "Таб", IDC_TABCONTROL,"SysTabControl32",WS_CLIPSIBLINGS|WS_GROUP|WS_TABSTOP|TCS_MULTILINE,4,4,212,114 +END + + +IDD_WIZARD DIALOG 0, 0, 290, 159 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE +CAPTION "Чаробњак" +FONT 8, "MS Shell Dlg" +BEGIN + PUSHBUTTON "< &Назад", IDC_BACK_BUTTON,71,138,50,14 + DEFPUSHBUTTON "&Следеће >", IDC_NEXT_BUTTON,121,138,50,14 + DEFPUSHBUTTON "Заврши", IDC_FINISH_BUTTON,121,138,50,14 + PUSHBUTTON "Откажи", IDCANCEL,178,138,50,14 + PUSHBUTTON "Помоћ", IDHELP,235,138,50,14,WS_GROUP + LTEXT "", IDC_SUNKEN_LINE,7,129,278,1,SS_SUNKEN + CONTROL "Таб", IDC_TABCONTROL,"SysTabControl32",WS_CLIPSIBLINGS | WS_DISABLED,7,7,258,5 + LTEXT "", IDC_SUNKEN_LINEHEADER,0,35,290,1,SS_LEFT | SS_SUNKEN | WS_CHILD | WS_VISIBLE +END + + +IDD_TBCUSTOMIZE DIALOG 10, 20, 357, 125 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Подеси Тулбар" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Затвори", IDCANCEL,308,6,44,14 + PUSHBUTTON "Р&есетуј", IDC_RESET_BTN,308,23,44,14 + PUSHBUTTON "&Помоћ", IDC_HELP_BTN,308,40,44,14 + PUSHBUTTON "Помери &Горе", IDC_MOVEUP_BTN,308,74,44,14 + PUSHBUTTON "Помери &Доле", IDC_MOVEDN_BTN,308,91,44,14 + LTEXT "Д&оступни тастери:", -1,4,5,84,10 + LISTBOX IDC_AVAILBTN_LBOX,4,17,120,100, LBS_NOTIFY | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_BORDER | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP + PUSHBUTTON "&Додај ->", IDOK, 131, 42, 44, 14 + PUSHBUTTON "<- &Уклони", IDC_REMOVE_BTN,131,62,44,14 + LTEXT "&Тулбар тастери:", -1,182,5,78,10 + LISTBOX IDC_TOOLBARBTN_LBOX, 182,17,120,100,LBS_NOTIFY | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_BORDER | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP +END + +STRINGTABLE +{ + IDS_CLOSE "Затвори" +} + +STRINGTABLE +{ + IDM_TODAY "Данас:" + IDM_GOTODAY "Иди на данас" +} + +STRINGTABLE +{ + IDS_SEPARATOR "Одвајање" +} + +STRINGTABLE +{ + HKY_NONE "Ништа" +} diff --git a/dll/win32/comctl32/comctl_Sv.rc b/dll/win32/comctl32/comctl_Sv.rc index 18bfefc6635..e66b379217d 100644 --- a/dll/win32/comctl32/comctl_Sv.rc +++ b/dll/win32/comctl32/comctl_Sv.rc @@ -20,7 +20,7 @@ LANGUAGE LANG_SWEDISH, SUBLANG_NEUTRAL -IDD_PROPSHEET DIALOG DISCARDABLE 0, 0, 220, 140 +IDD_PROPSHEET DIALOG 0, 0, 220, 140 STYLE DS_CONTEXTHELP | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE CAPTION "Egenskaper fr %s" FONT 8, "MS Shell Dlg" @@ -33,7 +33,7 @@ BEGIN END -IDD_WIZARD DIALOG DISCARDABLE 0, 0, 290, 159 +IDD_WIZARD DIALOG 0, 0, 290, 159 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE CAPTION "Guide" FONT 8, "MS Shell Dlg" @@ -49,7 +49,7 @@ BEGIN END -IDD_TBCUSTOMIZE DIALOG DISCARDABLE 10, 20, 357, 125 +IDD_TBCUSTOMIZE DIALOG 10, 20, 357, 125 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Anpassa verktygsfltet" FONT 8, "MS Shell Dlg" @@ -67,23 +67,23 @@ BEGIN LISTBOX IDC_TOOLBARBTN_LBOX, 182,17,120,100,LBS_NOTIFY | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_BORDER | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_CLOSE "Stng" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDM_TODAY "Idag:" IDM_GOTODAY "G till idag" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_SEPARATOR "Separator" } -STRINGTABLE DISCARDABLE +STRINGTABLE { HKY_NONE "Ingen" } diff --git a/dll/win32/comctl32/comctl_Th.rc b/dll/win32/comctl32/comctl_Th.rc index ff1e1fa4feb..915ecf4df8d 100644 --- a/dll/win32/comctl32/comctl_Th.rc +++ b/dll/win32/comctl32/comctl_Th.rc @@ -20,7 +20,7 @@ LANGUAGE LANG_THAI, SUBLANG_DEFAULT -IDD_PROPSHEET DIALOG DISCARDABLE 0, 0, 220, 140 +IDD_PROPSHEET DIALOG 0, 0, 220, 140 STYLE DS_CONTEXTHELP | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE CAPTION "سѵԢͧ %s" FONT 8, "MS Shell Dlg" @@ -33,7 +33,7 @@ BEGIN END -IDD_WIZARD DIALOG DISCARDABLE 0, 0, 290, 159 +IDD_WIZARD DIALOG 0, 0, 290, 159 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE CAPTION "Wizard" FONT 8, "MS Shell Dlg" @@ -49,7 +49,7 @@ BEGIN END -IDD_TBCUSTOMIZE DIALOG DISCARDABLE 10, 20, 357, 125 +IDD_TBCUSTOMIZE DIALOG 10, 20, 357, 125 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Ѻᶺͧ" FONT 8, "MS Shell Dlg" @@ -67,23 +67,23 @@ BEGIN LISTBOX IDC_TOOLBARBTN_LBOX, 182,17,120,100,LBS_NOTIFY | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_BORDER | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_CLOSE "մ" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDM_TODAY "ѹ:" IDM_GOTODAY "件֧ѹ" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_SEPARATOR "Separator" } -STRINGTABLE DISCARDABLE +STRINGTABLE { HKY_NONE "" } diff --git a/dll/win32/comctl32/comctl_Tr.rc b/dll/win32/comctl32/comctl_Tr.rc index cdc89ca0533..cda21936f5c 100644 --- a/dll/win32/comctl32/comctl_Tr.rc +++ b/dll/win32/comctl32/comctl_Tr.rc @@ -20,7 +20,7 @@ LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT -IDD_PROPSHEET DIALOG DISCARDABLE 0, 0, 220, 140 +IDD_PROPSHEET DIALOG 0, 0, 220, 140 STYLE DS_CONTEXTHELP | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE CAPTION "zellikler: %s" FONT 8, "MS Shell Dlg" @@ -33,7 +33,7 @@ BEGIN END -IDD_WIZARD DIALOG DISCARDABLE 0, 0, 290, 159 +IDD_WIZARD DIALOG 0, 0, 290, 159 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE CAPTION "Sihirbaz" FONT 8, "MS Shell Dlg" @@ -49,7 +49,7 @@ BEGIN END -IDD_TBCUSTOMIZE DIALOG DISCARDABLE 10, 20, 357, 125 +IDD_TBCUSTOMIZE DIALOG 10, 20, 357, 125 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Ara ubuunu zelletir" FONT 8, "MS Shell Dlg" @@ -67,23 +67,23 @@ BEGIN LISTBOX IDC_TOOLBARBTN_LBOX, 182,17,120,100,LBS_NOTIFY | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_BORDER | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_CLOSE "Kapat" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDM_TODAY "Bugn:" IDM_GOTODAY "Bugne git" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_SEPARATOR "Ayra" } -STRINGTABLE DISCARDABLE +STRINGTABLE { HKY_NONE "Hibiri" } diff --git a/dll/win32/comctl32/comctl_Uk.rc b/dll/win32/comctl32/comctl_Uk.rc index 333eb779c91..3aa29f024f8 100644 --- a/dll/win32/comctl32/comctl_Uk.rc +++ b/dll/win32/comctl32/comctl_Uk.rc @@ -24,7 +24,7 @@ LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT -IDD_PROPSHEET DIALOG DISCARDABLE 0, 0, 220, 140 +IDD_PROPSHEET DIALOG 0, 0, 220, 140 STYLE DS_CONTEXTHELP | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE CAPTION " %s" FONT 8, "MS Shell Dlg" @@ -37,7 +37,7 @@ BEGIN END -IDD_WIZARD DIALOG DISCARDABLE 0, 0, 290, 159 +IDD_WIZARD DIALOG 0, 0, 290, 159 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE CAPTION "" FONT 8, "MS Shell Dlg" @@ -53,7 +53,7 @@ BEGIN END -IDD_TBCUSTOMIZE DIALOG DISCARDABLE 10, 20, 357, 125 +IDD_TBCUSTOMIZE DIALOG 10, 20, 357, 125 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION " " FONT 8, "MS Shell Dlg" @@ -71,23 +71,23 @@ BEGIN LISTBOX IDC_TOOLBARBTN_LBOX, 182,17,120,100,LBS_NOTIFY | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_BORDER | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_CLOSE "" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDM_TODAY ":" IDM_GOTODAY " " } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_SEPARATOR "" } -STRINGTABLE DISCARDABLE +STRINGTABLE { HKY_NONE "" } diff --git a/dll/win32/comctl32/comctl_Zh.rc b/dll/win32/comctl32/comctl_Zh.rc index 8919119cae9..63f22e7aa16 100644 --- a/dll/win32/comctl32/comctl_Zh.rc +++ b/dll/win32/comctl32/comctl_Zh.rc @@ -26,7 +26,7 @@ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED -IDD_PROPSHEET DIALOG DISCARDABLE 0, 0, 220, 140 +IDD_PROPSHEET DIALOG 0, 0, 220, 140 STYLE DS_CONTEXTHELP | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE CAPTION "属性 %s" FONT 9, "MS Shell Dlg" @@ -39,7 +39,7 @@ BEGIN END -IDD_WIZARD DIALOG DISCARDABLE 0, 0, 290, 159 +IDD_WIZARD DIALOG 0, 0, 290, 159 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE CAPTION "向导" FONT 9, "MS Shell Dlg" @@ -55,7 +55,7 @@ BEGIN END -IDD_TBCUSTOMIZE DIALOG DISCARDABLE 10, 20, 357, 125 +IDD_TBCUSTOMIZE DIALOG 10, 20, 357, 125 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "自定义工具栏" FONT 9, "MS Shell Dlg" @@ -73,30 +73,30 @@ BEGIN LISTBOX IDC_TOOLBARBTN_LBOX, 182,17,120,100,LBS_NOTIFY | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_BORDER | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_CLOSE "关闭" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDM_TODAY "今天:" IDM_GOTODAY "转到今天" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_SEPARATOR "分隔符" } -STRINGTABLE DISCARDABLE +STRINGTABLE { HKY_NONE "无" } LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL -IDD_PROPSHEET DIALOG DISCARDABLE 0, 0, 220, 140 +IDD_PROPSHEET DIALOG 0, 0, 220, 140 STYLE DS_CONTEXTHELP | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE CAPTION "屬性 %s" FONT 9, "MS Shell Dlg" @@ -109,7 +109,7 @@ BEGIN END -IDD_WIZARD DIALOG DISCARDABLE 0, 0, 290, 159 +IDD_WIZARD DIALOG 0, 0, 290, 159 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE CAPTION "向導" FONT 9, "MS Shell Dlg" @@ -125,7 +125,7 @@ BEGIN END -IDD_TBCUSTOMIZE DIALOG DISCARDABLE 10, 20, 357, 125 +IDD_TBCUSTOMIZE DIALOG 10, 20, 357, 125 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "自定義工具欄" FONT 9, "MS Shell Dlg" @@ -143,23 +143,23 @@ BEGIN LISTBOX IDC_TOOLBARBTN_LBOX, 182,17,120,100,LBS_NOTIFY | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_BORDER | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_CLOSE "關閉" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDM_TODAY "今天:" IDM_GOTODAY "轉到今天" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_SEPARATOR "分隔符" } -STRINGTABLE DISCARDABLE +STRINGTABLE { HKY_NONE "無" } diff --git a/dll/win32/comctl32/monthcal.c b/dll/win32/comctl32/monthcal.c index a9795e09c40..ded407eca10 100644 --- a/dll/win32/comctl32/monthcal.c +++ b/dll/win32/comctl32/monthcal.c @@ -6,7 +6,7 @@ * Copyright 1999 Chris Morgan and * James Abbatiello * Copyright 2000 Uwe Bonnes - * Copyright 2009 Nikolay Sivov + * Copyright 2009, 2010 Nikolay Sivov * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -65,7 +65,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(monthcal); #define MC_PREVPRESSED 4 /* Prev month button pressed */ #define MC_NEXTPRESSED 8 /* Next month button pressed */ #define MC_PREVNEXTMONTHDELAY 350 /* when continuously pressing `next/prev - month', wait 500 ms before going + month', wait 350 ms before going to the next/prev month */ #define MC_TODAYUPDATEDELAY 120000 /* time between today check for update (2 min) */ @@ -77,6 +77,19 @@ WINE_DEFAULT_DEBUG_CHANNEL(monthcal); /* convert from days to 100 nanoseconds unit - used as FILETIME unit */ #define DAYSTO100NSECS(days) (((ULONGLONG)(days))*24*60*60*10000000) +/* single calendar data */ +typedef struct _CALENDAR_INFO +{ + RECT title; /* rect for the header above the calendar */ + RECT titlemonth; /* the 'month name' text in the header */ + RECT titleyear; /* the 'year number' text in the header */ + RECT wdays; /* week days at top */ + RECT days; /* calendar area */ + RECT weeknums; /* week numbers at left side */ + + SYSTEMTIME month;/* contains calendar main month/year */ +} CALENDAR_INFO; + typedef struct { HWND hwndSelf; @@ -117,19 +130,16 @@ typedef struct SYSTEMTIME minDate; SYSTEMTIME maxDate; - RECT title; /* rect for the header above the calendar */ RECT titlebtnnext; /* the `next month' button in the header */ RECT titlebtnprev; /* the `prev month' button in the header */ - RECT titlemonth; /* the `month name' txt in the header */ - RECT titleyear; /* the `year number' txt in the header */ - RECT wdays; /* week days at top */ - RECT days; /* calendar area */ - RECT weeknums; /* week numbers at left side */ RECT todayrect; /* `today: xx/xx/xx' text rect */ HWND hwndNotify; /* Window to receive the notifications */ HWND hWndYearEdit; /* Window Handle of edit box to handle years */ HWND hWndYearUpDown;/* Window Handle of updown box to handle years */ WNDPROC EditWndProc; /* original Edit window procedure */ + + CALENDAR_INFO *calendars; + INT cal_num; } MONTHCAL_INFO, *LPMONTHCAL_INFO; static const WCHAR themeClass[] = { 'S','c','r','o','l','l','b','a','r',0 }; @@ -464,13 +474,14 @@ static inline void MONTHCAL_GetPrevMonth(SYSTEMTIME *date) /* Returns full date for a first currently visible day */ static void MONTHCAL_GetMinDate(const MONTHCAL_INFO *infoPtr, SYSTEMTIME *date) { - SYSTEMTIME st_first = infoPtr->curSel; - int firstDay; + /* zero indexed calendar has the earliest date */ + SYSTEMTIME st_first = infoPtr->calendars[0].month; + INT firstDay; st_first.wDay = 1; firstDay = MONTHCAL_CalculateDayOfWeek(&st_first, FALSE); - *date = infoPtr->curSel; + *date = infoPtr->calendars[0].month; MONTHCAL_GetPrevMonth(date); date->wDay = MONTHCAL_MonthLength(date->wMonth, date->wYear) + @@ -486,15 +497,16 @@ static void MONTHCAL_GetMinDate(const MONTHCAL_INFO *infoPtr, SYSTEMTIME *date) /* Returns full date for a last currently visible day */ static void MONTHCAL_GetMaxDate(const MONTHCAL_INFO *infoPtr, SYSTEMTIME *date) { - SYSTEMTIME st; + /* the latest date is in latest calendar */ + SYSTEMTIME st, lt_month = infoPtr->calendars[infoPtr->cal_num-1].month; - *date = infoPtr->curSel; + *date = lt_month; MONTHCAL_GetNextMonth(date); MONTHCAL_GetMinDate(infoPtr, &st); /* Use month length to get max day. 42 means max day count in calendar area */ date->wDay = 42 - (MONTHCAL_MonthLength(st.wMonth, st.wYear) - st.wDay + 1) - - MONTHCAL_MonthLength(infoPtr->curSel.wMonth, infoPtr->curSel.wYear); + MONTHCAL_MonthLength(lt_month.wMonth, lt_month.wYear); /* fix day of week */ MONTHCAL_CalculateDayOfWeek(date, TRUE); @@ -504,7 +516,7 @@ static void MONTHCAL_GetMaxDate(const MONTHCAL_INFO *infoPtr, SYSTEMTIME *date) and day in the calendar. day== 0 mean the last day of tha last month */ static int MONTHCAL_CalcDayFromPos(const MONTHCAL_INFO *infoPtr, int x, int y, - int *daypos,int *weekpos) + int *daypos, int *weekpos) { int retval, firstDay; RECT rcClient; @@ -517,9 +529,8 @@ static int MONTHCAL_CalcDayFromPos(const MONTHCAL_INFO *infoPtr, int x, int y, if (x > rcClient.right) x = rcClient.right; - - *daypos = (x - infoPtr->days.left ) / infoPtr->width_increment; - *weekpos = (y - infoPtr->days.top ) / infoPtr->height_increment; + *daypos = (x - infoPtr->calendars[0].days.left ) / infoPtr->width_increment; + *weekpos = (y - infoPtr->calendars[0].days.top ) / infoPtr->height_increment; st.wDay = 1; firstDay = (MONTHCAL_CalculateDayOfWeek(&st, FALSE) + 6 - infoPtr->firstDay) % 7; @@ -569,9 +580,9 @@ static void MONTHCAL_CalcDayXY(const MONTHCAL_INFO *infoPtr, /* x: column(day), y: row(week) */ static inline void MONTHCAL_CalcDayRect(const MONTHCAL_INFO *infoPtr, RECT *r, int x, int y) { - r->left = infoPtr->days.left + x * infoPtr->width_increment; + r->left = infoPtr->calendars[0].days.left + x * infoPtr->width_increment; r->right = r->left + infoPtr->width_increment; - r->top = infoPtr->days.top + y * infoPtr->height_increment; + r->top = infoPtr->calendars[0].days.top + y * infoPtr->height_increment; r->bottom = r->top + infoPtr->textHeight; } @@ -735,23 +746,19 @@ static void MONTHCAL_PaintButton(MONTHCAL_INFO *infoPtr, HDC hdc, BOOL btnNext) } } /* paint a title with buttons and month/year string */ -static void MONTHCAL_PaintTitle(MONTHCAL_INFO *infoPtr, HDC hdc, const PAINTSTRUCT *ps) +static void MONTHCAL_PaintTitle(MONTHCAL_INFO *infoPtr, HDC hdc, const PAINTSTRUCT *ps, INT calIdx) { static const WCHAR fmt_monthW[] = { '%','s',' ','%','l','d',0 }; + RECT *title = &infoPtr->calendars[calIdx].title; WCHAR buf_month[80], buf_fmt[80]; HBRUSH hbr; - RECT *title = &infoPtr->title; SIZE sz; /* fill header box */ - hbr = CreateSolidBrush(infoPtr->titlebk); + hbr = CreateSolidBrush(infoPtr->titlebk); FillRect(hdc, title, hbr); DeleteObject(hbr); - /* navigation buttons */ - MONTHCAL_PaintButton(infoPtr, hdc, FALSE); - MONTHCAL_PaintButton(infoPtr, hdc, TRUE); - /* month/year string */ SetBkColor(hdc, infoPtr->titlebk); SetTextColor(hdc, infoPtr->titletxt); @@ -766,15 +773,15 @@ static void MONTHCAL_PaintTitle(MONTHCAL_INFO *infoPtr, HDC hdc, const PAINTSTRU /* update title rectangles with current month - used while testing hits */ GetTextExtentPoint32W(hdc, buf_fmt, strlenW(buf_fmt), &sz); - infoPtr->titlemonth.left = title->right / 2 + title->left / 2 - sz.cx / 2; - infoPtr->titleyear.right = title->right / 2 + title->left / 2 + sz.cx / 2; + infoPtr->calendars[calIdx].titlemonth.left = title->right / 2 + title->left / 2 - sz.cx / 2; + infoPtr->calendars[calIdx].titleyear.right = title->right / 2 + title->left / 2 + sz.cx / 2; GetTextExtentPoint32W(hdc, buf_month, strlenW(buf_month), &sz); - infoPtr->titlemonth.right = infoPtr->titlemonth.left + sz.cx; - infoPtr->titleyear.left = infoPtr->titlemonth.right; + infoPtr->calendars[calIdx].titlemonth.right = infoPtr->calendars[calIdx].titlemonth.left + sz.cx; + infoPtr->calendars[calIdx].titleyear.left = infoPtr->calendars[calIdx].titlemonth.right; } -static void MONTHCAL_PaintWeeknumbers(MONTHCAL_INFO *infoPtr, HDC hdc, const PAINTSTRUCT *ps) +static void MONTHCAL_PaintWeeknumbers(const MONTHCAL_INFO *infoPtr, HDC hdc, const PAINTSTRUCT *ps, INT calIdx) { static const WCHAR fmt_weekW[] = { '%','d',0 }; INT mindays, weeknum, weeknum1, startofprescal; @@ -849,7 +856,7 @@ static void MONTHCAL_PaintWeeknumbers(MONTHCAL_INFO *infoPtr, HDC hdc, const PAI if ((infoPtr->firstDay - weeknum1) % 7 > mindays) weeknum++; } - r = infoPtr->weeknums; + r = infoPtr->calendars[calIdx].weeknums; r.bottom = r.top + infoPtr->height_increment; for(i = 0; i < 6; i++) { @@ -870,99 +877,17 @@ static void MONTHCAL_PaintWeeknumbers(MONTHCAL_INFO *infoPtr, HDC hdc, const PAI } /* line separator for week numbers column */ - MoveToEx(hdc, infoPtr->weeknums.right, infoPtr->weeknums.top + 3 , NULL); - LineTo(hdc, infoPtr->weeknums.right, infoPtr->weeknums.bottom); + MoveToEx(hdc, infoPtr->calendars[calIdx].weeknums.right, infoPtr->calendars[calIdx].weeknums.top + 3 , NULL); + LineTo(hdc, infoPtr->calendars[calIdx].weeknums.right, infoPtr->calendars[calIdx].weeknums.bottom); } -/* paint a calendar area */ -static void MONTHCAL_PaintCalendar(MONTHCAL_INFO *infoPtr, HDC hdc, const PAINTSTRUCT *ps) +/* bottom today date */ +static void MONTHCAL_PaintTodayTitle(const MONTHCAL_INFO *infoPtr, HDC hdc, const PAINTSTRUCT *ps) { - INT prev_month, i, j; - WCHAR buf[80]; - HBRUSH hbr; - RECT r; - int mask; - SYSTEMTIME st; - - UnionRect(&r, &infoPtr->wdays, &infoPtr->todayrect); - - hbr = CreateSolidBrush(infoPtr->monthbk); - FillRect(hdc, &r, hbr); - DeleteObject(hbr); - - /* draw line under day abbreviations */ - MoveToEx(hdc, infoPtr->days.left + 3, - infoPtr->title.bottom + infoPtr->textHeight + 1, NULL); - LineTo(hdc, infoPtr->days.right - 3, - infoPtr->title.bottom + infoPtr->textHeight + 1); - - prev_month = infoPtr->curSel.wMonth - 1; - if(prev_month == 0) prev_month = 12; - - infoPtr->wdays.left = infoPtr->days.left = infoPtr->weeknums.right; - - /* 1. draw day abbreviations */ - SelectObject(hdc, infoPtr->hFont); - SetBkColor(hdc, infoPtr->monthbk); - SetTextColor(hdc, infoPtr->trailingtxt); - /* rectangle to draw a single day abbreviation within */ - r = infoPtr->wdays; - r.right = r.left + infoPtr->width_increment; - - i = infoPtr->firstDay; - for(j = 0; j < 7; j++) { - GetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_SABBREVDAYNAME1 + (i+j+6)%7, buf, countof(buf)); - DrawTextW(hdc, buf, strlenW(buf), &r, DT_CENTER | DT_VCENTER | DT_SINGLELINE); - OffsetRect(&r, infoPtr->width_increment, 0); - } - - /* 2. previous and next months */ - if (!(infoPtr->dwStyle & MCS_NOTRAILINGDATES)) - { - SYSTEMTIME st_max; - - SetTextColor(hdc, infoPtr->trailingtxt); - - MONTHCAL_GetMinDate(infoPtr, &st); - - /* draw prev month */ - mask = 1 << (st.wDay-1); - while(st.wDay <= MONTHCAL_MonthLength(prev_month, infoPtr->curSel.wYear)) { - MONTHCAL_DrawDay(infoPtr, hdc, &st, infoPtr->monthdayState[0] & mask, ps); - mask <<= 1; - st.wDay++; - } - - /* draw next month */ - st = infoPtr->curSel; - st.wDay = 1; - MONTHCAL_GetNextMonth(&st); - MONTHCAL_GetMaxDate(infoPtr, &st_max); - mask = 1; - while(st.wDay <= st_max.wDay) { - MONTHCAL_DrawDay(infoPtr, hdc, &st, infoPtr->monthdayState[2] & mask, ps); - mask <<= 1; - st.wDay++; - } - } - - /* 3. current month */ - SetTextColor(hdc, infoPtr->txt); - st = infoPtr->curSel; - st.wDay = 1; - mask = 1; - while(st.wDay <= MONTHCAL_MonthLength(infoPtr->curSel.wMonth, infoPtr->curSel.wYear)) { - MONTHCAL_DrawDay(infoPtr, hdc, &st, infoPtr->monthdayState[1] & mask, - ps); - mask <<= 1; - st.wDay++; - } - - /* 4. bottom today date */ if(!(infoPtr->dwStyle & MCS_NOTODAY)) { static const WCHAR todayW[] = { 'T','o','d','a','y',':',0 }; static const WCHAR fmt_todayW[] = { '%','s',' ','%','s',0 }; - WCHAR buf_todayW[30], buf_dateW[20]; + WCHAR buf_todayW[30], buf_dateW[20], buf[80]; RECT rtoday; if(!(infoPtr->dwStyle & MCS_NOTODAYCIRCLE)) { @@ -989,8 +914,11 @@ static void MONTHCAL_PaintCalendar(MONTHCAL_INFO *infoPtr, HDC hdc, const PAINTS SelectObject(hdc, infoPtr->hFont); } +} - /* 5. today mark + focus */ +/* today mark + focus */ +static void MONTHCAL_PaintFocusAndCircle(const MONTHCAL_INFO *infoPtr, HDC hdc, const PAINTSTRUCT *ps) +{ if((infoPtr->curSel.wMonth == infoPtr->todaysDate.wMonth) && (infoPtr->curSel.wYear == infoPtr->todaysDate.wYear) && !(infoPtr->dwStyle & MCS_NOTODAYCIRCLE)) @@ -1000,33 +928,146 @@ static void MONTHCAL_PaintCalendar(MONTHCAL_INFO *infoPtr, HDC hdc, const PAINTS if(!MONTHCAL_IsDateEqual(&infoPtr->focusedSel, &st_null)) { + RECT r; MONTHCAL_CalcPosFromDay(infoPtr, &infoPtr->focusedSel, &r); DrawFocusRect(hdc, &r); } } +/* paint a calendar area */ +static void MONTHCAL_PaintCalendar(const MONTHCAL_INFO *infoPtr, HDC hdc, const PAINTSTRUCT *ps, INT calIdx) +{ + INT prev_month, i, j; + WCHAR buf[80]; + HBRUSH hbr; + RECT r, fill_bk_rect; + int mask; + SYSTEMTIME st; + + /* fill whole days area - from week days area to today note rectangle */ + fill_bk_rect = infoPtr->calendars[calIdx].wdays; + fill_bk_rect.bottom = infoPtr->calendars[calIdx].days.bottom + + (infoPtr->todayrect.bottom - infoPtr->todayrect.top); + + hbr = CreateSolidBrush(infoPtr->monthbk); + FillRect(hdc, &fill_bk_rect, hbr); + DeleteObject(hbr); + + /* draw line under day abbreviations */ + MoveToEx(hdc, infoPtr->calendars[calIdx].days.left + 3, + infoPtr->calendars[calIdx].title.bottom + infoPtr->textHeight + 1, NULL); + LineTo(hdc, infoPtr->calendars[calIdx].days.right - 3, + infoPtr->calendars[calIdx].title.bottom + infoPtr->textHeight + 1); + + prev_month = infoPtr->curSel.wMonth - 1; + if (prev_month == 0) prev_month = 12; + + infoPtr->calendars[calIdx].wdays.left = infoPtr->calendars[calIdx].days.left = + infoPtr->calendars[calIdx].weeknums.right; + + /* 1. draw day abbreviations */ + SelectObject(hdc, infoPtr->hFont); + SetBkColor(hdc, infoPtr->monthbk); + SetTextColor(hdc, infoPtr->trailingtxt); + /* rectangle to draw a single day abbreviation within */ + r = infoPtr->calendars[calIdx].wdays; + r.right = r.left + infoPtr->width_increment; + + i = infoPtr->firstDay; + for(j = 0; j < 7; j++) { + GetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_SABBREVDAYNAME1 + (i+j+6)%7, buf, countof(buf)); + DrawTextW(hdc, buf, strlenW(buf), &r, DT_CENTER | DT_VCENTER | DT_SINGLELINE); + OffsetRect(&r, infoPtr->width_increment, 0); + } + + /* 2. previous and next months */ + if (!(infoPtr->dwStyle & MCS_NOTRAILINGDATES) && (calIdx == 0 || calIdx == infoPtr->cal_num - 1)) + { + SYSTEMTIME st_max; + + SetTextColor(hdc, infoPtr->trailingtxt); + + /* draw prev month */ + if (calIdx == 0) + { + MONTHCAL_GetMinDate(infoPtr, &st); + mask = 1 << (st.wDay-1); + + while(st.wDay <= MONTHCAL_MonthLength(prev_month, infoPtr->curSel.wYear)) + { + MONTHCAL_DrawDay(infoPtr, hdc, &st, infoPtr->monthdayState[0] & mask, ps); + mask <<= 1; + st.wDay++; + } + } + + /* draw next month */ + if (calIdx == infoPtr->cal_num - 1) + { + st = infoPtr->curSel; + st.wDay = 1; + MONTHCAL_GetNextMonth(&st); + MONTHCAL_GetMaxDate(infoPtr, &st_max); + mask = 1; + + while(st.wDay <= st_max.wDay) + { + MONTHCAL_DrawDay(infoPtr, hdc, &st, infoPtr->monthdayState[2] & mask, ps); + mask <<= 1; + st.wDay++; + } + } + } + + /* 3. current month */ + SetTextColor(hdc, infoPtr->txt); + st = infoPtr->curSel; + st.wDay = 1; + mask = 1; + while(st.wDay <= MONTHCAL_MonthLength(infoPtr->curSel.wMonth, infoPtr->curSel.wYear)) { + MONTHCAL_DrawDay(infoPtr, hdc, &st, infoPtr->monthdayState[1] & mask, ps); + mask <<= 1; + st.wDay++; + } +} + static void MONTHCAL_Refresh(MONTHCAL_INFO *infoPtr, HDC hdc, const PAINTSTRUCT *ps) { - RECT *title = &infoPtr->title; COLORREF old_text_clr, old_bk_clr; HFONT old_font; - RECT r_temp; + INT i; old_text_clr = SetTextColor(hdc, comctl32_color.clrWindowText); old_bk_clr = GetBkColor(hdc); old_font = GetCurrentObject(hdc, OBJ_FONT); - /* draw title, redraw all its elements */ - if(IntersectRect(&r_temp, &(ps->rcPaint), title)) - MONTHCAL_PaintTitle(infoPtr, hdc, ps); + for (i = 0; i < infoPtr->cal_num; i++) + { + RECT *title = &infoPtr->calendars[i].title; + RECT r; - /* draw calendar area */ - UnionRect(&r_temp, &infoPtr->wdays, &infoPtr->todayrect); - if(IntersectRect(&r_temp, &(ps->rcPaint), &r_temp)) - MONTHCAL_PaintCalendar(infoPtr, hdc, ps); + /* draw title, redraw all its elements */ + if (IntersectRect(&r, &(ps->rcPaint), title)) + MONTHCAL_PaintTitle(infoPtr, hdc, ps, i); - /* week numbers */ - MONTHCAL_PaintWeeknumbers(infoPtr, hdc, ps); + /* draw calendar area */ + UnionRect(&r, &infoPtr->calendars[i].wdays, &infoPtr->todayrect); + if (IntersectRect(&r, &(ps->rcPaint), &r)) + MONTHCAL_PaintCalendar(infoPtr, hdc, ps, i); + + /* week numbers */ + MONTHCAL_PaintWeeknumbers(infoPtr, hdc, ps, i); + } + + /* focus and today rectangle */ + MONTHCAL_PaintFocusAndCircle(infoPtr, hdc, ps); + + /* today at the bottom left */ + MONTHCAL_PaintTodayTitle(infoPtr, hdc, ps); + + /* navigation buttons */ + MONTHCAL_PaintButton(infoPtr, hdc, FALSE); + MONTHCAL_PaintButton(infoPtr, hdc, TRUE); /* restore context */ SetBkColor(hdc, old_bk_clr); @@ -1041,9 +1082,9 @@ MONTHCAL_GetMinReqRect(const MONTHCAL_INFO *infoPtr, LPRECT lpRect) if(!lpRect) return FALSE; - lpRect->left = infoPtr->title.left; - lpRect->top = infoPtr->title.top; - lpRect->right = infoPtr->title.right; + lpRect->left = infoPtr->calendars[0].title.left; + lpRect->top = infoPtr->calendars[0].title.top; + lpRect->right = infoPtr->calendars[0].title.right; lpRect->bottom = infoPtr->todayrect.bottom; AdjustWindowRect(lpRect, infoPtr->dwStyle, FALSE); @@ -1200,7 +1241,8 @@ MONTHCAL_SetFirstDayOfWeek(MONTHCAL_INFO *infoPtr, INT day) { /* Native behaviour for that case is broken: invalid date number >31 got displayed at (0,0) position, current month starts always from - (1,0) position. Should be implemnted here as well. */ + (1,0) position. Should be implemented here as well only if there's + nothing else to do. */ if (day < -1) FIXME("No bug compatibility for day=%d\n", day); @@ -1220,19 +1262,18 @@ MONTHCAL_SetFirstDayOfWeek(MONTHCAL_INFO *infoPtr, INT day) static LRESULT MONTHCAL_GetMonthRange(const MONTHCAL_INFO *infoPtr, DWORD flag, SYSTEMTIME *st) { - TRACE("\n"); + TRACE("flag=%d, st=%p\n", flag, st); if(st) { switch (flag) { case GMR_VISIBLE: { - /*FIXME: currently multicalendar feature isn't implemented, so entirely - visible month is current */ - st[0] = st[1] = infoPtr->curSel; + st[0] = infoPtr->calendars[0].month; + st[1] = infoPtr->calendars[infoPtr->cal_num-1].month; - if (infoPtr->curSel.wMonth == min_allowed_date.wMonth && - infoPtr->curSel.wYear == min_allowed_date.wYear) + if (st[0].wMonth == min_allowed_date.wMonth && + st[0].wYear == min_allowed_date.wYear) { st[0].wDay = min_allowed_date.wDay; } @@ -1242,8 +1283,8 @@ MONTHCAL_GetMonthRange(const MONTHCAL_INFO *infoPtr, DWORD flag, SYSTEMTIME *st) st[1].wDay = MONTHCAL_MonthLength(st[1].wMonth, st[1].wYear); MONTHCAL_CalculateDayOfWeek(&st[1], TRUE); - /* a single current month used */ - return 1; + + return infoPtr->cal_num; } case GMR_DAYSTATE: { @@ -1343,13 +1384,10 @@ MONTHCAL_GetRange(const MONTHCAL_INFO *infoPtr, SYSTEMTIME *range) static LRESULT MONTHCAL_SetDayState(const MONTHCAL_INFO *infoPtr, INT months, MONTHDAYSTATE *states) { - int i; - - TRACE("%d %p\n", months, states); + TRACE("%p %d %p\n", infoPtr, months, states); if(months != infoPtr->monthRange) return 0; - for(i = 0; i < months; i++) - infoPtr->monthdayState[i] = states[i]; + memcpy(infoPtr->monthdayState, states, months*sizeof(MONTHDAYSTATE)); return 1; } @@ -1401,6 +1439,7 @@ MONTHCAL_SetCurSel(MONTHCAL_INFO *infoPtr, SYSTEMTIME *curSel) InvalidateRect(infoPtr->hwndSelf, NULL, FALSE); infoPtr->curSel = *curSel; + infoPtr->calendars[0].month = *curSel; return TRUE; } @@ -1481,6 +1520,7 @@ MONTHCAL_SetSelRange(MONTHCAL_INFO *infoPtr, SYSTEMTIME *range) infoPtr->maxSel = range[0]; } infoPtr->curSel = infoPtr->minSel; + infoPtr->calendars[0].month = infoPtr->minSel; /* update day of week */ MONTHCAL_CalculateDayOfWeek(&infoPtr->minSel, TRUE); @@ -1552,19 +1592,39 @@ MONTHCAL_SetToday(MONTHCAL_INFO *infoPtr, const SYSTEMTIME *today) return TRUE; } +/* returns calendar index containing specified point, or -1 if it's background */ +static INT MONTHCAL_GetCalendarFromPoint(const MONTHCAL_INFO *infoPtr, const POINT *pt) +{ + RECT r; + INT i; + + for (i = 0; i < infoPtr->cal_num; i++) + { + /* whole bounding rectangle allows some optimization to compute */ + r.left = infoPtr->calendars[i].title.left; + r.top = infoPtr->calendars[i].title.top; + r.bottom = infoPtr->calendars[i].days.bottom; + r.right = infoPtr->calendars[i].days.right; + + if (PtInRect(&r, *pt)) return i; + } + + return -1; +} + static LRESULT MONTHCAL_HitTest(const MONTHCAL_INFO *infoPtr, MCHITTESTINFO *lpht) { - UINT x,y; - DWORD retval; - int day,wday,wnum; + INT day, wday, wnum, calIdx; + SYSTEMTIME ht_month; + UINT x, y; if(!lpht || lpht->cbSize < MCHITTESTINFO_V1_SIZE) return -1; x = lpht->pt.x; y = lpht->pt.y; - ZeroMemory(&lpht->st, sizeof(lpht->st)); + memset(&lpht->st, 0, sizeof(lpht->st)); /* Comment in for debugging... TRACE("%d %d wd[%d %d %d %d] d[%d %d %d %d] t[%d %d %d %d] wn[%d %d %d %d]\n", x, y, @@ -1578,87 +1638,106 @@ MONTHCAL_HitTest(const MONTHCAL_INFO *infoPtr, MCHITTESTINFO *lpht) infoPtr->weeknums.top, infoPtr->weeknums.bottom); */ - /* are we in the header? */ - - if(PtInRect(&infoPtr->title, lpht->pt)) { - if(PtInRect(&infoPtr->titlebtnprev, lpht->pt)) { - retval = MCHT_TITLEBTNPREV; - goto done; - } - if(PtInRect(&infoPtr->titlebtnnext, lpht->pt)) { - retval = MCHT_TITLEBTNNEXT; - goto done; - } - if(PtInRect(&infoPtr->titlemonth, lpht->pt)) { - retval = MCHT_TITLEMONTH; - goto done; - } - if(PtInRect(&infoPtr->titleyear, lpht->pt)) { - retval = MCHT_TITLEYEAR; - goto done; - } - - retval = MCHT_TITLE; - goto done; - } - - day = MONTHCAL_CalcDayFromPos(infoPtr,x,y,&wday,&wnum); - if(PtInRect(&infoPtr->wdays, lpht->pt)) { - retval = MCHT_CALENDARDAY; - lpht->st.wYear = infoPtr->curSel.wYear; - lpht->st.wMonth = (day < 1)? infoPtr->curSel.wMonth -1 : infoPtr->curSel.wMonth; - lpht->st.wDay = (day < 1)? - MONTHCAL_MonthLength(infoPtr->curSel.wMonth-1, infoPtr->curSel.wYear) -day : day; - goto done; - } - if(PtInRect(&infoPtr->weeknums, lpht->pt)) { - retval = MCHT_CALENDARWEEKNUM; - lpht->st.wYear = infoPtr->curSel.wYear; - lpht->st.wMonth = (day < 1) ? infoPtr->curSel.wMonth -1 : - (day > MONTHCAL_MonthLength(infoPtr->curSel.wMonth,infoPtr->curSel.wYear)) ? - infoPtr->curSel.wMonth +1 :infoPtr->curSel.wMonth; - lpht->st.wDay = (day < 1 ) ? - MONTHCAL_MonthLength(infoPtr->curSel.wMonth-1,infoPtr->curSel.wYear) -day : - (day > MONTHCAL_MonthLength(infoPtr->curSel.wMonth,infoPtr->curSel.wYear)) ? - day - MONTHCAL_MonthLength(infoPtr->curSel.wMonth,infoPtr->curSel.wYear) : day; - goto done; - } - if(PtInRect(&infoPtr->days, lpht->pt)) + /* guess in what calendar we are */ + calIdx = MONTHCAL_GetCalendarFromPoint(infoPtr, &lpht->pt); + if (calIdx == -1) { - lpht->st.wYear = infoPtr->curSel.wYear; - lpht->st.wMonth = infoPtr->curSel.wMonth; + if (PtInRect(&infoPtr->todayrect, lpht->pt)) + lpht->uHit = MCHT_TODAYLINK; + else + /* outside of calendar area? What's left must be background :-) */ + lpht->uHit = MCHT_CALENDARBK; + + return lpht->uHit; + } + + ht_month = infoPtr->calendars[calIdx].month; + + /* are we in the header? */ + if (PtInRect(&infoPtr->calendars[calIdx].title, lpht->pt)) { + /* FIXME: buttons hittesting could be optimized cause maximum + two calendars have buttons */ + if (calIdx == 0 && PtInRect(&infoPtr->titlebtnprev, lpht->pt)) + { + lpht->uHit = MCHT_TITLEBTNPREV; + } + else if (PtInRect(&infoPtr->titlebtnnext, lpht->pt)) + { + lpht->uHit = MCHT_TITLEBTNNEXT; + } + else if (PtInRect(&infoPtr->calendars[calIdx].titlemonth, lpht->pt)) + { + lpht->uHit = MCHT_TITLEMONTH; + } + else if (PtInRect(&infoPtr->calendars[calIdx].titleyear, lpht->pt)) + { + lpht->uHit = MCHT_TITLEYEAR; + } + else + lpht->uHit = MCHT_TITLE; + + return lpht->uHit; + } + + /* days area (including week days and week numbers */ + day = MONTHCAL_CalcDayFromPos(infoPtr, x, y, &wday, &wnum); + if (PtInRect(&infoPtr->calendars[calIdx].wdays, lpht->pt)) + { + lpht->uHit = MCHT_CALENDARDAY; + lpht->st.wYear = ht_month.wYear; + lpht->st.wMonth = (day < 1) ? ht_month.wMonth -1 : ht_month.wMonth; + lpht->st.wDay = (day < 1) ? + MONTHCAL_MonthLength(ht_month.wMonth-1, ht_month.wYear) - day : day; + } + else if(PtInRect(&infoPtr->calendars[calIdx].weeknums, lpht->pt)) + { + lpht->uHit = MCHT_CALENDARWEEKNUM; + lpht->st.wYear = ht_month.wYear; + + if (day < 1) { + lpht->st.wMonth = ht_month.wMonth - 1; + } + else if (day > MONTHCAL_MonthLength(ht_month.wMonth, ht_month.wYear)) { + lpht->st.wMonth = ht_month.wMonth + 1; + } + else + lpht->st.wMonth = ht_month.wMonth; + + if (day < 1) { + lpht->st.wDay = MONTHCAL_MonthLength(ht_month.wMonth-1, ht_month.wYear) - day; + } + else if (day > MONTHCAL_MonthLength(ht_month.wMonth, ht_month.wYear)) { + lpht->st.wDay = day - MONTHCAL_MonthLength(ht_month.wMonth, ht_month.wYear); + } + else + lpht->st.wDay = day; + } + else if(PtInRect(&infoPtr->calendars[calIdx].days, lpht->pt)) + { + lpht->st.wYear = ht_month.wYear; + lpht->st.wMonth = ht_month.wMonth; if (day < 1) { - retval = MCHT_CALENDARDATEPREV; + lpht->uHit = MCHT_CALENDARDATEPREV; MONTHCAL_GetPrevMonth(&lpht->st); lpht->st.wDay = MONTHCAL_MonthLength(lpht->st.wMonth, lpht->st.wYear) + day; } - else if (day > MONTHCAL_MonthLength(infoPtr->curSel.wMonth, infoPtr->curSel.wYear)) + else if (day > MONTHCAL_MonthLength(ht_month.wMonth, ht_month.wYear)) { - retval = MCHT_CALENDARDATENEXT; + lpht->uHit = MCHT_CALENDARDATENEXT; MONTHCAL_GetNextMonth(&lpht->st); - lpht->st.wDay = day - MONTHCAL_MonthLength(infoPtr->curSel.wMonth, infoPtr->curSel.wYear); + lpht->st.wDay = day - MONTHCAL_MonthLength(ht_month.wMonth, ht_month.wYear); } else { - retval = MCHT_CALENDARDATE; + lpht->uHit = MCHT_CALENDARDATE; lpht->st.wDay = day; } + /* always update day of week */ MONTHCAL_CalculateDayOfWeek(&lpht->st, TRUE); - goto done; - } - if(PtInRect(&infoPtr->todayrect, lpht->pt)) { - retval = MCHT_TODAYLINK; - goto done; } - - /* Hit nothing special? What's left must be background :-) */ - - retval = MCHT_CALENDARBK; - done: - lpht->uHit = retval; - return retval; + return lpht->uHit; } /* MCN_GETDAYSTATE notification helper */ @@ -1666,7 +1745,6 @@ static void MONTHCAL_NotifyDayState(MONTHCAL_INFO *infoPtr) { if(infoPtr->dwStyle & MCS_DAYSTATE) { NMDAYSTATE nmds; - INT i; nmds.nmhdr.hwndFrom = infoPtr->hwndSelf; nmds.nmhdr.idFrom = GetWindowLongPtrW(infoPtr->hwndSelf, GWLP_ID); @@ -1680,8 +1758,7 @@ static void MONTHCAL_NotifyDayState(MONTHCAL_INFO *infoPtr) nmds.stStart.wDay = 1; SendMessageW(infoPtr->hwndNotify, WM_NOTIFY, nmds.nmhdr.idFrom, (LPARAM)&nmds); - for(i = 0; i < infoPtr->monthRange; i++) - infoPtr->monthdayState[i] = nmds.prgDayState[i]; + memcpy(infoPtr->monthdayState, nmds.prgDayState, infoPtr->monthRange*sizeof(MONTHDAYSTATE)); Free(nmds.prgDayState); } @@ -1747,6 +1824,7 @@ MONTHCAL_RButtonUp(MONTHCAL_INFO *infoPtr, LPARAM lParam) menupoint.x, menupoint.y, 0, infoPtr->hwndSelf, NULL)) { infoPtr->curSel = infoPtr->todaysDate; + infoPtr->calendars[0].month = infoPtr->todaysDate; infoPtr->minSel = infoPtr->todaysDate; infoPtr->maxSel = infoPtr->todaysDate; InvalidateRect(infoPtr->hwndSelf, NULL, FALSE); @@ -1807,8 +1885,8 @@ static void MONTHCAL_EditYear(MONTHCAL_INFO *infoPtr) { infoPtr->hWndYearEdit = CreateWindowExW(0, WC_EDITW, 0, WS_VISIBLE | WS_CHILD | ES_READONLY, - infoPtr->titleyear.left + 3, infoPtr->titlebtnnext.top, - infoPtr->titleyear.right - infoPtr->titleyear.left + 4, + infoPtr->calendars[0].titleyear.left + 3, infoPtr->titlebtnnext.top, + infoPtr->calendars[0].titleyear.right - infoPtr->calendars[0].titleyear.left + 4, infoPtr->textHeight, infoPtr->hwndSelf, NULL, NULL, NULL); @@ -1817,7 +1895,7 @@ static void MONTHCAL_EditYear(MONTHCAL_INFO *infoPtr) infoPtr->hWndYearUpDown = CreateWindowExW(0, UPDOWN_CLASSW, 0, WS_VISIBLE | WS_CHILD | UDS_SETBUDDYINT | UDS_NOTHOUSANDS | UDS_ARROWKEYS, - infoPtr->titleyear.right + 7, infoPtr->titlebtnnext.top, + infoPtr->calendars[0].titleyear.right + 7, infoPtr->titlebtnnext.top, 18, infoPtr->textHeight, infoPtr->hwndSelf, NULL, NULL, NULL); @@ -1908,6 +1986,7 @@ MONTHCAL_LButtonDown(MONTHCAL_INFO *infoPtr, LPARAM lParam) case MCHT_TODAYLINK: { infoPtr->curSel = infoPtr->todaysDate; + infoPtr->calendars[0].month = infoPtr->todaysDate; infoPtr->minSel = infoPtr->todaysDate; infoPtr->maxSel = infoPtr->todaysDate; InvalidateRect(infoPtr->hwndSelf, NULL, FALSE); @@ -2159,14 +2238,14 @@ static void MONTHCAL_UpdateSize(MONTHCAL_INFO *infoPtr) { static const WCHAR O0W[] = { '0','0',0 }; HDC hdc = GetDC(infoPtr->hwndSelf); - RECT *title=&infoPtr->title; + RECT *title=&infoPtr->calendars[0].title; RECT *prev=&infoPtr->titlebtnprev; RECT *next=&infoPtr->titlebtnnext; - RECT *titlemonth=&infoPtr->titlemonth; - RECT *titleyear=&infoPtr->titleyear; - RECT *wdays=&infoPtr->wdays; - RECT *weeknumrect=&infoPtr->weeknums; - RECT *days=&infoPtr->days; + RECT *titlemonth=&infoPtr->calendars[0].titlemonth; + RECT *titleyear=&infoPtr->calendars[0].titleyear; + RECT *wdays=&infoPtr->calendars[0].wdays; + RECT *weeknumrect=&infoPtr->calendars[0].weeknums; + RECT *days=&infoPtr->calendars[0].days; RECT *todayrect=&infoPtr->todayrect; SIZE size, sz; TEXTMETRICW tm; @@ -2383,14 +2462,18 @@ MONTHCAL_Create(HWND hwnd, LPCREATESTRUCTW lpcs) infoPtr = Alloc(sizeof(MONTHCAL_INFO)); SetWindowLongPtrW(hwnd, 0, (DWORD_PTR)infoPtr); - if(infoPtr == NULL) { - ERR( "could not allocate info memory!\n"); + if (infoPtr == NULL) { + ERR("could not allocate info memory!\n"); return 0; } infoPtr->hwndSelf = hwnd; infoPtr->hwndNotify = lpcs->hwndParent; infoPtr->dwStyle = GetWindowLongW(hwnd, GWL_STYLE); + infoPtr->calendars = Alloc(sizeof(CALENDAR_INFO)); + if (!infoPtr->calendars) goto fail; + + infoPtr->cal_num = 1; MONTHCAL_SetFont(infoPtr, GetStockObject(DEFAULT_GUI_FONT), FALSE); @@ -2402,7 +2485,10 @@ MONTHCAL_Create(HWND hwnd, LPCREATESTRUCTW lpcs) infoPtr->maxSelCount = (infoPtr->dwStyle & MCS_MULTISELECT) ? 7 : 1; infoPtr->monthRange = 3; + infoPtr->monthdayState = Alloc(infoPtr->monthRange * sizeof(MONTHDAYSTATE)); + if (!infoPtr->monthdayState) goto fail; + infoPtr->titlebk = comctl32_color.clrActiveCaption; infoPtr->titletxt = comctl32_color.clrWindow; infoPtr->monthbk = comctl32_color.clrWindow; @@ -2413,6 +2499,7 @@ MONTHCAL_Create(HWND hwnd, LPCREATESTRUCTW lpcs) infoPtr->minSel = infoPtr->todaysDate; infoPtr->maxSel = infoPtr->todaysDate; infoPtr->curSel = infoPtr->todaysDate; + infoPtr->calendars[0].month = infoPtr->todaysDate; infoPtr->isUnicode = TRUE; /* call MONTHCAL_UpdateSize to set all of the dimensions */ @@ -2425,14 +2512,20 @@ MONTHCAL_Create(HWND hwnd, LPCREATESTRUCTW lpcs) OpenThemeData (infoPtr->hwndSelf, themeClass); return 0; -} +fail: + Free(infoPtr->monthdayState); + Free(infoPtr->calendars); + Free(infoPtr); + return 0; +} static LRESULT MONTHCAL_Destroy(MONTHCAL_INFO *infoPtr) { /* free month calendar info data */ Free(infoPtr->monthdayState); + Free(infoPtr->calendars); SetWindowLongPtrW(infoPtr->hwndSelf, 0, 0); CloseThemeData (GetWindowTheme (infoPtr->hwndSelf)); diff --git a/dll/win32/comctl32/propsheet.c b/dll/win32/comctl32/propsheet.c index 2b4729a8e9b..3e313bad59e 100644 --- a/dll/win32/comctl32/propsheet.c +++ b/dll/win32/comctl32/propsheet.c @@ -2421,28 +2421,6 @@ static BOOL PROPSHEET_RemovePage(HWND hwndDlg, return FALSE; } -BOOL CALLBACK -EnumChildProc(HWND hwnd, LPARAM lParam) -{ - WCHAR szType[20]; - RealGetWindowClassW(hwnd, szType, 20); - - if (strcmpW(szType, WC_EDITW) == 0) - { - if (IsWindowEnabled(hwnd) && IsWindowVisible(hwnd)) - { - SetFocus(hwnd); - return FALSE; - } - } - else - { - EnumChildWindows(hwnd, EnumChildProc, 0); - } - - return TRUE; -} - /****************************************************************************** * PROPSHEET_SetWizButtons * @@ -2464,6 +2442,17 @@ static void PROPSHEET_SetWizButtons(HWND hwndDlg, DWORD dwFlags) EnableWindow(hwndNext, FALSE); EnableWindow(hwndFinish, FALSE); + /* set the default pushbutton to an enabled button */ + if (((dwFlags & PSWIZB_FINISH) || psInfo->hasFinish) && !(dwFlags & PSWIZB_DISABLEDFINISH)) + SendMessageW(hwndDlg, DM_SETDEFID, IDC_FINISH_BUTTON, 0); + else if (dwFlags & PSWIZB_NEXT) + SendMessageW(hwndDlg, DM_SETDEFID, IDC_NEXT_BUTTON, 0); + else if (dwFlags & PSWIZB_BACK) + SendMessageW(hwndDlg, DM_SETDEFID, IDC_BACK_BUTTON, 0); + else + SendMessageW(hwndDlg, DM_SETDEFID, IDCANCEL, 0); + + if (dwFlags & PSWIZB_BACK) EnableWindow(hwndBack, TRUE); @@ -2493,31 +2482,6 @@ static void PROPSHEET_SetWizButtons(HWND hwndDlg, DWORD dwFlags) } else if (!(dwFlags & PSWIZB_DISABLEDFINISH)) EnableWindow(hwndFinish, TRUE); - - /* set the default pushbutton to an enabled button and give it focus */ - if (((dwFlags & PSWIZB_FINISH) || psInfo->hasFinish) && !(dwFlags & PSWIZB_DISABLEDFINISH)) - { - SendMessageW(hwndDlg, DM_SETDEFID, IDC_FINISH_BUTTON, 0); - SetFocus(hwndFinish); - } - else if (dwFlags & PSWIZB_NEXT) - { - SendMessageW(hwndDlg, DM_SETDEFID, IDC_NEXT_BUTTON, 0); - SetFocus(hwndNext); - } - else if (dwFlags & PSWIZB_BACK) - { - SendMessageW(hwndDlg, DM_SETDEFID, IDC_BACK_BUTTON, 0); - SetFocus(hwndBack); - } - else - { - SendMessageW(hwndDlg, DM_SETDEFID, IDCANCEL, 0); - SetFocus(GetDlgItem(hwndDlg, IDCANCEL)); - } - - /* Now try to find an edit control that deserves focus */ - EnumChildWindows(PropSheet_GetCurrentPageHwnd(hwndDlg), EnumChildProc, 0); } /****************************************************************************** @@ -3447,9 +3411,14 @@ PROPSHEET_DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) psInfo->hwnd = hwnd; SetWindowLongPtrW(hwnd, DWLP_USER, (DWORD_PTR)psInfo); - /* set up the Next and Back buttons by default */ - PROPSHEET_SetWizButtons(hwnd, PSWIZB_BACK|PSWIZB_NEXT); - SetFocus(GetDlgItem(hwnd, IDC_NEXT_BUTTON)); + if (psInfo->ppshheader.dwFlags & INTRNL_ANY_WIZARD) + { + /* set up the Next and Back buttons by default */ + PROPSHEET_SetWizButtons(hwnd, PSWIZB_BACK|PSWIZB_NEXT); + SetFocus(GetDlgItem(hwnd, IDC_NEXT_BUTTON)); + } + else + SetFocus(GetDlgItem(hwnd, IDOK)); /* Set up fonts */ SystemParametersInfoW (SPI_GETICONTITLELOGFONT, 0, &logFont, 0); diff --git a/dll/win32/comctl32/rsrc.rc b/dll/win32/comctl32/rsrc.rc index f906a7fc8d7..a95d0fb531c 100644 --- a/dll/win32/comctl32/rsrc.rc +++ b/dll/win32/comctl32/rsrc.rc @@ -37,49 +37,49 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL #include "wine/wine_common_ver.rc" /* @makedep: idt_check.bmp */ -IDT_CHECK BITMAP LOADONCALL DISCARDABLE idt_check.bmp +IDT_CHECK BITMAP idt_check.bmp /* @makedep: idb_std_small.bmp */ -IDB_STD_SMALL BITMAP LOADONCALL DISCARDABLE idb_std_small.bmp +IDB_STD_SMALL BITMAP idb_std_small.bmp /* @makedep: idb_std_large.bmp */ -IDB_STD_LARGE BITMAP LOADONCALL DISCARDABLE idb_std_large.bmp +IDB_STD_LARGE BITMAP idb_std_large.bmp /* @makedep: idb_view_small.bmp */ -IDB_VIEW_SMALL BITMAP LOADONCALL DISCARDABLE idb_view_small.bmp +IDB_VIEW_SMALL BITMAP idb_view_small.bmp /* @makedep: idb_view_large.bmp */ -IDB_VIEW_LARGE BITMAP LOADONCALL MOVEABLE DISCARDABLE idb_view_large.bmp +IDB_VIEW_LARGE BITMAP idb_view_large.bmp /* @makedep: idb_hist_small.bmp */ -IDB_HIST_SMALL BITMAP LOADONCALL DISCARDABLE idb_hist_small.bmp +IDB_HIST_SMALL BITMAP idb_hist_small.bmp /* @makedep: idb_hist_large.bmp */ -IDB_HIST_LARGE BITMAP LOADONCALL DISCARDABLE idb_hist_large.bmp +IDB_HIST_LARGE BITMAP idb_hist_large.bmp /* @makedep: idc_copy.cur */ -IDC_COPY CURSOR LOADONCALL DISCARDABLE idc_copy.cur +IDC_COPY CURSOR idc_copy.cur /* @makedep: idc_divider.cur */ -IDC_DIVIDER CURSOR LOADONCALL DISCARDABLE idc_divider.cur +IDC_DIVIDER CURSOR idc_divider.cur /* @makedep: idc_divideropen.cur */ -IDC_DIVIDEROPEN CURSOR LOADONCALL DISCARDABLE idc_divideropen.cur +IDC_DIVIDEROPEN CURSOR idc_divideropen.cur /* @makedep: idc_movebutton.cur */ -IDC_MOVEBUTTON CURSOR LOADONCALL DISCARDABLE idc_movebutton.cur +IDC_MOVEBUTTON CURSOR idc_movebutton.cur /* @makedep: idi_dragarrow.ico */ -IDI_DRAGARROW ICON LOADONCALL DISCARDABLE idi_dragarrow.ico +IDI_DRAGARROW ICON idi_dragarrow.ico /* @makedep: idi_tt_info_sm.ico */ -IDI_TT_INFO_SM ICON LOADONCALL DISCARDABLE idi_tt_info_sm.ico +IDI_TT_INFO_SM ICON idi_tt_info_sm.ico /* @makedep: idi_tt_warn_sm.ico */ -IDI_TT_WARN_SM ICON LOADONCALL DISCARDABLE idi_tt_warn_sm.ico +IDI_TT_WARN_SM ICON idi_tt_warn_sm.ico /* @makedep: idi_tt_error_sm.ico */ -IDI_TT_ERROR_SM ICON LOADONCALL DISCARDABLE idi_tt_error_sm.ico +IDI_TT_ERROR_SM ICON idi_tt_error_sm.ico /* @@ -117,4 +117,5 @@ IDI_TT_ERROR_SM ICON LOADONCALL DISCARDABLE idi_tt_error_sm.ico #include "comctl_Ro.rc" #include "comctl_Ru.rc" #include "comctl_Si.rc" +#include "comctl_Sr.rc" #include "comctl_Zh.rc" diff --git a/dll/win32/comctl32/toolbar.c b/dll/win32/comctl32/toolbar.c index fe782c3e4c3..9b41732c289 100644 --- a/dll/win32/comctl32/toolbar.c +++ b/dll/win32/comctl32/toolbar.c @@ -3028,7 +3028,7 @@ TOOLBAR_AutoSize (TOOLBAR_INFO *infoPtr) if (!(infoPtr->dwStyle & CCS_NORESIZE)) { RECT window_rect; - UINT uPosFlags = SWP_NOZORDER; + UINT uPosFlags = SWP_NOZORDER | SWP_NOACTIVATE; if ((infoPtr->dwStyle & CCS_BOTTOM) == CCS_NOMOVEY) { @@ -3050,9 +3050,8 @@ TOOLBAR_AutoSize (TOOLBAR_INFO *infoPtr) if (infoPtr->dwStyle & WS_BORDER) { - x = y = 1; /* FIXME: this looks wrong */ - cy += GetSystemMetrics(SM_CYEDGE); - cx += GetSystemMetrics(SM_CXEDGE); + cy += 2 * GetSystemMetrics(SM_CXBORDER); + cx += 2 * GetSystemMetrics(SM_CYBORDER); } SetWindowPos(infoPtr->hwndSelf, NULL, x, y, cx, cy, uPosFlags); @@ -4842,7 +4841,7 @@ TOOLBAR_SetRows (TOOLBAR_INFO *infoPtr, WPARAM wParam, LPRECT lprc) SetWindowPos(infoPtr->hwndSelf, NULL, 0, 0, infoPtr->rcBound.right - infoPtr->rcBound.left, infoPtr->rcBound.bottom - infoPtr->rcBound.top, - SWP_NOMOVE); + SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE); } /* repaint toolbar */ @@ -6007,7 +6006,7 @@ TOOLBAR_NCPaint (HWND hwnd, WPARAM wParam, LPARAM lParam) GetWindowRect (hwnd, &rcWindow); OffsetRect (&rcWindow, -rcWindow.left, -rcWindow.top); if( dwStyle & WS_BORDER ) - OffsetRect (&rcWindow, 1, 1); + InflateRect (&rcWindow, -1, -1); DrawEdge (hdc, &rcWindow, EDGE_ETCHED, BF_TOP); } diff --git a/dll/win32/comctl32/tooltips.c b/dll/win32/comctl32/tooltips.c index 8f49c430d4c..688d3b5ec44 100644 --- a/dll/win32/comctl32/tooltips.c +++ b/dll/win32/comctl32/tooltips.c @@ -1986,32 +1986,8 @@ TOOLTIPS_NCHitTest (const TOOLTIPS_INFO *infoPtr, WPARAM wParam, LPARAM lParam) static LRESULT TOOLTIPS_NotifyFormat (TOOLTIPS_INFO *infoPtr, WPARAM wParam, LPARAM lParam) { - TTTOOL_INFO *toolPtr = infoPtr->tools; - INT nResult; + FIXME ("hwnd=%p wParam=%lx lParam=%lx\n", infoPtr->hwndSelf, wParam, lParam); - TRACE("hwnd=%p wParam=%lx lParam=%lx\n", infoPtr->hwndSelf, wParam, lParam); - - if (lParam == NF_QUERY) { - if (toolPtr->bNotifyUnicode) { - return NFR_UNICODE; - } else { - return NFR_ANSI; - } - } - else if (lParam == NF_REQUERY) { - nResult = (INT) SendMessageW (toolPtr->hwnd, WM_NOTIFYFORMAT, - (WPARAM)infoPtr->hwndSelf, (LPARAM)NF_QUERY); - if (nResult == NFR_ANSI) { - toolPtr->bNotifyUnicode = FALSE; - TRACE(" -- WM_NOTIFYFORMAT returns: NFR_ANSI\n"); - } else if (nResult == NFR_UNICODE) { - toolPtr->bNotifyUnicode = TRUE; - TRACE(" -- WM_NOTIFYFORMAT returns: NFR_UNICODE\n"); - } else { - TRACE (" -- WM_NOTIFYFORMAT returns: error!\n"); - } - return nResult; - } return 0; } diff --git a/dll/win32/comctl32/treeview.c b/dll/win32/comctl32/treeview.c index 6dbee0ff4a6..c3b43c4ad13 100644 --- a/dll/win32/comctl32/treeview.c +++ b/dll/win32/comctl32/treeview.c @@ -76,6 +76,7 @@ typedef struct _TREEITEM /* HTREEITEM is a _TREEINFO *. */ int cchTextMax; int iImage; int iSelectedImage; + int iExpandedImage; int cChildren; LPARAM lParam; int iIntegral; /* item height multiplier (1 is normal) */ @@ -248,6 +249,10 @@ static inline BOOL item_changed (const TREEVIEW_ITEM *tiOld, const TREEVIEW_ITEM tiNew->iSelectedImage != I_IMAGECALLBACK) return TRUE; + if ((tvChange->mask & TVIF_EXPANDEDIMAGE) && (tiOld->iExpandedImage != tiNew->iExpandedImage) && + tiNew->iExpandedImage != I_IMAGECALLBACK) + return TRUE; + /* Text has changed and it's not a callback */ if ((tvChange->mask & TVIF_TEXT) && (tiOld->pszText != tiNew->pszText) && tiNew->pszText != LPSTR_TEXTCALLBACKW) @@ -801,6 +806,9 @@ TREEVIEW_UpdateDispInfo(const TREEVIEW_INFO *infoPtr, TREEVIEW_ITEM *wineItem, if (mask & TVIF_SELECTEDIMAGE) wineItem->iSelectedImage = callback.item.iSelectedImage; + if (mask & TVIF_EXPANDEDIMAGE) + wineItem->iExpandedImage = callback.item.iExpandedImage; + if (mask & TVIF_CHILDREN) wineItem->cChildren = callback.item.cChildren; @@ -997,6 +1005,7 @@ TREEVIEW_AllocateItem(const TREEVIEW_INFO *infoPtr) * inc/dec to toggle the images. */ newItem->iImage = 0; newItem->iSelectedImage = 0; + newItem->iExpandedImage = 0; if (DPA_InsertPtr(infoPtr->items, INT_MAX, newItem) == -1) { @@ -1173,6 +1182,16 @@ TREEVIEW_DoSetItemT(const TREEVIEW_INFO *infoPtr, TREEVIEW_ITEM *wineItem, callbackClear |= TVIF_SELECTEDIMAGE; } + if (tvItem->mask & TVIF_EXPANDEDIMAGE) + { + wineItem->iExpandedImage = tvItem->iExpandedImage; + + if (wineItem->iExpandedImage == I_IMAGECALLBACK) + callbackSet |= TVIF_EXPANDEDIMAGE; + else + callbackClear |= TVIF_EXPANDEDIMAGE; + } + if (tvItem->mask & TVIF_PARAM) wineItem->lParam = tvItem->lParam; @@ -1189,6 +1208,11 @@ TREEVIEW_DoSetItemT(const TREEVIEW_INFO *infoPtr, TREEVIEW_ITEM *wineItem, wineItem->state |= (tvItem->state & tvItem->stateMask); } + if (tvItem->mask & TVIF_STATEEX) + { + FIXME("New extended state: %x\n", tvItem->uStateEx); + } + wineItem->callbackMask |= callbackSet; wineItem->callbackMask &= ~callbackClear; @@ -2076,6 +2100,9 @@ TREEVIEW_GetItemT(const TREEVIEW_INFO *infoPtr, LPTVITEMEXW tvItem, BOOL isW) if (tvItem->mask & TVIF_SELECTEDIMAGE) tvItem->iSelectedImage = wineItem->iSelectedImage; + if (tvItem->mask & TVIF_EXPANDEDIMAGE) + tvItem->iExpandedImage = wineItem->iExpandedImage; + if (tvItem->mask & TVIF_STATE) /* Careful here - Windows ignores the stateMask when you get the state That contradicts the documentation, but makes more common sense, masking @@ -2539,8 +2566,8 @@ TREEVIEW_DrawItem(const TREEVIEW_INFO *infoPtr, HDC hdc, TREEVIEW_ITEM *wineItem ILD_NORMAL); } - /* Now, draw the normal image; can be either selected or - * non-selected image. + /* Now, draw the normal image; can be either selected, + * non-selected or expanded image. */ if ((wineItem->state & TVIS_SELECTED) && (wineItem->iSelectedImage >= 0)) @@ -2548,9 +2575,14 @@ TREEVIEW_DrawItem(const TREEVIEW_INFO *infoPtr, HDC hdc, TREEVIEW_ITEM *wineItem /* The item is currently selected */ imageIndex = wineItem->iSelectedImage; } + else if ((wineItem->state & TVIS_EXPANDED) && (wineItem->iExpandedImage >= 0)) + { + /* The item is currently not selected but expanded */ + imageIndex = wineItem->iExpandedImage; + } else { - /* The item is not selected */ + /* The item is not selected and not expanded */ imageIndex = wineItem->iImage; } @@ -3283,6 +3315,7 @@ TREEVIEW_Expand(TREEVIEW_INFO *infoPtr, TREEVIEW_ITEM *wineItem, LONG orgNextTop = 0; RECT scrollRect; TREEVIEW_ITEM *nextItem, *tmpItem; + BOOL sendsNotifications; TRACE("(%p, %p, partial=%d, %d\n", infoPtr, wineItem, bExpandPartial, bUser); @@ -3305,30 +3338,20 @@ TREEVIEW_Expand(TREEVIEW_INFO *infoPtr, TREEVIEW_ITEM *wineItem, TRACE("TVE_EXPAND %p %s\n", wineItem, TREEVIEW_ItemName(wineItem)); - if (bUser || ((wineItem->cChildren != 0) && - !(wineItem->state & TVIS_EXPANDEDONCE))) + sendsNotifications = bUser || ((wineItem->cChildren != 0) && + !(wineItem->state & TVIS_EXPANDEDONCE)); + if (sendsNotifications) { if (!TREEVIEW_SendExpanding(infoPtr, wineItem, TVE_EXPAND)) { TRACE(" TVN_ITEMEXPANDING returned TRUE, exiting...\n"); return FALSE; } - - if (!wineItem->firstChild) - return FALSE; - - wineItem->state |= TVIS_EXPANDED; - TREEVIEW_SendExpanded(infoPtr, wineItem, TVE_EXPAND); - wineItem->state |= TVIS_EXPANDEDONCE; } - else - { - if (!wineItem->firstChild) - return FALSE; + if (!wineItem->firstChild) + return FALSE; - /* this item has already been expanded */ - wineItem->state |= TVIS_EXPANDED; - } + wineItem->state |= TVIS_EXPANDED; if (bExpandPartial) FIXME("TVE_EXPANDPARTIAL not implemented\n"); @@ -3388,6 +3411,11 @@ TREEVIEW_Expand(TREEVIEW_INFO *infoPtr, TREEVIEW_ITEM *wineItem, } } + if (sendsNotifications) { + TREEVIEW_SendExpanded(infoPtr, wineItem, TVE_EXPAND); + wineItem->state |= TVIS_EXPANDEDONCE; + } + return TRUE; } diff --git a/dll/win32/comdlg32/cdlg_Bg.rc b/dll/win32/comdlg32/cdlg_Bg.rc index 5b0865a7c24..b0db421e778 100644 --- a/dll/win32/comdlg32/cdlg_Bg.rc +++ b/dll/win32/comdlg32/cdlg_Bg.rc @@ -26,7 +26,7 @@ LANGUAGE LANG_BULGARIAN, SUBLANG_DEFAULT -OPEN_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134 +OPEN_FILE DIALOG 36, 24, 275, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "" FONT 8, "MS Shell Dlg" @@ -48,7 +48,7 @@ FONT 8, "MS Shell Dlg" } -SAVE_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134 +SAVE_FILE DIALOG 36, 24, 275, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION " ..." FONT 8, "MS Shell Dlg" @@ -70,7 +70,7 @@ FONT 8, "MS Shell Dlg" } -PRINT DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 +PRINT DIALOG 36, 24, 264, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "" FONT 8, "MS Shell Dlg" @@ -93,7 +93,7 @@ FONT 8, "MS Shell Dlg" } -PRINT_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 +PRINT_SETUP DIALOG 36, 24, 264, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION " " FONT 8, "MS Shell Dlg" @@ -119,7 +119,7 @@ FONT 8, "MS Shell Dlg" } -CHOOSE_FONT DIALOG DISCARDABLE 13, 54, 264, 147 +CHOOSE_FONT DIALOG 13, 54, 264, 147 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "" FONT 8, "MS Shell Dlg" @@ -151,7 +151,7 @@ FONT 8, "MS Shell Dlg" } -CHOOSE_COLOR DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 314, 185 +CHOOSE_COLOR DIALOG 36, 24, 314, 185 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "" FONT 8, "MS Shell Dlg" @@ -185,7 +185,7 @@ FONT 8, "MS Shell Dlg" } -FINDDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 281, 62 +FINDDLGORD DIALOG 36, 24, 281, 62 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "" FONT 8, "MS Shell Dlg" @@ -204,7 +204,7 @@ FONT 8, "MS Shell Dlg" } -REPLACEDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 281, 94 +REPLACEDLGORD DIALOG 36, 24, 281, 94 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "" FONT 8, "MS Shell Dlg" @@ -224,7 +224,7 @@ FONT 8, "MS Shell Dlg" } -PRINT32 DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 321, 186 +PRINT32 DIALOG 32, 32, 321, 186 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CONTEXTHELP | DS_3DLOOK CAPTION "" @@ -264,7 +264,7 @@ FONT 8, "MS Shell Dlg" RTEXT "&:", stc3, 112,124, 16,8 } -PRINT32_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 288, 178 +PRINT32_SETUP DIALOG 32, 32, 288, 178 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CONTEXTHELP | DS_3DLOOK CAPTION " " @@ -299,7 +299,7 @@ BEGIN CONTROL "&", rad2,"Button",BS_AUTORADIOBUTTON,224,126,52,12 END -PAGESETUPDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 240, 240 +PAGESETUPDLGORD DIALOG 32, 32, 240, 240 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION " " FONT 8, "MS Shell Dlg" @@ -329,7 +329,7 @@ BEGIN PUSHBUTTON "&...", psh3, 184, 220, 48, 14 END -NEWFILEOPENORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 280, 164 +NEWFILEOPENORD DIALOG 0, 0, 280, 164 STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_CLIPCHILDREN CAPTION "" FONT 8, "MS Shell Dlg" @@ -353,7 +353,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON "&", pshHelp,222,145,50,14 } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_ABOUTBOX "& FolderPicker " IDS_DOCUMENTFOLDERS " " @@ -365,7 +365,7 @@ STRINGTABLE DISCARDABLE IDS_MYCOMPUTER " " } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_SYSTEMFOLDERS " " IDS_LOCALHARDRIVES " " @@ -379,7 +379,7 @@ STRINGTABLE DISCARDABLE IDS_FILENOTEXISTING " " } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_UPFOLDER " " IDS_NEWFOLDER " " @@ -388,7 +388,7 @@ STRINGTABLE DISCARDABLE IDS_TODESKTOP " " } -STRINGTABLE DISCARDABLE +STRINGTABLE { PD32_PRINT_TITLE "" @@ -447,7 +447,7 @@ STRINGTABLE DISCARDABLE PD32_PRINTER_STATUS_POWER_SAVE " ; " } -STRINGTABLE DISCARDABLE /* Color names */ +STRINGTABLE /* Color names */ { IDS_COLOR_BLACK "" IDS_COLOR_MAROON "" /* Maroon? ? */ @@ -467,7 +467,7 @@ STRINGTABLE DISCARDABLE /* Color names */ IDS_COLOR_WHITE "" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_FONT_SIZE " %d %d ." IDS_SAVE_BUTTON "&" diff --git a/dll/win32/comdlg32/cdlg_Ca.rc b/dll/win32/comdlg32/cdlg_Ca.rc index 59cffb12fa3..87d45a2dfda 100644 --- a/dll/win32/comdlg32/cdlg_Ca.rc +++ b/dll/win32/comdlg32/cdlg_Ca.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_CATALAN, SUBLANG_DEFAULT -OPEN_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134 +OPEN_FILE DIALOG 36, 24, 275, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Obrir" FONT 8, "MS Shell Dlg" @@ -47,7 +47,7 @@ FONT 8, "MS Shell Dlg" } -SAVE_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134 +SAVE_FILE DIALOG 36, 24, 275, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Anomenar i desar..." FONT 8, "MS Shell Dlg" @@ -69,14 +69,14 @@ FONT 8, "MS Shell Dlg" } -PRINT DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 +PRINT DIALOG 36, 24, 264, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Impressi" FONT 8, "MS Shell Dlg" { LTEXT "Impressora:", 1088, 6, 6, 40, 9 - LTEXT "Impressi del document", 1089, 60, 6, 150, 9 - GROUPBOX "", 1072, 6, 30, 160, 65, BS_GROUPBOX + LTEXT "", 1089, 60, 6, 150, 9 + GROUPBOX "Print Range", grp1, 6, 30, 160, 65, BS_GROUPBOX RADIOBUTTON "&Sencer", 1056, 16, 45, 60, 12 RADIOBUTTON "&Part seleccionada", 1057, 16, 60, 60, 12 RADIOBUTTON "P&gines", 1058, 16, 75, 60, 12 @@ -92,7 +92,7 @@ FONT 8, "MS Shell Dlg" } -PRINT_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 +PRINT_SETUP DIALOG 36, 24, 264, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Configuraci de la impressi" FONT 8, "MS Shell Dlg" @@ -118,7 +118,7 @@ FONT 8, "MS Shell Dlg" } -CHOOSE_FONT DIALOG DISCARDABLE 13, 54, 264, 147 +CHOOSE_FONT DIALOG 13, 54, 264, 147 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Tipus de lletra" FONT 8, "MS Shell Dlg" @@ -150,7 +150,7 @@ FONT 8, "MS Shell Dlg" } -CHOOSE_COLOR DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 300, 185 +CHOOSE_COLOR DIALOG 36, 24, 300, 185 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Color" FONT 8, "MS Shell Dlg" @@ -184,7 +184,7 @@ FONT 8, "MS Shell Dlg" } -FINDDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 236, 62 +FINDDLGORD DIALOG 36, 24, 236, 62 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Cerca" FONT 8, "MS Shell Dlg" @@ -202,7 +202,7 @@ FONT 8, "MS Shell Dlg" } -REPLACEDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 230, 94 +REPLACEDLGORD DIALOG 36, 24, 230, 94 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Substituci" FONT 8, "MS Shell Dlg" diff --git a/dll/win32/comdlg32/cdlg_Cs.rc b/dll/win32/comdlg32/cdlg_Cs.rc index e3acb801f68..5b8acf95dd6 100644 --- a/dll/win32/comdlg32/cdlg_Cs.rc +++ b/dll/win32/comdlg32/cdlg_Cs.rc @@ -29,7 +29,7 @@ LANGUAGE LANG_CZECH, SUBLANG_DEFAULT /* Czech strings in CP1250 */ -OPEN_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134 +OPEN_FILE DIALOG 36, 24, 275, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Oteven souboru" FONT 8, "MS Shell Dlg" @@ -51,7 +51,7 @@ FONT 8, "MS Shell Dlg" } -SAVE_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134 +SAVE_FILE DIALOG 36, 24, 275, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Ulo pod jmnem..." FONT 8, "MS Shell Dlg" @@ -73,7 +73,7 @@ FONT 8, "MS Shell Dlg" } -PRINT DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 +PRINT DIALOG 36, 24, 264, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Tisk" FONT 8, "MS Shell Dlg" @@ -96,7 +96,7 @@ FONT 8, "MS Shell Dlg" } -PRINT_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 +PRINT_SETUP DIALOG 36, 24, 264, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Nastaven tisku" FONT 8, "MS Shell Dlg" @@ -122,7 +122,7 @@ FONT 8, "MS Shell Dlg" } -CHOOSE_FONT DIALOG DISCARDABLE 13, 54, 264, 147 +CHOOSE_FONT DIALOG 13, 54, 264, 147 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Psmo" FONT 8, "MS Shell Dlg" @@ -154,7 +154,7 @@ FONT 8, "MS Shell Dlg" } -CHOOSE_COLOR DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 300, 185 +CHOOSE_COLOR DIALOG 36, 24, 300, 185 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Barvy" FONT 8, "MS Shell Dlg" @@ -188,7 +188,7 @@ FONT 8, "MS Shell Dlg" } -FINDDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 236, 62 +FINDDLGORD DIALOG 36, 24, 236, 62 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Hledn" FONT 8, "MS Shell Dlg" @@ -207,7 +207,7 @@ FONT 8, "MS Shell Dlg" } -REPLACEDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 230, 94 +REPLACEDLGORD DIALOG 36, 24, 230, 94 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Nahrazen" FONT 8, "MS Shell Dlg" @@ -226,7 +226,7 @@ FONT 8, "MS Shell Dlg" } -PRINT32 DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 288, 186 +PRINT32 DIALOG 32, 32, 288, 186 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CONTEXTHELP | DS_3DLOOK CAPTION "Tisk" @@ -266,7 +266,7 @@ FONT 8, "MS Shell Dlg" RTEXT "&do:", stc3, 100,124, 16,8 } -PRINT32_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 288, 178 +PRINT32_SETUP DIALOG 32, 32, 288, 178 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CONTEXTHELP | DS_3DLOOK CAPTION "Nastaven tisku" @@ -301,7 +301,7 @@ BEGIN CONTROL "N&a ku", rad2,"Button",BS_AUTORADIOBUTTON,224,126,52,12 END -PAGESETUPDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 240, 240 +PAGESETUPDLGORD DIALOG 32, 32, 240, 240 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Nastaven strnky" FONT 8, "MS Shell Dlg" @@ -331,7 +331,7 @@ BEGIN PUSHBUTTON "Tisk&rna...", psh3, 184, 220, 48, 14 END -NEWFILEOPENORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 280, 164 +NEWFILEOPENORD DIALOG 0, 0, 280, 164 STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_CLIPCHILDREN CAPTION "Otevt" FONT 8, "MS Shell Dlg" @@ -355,7 +355,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON "&Npovda", pshHelp,222,145,50,14 } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_ABOUTBOX "&O FolderPicker testu" IDS_DOCUMENTFOLDERS "Sloky dokument" @@ -367,7 +367,7 @@ STRINGTABLE DISCARDABLE IDS_MYCOMPUTER "Mj pota" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_SYSTEMFOLDERS "Systmov sloky" IDS_LOCALHARDRIVES "Mstn jednotky pevnch disk" @@ -381,7 +381,7 @@ STRINGTABLE DISCARDABLE IDS_FILENOTEXISTING "Soubor neexistuje" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_UPFOLDER "O jednu rove ve" IDS_NEWFOLDER "Vytvoit novou sloku" @@ -390,7 +390,7 @@ STRINGTABLE DISCARDABLE IDS_TODESKTOP "Prohlet plochu" } -STRINGTABLE DISCARDABLE +STRINGTABLE { PD32_PRINT_TITLE "Tisk" @@ -446,7 +446,7 @@ podporov PD32_PRINTER_STATUS_POWER_SAVE "sporn reim; " } -STRINGTABLE DISCARDABLE /* Color names */ +STRINGTABLE /* Color names */ { IDS_COLOR_BLACK "ern" IDS_COLOR_MAROON "hnd" @@ -466,7 +466,7 @@ STRINGTABLE DISCARDABLE /* Color names */ IDS_COLOR_WHITE "bl" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_FONT_SIZE "Urete velikost fontu mezi %d a %d body." IDS_SAVE_BUTTON "&Uloit" diff --git a/dll/win32/comdlg32/cdlg_Da.rc b/dll/win32/comdlg32/cdlg_Da.rc index 4502c93d3d8..2d92bef30bd 100644 --- a/dll/win32/comdlg32/cdlg_Da.rc +++ b/dll/win32/comdlg32/cdlg_Da.rc @@ -29,7 +29,7 @@ LANGUAGE LANG_DANISH, SUBLANG_DEFAULT -OPEN_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134 +OPEN_FILE DIALOG 36, 24, 275, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Åbn" FONT 8, "MS Shell Dlg" @@ -51,7 +51,7 @@ FONT 8, "MS Shell Dlg" } -SAVE_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134 +SAVE_FILE DIALOG 36, 24, 275, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Gem som..." FONT 8, "MS Shell Dlg" @@ -73,7 +73,7 @@ FONT 8, "MS Shell Dlg" } -PRINT DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 +PRINT DIALOG 36, 24, 264, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Udskriv" FONT 8, "MS Shell Dlg" @@ -96,7 +96,7 @@ FONT 8, "MS Shell Dlg" } -PRINT_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 +PRINT_SETUP DIALOG 36, 24, 264, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Udskriftsindstilling" FONT 8, "MS Shell Dlg" @@ -122,7 +122,7 @@ FONT 8, "MS Shell Dlg" } -CHOOSE_FONT DIALOG DISCARDABLE 13, 54, 264, 147 +CHOOSE_FONT DIALOG 13, 54, 264, 147 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Skrifttyper" FONT 8, "MS Shell Dlg" @@ -154,7 +154,7 @@ FONT 8, "MS Shell Dlg" } -CHOOSE_COLOR DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 300, 185 +CHOOSE_COLOR DIALOG 36, 24, 300, 185 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Farve" FONT 8, "MS Shell Dlg" @@ -188,7 +188,7 @@ FONT 8, "MS Shell Dlg" } -FINDDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 236, 62 +FINDDLGORD DIALOG 36, 24, 236, 62 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Find" FONT 8, "MS Shell Dlg" @@ -207,7 +207,7 @@ FONT 8, "MS Shell Dlg" } -REPLACEDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 230, 94 +REPLACEDLGORD DIALOG 36, 24, 230, 94 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Erstat" FONT 8, "MS Shell Dlg" @@ -227,7 +227,7 @@ FONT 8, "MS Shell Dlg" } -PRINT32 DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 288, 186 +PRINT32 DIALOG 32, 32, 288, 186 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CONTEXTHELP | DS_3DLOOK CAPTION "Udskriv" @@ -267,7 +267,7 @@ FONT 8, "MS Shell Dlg" RTEXT "&til:", stc3, 100,124, 16,8 } -PRINT32_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 288, 178 +PRINT32_SETUP DIALOG 32, 32, 288, 178 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CONTEXTHELP | DS_3DLOOK CAPTION "Printer Indstillinger" @@ -302,7 +302,7 @@ BEGIN CONTROL "L&andskab", rad2,"Button",BS_AUTORADIOBUTTON,224,126,52,12 END -PAGESETUPDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 240, 240 +PAGESETUPDLGORD DIALOG 32, 32, 240, 240 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Papir opsætning" FONT 8, "MS Shell Dlg" @@ -332,7 +332,7 @@ BEGIN PUSHBUTTON "P&rinter...", psh3, 184, 220, 48, 14 END -NEWFILEOPENORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 280, 164 +NEWFILEOPENORD DIALOG 0, 0, 280, 164 STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_CLIPCHILDREN CAPTION "Åbn" FONT 8, "MS Shell Dlg" @@ -356,7 +356,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON "&Hjælp", pshHelp,222,145,50,14 } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_ABOUTBOX "&Om FolderPicker Test" IDS_DOCUMENTFOLDERS "Dokument foldere" @@ -368,7 +368,7 @@ STRINGTABLE DISCARDABLE IDS_MYCOMPUTER "Min computer" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_SYSTEMFOLDERS "System mapper" IDS_LOCALHARDRIVES "Lokale harddiske" @@ -382,7 +382,7 @@ STRINGTABLE DISCARDABLE IDS_FILENOTEXISTING "Filen eksisterer ikke." } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_UPFOLDER "Et niveau op" IDS_NEWFOLDER "Opret ny mappe" @@ -391,7 +391,7 @@ STRINGTABLE DISCARDABLE IDS_TODESKTOP "Gennemse skrivebordet" } -STRINGTABLE DISCARDABLE +STRINGTABLE { PD32_PRINT_TITLE "Udskriv" @@ -448,7 +448,7 @@ Installer venligst en og prøv igen." PD32_PRINTER_STATUS_POWER_SAVE "Energispare mode; " } -STRINGTABLE DISCARDABLE /* Font styles */ +STRINGTABLE /* Font styles */ { IDS_FONT_REGULAR "Normal" IDS_FONT_BOLD "Fed" @@ -458,7 +458,7 @@ STRINGTABLE DISCARDABLE /* Font styles */ -STRINGTABLE DISCARDABLE /* Color names */ +STRINGTABLE /* Color names */ { IDS_COLOR_BLACK "Sort" IDS_COLOR_MAROON "Mørkerød" @@ -479,7 +479,7 @@ STRINGTABLE DISCARDABLE /* Color names */ } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_FONT_SIZE "Vælg en skrift størrelse mellem %d og %d punkter." IDS_SAVE_BUTTON "&Gem" diff --git a/dll/win32/comdlg32/cdlg_De.rc b/dll/win32/comdlg32/cdlg_De.rc index 787a85e0f0c..a471584a992 100644 --- a/dll/win32/comdlg32/cdlg_De.rc +++ b/dll/win32/comdlg32/cdlg_De.rc @@ -28,7 +28,7 @@ LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL -OPEN_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134 +OPEN_FILE DIALOG 36, 24, 275, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Öffnen" FONT 8, "MS Shell Dlg" @@ -50,7 +50,7 @@ FONT 8, "MS Shell Dlg" } -SAVE_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134 +SAVE_FILE DIALOG 36, 24, 275, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Speichern als..." FONT 8, "MS Shell Dlg" @@ -72,7 +72,7 @@ FONT 8, "MS Shell Dlg" } -PRINT DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 +PRINT DIALOG 36, 24, 264, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Drucken" FONT 8, "MS Shell Dlg" @@ -95,7 +95,7 @@ FONT 8, "MS Shell Dlg" } -PRINT_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 +PRINT_SETUP DIALOG 36, 24, 264, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Druckereinrichtung" FONT 8, "MS Shell Dlg" @@ -120,7 +120,7 @@ FONT 8, "MS Shell Dlg" COMBOBOX 1138, 155, 110, 92, 68, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP } -PAGESETUPDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 240, 240 +PAGESETUPDLGORD DIALOG 32, 32, 240, 240 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Seite einrichten" FONT 8, "MS Shell Dlg" @@ -151,7 +151,7 @@ BEGIN END -CHOOSE_FONT DIALOG DISCARDABLE 13, 54, 264, 147 +CHOOSE_FONT DIALOG 13, 54, 264, 147 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Schriftart" FONT 8, "MS Shell Dlg" @@ -183,7 +183,7 @@ FONT 8, "MS Shell Dlg" } -CHOOSE_COLOR DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 300, 185 +CHOOSE_COLOR DIALOG 36, 24, 300, 185 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Farbe" FONT 8, "MS Shell Dlg" @@ -217,7 +217,7 @@ FONT 8, "MS Shell Dlg" } -FINDDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 30, 73, 241, 63 +FINDDLGORD DIALOG 30, 73, 241, 63 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Suchen" FONT 8, "MS Shell Dlg" @@ -235,7 +235,7 @@ FONT 8, "MS Shell Dlg" } -REPLACEDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 44, 240, 94 +REPLACEDLGORD DIALOG 36, 44, 240, 94 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Ersetzen" FONT 8, "MS Shell Dlg" @@ -253,7 +253,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON "&Hilfe", pshHelp, 175, 74, 60, 14, WS_GROUP | WS_TABSTOP } -NEWFILEOPENORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 280, 164 +NEWFILEOPENORD DIALOG 0, 0, 280, 164 STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_CLIPCHILDREN CAPTION "Öffnen" FONT 8, "MS Shell Dlg" @@ -277,7 +277,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON "&Hilfe", pshHelp,222,145,50,14 } -PRINT32 DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 295, 186 +PRINT32 DIALOG 32, 32, 295, 186 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CONTEXTHELP | DS_3DLOOK CAPTION "Drucken" @@ -317,7 +317,7 @@ FONT 8, "MS Shell Dlg" RTEXT "&bis:", stc3, 100,124, 16,8 } -PRINT32_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 288, 178 +PRINT32_SETUP DIALOG 32, 32, 288, 178 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CONTEXTHELP | DS_3DLOOK CAPTION "Druckereinrichtung" @@ -352,7 +352,7 @@ BEGIN CONTROL "&Querformat", rad2,"Button",BS_AUTORADIOBUTTON,224,126,52,12 END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_ABOUTBOX "Ü&ber den Folderpicker" IDS_DOCUMENTFOLDERS "Dokumenten Ordner" @@ -364,7 +364,7 @@ STRINGTABLE DISCARDABLE IDS_MYCOMPUTER "Arbeitsplatz" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_SYSTEMFOLDERS "System Ordner" IDS_LOCALHARDRIVES "Lokale Festplatten" @@ -378,7 +378,7 @@ STRINGTABLE DISCARDABLE IDS_FILENOTEXISTING "Die Datei existiert nicht" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_UPFOLDER "Eine Verzeichnisebene höher" IDS_NEWFOLDER "Neuen Ordner anlegen" @@ -387,7 +387,7 @@ STRINGTABLE DISCARDABLE IDS_TODESKTOP "Desktopordner anzeigen" } -STRINGTABLE DISCARDABLE +STRINGTABLE { PD32_PRINT_TITLE "Drucken" @@ -442,7 +442,7 @@ Bitte geben sie einen Wert zwischen %d und %d an." PD32_PRINTER_STATUS_POWER_SAVE "Stromsparmodus; " } -STRINGTABLE DISCARDABLE /* Font styles */ +STRINGTABLE /* Font styles */ { IDS_FONT_REGULAR "Normal" IDS_FONT_BOLD "Fett" @@ -450,7 +450,7 @@ STRINGTABLE DISCARDABLE /* Font styles */ IDS_FONT_BOLD_ITALIC "Fett Kursiv" } -STRINGTABLE DISCARDABLE /* Color names */ +STRINGTABLE /* Color names */ { IDS_COLOR_BLACK "Schwarz" IDS_COLOR_MAROON "Kastanienbraun" @@ -470,7 +470,7 @@ STRINGTABLE DISCARDABLE /* Color names */ IDS_COLOR_WHITE "Weiß" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_FONT_SIZE "Wählen Sie eine Schriftgröße zwischen %d und %d Punkten aus." IDS_SAVE_BUTTON "&Speichern" diff --git a/dll/win32/comdlg32/cdlg_El.rc b/dll/win32/comdlg32/cdlg_El.rc index 309cda955c2..505a889395c 100644 --- a/dll/win32/comdlg32/cdlg_El.rc +++ b/dll/win32/comdlg32/cdlg_El.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_GREEK, SUBLANG_DEFAULT -OPEN_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134 +OPEN_FILE DIALOG 36, 24, 275, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "" FONT 8, "MS Shell Dlg" @@ -47,7 +47,7 @@ FONT 8, "MS Shell Dlg" } -SAVE_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134 +SAVE_FILE DIALOG 36, 24, 275, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION " ..." FONT 8, "MS Shell Dlg" @@ -69,7 +69,7 @@ FONT 8, "MS Shell Dlg" } -PRINT DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 +PRINT DIALOG 36, 24, 264, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "" FONT 8, "MS Shell Dlg" @@ -92,7 +92,7 @@ FONT 8, "MS Shell Dlg" } -PRINT_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 +PRINT_SETUP DIALOG 36, 24, 264, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION " " FONT 8, "MS Shell Dlg" @@ -118,7 +118,7 @@ FONT 8, "MS Shell Dlg" } -CHOOSE_FONT DIALOG DISCARDABLE 13, 54, 264, 147 +CHOOSE_FONT DIALOG 13, 54, 264, 147 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "" FONT 8, "MS Shell Dlg" @@ -150,7 +150,7 @@ FONT 8, "MS Shell Dlg" } -CHOOSE_COLOR DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 300, 185 +CHOOSE_COLOR DIALOG 36, 24, 300, 185 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "" FONT 8, "MS Shell Dlg" @@ -184,7 +184,7 @@ FONT 8, "MS Shell Dlg" } -FINDDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 236, 62 +FINDDLGORD DIALOG 36, 24, 236, 62 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "" FONT 8, "MS Shell Dlg" @@ -203,7 +203,7 @@ FONT 8, "MS Shell Dlg" } -REPLACEDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 230, 94 +REPLACEDLGORD DIALOG 36, 24, 230, 94 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "" FONT 8, "MS Shell Dlg" @@ -223,7 +223,7 @@ FONT 8, "MS Shell Dlg" } -PRINT32 DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 288, 186 +PRINT32 DIALOG 32, 32, 288, 186 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CONTEXTHELP | DS_3DLOOK CAPTION "" @@ -263,7 +263,7 @@ FONT 8, "MS Shell Dlg" RTEXT "&:", stc3, 100,124, 16,8 } -PRINT32_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 288, 178 +PRINT32_SETUP DIALOG 32, 32, 288, 178 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CONTEXTHELP | DS_3DLOOK CAPTION " " @@ -298,7 +298,7 @@ BEGIN CONTROL "L&andscape", rad2,"Button",BS_AUTORADIOBUTTON,224,126,52,12 END -PAGESETUPDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 240, 240 +PAGESETUPDLGORD DIALOG 32, 32, 240, 240 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION " " FONT 8, "MS Shell Dlg" @@ -328,7 +328,7 @@ BEGIN PUSHBUTTON "&...", psh3, 184, 220, 48, 14 END -NEWFILEOPENORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 280, 164 +NEWFILEOPENORD DIALOG 0, 0, 280, 164 STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_CLIPCHILDREN CAPTION "" FONT 8, "MS Shell Dlg" @@ -352,7 +352,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON "&", pshHelp,222,145,50,14 } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_ABOUTBOX "&About FolderPicker Test" IDS_DOCUMENTFOLDERS "Document Folders" @@ -364,7 +364,7 @@ STRINGTABLE DISCARDABLE IDS_MYCOMPUTER " " } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_SYSTEMFOLDERS " " IDS_LOCALHARDRIVES " " @@ -378,7 +378,7 @@ STRINGTABLE DISCARDABLE IDS_FILENOTEXISTING " " } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_UPFOLDER " " IDS_NEWFOLDER " " @@ -387,7 +387,7 @@ STRINGTABLE DISCARDABLE IDS_TODESKTOP "Browse to Desktop" } -STRINGTABLE DISCARDABLE +STRINGTABLE { PD32_PRINT_TITLE "" @@ -446,7 +446,7 @@ Please install one and retry." PD32_PRINTER_STATUS_POWER_SAVE "Power save mode; " } -STRINGTABLE DISCARDABLE /* Font styles */ +STRINGTABLE /* Font styles */ { IDS_FONT_REGULAR "" IDS_FONT_BOLD "" @@ -454,7 +454,7 @@ STRINGTABLE DISCARDABLE /* Font styles */ IDS_FONT_BOLD_ITALIC " " } -STRINGTABLE DISCARDABLE /* Color names */ +STRINGTABLE /* Color names */ { IDS_COLOR_BLACK "" IDS_COLOR_MAROON "Maroon" @@ -474,7 +474,7 @@ STRINGTABLE DISCARDABLE /* Color names */ IDS_COLOR_WHITE "" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_FONT_SIZE " %d %d ." IDS_SAVE_BUTTON "&" diff --git a/dll/win32/comdlg32/cdlg_En.rc b/dll/win32/comdlg32/cdlg_En.rc index c6889b41947..15b985ed6ce 100644 --- a/dll/win32/comdlg32/cdlg_En.rc +++ b/dll/win32/comdlg32/cdlg_En.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT -OPEN_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134 +OPEN_FILE DIALOG 36, 24, 275, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Open" FONT 8, "MS Shell Dlg" @@ -47,7 +47,7 @@ FONT 8, "MS Shell Dlg" } -SAVE_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134 +SAVE_FILE DIALOG 36, 24, 275, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Save As..." FONT 8, "MS Shell Dlg" @@ -69,7 +69,7 @@ FONT 8, "MS Shell Dlg" } -PRINT DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 +PRINT DIALOG 36, 24, 264, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Print" FONT 8, "MS Shell Dlg" @@ -92,7 +92,7 @@ FONT 8, "MS Shell Dlg" } -PRINT_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 +PRINT_SETUP DIALOG 36, 24, 264, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Print Setup" FONT 8, "MS Shell Dlg" @@ -118,7 +118,7 @@ FONT 8, "MS Shell Dlg" } -CHOOSE_FONT DIALOG DISCARDABLE 13, 54, 264, 147 +CHOOSE_FONT DIALOG 13, 54, 264, 147 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Font" FONT 8, "MS Shell Dlg" @@ -150,7 +150,7 @@ FONT 8, "MS Shell Dlg" } -CHOOSE_COLOR DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 300, 185 +CHOOSE_COLOR DIALOG 36, 24, 300, 185 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Color" FONT 8, "MS Shell Dlg" @@ -184,7 +184,7 @@ FONT 8, "MS Shell Dlg" } -FINDDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 236, 62 +FINDDLGORD DIALOG 36, 24, 236, 62 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Find" FONT 8, "MS Shell Dlg" @@ -203,7 +203,7 @@ FONT 8, "MS Shell Dlg" } -REPLACEDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 230, 94 +REPLACEDLGORD DIALOG 36, 24, 230, 94 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Replace" FONT 8, "MS Shell Dlg" @@ -223,7 +223,7 @@ FONT 8, "MS Shell Dlg" } -PRINT32 DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 288, 186 +PRINT32 DIALOG 32, 32, 288, 186 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CONTEXTHELP | DS_3DLOOK CAPTION "Print" @@ -263,7 +263,7 @@ FONT 8, "MS Shell Dlg" RTEXT "&to:", stc3, 100,124, 16,8 } -PRINT32_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 288, 178 +PRINT32_SETUP DIALOG 32, 32, 288, 178 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CONTEXTHELP | DS_3DLOOK CAPTION "Print Setup" @@ -298,7 +298,7 @@ BEGIN CONTROL "L&andscape", rad2,"Button",BS_AUTORADIOBUTTON,224,126,52,12 END -PAGESETUPDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 240, 240 +PAGESETUPDLGORD DIALOG 32, 32, 240, 240 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Setup Page" FONT 8, "MS Shell Dlg" @@ -328,7 +328,7 @@ BEGIN PUSHBUTTON "P&rinter...", psh3, 184, 220, 48, 14 END -NEWFILEOPENORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 280, 164 +NEWFILEOPENORD DIALOG 0, 0, 280, 164 STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_CLIPCHILDREN CAPTION "Open" FONT 8, "MS Shell Dlg" @@ -352,7 +352,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON "&Help", pshHelp,222,145,50,14 } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_ABOUTBOX "&About FolderPicker Test" IDS_DOCUMENTFOLDERS "Document Folders" @@ -364,7 +364,7 @@ STRINGTABLE DISCARDABLE IDS_MYCOMPUTER "My Computer" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_SYSTEMFOLDERS "System Folders" IDS_LOCALHARDRIVES "Local Hard Drives" @@ -378,7 +378,7 @@ STRINGTABLE DISCARDABLE IDS_FILENOTEXISTING "File does not exist" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_UPFOLDER "Up One Level" IDS_NEWFOLDER "Create New Folder" @@ -387,7 +387,7 @@ STRINGTABLE DISCARDABLE IDS_TODESKTOP "Browse to Desktop" } -STRINGTABLE DISCARDABLE +STRINGTABLE { PD32_PRINT_TITLE "Print" @@ -446,7 +446,7 @@ Please install one and retry." PD32_PRINTER_STATUS_POWER_SAVE "Power save mode; " } -STRINGTABLE DISCARDABLE /* Font styles */ +STRINGTABLE /* Font styles */ { IDS_FONT_REGULAR "Regular" IDS_FONT_BOLD "Bold" @@ -454,7 +454,7 @@ STRINGTABLE DISCARDABLE /* Font styles */ IDS_FONT_BOLD_ITALIC "Bold Italic" } -STRINGTABLE DISCARDABLE /* Color names */ +STRINGTABLE /* Color names */ { IDS_COLOR_BLACK "Black" IDS_COLOR_MAROON "Maroon" @@ -474,7 +474,7 @@ STRINGTABLE DISCARDABLE /* Color names */ IDS_COLOR_WHITE "White" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_FONT_SIZE "Select a font size between %d and %d points." IDS_SAVE_BUTTON "&Save" @@ -491,7 +491,7 @@ STRINGTABLE DISCARDABLE LANGUAGE LANG_ENGLISH, SUBLANG_NEUTRAL -CHOOSE_FONT DIALOG DISCARDABLE 13, 54, 264, 147 +CHOOSE_FONT DIALOG 13, 54, 264, 147 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Font" FONT 8, "MS Shell Dlg" @@ -523,7 +523,7 @@ FONT 8, "MS Shell Dlg" } -CHOOSE_COLOR DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 300, 185 +CHOOSE_COLOR DIALOG 36, 24, 300, 185 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Colour" FONT 8, "MS Shell Dlg" @@ -556,7 +556,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON "&i",713,300,200,4,14 /* just a dummy: 'i' is like &i in "sol&id" */ } -STRINGTABLE DISCARDABLE /* Color names */ +STRINGTABLE /* Color names */ { IDS_COLOR_BLACK "Black" IDS_COLOR_MAROON "Maroon" diff --git a/dll/win32/comdlg32/cdlg_Es.rc b/dll/win32/comdlg32/cdlg_Es.rc index 8327e6ab015..4934441e4ca 100644 --- a/dll/win32/comdlg32/cdlg_Es.rc +++ b/dll/win32/comdlg32/cdlg_Es.rc @@ -26,7 +26,7 @@ LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL -OPEN_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134 +OPEN_FILE DIALOG 36, 24, 275, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Abrir" FONT 8, "MS Shell Dlg" @@ -48,7 +48,7 @@ FONT 8, "MS Shell Dlg" } -SAVE_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134 +SAVE_FILE DIALOG 36, 24, 275, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Guardar como..." FONT 8, "MS Shell Dlg" @@ -70,7 +70,7 @@ FONT 8, "MS Shell Dlg" } -PRINT DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 +PRINT DIALOG 36, 24, 264, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Imprimir" FONT 8, "MS Shell Dlg" @@ -93,7 +93,7 @@ FONT 8, "MS Shell Dlg" } -PRINT_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 +PRINT_SETUP DIALOG 36, 24, 264, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Configuracin de impresin" FONT 8, "MS Shell Dlg" @@ -119,7 +119,7 @@ FONT 8, "MS Shell Dlg" } -CHOOSE_FONT DIALOG DISCARDABLE 13, 54, 264, 147 +CHOOSE_FONT DIALOG 13, 54, 264, 147 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Fuente" FONT 8, "MS Shell Dlg" @@ -151,7 +151,7 @@ FONT 8, "MS Shell Dlg" } -CHOOSE_COLOR DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 300, 185 +CHOOSE_COLOR DIALOG 36, 24, 300, 185 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Color" FONT 8, "MS Shell Dlg" @@ -185,7 +185,7 @@ FONT 8, "MS Shell Dlg" } -FINDDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 236, 62 +FINDDLGORD DIALOG 36, 24, 236, 62 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Buscar" FONT 8, "MS Shell Dlg" @@ -204,7 +204,7 @@ FONT 8, "MS Shell Dlg" } -REPLACEDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 230, 94 +REPLACEDLGORD DIALOG 36, 24, 230, 94 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Reemplazar" FONT 8, "MS Shell Dlg" @@ -224,7 +224,7 @@ FONT 8, "MS Shell Dlg" } -PRINT32 DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 288, 186 +PRINT32 DIALOG 32, 32, 288, 186 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CONTEXTHELP | DS_3DLOOK CAPTION "Imprimir" @@ -264,7 +264,7 @@ FONT 8, "MS Shell Dlg" RTEXT "&hasta:", stc3, 100,124, 16,8 } -PRINT32_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 288, 178 +PRINT32_SETUP DIALOG 32, 32, 288, 178 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CONTEXTHELP | DS_3DLOOK CAPTION "Configuracin de impresin" @@ -299,7 +299,7 @@ BEGIN CONTROL "A&paisado", rad2,"Button",BS_AUTORADIOBUTTON,224,126,52,12 END -PAGESETUPDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 240, 240 +PAGESETUPDLGORD DIALOG 32, 32, 240, 240 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Configuracin de pgina" FONT 8, "MS Shell Dlg" @@ -329,7 +329,7 @@ BEGIN PUSHBUTTON "&Impresora...", psh3, 184, 220, 48, 14 END -NEWFILEOPENORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 280, 164 +NEWFILEOPENORD DIALOG 0, 0, 280, 164 STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_CLIPCHILDREN CAPTION "Abrir" FONT 8, "MS Shell Dlg" @@ -353,7 +353,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON "&Ayuda", pshHelp,222,145,50,14 } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_ABOUTBOX "&Acerca del test FolderPicker" IDS_DOCUMENTFOLDERS "Carpetas de documentos" @@ -365,7 +365,7 @@ STRINGTABLE DISCARDABLE IDS_MYCOMPUTER "Mi PC" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_SYSTEMFOLDERS "Carpetas del sistema" IDS_LOCALHARDRIVES "Discos duros locales" @@ -379,7 +379,7 @@ STRINGTABLE DISCARDABLE IDS_FILENOTEXISTING "El archivo no existe" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_UPFOLDER "Subir un nivel" IDS_NEWFOLDER "Crear nueva carpeta" @@ -388,7 +388,7 @@ STRINGTABLE DISCARDABLE IDS_TODESKTOP "Explorar el escritorio" } -STRINGTABLE DISCARDABLE +STRINGTABLE { PD32_PRINT_TITLE "Imprimir" @@ -449,7 +449,7 @@ Por favor, instale una y vuelva a intentarlo." PD32_PRINTER_STATUS_POWER_SAVE "Modo de ahorro de energa; " } -STRINGTABLE DISCARDABLE /* Font styles */ +STRINGTABLE /* Font styles */ { IDS_FONT_REGULAR "Normal" IDS_FONT_BOLD "Negrita" @@ -457,7 +457,7 @@ STRINGTABLE DISCARDABLE /* Font styles */ IDS_FONT_BOLD_ITALIC "Cursiva negrita" } -STRINGTABLE DISCARDABLE /* Color names */ +STRINGTABLE /* Color names */ { IDS_COLOR_BLACK "Negro" IDS_COLOR_MAROON "Granate" @@ -477,7 +477,7 @@ STRINGTABLE DISCARDABLE /* Color names */ IDS_COLOR_WHITE "Blanco" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_FONT_SIZE "Elija un tamao de fuente entre %d y %d puntos." IDS_SAVE_BUTTON "&Guardar" diff --git a/dll/win32/comdlg32/cdlg_Fi.rc b/dll/win32/comdlg32/cdlg_Fi.rc index dbe273f9fb6..19f61a94325 100644 --- a/dll/win32/comdlg32/cdlg_Fi.rc +++ b/dll/win32/comdlg32/cdlg_Fi.rc @@ -26,7 +26,7 @@ LANGUAGE LANG_FINNISH, SUBLANG_DEFAULT -OPEN_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134 +OPEN_FILE DIALOG 36, 24, 275, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Avaa" FONT 8, "MS Shell Dlg" @@ -48,7 +48,7 @@ FONT 8, "MS Shell Dlg" } -SAVE_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134 +SAVE_FILE DIALOG 36, 24, 275, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Tallenna nimell" FONT 8, "MS Shell Dlg" @@ -70,7 +70,7 @@ FONT 8, "MS Shell Dlg" } -PRINT DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 +PRINT DIALOG 36, 24, 264, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Tulosta" FONT 8, "MS Shell Dlg" @@ -93,7 +93,7 @@ FONT 8, "MS Shell Dlg" } -PRINT_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 +PRINT_SETUP DIALOG 36, 24, 264, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Kirjoittimen asetukset" FONT 8, "MS Shell Dlg" @@ -119,7 +119,7 @@ FONT 8, "MS Shell Dlg" } -CHOOSE_FONT DIALOG DISCARDABLE 13, 54, 264, 147 +CHOOSE_FONT DIALOG 13, 54, 264, 147 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Fontit" FONT 8, "MS Shell Dlg" @@ -151,7 +151,7 @@ FONT 8, "MS Shell Dlg" } -CHOOSE_COLOR DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 300, 185 +CHOOSE_COLOR DIALOG 36, 24, 300, 185 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Vri" FONT 8, "MS Shell Dlg" @@ -185,7 +185,7 @@ FONT 8, "MS Shell Dlg" } -FINDDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 236, 62 +FINDDLGORD DIALOG 36, 24, 236, 62 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Etsi" FONT 8, "MS Shell Dlg" @@ -204,7 +204,7 @@ FONT 8, "MS Shell Dlg" } -REPLACEDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 230, 94 +REPLACEDLGORD DIALOG 36, 24, 230, 94 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Korvaa" FONT 8, "MS Shell Dlg" @@ -223,7 +223,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON "O&hje", pshHelp , 174, 75, 50, 14, WS_GROUP | WS_TABSTOP } -PRINT32 DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 288, 186 +PRINT32 DIALOG 32, 32, 288, 186 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CONTEXTHELP | DS_3DLOOK CAPTION "Tulosta" @@ -263,7 +263,7 @@ FONT 8, "MS Shell Dlg" RTEXT "Mi&hin:", stc3, 98,124, 20,8 } -PRINT32_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 288, 178 +PRINT32_SETUP DIALOG 32, 32, 288, 178 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CONTEXTHELP | DS_3DLOOK CAPTION "Tulostuksen Asetukset" @@ -298,7 +298,7 @@ BEGIN CONTROL "V&aaka", rad2,"Button",BS_AUTORADIOBUTTON,224,126,52,12 END -PAGESETUPDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 240, 240 +PAGESETUPDLGORD DIALOG 32, 32, 240, 240 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Sivun Asetukset" FONT 8, "MS Shell Dlg" @@ -328,7 +328,7 @@ BEGIN PUSHBUTTON "T&ulostin...", psh3, 184, 220, 48, 14 END -NEWFILEOPENORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 280, 164 +NEWFILEOPENORD DIALOG 0, 0, 280, 164 STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_CLIPCHILDREN CAPTION "Avaa" FONT 8, "MS Shell Dlg" @@ -352,7 +352,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON "&Ohje", pshHelp,222,145,50,14 } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_ABOUTBOX "&Tietoja FolderPicker Test:st" IDS_DOCUMENTFOLDERS "Dokumenttikansiot" @@ -364,7 +364,7 @@ STRINGTABLE DISCARDABLE IDS_MYCOMPUTER "Oma Tietokone" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_SYSTEMFOLDERS "Jrjestemkansiot" IDS_LOCALHARDRIVES "Paikalliset kiintolevyt" @@ -378,7 +378,7 @@ STRINGTABLE DISCARDABLE IDS_FILENOTEXISTING "Tiedostoa ei ole" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_UPFOLDER "Kansio Ylspin" IDS_NEWFOLDER "Luo Uusi Kansio" @@ -387,7 +387,7 @@ STRINGTABLE DISCARDABLE IDS_TODESKTOP "Selaa Typyt" } -STRINGTABLE DISCARDABLE +STRINGTABLE { PD32_PRINT_TITLE "Tulosta" @@ -441,7 +441,7 @@ Please install one and retry." PD32_PRINTER_STATUS_POWER_SAVE "Virranssttila; " } -STRINGTABLE DISCARDABLE /* Color names */ +STRINGTABLE /* Color names */ { IDS_COLOR_BLACK "Musta" IDS_COLOR_MAROON "Kastanjanruskea" @@ -461,7 +461,7 @@ STRINGTABLE DISCARDABLE /* Color names */ IDS_COLOR_WHITE "Valkoinen" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_FONT_SIZE "Valitse fontin koko vlilt %d ja %d pistett." IDS_SAVE_BUTTON "&Tallenna" diff --git a/dll/win32/comdlg32/cdlg_Fr.rc b/dll/win32/comdlg32/cdlg_Fr.rc index 881cbab6f9c..9a3233a7505 100644 --- a/dll/win32/comdlg32/cdlg_Fr.rc +++ b/dll/win32/comdlg32/cdlg_Fr.rc @@ -33,7 +33,7 @@ LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL -OPEN_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134 +OPEN_FILE DIALOG 36, 24, 275, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Ouvrir" FONT 8, "MS Shell Dlg" @@ -55,7 +55,7 @@ FONT 8, "MS Shell Dlg" } -SAVE_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134 +SAVE_FILE DIALOG 36, 24, 275, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Enregistrer sous..." FONT 8, "MS Shell Dlg" @@ -77,7 +77,7 @@ FONT 8, "MS Shell Dlg" } -PRINT DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 +PRINT DIALOG 36, 24, 264, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Imprimer" FONT 8, "MS Shell Dlg" @@ -100,7 +100,7 @@ FONT 8, "MS Shell Dlg" } -PRINT_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 +PRINT_SETUP DIALOG 36, 24, 264, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Configuration de l'impression" FONT 8, "MS Shell Dlg" @@ -126,7 +126,7 @@ FONT 8, "MS Shell Dlg" } -CHOOSE_FONT DIALOG DISCARDABLE 13, 54, 264, 147 +CHOOSE_FONT DIALOG 13, 54, 264, 147 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Police" FONT 8, "MS Shell Dlg" @@ -158,7 +158,7 @@ FONT 8, "MS Shell Dlg" } -CHOOSE_COLOR DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 300, 185 +CHOOSE_COLOR DIALOG 36, 24, 300, 185 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Couleurs" FONT 8, "MS Shell Dlg" @@ -192,7 +192,7 @@ FONT 8, "MS Shell Dlg" } -FINDDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 236, 62 +FINDDLGORD DIALOG 36, 24, 236, 62 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Rechercher" FONT 8, "MS Shell Dlg" @@ -211,7 +211,7 @@ FONT 8, "MS Shell Dlg" } -REPLACEDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 230, 94 +REPLACEDLGORD DIALOG 36, 24, 230, 94 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Remplacer" FONT 8, "MS Shell Dlg" @@ -231,7 +231,7 @@ FONT 8, "MS Shell Dlg" } -PRINT32 DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 288, 186 +PRINT32 DIALOG 32, 32, 288, 186 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CONTEXTHELP | DS_3DLOOK CAPTION "Impression" @@ -271,7 +271,7 @@ FONT 8, "MS Shell Dlg" RTEXT "&à :", stc3, 100,127, 16,8 } -PRINT32_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 288, 178 +PRINT32_SETUP DIALOG 32, 32, 288, 178 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CONTEXTHELP | DS_3DLOOK CAPTION "Configuration de l'imprimante" @@ -306,7 +306,7 @@ BEGIN CONTROL "Pa&ysage", rad2,"Button",BS_AUTORADIOBUTTON,224,126,52,12 END -PAGESETUPDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 240, 240 +PAGESETUPDLGORD DIALOG 32, 32, 240, 240 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Mise en page" FONT 8, "MS Shell Dlg" @@ -336,7 +336,7 @@ BEGIN PUSHBUTTON "&Imprimante...", psh3, 184, 220, 51, 14 END -NEWFILEOPENORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 280, 164 +NEWFILEOPENORD DIALOG 0, 0, 280, 164 STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_CLIPCHILDREN CAPTION "Ouvrir" FONT 8, "MS Shell Dlg" @@ -360,7 +360,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON "Aid&e", pshHelp,222,145,50,14 } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_ABOUTBOX "À propos du sélecteur de répertoires" IDS_DOCUMENTFOLDERS "Répertoires des documents" @@ -372,7 +372,7 @@ STRINGTABLE DISCARDABLE IDS_MYCOMPUTER "Poste de travail" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_SYSTEMFOLDERS "Répertoires système" IDS_LOCALHARDRIVES "Disques locaux" @@ -386,7 +386,7 @@ STRINGTABLE DISCARDABLE IDS_FILENOTEXISTING "Le fichier n'existe pas" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_UPFOLDER "Remonter d'un niveau" IDS_NEWFOLDER "Créer un nouveau dossier" @@ -395,7 +395,7 @@ STRINGTABLE DISCARDABLE IDS_TODESKTOP "Voir le bureau" } -STRINGTABLE DISCARDABLE +STRINGTABLE { PD32_PRINT_TITLE "Imprimer" @@ -454,7 +454,7 @@ Veuillez en installer une et réessayez." PD32_PRINTER_STATUS_POWER_SAVE "Mode économie d'énergie ; " } -STRINGTABLE DISCARDABLE /* Font styles */ +STRINGTABLE /* Font styles */ { IDS_FONT_REGULAR "Normal" IDS_FONT_BOLD "Gras" @@ -463,7 +463,7 @@ STRINGTABLE DISCARDABLE /* Font styles */ } -STRINGTABLE DISCARDABLE /* Color names */ +STRINGTABLE /* Color names */ { IDS_COLOR_BLACK "Noir" IDS_COLOR_MAROON "Marron" @@ -483,7 +483,7 @@ STRINGTABLE DISCARDABLE /* Color names */ IDS_COLOR_WHITE "Blanc" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_FONT_SIZE "Sélectionnez une taille de police entre %d et %d points." IDS_SAVE_BUTTON "&Enregistrer" diff --git a/dll/win32/comdlg32/cdlg_Hu.rc b/dll/win32/comdlg32/cdlg_Hu.rc index f207bc90454..53af1675b06 100644 --- a/dll/win32/comdlg32/cdlg_Hu.rc +++ b/dll/win32/comdlg32/cdlg_Hu.rc @@ -49,7 +49,7 @@ FONT 8, "MS Shell Dlg" CONTROL "&Csak olvasható", 1040, "BUTTON", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 208, 68, 63, 12 } -SAVE_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134 +SAVE_FILE DIALOG 36, 24, 275, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Mentés másként..." FONT 8, "MS Shell Dlg" @@ -71,7 +71,7 @@ FONT 8, "MS Shell Dlg" } -PRINT DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 +PRINT DIALOG 36, 24, 264, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Nyomtatás" FONT 8, "MS Shell Dlg" @@ -93,7 +93,7 @@ FONT 8, "MS Shell Dlg" CHECKBOX "Sűrű", 1041, 160, 100, 50, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP } -PAGESETUPDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 240, 240 +PAGESETUPDLGORD DIALOG 32, 32, 240, 240 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Oldalbeállítás" FONT 8, "MS Shell Dlg" @@ -123,7 +123,7 @@ BEGIN PUSHBUTTON "Ny&omtató...", psh3, 184, 220, 48, 14 END -NEWFILEOPENORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 280, 164 +NEWFILEOPENORD DIALOG 0, 0, 280, 164 STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_CLIPCHILDREN CAPTION "Megnyitás" FONT 8, "MS Shell Dlg" @@ -149,7 +149,7 @@ FONT 8, "MS Shell Dlg" -PRINT_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 +PRINT_SETUP DIALOG 36, 24, 264, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Nyomtató beállítása" FONT 8, "MS Shell Dlg" @@ -175,7 +175,7 @@ FONT 8, "MS Shell Dlg" } -CHOOSE_FONT DIALOG DISCARDABLE 13, 54, 264, 147 +CHOOSE_FONT DIALOG 13, 54, 264, 147 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Betûtípus" FONT 8, "MS Shell Dlg" @@ -207,7 +207,7 @@ FONT 8, "MS Shell Dlg" } -CHOOSE_COLOR DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 300, 185 +CHOOSE_COLOR DIALOG 36, 24, 300, 185 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Szín" FONT 8, "MS Shell Dlg" @@ -240,7 +240,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON "&t",713,300,200,4,14 /* just a dummy: 'i' is like &i in "sol&id" */ } -FINDDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 236, 62 +FINDDLGORD DIALOG 36, 24, 236, 62 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Keresés" FONT 8, "MS Shell Dlg" @@ -275,7 +275,7 @@ BEGIN CONTROL "&Súgó", 1038, "BUTTON", WS_GROUP | WS_TABSTOP, 174, 75, 53, 14 END -PRINT32 DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 288, 186 +PRINT32 DIALOG 32, 32, 288, 186 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CONTEXTHELP | DS_3DLOOK CAPTION "Nyomtatás" @@ -315,7 +315,7 @@ FONT 8, "MS Shell Dlg" RTEXT "Ed&dig:", stc3, 100,124, 16,8 } -PRINT32_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 288, 178 +PRINT32_SETUP DIALOG 32, 32, 288, 178 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CONTEXTHELP | DS_3DLOOK CAPTION "Nyomtatás beállítás" @@ -350,7 +350,7 @@ BEGIN CONTROL "Fe&kvõ", rad2,"Button",BS_AUTORADIOBUTTON,224,126,52,12 END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_ABOUTBOX "M&appaválasztó teszt névjegye" IDS_DOCUMENTFOLDERS "Dokumentum mappák" @@ -362,7 +362,7 @@ STRINGTABLE DISCARDABLE IDS_MYCOMPUTER "Számítógép" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_SYSTEMFOLDERS "Rendszermappák" IDS_LOCALHARDRIVES "Helyi merevlemezek" @@ -376,7 +376,7 @@ STRINGTABLE DISCARDABLE IDS_FILENOTEXISTING "Fájl nem létezik" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_UPFOLDER "Feljebb egy szintet" IDS_NEWFOLDER "Új mappa léterehozása" @@ -385,7 +385,7 @@ STRINGTABLE DISCARDABLE IDS_TODESKTOP "Navigálás az asztalra" } -STRINGTABLE DISCARDABLE +STRINGTABLE { PD32_PRINT_TITLE "Nyomtatás" @@ -443,7 +443,7 @@ Please install one and retry." PD32_PRINTER_STATUS_POWER_SAVE "energiatakarékos mód; " } -STRINGTABLE DISCARDABLE /* Font styles */ +STRINGTABLE /* Font styles */ { IDS_FONT_REGULAR "Szokásos" IDS_FONT_BOLD "Félkövér" @@ -451,7 +451,7 @@ STRINGTABLE DISCARDABLE /* Font styles */ IDS_FONT_BOLD_ITALIC "Félkövér dõlt" } -STRINGTABLE DISCARDABLE /* Color names */ +STRINGTABLE /* Color names */ { IDS_COLOR_BLACK "Fekete" IDS_COLOR_MAROON "Gesztenyebarna" @@ -471,7 +471,7 @@ STRINGTABLE DISCARDABLE /* Color names */ IDS_COLOR_WHITE "Fehér" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_FONT_SIZE "Válasszon betûméretet %d és %d pont között." IDS_SAVE_BUTTON "&Mentés" diff --git a/dll/win32/comdlg32/cdlg_It.rc b/dll/win32/comdlg32/cdlg_It.rc index 1e3c6075271..e8bb6d4cd4b 100644 --- a/dll/win32/comdlg32/cdlg_It.rc +++ b/dll/win32/comdlg32/cdlg_It.rc @@ -31,7 +31,7 @@ LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL -OPEN_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134 +OPEN_FILE DIALOG 36, 24, 275, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Apri" FONT 8, "MS Shell Dlg" @@ -53,7 +53,7 @@ FONT 8, "MS Shell Dlg" } -SAVE_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134 +SAVE_FILE DIALOG 36, 24, 275, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Salva con nome..." FONT 8, "MS Shell Dlg" @@ -75,7 +75,7 @@ FONT 8, "MS Shell Dlg" } -PRINT DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 +PRINT DIALOG 36, 24, 264, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Stampa" FONT 8, "MS Shell Dlg" @@ -98,7 +98,7 @@ FONT 8, "MS Shell Dlg" } -PRINT_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 274, 154 +PRINT_SETUP DIALOG 36, 24, 274, 154 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Configurazione Stampante" FONT 8, "MS Shell Dlg" @@ -124,7 +124,7 @@ FONT 8, "MS Shell Dlg" } -CHOOSE_FONT DIALOG DISCARDABLE 13, 54, 264, 147 +CHOOSE_FONT DIALOG 13, 54, 264, 147 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Carattere" FONT 8, "MS Shell Dlg" @@ -156,7 +156,7 @@ FONT 8, "MS Shell Dlg" } -CHOOSE_COLOR DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 300, 185 +CHOOSE_COLOR DIALOG 36, 24, 300, 185 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Colore" FONT 8, "MS Shell Dlg" @@ -190,7 +190,7 @@ FONT 8, "MS Shell Dlg" } -FINDDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 236, 62 +FINDDLGORD DIALOG 36, 24, 236, 62 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Trova" FONT 8, "MS Shell Dlg" @@ -209,7 +209,7 @@ FONT 8, "MS Shell Dlg" } -REPLACEDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 230, 94 +REPLACEDLGORD DIALOG 36, 24, 230, 94 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Sostituisci" FONT 8, "MS Shell Dlg" @@ -228,7 +228,7 @@ FONT 8, "MS Shell Dlg" } -PRINT32 DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 288, 186 +PRINT32 DIALOG 32, 32, 288, 186 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CONTEXTHELP | DS_3DLOOK CAPTION "Stampa" @@ -268,7 +268,7 @@ FONT 8, "MS Shell Dlg" RTEXT "&a:", stc3, 100,124, 16,8 } -PRINT32_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 288, 178 +PRINT32_SETUP DIALOG 32, 32, 288, 178 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CONTEXTHELP | DS_3DLOOK CAPTION "Configurazione Stampante" @@ -303,7 +303,7 @@ BEGIN CONTROL "V&erticale", rad2,"Button",BS_AUTORADIOBUTTON,224,126,52,12 END -PAGESETUPDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 240, 240 +PAGESETUPDLGORD DIALOG 32, 32, 240, 240 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Setup di Pagina" FONT 8, "MS Shell Dlg" @@ -333,7 +333,7 @@ BEGIN PUSHBUTTON "S&tampante...", psh3, 184, 220, 48, 14 END -NEWFILEOPENORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 280, 164 +NEWFILEOPENORD DIALOG 0, 0, 280, 164 STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_CLIPCHILDREN CAPTION "Apri" FONT 8, "MS Shell Dlg" @@ -357,7 +357,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON "&Aiuto", pshHelp,222,145,50,14 } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_ABOUTBOX "&Informazioni sul Test FolderPicker" IDS_DOCUMENTFOLDERS "Cartelle Documenti" @@ -369,7 +369,7 @@ STRINGTABLE DISCARDABLE IDS_MYCOMPUTER "Risorse del Computer" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_SYSTEMFOLDERS "Cartelle di Sistema" IDS_LOCALHARDRIVES "Dischi Rigidi Locali" @@ -383,7 +383,7 @@ STRINGTABLE DISCARDABLE IDS_FILENOTEXISTING "Il file non esiste" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_UPFOLDER "Su di un livello" IDS_NEWFOLDER "Crea nuova directory" @@ -392,7 +392,7 @@ STRINGTABLE DISCARDABLE IDS_TODESKTOP "Vai al Desktop" } -STRINGTABLE DISCARDABLE +STRINGTABLE { PD32_PRINT_TITLE "Stampa" @@ -444,7 +444,7 @@ STRINGTABLE DISCARDABLE PD32_PRINTER_STATUS_POWER_SAVE "Modalitè risparmio energetico; " } -STRINGTABLE DISCARDABLE /* Font styles */ +STRINGTABLE /* Font styles */ { IDS_FONT_REGULAR "Regolare" IDS_FONT_BOLD "Grassetto" @@ -452,7 +452,7 @@ STRINGTABLE DISCARDABLE /* Font styles */ IDS_FONT_BOLD_ITALIC "Grassetto Corsivo" } -STRINGTABLE DISCARDABLE /* Color names */ +STRINGTABLE /* Color names */ { IDS_COLOR_BLACK "Nero" IDS_COLOR_MAROON "Marrone rossiccio" @@ -472,7 +472,7 @@ STRINGTABLE DISCARDABLE /* Color names */ IDS_COLOR_WHITE "Bianco" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_FONT_SIZE "Scegli la dimesione del carattere tra %d e %d punti." IDS_SAVE_BUTTON "Salva" diff --git a/dll/win32/comdlg32/cdlg_Ja.rc b/dll/win32/comdlg32/cdlg_Ja.rc index 6e1687719b8..c4fc84f67bd 100644 --- a/dll/win32/comdlg32/cdlg_Ja.rc +++ b/dll/win32/comdlg32/cdlg_Ja.rc @@ -28,7 +28,7 @@ LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT -OPEN_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134 +OPEN_FILE DIALOG 36, 24, 275, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "ファイルを開く" FONT 9, "MS Shell Dlg" @@ -50,7 +50,7 @@ FONT 9, "MS Shell Dlg" } -SAVE_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134 +SAVE_FILE DIALOG 36, 24, 275, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "名前をつけて保存" FONT 9, "MS Shell Dlg" @@ -72,7 +72,7 @@ FONT 9, "MS Shell Dlg" } -PRINT DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 +PRINT DIALOG 36, 24, 264, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "印刷" FONT 9, "MS Shell Dlg" @@ -95,7 +95,7 @@ FONT 9, "MS Shell Dlg" } -PRINT_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 +PRINT_SETUP DIALOG 36, 24, 264, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "プリンタの設定" FONT 9, "MS Shell Dlg" @@ -121,7 +121,7 @@ FONT 9, "MS Shell Dlg" } -CHOOSE_FONT DIALOG DISCARDABLE 13, 54, 264, 147 +CHOOSE_FONT DIALOG 13, 54, 264, 147 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "フォントの指定" FONT 9, "MS Shell Dlg" @@ -153,7 +153,7 @@ FONT 9, "MS Shell Dlg" } -CHOOSE_COLOR DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 300, 185 +CHOOSE_COLOR DIALOG 36, 24, 300, 185 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "色の設定" FONT 9, "MS Shell Dlg" @@ -187,7 +187,7 @@ FONT 9, "MS Shell Dlg" } -FINDDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 236, 62 +FINDDLGORD DIALOG 36, 24, 236, 62 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "文字列の検索" FONT 9, "MS Shell Dlg" @@ -206,7 +206,7 @@ FONT 9, "MS Shell Dlg" } -REPLACEDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 230, 94 +REPLACEDLGORD DIALOG 36, 24, 230, 94 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "文字列の置換" FONT 9, "MS Shell Dlg" @@ -226,7 +226,7 @@ FONT 9, "MS Shell Dlg" } -PRINT32 DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 288, 186 +PRINT32 DIALOG 32, 32, 288, 186 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CONTEXTHELP | DS_3DLOOK CAPTION "印刷" @@ -266,7 +266,7 @@ FONT 9, "MS Shell Dlg" RTEXT "ページまで(&T):", stc3, 100,124, 16,8 } -PRINT32_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 288, 178 +PRINT32_SETUP DIALOG 32, 32, 288, 178 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CONTEXTHELP | DS_3DLOOK CAPTION "印刷の設定" @@ -301,7 +301,7 @@ BEGIN CONTROL "横(&A)", rad2,"Button",BS_AUTORADIOBUTTON,224,126,52,12 END -PAGESETUPDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 240, 240 +PAGESETUPDLGORD DIALOG 32, 32, 240, 240 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "ページ設定" FONT 9, "MS Shell Dlg" @@ -331,7 +331,7 @@ BEGIN PUSHBUTTON "プリンタ(&R)...", psh3, 184, 220, 48, 14 END -NEWFILEOPENORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 280, 164 +NEWFILEOPENORD DIALOG 0, 0, 280, 164 STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_CLIPCHILDREN CAPTION "ファイルを開く" FONT 9, "MS Shell Dlg" @@ -355,7 +355,7 @@ FONT 9, "MS Shell Dlg" PUSHBUTTON "ヘルプ(&H)", pshHelp,222,145,50,14 } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_ABOUTBOX "&About FolderPicker Test" IDS_DOCUMENTFOLDERS "ドキュメント フォルダ" @@ -367,7 +367,7 @@ STRINGTABLE DISCARDABLE IDS_MYCOMPUTER "マイ コンピュータ" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_SYSTEMFOLDERS "システム フォルダ" IDS_LOCALHARDRIVES "ローカル ハード ドライブ" @@ -381,7 +381,7 @@ STRINGTABLE DISCARDABLE IDS_FILENOTEXISTING "ファイルが見つかりません" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_UPFOLDER "一つ上のフォルダへ" IDS_NEWFOLDER "新しいフォルダの作成" @@ -390,7 +390,7 @@ STRINGTABLE DISCARDABLE IDS_TODESKTOP "デスクトップを参照" } -STRINGTABLE DISCARDABLE +STRINGTABLE { PD32_PRINT_TITLE "印刷" @@ -448,7 +448,7 @@ STRINGTABLE DISCARDABLE PD32_PRINTER_STATUS_POWER_SAVE "省電力モード -" } -STRINGTABLE DISCARDABLE /* Font styles */ +STRINGTABLE /* Font styles */ { IDS_FONT_REGULAR "標準" IDS_FONT_BOLD "太字" @@ -456,7 +456,7 @@ STRINGTABLE DISCARDABLE /* Font styles */ IDS_FONT_BOLD_ITALIC "太字 斜体" } -STRINGTABLE DISCARDABLE /* Color names */ +STRINGTABLE /* Color names */ { IDS_COLOR_BLACK "黒" IDS_COLOR_MAROON "茶色" @@ -476,7 +476,7 @@ STRINGTABLE DISCARDABLE /* Color names */ IDS_COLOR_WHITE "白" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_FONT_SIZE "フォントサイズを %d ポイントから %d ポイントの間で選択してください。" IDS_SAVE_BUTTON "保存(&S)" diff --git a/dll/win32/comdlg32/cdlg_Ko.rc b/dll/win32/comdlg32/cdlg_Ko.rc index 1fc97981b71..ef19acbaf26 100644 --- a/dll/win32/comdlg32/cdlg_Ko.rc +++ b/dll/win32/comdlg32/cdlg_Ko.rc @@ -27,7 +27,7 @@ LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT -OPEN_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134 +OPEN_FILE DIALOG 36, 24, 275, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "" FONT 9, "MS Shell Dlg" @@ -49,7 +49,7 @@ FONT 9, "MS Shell Dlg" } -SAVE_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134 +SAVE_FILE DIALOG 36, 24, 275, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "ٸ ̸ ..." FONT 9, "MS Shell Dlg" @@ -71,7 +71,7 @@ FONT 9, "MS Shell Dlg" } -PRINT DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 +PRINT DIALOG 36, 24, 264, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "μ" FONT 9, "MS Shell Dlg" @@ -94,7 +94,7 @@ FONT 9, "MS Shell Dlg" } -PRINT_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 +PRINT_SETUP DIALOG 36, 24, 264, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "μ " FONT 9, "MS Shell Dlg" @@ -120,7 +120,7 @@ FONT 9, "MS Shell Dlg" } -CHOOSE_FONT DIALOG DISCARDABLE 13, 54, 264, 147 +CHOOSE_FONT DIALOG 13, 54, 264, 147 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "۲" FONT 9, "MS Shell Dlg" @@ -152,7 +152,7 @@ FONT 9, "MS Shell Dlg" } -CHOOSE_COLOR DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 300, 185 +CHOOSE_COLOR DIALOG 36, 24, 300, 185 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "" FONT 9, "MS Shell Dlg" @@ -186,7 +186,7 @@ FONT 9, "MS Shell Dlg" } -FINDDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 236, 62 +FINDDLGORD DIALOG 36, 24, 236, 62 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "ã" FONT 9, "MS Shell Dlg" @@ -205,7 +205,7 @@ FONT 9, "MS Shell Dlg" } -REPLACEDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 230, 94 +REPLACEDLGORD DIALOG 36, 24, 230, 94 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "ٲٱ" FONT 9, "MS Shell Dlg" @@ -225,7 +225,7 @@ FONT 9, "MS Shell Dlg" } -PRINT32 DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 288, 186 +PRINT32 DIALOG 32, 32, 288, 186 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CONTEXTHELP | DS_3DLOOK CAPTION "μ" @@ -265,7 +265,7 @@ FONT 9, "MS Shell Dlg" RTEXT "(&T):", stc3, 120,113, 22,8 } -PRINT32_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 288, 178 +PRINT32_SETUP DIALOG 32, 32, 288, 178 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CONTEXTHELP | DS_3DLOOK CAPTION " " @@ -300,7 +300,7 @@ BEGIN CONTROL "(&A)", rad2,"Button",BS_AUTORADIOBUTTON,224,126,52,12 END -PAGESETUPDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 240, 240 +PAGESETUPDLGORD DIALOG 32, 32, 240, 240 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION " " FONT 9, "MS Shell Dlg" @@ -330,7 +330,7 @@ BEGIN PUSHBUTTON "(&R)...", psh3, 184, 220, 48, 14 END -NEWFILEOPENORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 280, 164 +NEWFILEOPENORD DIALOG 0, 0, 280, 164 STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_CLIPCHILDREN CAPTION "" FONT 9, "MS Shell Dlg" @@ -354,7 +354,7 @@ FONT 9, "MS Shell Dlg" PUSHBUTTON "(&H)", pshHelp,222,145,50,14 } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_ABOUTBOX "-ñ-׽Ʈ (&A)" IDS_DOCUMENTFOLDERS " " @@ -366,7 +366,7 @@ STRINGTABLE DISCARDABLE IDS_MYCOMPUTER " ǻ" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_SYSTEMFOLDERS "ý " IDS_LOCALHARDRIVES " ϵ ̺" @@ -380,7 +380,7 @@ STRINGTABLE DISCARDABLE IDS_FILENOTEXISTING " ʽϴ" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_UPFOLDER " ܰ " IDS_NEWFOLDER " " @@ -389,7 +389,7 @@ STRINGTABLE DISCARDABLE IDS_TODESKTOP "ũž " } -STRINGTABLE DISCARDABLE +STRINGTABLE { PD32_PRINT_TITLE "μ" @@ -448,7 +448,7 @@ STRINGTABLE DISCARDABLE PD32_PRINTER_STATUS_POWER_SAVE " ; " } -STRINGTABLE DISCARDABLE /* Font styles */ +STRINGTABLE /* Font styles */ { IDS_FONT_REGULAR "" IDS_FONT_BOLD "" @@ -456,7 +456,7 @@ STRINGTABLE DISCARDABLE /* Font styles */ IDS_FONT_BOLD_ITALIC " Ӳ" } -STRINGTABLE DISCARDABLE /* Color names */ +STRINGTABLE /* Color names */ { IDS_COLOR_BLACK "" IDS_COLOR_MAROON "" @@ -476,7 +476,7 @@ STRINGTABLE DISCARDABLE /* Color names */ IDS_COLOR_WHITE "Ͼ" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_FONT_SIZE "%d %d Ʈ ̿ ۲ ũ ." IDS_SAVE_BUTTON "(&S)" diff --git a/dll/win32/comdlg32/cdlg_Lt.rc b/dll/win32/comdlg32/cdlg_Lt.rc index c4bbf982d6d..d580c80ebef 100644 --- a/dll/win32/comdlg32/cdlg_Lt.rc +++ b/dll/win32/comdlg32/cdlg_Lt.rc @@ -28,7 +28,7 @@ LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL -OPEN_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134 +OPEN_FILE DIALOG 36, 24, 275, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Atverti" FONT 8, "MS Shell Dlg" @@ -50,7 +50,7 @@ FONT 8, "MS Shell Dlg" } -SAVE_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134 +SAVE_FILE DIALOG 36, 24, 275, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Išsaugoti kaip..." FONT 8, "MS Shell Dlg" @@ -72,7 +72,7 @@ FONT 8, "MS Shell Dlg" } -PRINT DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 +PRINT DIALOG 36, 24, 264, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Spausdinti" FONT 8, "MS Shell Dlg" @@ -95,7 +95,7 @@ FONT 8, "MS Shell Dlg" } -PRINT_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 +PRINT_SETUP DIALOG 36, 24, 264, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Spausdintuvo nuostatos" FONT 8, "MS Shell Dlg" @@ -121,7 +121,7 @@ FONT 8, "MS Shell Dlg" } -CHOOSE_FONT DIALOG DISCARDABLE 13, 54, 264, 147 +CHOOSE_FONT DIALOG 13, 54, 264, 147 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Šriftas" FONT 8, "MS Shell Dlg" @@ -153,7 +153,7 @@ FONT 8, "MS Shell Dlg" } -CHOOSE_COLOR DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 300, 185 +CHOOSE_COLOR DIALOG 36, 24, 300, 185 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Spalva" FONT 8, "MS Shell Dlg" @@ -187,7 +187,7 @@ FONT 8, "MS Shell Dlg" } -FINDDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 236, 62 +FINDDLGORD DIALOG 36, 24, 236, 62 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Ieškoti" FONT 8, "MS Shell Dlg" @@ -206,7 +206,7 @@ FONT 8, "MS Shell Dlg" } -REPLACEDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 230, 94 +REPLACEDLGORD DIALOG 36, 24, 230, 94 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Pakeisti" FONT 8, "MS Shell Dlg" @@ -226,7 +226,7 @@ FONT 8, "MS Shell Dlg" } -PRINT32 DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 288, 186 +PRINT32 DIALOG 32, 32, 288, 186 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CONTEXTHELP | DS_3DLOOK CAPTION "Spausdinti" @@ -266,7 +266,7 @@ FONT 8, "MS Shell Dlg" RTEXT "iki:", stc3, 100,124, 16,8 } -PRINT32_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 288, 178 +PRINT32_SETUP DIALOG 32, 32, 288, 178 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CONTEXTHELP | DS_3DLOOK CAPTION "Spausdintuvo nuostatos" @@ -301,7 +301,7 @@ BEGIN CONTROL "&Gulsčias", rad2,"Button",BS_AUTORADIOBUTTON,224,126,52,12 END -PAGESETUPDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 240, 240 +PAGESETUPDLGORD DIALOG 32, 32, 240, 240 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Puslapio nuostatos" FONT 8, "MS Shell Dlg" @@ -331,7 +331,7 @@ BEGIN PUSHBUTTON "S&pausdintuvas...", psh3, 171, 220, 61, 14 END -NEWFILEOPENORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 280, 164 +NEWFILEOPENORD DIALOG 0, 0, 280, 164 STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_CLIPCHILDREN CAPTION "Atverti" FONT 8, "MS Shell Dlg" @@ -355,7 +355,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON "&Žinynas", pshHelp,222,145,50,14 } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_ABOUTBOX "&Apie FolderPicker testą" IDS_DOCUMENTFOLDERS "Dokumentų aplankai" @@ -367,7 +367,7 @@ STRINGTABLE DISCARDABLE IDS_MYCOMPUTER "Kompiuteris" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_SYSTEMFOLDERS "Sistemos aplankai" IDS_LOCALHARDRIVES "Vietiniai standieji diskai" @@ -381,7 +381,7 @@ STRINGTABLE DISCARDABLE IDS_FILENOTEXISTING "Failas neegzistuoja" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_UPFOLDER "Aukštyn vienu lygiu" IDS_NEWFOLDER "Sukurti naują aplanką" @@ -390,7 +390,7 @@ STRINGTABLE DISCARDABLE IDS_TODESKTOP "Pereiti į darbalaukį" } -STRINGTABLE DISCARDABLE +STRINGTABLE { PD32_PRINT_TITLE "Spausdinti" @@ -447,7 +447,7 @@ Prašome įdiegti spausdintuvą ir pakartoti." PD32_PRINTER_STATUS_POWER_SAVE "Energijos taupymo režimas; " } -STRINGTABLE DISCARDABLE /* Font styles */ +STRINGTABLE /* Font styles */ { IDS_FONT_REGULAR "Normalus" IDS_FONT_BOLD "Pusjuodis" @@ -455,7 +455,7 @@ STRINGTABLE DISCARDABLE /* Font styles */ IDS_FONT_BOLD_ITALIC "Pusjuodis kursyvas" } -STRINGTABLE DISCARDABLE /* Color names */ +STRINGTABLE /* Color names */ { IDS_COLOR_BLACK "Juoda" IDS_COLOR_MAROON "Kaštoninė" @@ -475,7 +475,7 @@ STRINGTABLE DISCARDABLE /* Color names */ IDS_COLOR_WHITE "Balta" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_FONT_SIZE "Pasirinkite šrifto dydį tarp %d ir %d taškų." IDS_SAVE_BUTTON "&Išsaugoti" diff --git a/dll/win32/comdlg32/cdlg_Nl.rc b/dll/win32/comdlg32/cdlg_Nl.rc index d17ca9296c2..fe3b09d06c3 100644 --- a/dll/win32/comdlg32/cdlg_Nl.rc +++ b/dll/win32/comdlg32/cdlg_Nl.rc @@ -28,7 +28,7 @@ LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL #pragma code_page(65001) -OPEN_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134 +OPEN_FILE DIALOG 36, 24, 275, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Bestand openen" FONT 8, "MS Shell Dlg" @@ -50,7 +50,7 @@ FONT 8, "MS Shell Dlg" } -SAVE_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134 +SAVE_FILE DIALOG 36, 24, 275, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Opslaan als..." FONT 8, "MS Shell Dlg" @@ -72,7 +72,7 @@ FONT 8, "MS Shell Dlg" } -PRINT DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 +PRINT DIALOG 36, 24, 264, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Afdrukken" FONT 8, "MS Shell Dlg" @@ -95,7 +95,7 @@ FONT 8, "MS Shell Dlg" } -PRINT_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 +PRINT_SETUP DIALOG 36, 24, 264, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Afdrukeigenschappen" FONT 8, "MS Shell Dlg" @@ -121,7 +121,7 @@ FONT 8, "MS Shell Dlg" } -CHOOSE_FONT DIALOG DISCARDABLE 13, 54, 264, 147 +CHOOSE_FONT DIALOG 13, 54, 264, 147 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Lettertype" FONT 8, "MS Shell Dlg" @@ -153,7 +153,7 @@ FONT 8, "MS Shell Dlg" } -CHOOSE_COLOR DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 300, 185 +CHOOSE_COLOR DIALOG 36, 24, 300, 185 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Kleur" FONT 8, "MS Shell Dlg" @@ -187,7 +187,7 @@ FONT 8, "MS Shell Dlg" } -FINDDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 246, 72 +FINDDLGORD DIALOG 36, 24, 246, 72 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Tekst zoeken" FONT 8, "MS Shell Dlg" @@ -206,7 +206,7 @@ FONT 8, "MS Shell Dlg" } -REPLACEDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 240, 94 +REPLACEDLGORD DIALOG 36, 24, 240, 94 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Tekst vervangen" FONT 8, "MS Shell Dlg" @@ -225,7 +225,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON "&Help", pshHelp , 174, 75, 60, 14, WS_GROUP | WS_TABSTOP } -NEWFILEOPENORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 280, 164 +NEWFILEOPENORD DIALOG 0, 0, 280, 164 STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_CLIPCHILDREN CAPTION "Openen" FONT 8, "MS Shell Dlg" @@ -249,7 +249,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON "&Help", pshHelp,222,145,50,14 } -PRINT32 DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 288, 186 +PRINT32 DIALOG 32, 32, 288, 186 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CONTEXTHELP | DS_3DLOOK CAPTION "Afdrukken" @@ -289,7 +289,7 @@ FONT 8, "MS Shell Dlg" RTEXT "&t/m:", stc3, 100,124, 16,8 } -PRINT32_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 288, 178 +PRINT32_SETUP DIALOG 32, 32, 288, 178 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CONTEXTHELP | DS_3DLOOK CAPTION "Afdrukeigenschappen" @@ -323,7 +323,7 @@ BEGIN CONTROL "L&iggend", rad2,"Button",BS_AUTORADIOBUTTON,224,126,52,12 END -PAGESETUPDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 240, 240 +PAGESETUPDLGORD DIALOG 32, 32, 240, 240 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Pagina-instellingen" FONT 8, "MS Shell Dlg" @@ -354,7 +354,7 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_ABOUTBOX "&Info over FolderPicker" IDS_DOCUMENTFOLDERS "Documenten Mappen" @@ -366,7 +366,7 @@ STRINGTABLE DISCARDABLE IDS_MYCOMPUTER "Deze Computer" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_SYSTEMFOLDERS "Systeemmappen" IDS_LOCALHARDRIVES "Lokale vaste schijven" @@ -380,7 +380,7 @@ STRINGTABLE DISCARDABLE IDS_FILENOTEXISTING "Kan het bestand niet vinden" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_UPFOLDER "Bovenliggende map" IDS_NEWFOLDER "Nieuwe map aanmaken" @@ -389,7 +389,7 @@ STRINGTABLE DISCARDABLE IDS_TODESKTOP "Ga naar Bureaublad" } -STRINGTABLE DISCARDABLE +STRINGTABLE { PD32_PRINT_TITLE "Afdrukken" @@ -451,7 +451,7 @@ wachtrij" PD32_PRINTER_STATUS_POWER_SAVE "Power save modus; " } -STRINGTABLE DISCARDABLE /* Font styles */ +STRINGTABLE /* Font styles */ { IDS_FONT_REGULAR "Normaal" IDS_FONT_BOLD "Vet" @@ -459,7 +459,7 @@ STRINGTABLE DISCARDABLE /* Font styles */ IDS_FONT_BOLD_ITALIC "Vet-Cursief" } -STRINGTABLE DISCARDABLE /* Color names */ +STRINGTABLE /* Color names */ { IDS_COLOR_BLACK "Zwart" IDS_COLOR_MAROON "Kastanjebruin" @@ -479,7 +479,7 @@ STRINGTABLE DISCARDABLE /* Color names */ IDS_COLOR_WHITE "Wit" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_FONT_SIZE "Selecteer een lettertype tussen %d en %d punten." IDS_SAVE_BUTTON "&Opslaan" diff --git a/dll/win32/comdlg32/cdlg_No.rc b/dll/win32/comdlg32/cdlg_No.rc index 75e8f792405..d18a2a73e7b 100644 --- a/dll/win32/comdlg32/cdlg_No.rc +++ b/dll/win32/comdlg32/cdlg_No.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_NORWEGIAN, SUBLANG_NORWEGIAN_BOKMAL -OPEN_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134 +OPEN_FILE DIALOG 36, 24, 275, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "pne" FONT 8, "MS Shell Dlg" @@ -47,7 +47,7 @@ FONT 8, "MS Shell Dlg" } -SAVE_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134 +SAVE_FILE DIALOG 36, 24, 275, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Lagre som..." FONT 8, "MS Shell Dlg" @@ -69,7 +69,7 @@ FONT 8, "MS Shell Dlg" } -PRINT DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 +PRINT DIALOG 36, 24, 264, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Skriv ut" FONT 8, "MS Shell Dlg" @@ -92,7 +92,7 @@ FONT 8, "MS Shell Dlg" } -PRINT_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 +PRINT_SETUP DIALOG 36, 24, 264, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Utskriftsinnstillinger" FONT 8, "MS Shell Dlg" @@ -118,7 +118,7 @@ FONT 8, "MS Shell Dlg" } -CHOOSE_FONT DIALOG DISCARDABLE 13, 54, 264, 147 +CHOOSE_FONT DIALOG 13, 54, 264, 147 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Skrift" FONT 8, "MS Shell Dlg" @@ -150,7 +150,7 @@ FONT 8, "MS Shell Dlg" } -CHOOSE_COLOR DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 300, 185 +CHOOSE_COLOR DIALOG 36, 24, 300, 185 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Farge" FONT 8, "MS Shell Dlg" @@ -184,7 +184,7 @@ FONT 8, "MS Shell Dlg" } -FINDDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 236, 62 +FINDDLGORD DIALOG 36, 24, 236, 62 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Finn" FONT 8, "MS Shell Dlg" @@ -203,7 +203,7 @@ FONT 8, "MS Shell Dlg" } -REPLACEDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 230, 94 +REPLACEDLGORD DIALOG 36, 24, 230, 94 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Erstatt" FONT 8, "MS Shell Dlg" @@ -223,7 +223,7 @@ FONT 8, "MS Shell Dlg" } -PRINT32 DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 288, 186 +PRINT32 DIALOG 32, 32, 288, 186 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CONTEXTHELP | DS_3DLOOK CAPTION "Skriv ut" @@ -263,7 +263,7 @@ FONT 8, "MS Shell Dlg" RTEXT "&Til:", stc3, 100,124, 16,8 } -PRINT32_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 288, 178 +PRINT32_SETUP DIALOG 32, 32, 288, 178 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CONTEXTHELP | DS_3DLOOK CAPTION "Utskriftoppsett" @@ -298,7 +298,7 @@ BEGIN CONTROL "&Liggende", rad2,"Button",BS_AUTORADIOBUTTON,224,126,52,12 END -PAGESETUPDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 240, 240 +PAGESETUPDLGORD DIALOG 32, 32, 240, 240 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Sideoppsett" FONT 8, "MS Shell Dlg" @@ -328,7 +328,7 @@ BEGIN PUSHBUTTON "Sk&river...", psh3, 184, 220, 48, 14 END -NEWFILEOPENORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 280, 164 +NEWFILEOPENORD DIALOG 0, 0, 280, 164 STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_CLIPCHILDREN CAPTION "pne" FONT 8, "MS Shell Dlg" @@ -352,7 +352,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON "&Hjelp", pshHelp,222,145,50,14 } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_ABOUTBOX "Om k&atalogvelger-test" IDS_DOCUMENTFOLDERS "Dokumentmapper" @@ -364,7 +364,7 @@ STRINGTABLE DISCARDABLE IDS_MYCOMPUTER "Min datamaskin" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_SYSTEMFOLDERS "Systemkataloger" IDS_LOCALHARDRIVES "Lokale harddisker" @@ -378,7 +378,7 @@ STRINGTABLE DISCARDABLE IDS_FILENOTEXISTING "Filen finnes ikke" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_UPFOLDER "Opp ett niv" IDS_NEWFOLDER "Lag ny katalog" @@ -387,7 +387,7 @@ STRINGTABLE DISCARDABLE IDS_TODESKTOP "Bla til skrivebordet" } -STRINGTABLE DISCARDABLE +STRINGTABLE { PD32_PRINT_TITLE "Skriv ut" @@ -442,7 +442,7 @@ Oppgi en verdi mellom %d og %d." PD32_PRINTER_STATUS_POWER_SAVE "Strmsparingsmodus; " } -STRINGTABLE DISCARDABLE /* Font styles */ +STRINGTABLE /* Font styles */ { IDS_FONT_REGULAR "Normal" IDS_FONT_BOLD "Fet" @@ -450,7 +450,7 @@ STRINGTABLE DISCARDABLE /* Font styles */ IDS_FONT_BOLD_ITALIC "Fet kursiv" } -STRINGTABLE DISCARDABLE /* Color names */ +STRINGTABLE /* Color names */ { IDS_COLOR_BLACK "Svart" IDS_COLOR_MAROON "Rdbrun" @@ -470,7 +470,7 @@ STRINGTABLE DISCARDABLE /* Color names */ IDS_COLOR_WHITE "Hvit" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_FONT_SIZE "Velg en skriftstrrelse mellom %d og %d punkter." IDS_SAVE_BUTTON "&Lagre" diff --git a/dll/win32/comdlg32/cdlg_Pl.rc b/dll/win32/comdlg32/cdlg_Pl.rc index 71c1afebe5f..9682715c8ff 100644 --- a/dll/win32/comdlg32/cdlg_Pl.rc +++ b/dll/win32/comdlg32/cdlg_Pl.rc @@ -27,7 +27,7 @@ LANGUAGE LANG_POLISH, SUBLANG_DEFAULT -OPEN_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 285, 134 +OPEN_FILE DIALOG 36, 24, 285, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Otwrz" FONT 8, "MS Shell Dlg" @@ -49,7 +49,7 @@ FONT 8, "MS Shell Dlg" } -SAVE_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 285, 134 +SAVE_FILE DIALOG 36, 24, 285, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Zapisz jako..." FONT 8, "MS Shell Dlg" @@ -71,7 +71,7 @@ FONT 8, "MS Shell Dlg" } -PRINT DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 +PRINT DIALOG 36, 24, 264, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Drukuj" FONT 8, "MS Shell Dlg" @@ -94,7 +94,7 @@ FONT 8, "MS Shell Dlg" } -PRINT_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 +PRINT_SETUP DIALOG 36, 24, 264, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Ustawienia wydruku" FONT 8, "MS Shell Dlg" @@ -120,7 +120,7 @@ FONT 8, "MS Shell Dlg" } -CHOOSE_FONT DIALOG DISCARDABLE 13, 54, 264, 147 +CHOOSE_FONT DIALOG 13, 54, 264, 147 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Czcionka" FONT 8, "MS Shell Dlg" @@ -152,7 +152,7 @@ FONT 8, "MS Shell Dlg" } -CHOOSE_COLOR DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 300, 185 +CHOOSE_COLOR DIALOG 36, 24, 300, 185 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Kolor" FONT 8, "MS Shell Dlg" @@ -186,7 +186,7 @@ FONT 8, "MS Shell Dlg" } -FINDDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 285, 62 +FINDDLGORD DIALOG 36, 24, 285, 62 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Znajd" FONT 8, "MS Shell Dlg" @@ -205,7 +205,7 @@ FONT 8, "MS Shell Dlg" } -REPLACEDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 250, 94 +REPLACEDLGORD DIALOG 36, 24, 250, 94 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Zamie" FONT 8, "MS Shell Dlg" @@ -225,7 +225,7 @@ FONT 8, "MS Shell Dlg" } -PRINT32 DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 288, 186 +PRINT32 DIALOG 32, 32, 288, 186 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CONTEXTHELP | DS_3DLOOK CAPTION "Drukuj" @@ -265,7 +265,7 @@ FONT 8, "MS Shell Dlg" RTEXT "&do:", stc3, 100,124, 16,8 } -PRINT32_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 288, 178 +PRINT32_SETUP DIALOG 32, 32, 288, 178 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CONTEXTHELP | DS_3DLOOK CAPTION "Ustawiania wydruku" @@ -300,7 +300,7 @@ BEGIN CONTROL "P&ozioma", rad2,"Button",BS_AUTORADIOBUTTON,224,126,52,12 END -PAGESETUPDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 240, 240 +PAGESETUPDLGORD DIALOG 32, 32, 240, 240 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Ustawienia Strony" FONT 8, "MS Shell Dlg" @@ -330,7 +330,7 @@ BEGIN PUSHBUTTON "Dr&ukarka...", psh3, 184, 220, 48, 14 END -NEWFILEOPENORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 280, 164 +NEWFILEOPENORD DIALOG 0, 0, 280, 164 STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_CLIPCHILDREN CAPTION "Otwieranie" FONT 8, "MS Shell Dlg" @@ -354,7 +354,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON "&Pomoc", pshHelp,222,145,50,14 } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_ABOUTBOX "&O FolderPicker Test" IDS_DOCUMENTFOLDERS "Katalog Dokumentw" @@ -366,7 +366,7 @@ STRINGTABLE DISCARDABLE IDS_MYCOMPUTER "Mj komputer" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_SYSTEMFOLDERS "Katalogi systemowe" IDS_LOCALHARDRIVES "Lokalne dyski twarde" @@ -380,7 +380,7 @@ STRINGTABLE DISCARDABLE IDS_FILENOTEXISTING "Plik nie istnieje" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_UPFOLDER "Poziom w gr" IDS_NEWFOLDER "Utwrz nowy folder" @@ -389,7 +389,7 @@ STRINGTABLE DISCARDABLE IDS_TODESKTOP "Przegldaj pulpit" } -STRINGTABLE DISCARDABLE +STRINGTABLE { PD32_PRINT_TITLE "Drukuj" @@ -442,7 +442,7 @@ Po zainstalowaniu spr PD32_PRINTER_STATUS_POWER_SAVE "Tryb oszczdzania energii; " } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_FONT_SIZE "Wybierz czcionk o rozmiarze pomidzy %d a %d punktami." IDS_SAVE_BUTTON "&Zapisz" @@ -452,7 +452,7 @@ STRINGTABLE DISCARDABLE IDS_OPEN_FILE "Otwrz plik" } -STRINGTABLE DISCARDABLE /* Font styles */ +STRINGTABLE /* Font styles */ { IDS_FONT_REGULAR "Regularny" IDS_FONT_BOLD "Pogrubiony" @@ -460,7 +460,7 @@ STRINGTABLE DISCARDABLE /* Font styles */ IDS_FONT_BOLD_ITALIC "Pogrubiona kursywa" } -STRINGTABLE DISCARDABLE /* Color names */ +STRINGTABLE /* Color names */ { IDS_COLOR_BLACK "Czarny" IDS_COLOR_MAROON "Kasztanowy" diff --git a/dll/win32/comdlg32/cdlg_Pt.rc b/dll/win32/comdlg32/cdlg_Pt.rc index b061f613146..b7a0d3b01b4 100644 --- a/dll/win32/comdlg32/cdlg_Pt.rc +++ b/dll/win32/comdlg32/cdlg_Pt.rc @@ -30,7 +30,7 @@ LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN -OPEN_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134 +OPEN_FILE DIALOG 36, 24, 275, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Abrir" FONT 8, "MS Shell Dlg" @@ -53,7 +53,7 @@ FONT 8, "MS Shell Dlg" LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE -OPEN_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134 +OPEN_FILE DIALOG 36, 24, 275, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Abrir" FONT 8, "MS Shell Dlg" @@ -77,7 +77,7 @@ FONT 8, "MS Shell Dlg" LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN -SAVE_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134 +SAVE_FILE DIALOG 36, 24, 275, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Salvar Como..." FONT 8, "MS Shell Dlg" @@ -100,7 +100,7 @@ FONT 8, "MS Shell Dlg" LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE -SAVE_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134 +SAVE_FILE DIALOG 36, 24, 275, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Gravar Como..." FONT 8, "MS Shell Dlg" @@ -124,7 +124,7 @@ FONT 8, "MS Shell Dlg" LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN -PRINT DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 +PRINT DIALOG 36, 24, 264, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Imprimir" FONT 8, "MS Shell Dlg" @@ -139,7 +139,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON "Cancelar", IDCANCEL, 206, 24, 56, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "&Configurar", 1024, 206, 46, 56, 14, WS_GROUP | WS_TABSTOP LTEXT "&De:", 1090, 60, 80, 30, 9 - LTEXT "&Ate:", 1091, 120, 80, 30, 9 + LTEXT "&Até:", 1091, 120, 80, 30, 9 LTEXT "&Qualidade de Impressão:", 1092, 6, 100, 76, 9 COMBOBOX 1136, 80, 100, 92, 68, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP CHECKBOX "Imprimir para Arquivo", 1040, 20, 100, 50, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP @@ -148,7 +148,7 @@ FONT 8, "MS Shell Dlg" LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE -PRINT DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 +PRINT DIALOG 36, 24, 264, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Imprimir" FONT 8, "MS Shell Dlg" @@ -173,7 +173,7 @@ FONT 8, "MS Shell Dlg" LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN -PRINT_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 +PRINT_SETUP DIALOG 36, 24, 264, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Configurações de Impressão" FONT 8, "MS Shell Dlg" @@ -200,7 +200,7 @@ FONT 8, "MS Shell Dlg" LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE -PRINT_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 +PRINT_SETUP DIALOG 36, 24, 264, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Configurações de Impressão" FONT 8, "MS Shell Dlg" @@ -228,7 +228,7 @@ FONT 8, "MS Shell Dlg" LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN -CHOOSE_FONT DIALOG DISCARDABLE 13, 54, 264, 147 +CHOOSE_FONT DIALOG 13, 54, 264, 147 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Fonte" FONT 8, "MS Shell Dlg" @@ -262,7 +262,7 @@ FONT 8, "MS Shell Dlg" LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE -CHOOSE_FONT DIALOG DISCARDABLE 13, 54, 264, 147 +CHOOSE_FONT DIALOG 13, 54, 264, 147 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Tipo de Letra" FONT 8, "MS Shell Dlg" @@ -296,7 +296,7 @@ FONT 8, "MS Shell Dlg" LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN -CHOOSE_COLOR DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 300, 185 +CHOOSE_COLOR DIALOG 36, 24, 300, 185 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Cor" FONT 8, "MS Shell Dlg" @@ -331,7 +331,7 @@ FONT 8, "MS Shell Dlg" LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE -CHOOSE_COLOR DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 300, 185 +CHOOSE_COLOR DIALOG 36, 24, 300, 185 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Cor" FONT 8, "MS Shell Dlg" @@ -364,9 +364,9 @@ PUSHBUTTON "&Definir Cores Personalizadas >>", 719/*1025*/, 4, 150, 142, 14, W PUSHBUTTON "&o",713,300,200,4,14 /* just a dummy: 'o' is like &o in "solid&o" */ } -LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN +LANGUAGE LANG_PORTUGUESE, SUBLANG_NEUTRAL -FINDDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 236, 62 +FINDDLGORD DIALOG 36, 24, 236, 62 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Procurar" FONT 8, "MS Shell Dlg" @@ -374,75 +374,34 @@ FONT 8, "MS Shell Dlg" LTEXT "&Procurar:", -1, 4, 8, 42, 8 EDITTEXT 1152, 47, 7, 128, 12, ES_AUTOHSCROLL | WS_BORDER | WS_GROUP | WS_TABSTOP CHECKBOX "Palavra &Inteira", 1040, 4, 26, 100, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP - CHECKBOX "&Maiúsculas/minusculas", 1041, 4, 42, 64, 12, BS_AUTOCHECKBOX | WS_TABSTOP - GROUPBOX "Direção", 1072, 107, 26, 68, 28 - CONTROL "A&cima", 1056, "BUTTON", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, 111, 38, 20, 12 - CONTROL "A&baixo", 1057, "BUTTON", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 138, 38, 30, 12 + CHECKBOX "&Maiúsculas/minúsculas", 1041, 4, 42, 84, 12, BS_AUTOCHECKBOX | WS_TABSTOP + GROUPBOX "Direção", 1072, 97, 26, 78, 28 + CONTROL "A&cima", 1056, "BUTTON", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, 101, 38, 33, 12 + CONTROL "A&baixo", 1057, "BUTTON", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 135, 38, 36, 12 - DEFPUSHBUTTON "Procurar a Pró&xima", IDOK, 182, 5, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "Cancelar", IDCANCEL, 182, 23, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "A&juda", 1038, 182, 45, 50, 14, WS_GROUP | WS_TABSTOP -} - -LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE - -FINDDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 236, 62 -STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Procurar" -FONT 8, "MS Shell Dlg" -{ - LTEXT "&Procurar:", -1, 4, 8, 42, 8 - EDITTEXT 1152, 47, 7, 128, 12, ES_AUTOHSCROLL | WS_BORDER | WS_GROUP | WS_TABSTOP - CHECKBOX "Palavra &Inteira", 1040, 4, 26, 100, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP - CHECKBOX "&Maiúsculas/minúsculas", 1041, 4, 42, 64, 12, BS_AUTOCHECKBOX | WS_TABSTOP - GROUPBOX "Direcção", 1072, 107, 26, 68, 28 - CONTROL "A&cima", 1056, "BUTTON", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, 111, 38, 20, 12 - CONTROL "A&baixo", 1057, "BUTTON", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 138, 38, 30, 12 - - DEFPUSHBUTTON "&Procurar Próximo", IDOK, 182, 5, 50, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "&Procurar", IDOK, 182, 5, 50, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "Cancelar", IDCANCEL, 182, 23, 50, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "A&juda", 1038, 182, 45, 50, 14, WS_GROUP | WS_TABSTOP } -LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN +LANGUAGE LANG_PORTUGUESE, SUBLANG_NEUTRAL -REPLACEDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 230, 94 +REPLACEDLGORD DIALOG 36, 24, 230, 94 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Substituir" FONT 8, "MS Shell Dlg" { LTEXT "&Procurar:", -1, 4, 9, 48, 8 EDITTEXT 1152, 54, 7, 114, 12, ES_AUTOHSCROLL | WS_BORDER | WS_GROUP | WS_TABSTOP - LTEXT "Substituir Pa&ra:", -1, 4, 26, 48, 8 + LTEXT "Substituir Po&r:", -1, 4, 26, 48, 8 EDITTEXT 1153, 54, 24, 114, 12, ES_AUTOHSCROLL | WS_BORDER | WS_GROUP | WS_TABSTOP CHECKBOX "Palavra &inteira", 1040, 5, 46, 104, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP - CHECKBOX "&Maiúsculas/minúsculas", 1041, 5, 62, 59, 12, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "&Maiúsculas/minúsculas", 1041, 5, 62, 84, 12, BS_AUTOCHECKBOX | WS_TABSTOP - DEFPUSHBUTTON "Procurar a Pró&xima", IDOK, 174, 4, 50, 14, WS_GROUP | WS_TABSTOP | BS_DEFPUSHBUTTON + DEFPUSHBUTTON "&Procurar", IDOK, 174, 4, 50, 14, WS_GROUP | WS_TABSTOP | BS_DEFPUSHBUTTON PUSHBUTTON "&Substituir", psh1, 174, 21, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "Substituir &Todas", psh2, 174, 38, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "Cancelar", IDCANCEL, 174, 55, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "A&juda", pshHelp, 174, 75, 50, 14, WS_GROUP | WS_TABSTOP -} - -LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE - -REPLACEDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 230, 94 -STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Substituir" -FONT 8, "MS Shell Dlg" -{ - LTEXT "&Procurar:", -1, 4, 9, 48, 8 - EDITTEXT 1152, 54, 7, 114, 12, ES_AUTOHSCROLL | WS_BORDER | WS_GROUP | WS_TABSTOP - LTEXT "Substituir Pa&ra:", -1, 4, 26, 48, 8 - EDITTEXT 1153, 54, 24, 114, 12, ES_AUTOHSCROLL | WS_BORDER | WS_GROUP | WS_TABSTOP - CHECKBOX "Palavra &inteira", 1040, 5, 46, 104, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP - CHECKBOX "&Maiúsculas/minúsculas", 1041, 5, 62, 59, 12, BS_AUTOCHECKBOX | WS_TABSTOP - - DEFPUSHBUTTON "Procurar Próxima", IDOK, 174, 4, 50, 14, WS_GROUP | WS_TABSTOP | BS_DEFPUSHBUTTON - PUSHBUTTON "&Substituir", psh1, 174, 21, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "Substituir &Todas", psh2, 174, 38, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Substituir &Tudo", psh2, 174, 38, 50, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "Cancelar", IDCANCEL, 174, 55, 50, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "A&juda", pshHelp, 174, 75, 50, 14, WS_GROUP | WS_TABSTOP } @@ -450,7 +409,7 @@ FONT 8, "MS Shell Dlg" LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN -PRINT32 DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 288, 186 +PRINT32 DIALOG 32, 32, 288, 186 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CONTEXTHELP | DS_3DLOOK CAPTION "Imprimir" @@ -461,7 +420,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON "&Ajuda", pshHelp, 50, 161, 50,14, WS_GROUP GROUPBOX "Impressora", grp4, 8, 4, 272,84, WS_GROUP - CONTROL "Imprimir em arqui&vo", chx1, "Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,212,70,64,12 + CONTROL "Para arqui&vo", chx1, "Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,212,70,64,12 PUSHBUTTON "Propri&edades", psh2, 212, 17, 60,14, WS_GROUP LTEXT "&Nome:", stc6, 16, 20, 36,8 COMBOBOX cmb4, 52, 18, 152,152,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_GROUP | WS_TABSTOP @@ -469,30 +428,30 @@ FONT 8, "MS Shell Dlg" LTEXT "Dummy State", stc12, 52, 36, 224,10, SS_NOPREFIX | SS_LEFTNOWORDWRAP LTEXT "Tipo:", stc7, 16, 48, 36,10, SS_NOPREFIX LTEXT "Dummy Type", stc11, 52, 48, 224,10, SS_NOPREFIX | SS_LEFTNOWORDWRAP - LTEXT "Onde:", stc10, 16, 60, 36,10, SS_NOPREFIX + LTEXT "Local:", stc10, 16, 60, 36,10, SS_NOPREFIX LTEXT "Dummy Location", stc14, 52, 60, 224,10, SS_NOPREFIX | SS_LEFTNOWORDWRAP - LTEXT "Comentário:", stc9, 16, 72, 36,10, SS_NOPREFIX + LTEXT "Nota:", stc9, 16, 72, 36,10, SS_NOPREFIX LTEXT "Dummy Remark", stc13, 52, 72, 152,10, SS_NOPREFIX | SS_LEFTNOWORDWRAP GROUPBOX "Cópias", grp2, 160, 92, 120,64, WS_GROUP LTEXT "Número de &cópias:", stc5, 168,108, 68, 8 ICON "", ico3, 162,124, 76,24, WS_GROUP | SS_CENTERIMAGE - CONTROL "&Agrupar", chx2,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,240,130,36,12 + CONTROL "&Agrupar", chx2,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,237,130,39,12 EDITTEXT edt3, 240,106, 32,12, WS_GROUP | ES_NUMBER GROUPBOX "Faixa de impressão", grp1, 8,92, 144,64, WS_GROUP CONTROL "&Todos", rad1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,16,106,64,12 - CONTROL "Pá&ginas", rad3,"Button",BS_AUTORADIOBUTTON,16,122,36,12 + CONTROL "Pá&ginas", rad3,"Button",BS_AUTORADIOBUTTON,16,122,38,12 CONTROL "Seleção", rad2,"Button",BS_AUTORADIOBUTTON,16,138,64,12 EDITTEXT edt1, 74,122, 26,12, WS_GROUP | ES_NUMBER EDITTEXT edt2, 118,122, 26,12, WS_GROUP | ES_NUMBER - RTEXT "&de:", stc2, 52,124, 20,8 + RTEXT "&de:", stc2, 53,124, 20,8 RTEXT "&até:", stc3, 100,124, 16,8 } LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE -PRINT32 DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 288, 186 +PRINT32 DIALOG 32, 32, 288, 186 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CONTEXTHELP | DS_3DLOOK CAPTION "Imprimir" @@ -503,7 +462,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON "&Ajuda", pshHelp, 50, 161, 50,14, WS_GROUP GROUPBOX "Impressora", grp4, 8, 4, 272,84, WS_GROUP - CONTROL "Imprimir para &ficheiro", chx1, "Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,212,70,64,12 + CONTROL "Para &ficheiro", chx1, "Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,212,70,64,12 PUSHBUTTON "Propri&edades", psh2, 212, 17, 60,14, WS_GROUP LTEXT "&Nome:", stc6, 16, 20, 36,8 COMBOBOX cmb4, 52, 18, 152,152,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_GROUP | WS_TABSTOP @@ -511,31 +470,31 @@ FONT 8, "MS Shell Dlg" LTEXT "Estado 'Dummy'", stc12, 52, 36, 224,10, SS_NOPREFIX | SS_LEFTNOWORDWRAP LTEXT "Tipo:", stc7, 16, 48, 36,10, SS_NOPREFIX LTEXT "Tipo 'Dummy'", stc11, 52, 48, 224,10, SS_NOPREFIX | SS_LEFTNOWORDWRAP - LTEXT "Localizaça:", stc10, 16, 60, 36,10, SS_NOPREFIX - LTEXT "Localizaçao 'Dummy'", stc14, 52, 60, 224,10, SS_NOPREFIX | SS_LEFTNOWORDWRAP - LTEXT "Comentário:", stc9, 16, 72, 36,10, SS_NOPREFIX + LTEXT "Local:", stc10, 16, 60, 36,10, SS_NOPREFIX + LTEXT "Local 'Dummy'", stc14, 52, 60, 224,10, SS_NOPREFIX | SS_LEFTNOWORDWRAP + LTEXT "Nota:", stc9, 16, 72, 36,10, SS_NOPREFIX LTEXT "Comentário 'Dummy'", stc13, 52, 72, 152,10, SS_NOPREFIX | SS_LEFTNOWORDWRAP GROUPBOX "Cópias", grp2, 160, 92, 120,64, WS_GROUP LTEXT "Número de &cópias:", stc5, 168,108, 68, 8 ICON "", ico3, 162,124, 76,24, WS_GROUP | SS_CENTERIMAGE - CONTROL "&Agrupar", chx2,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,240,130,36,12 + CONTROL "&Agrupar", chx2,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,237,130,39,12 EDITTEXT edt3, 240,106, 32,12, WS_GROUP | ES_NUMBER GROUPBOX "Faixa de impressão", grp1, 8,92, 144,64, WS_GROUP CONTROL "&Todos", rad1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,16,106,64,12 - CONTROL "Páginas", rad3,"Button",BS_AUTORADIOBUTTON,16,122,36,12 + CONTROL "Páginas", rad3,"Button",BS_AUTORADIOBUTTON,16,122,38,12 CONTROL "Selecção", rad2,"Button",BS_AUTORADIOBUTTON,16,138,64,12 EDITTEXT edt1, 74,122, 26,12, WS_GROUP | ES_NUMBER EDITTEXT edt2, 118,122, 26,12, WS_GROUP | ES_NUMBER - RTEXT "&de:", stc2, 52,124, 20,8 + RTEXT "&de:", stc2, 53,124, 20,8 RTEXT "&até", stc3, 100,124, 16,8 } -LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN +LANGUAGE LANG_PORTUGUESE, SUBLANG_NEUTRAL -PRINT32_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 288, 178 +PRINT32_SETUP DIALOG 32, 32, 288, 178 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CONTEXTHELP | DS_3DLOOK CAPTION "Configurações de Impressão" @@ -553,9 +512,9 @@ BEGIN LTEXT "Dummy State", stc12, 52, 36, 224, 10, SS_NOPREFIX | SS_LEFTNOWORDWRAP LTEXT "Tipo:", stc7, 16, 48, 36, 10, SS_NOPREFIX LTEXT "Dummy Type", stc11, 52, 48, 224, 10, SS_NOPREFIX | SS_LEFTNOWORDWRAP - LTEXT "Onde:", stc10, 16, 60, 36, 10, SS_NOPREFIX + LTEXT "Local:", stc10, 16, 60, 36, 10, SS_NOPREFIX LTEXT "Dummy Location", stc14, 52, 60, 224, 10, SS_NOPREFIX | SS_LEFTNOWORDWRAP - LTEXT "Comentário", stc9, 16, 72, 36, 10, SS_NOPREFIX + LTEXT "Nota:", stc9, 16, 72, 36, 10, SS_NOPREFIX LTEXT "Dummy Remark", stc13, 52, 72, 224, 10, SS_NOPREFIX | SS_LEFTNOWORDWRAP GROUPBOX "Papel", grp2, 8, 92, 164, 56, WS_GROUP @@ -570,47 +529,10 @@ BEGIN CONTROL "&Paisagem", rad2, "Button", BS_AUTORADIOBUTTON, 224, 126, 52, 12 END -LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE -PRINT32_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 288, 178 -STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | - DS_CONTEXTHELP | DS_3DLOOK -CAPTION "Configuração de Impressão" -FONT 8, "MS Shell Dlg" -BEGIN - DEFPUSHBUTTON "OK", IDOK,180,156,50,14,WS_GROUP - PUSHBUTTON "Cancelar", IDCANCEL,232,156,50,14 -/* PUSHBUTTON "Rede...", psh5, 284,156,50,14 */ +LANGUAGE LANG_PORTUGUESE, SUBLANG_NEUTRAL - GROUPBOX "Impressora", grp4, 8, 4, 272, 84, WS_GROUP - PUSHBUTTON "&Propriedades", psh2, 212, 17, 60, 14, WS_GROUP - LTEXT "&Nome:", stc6, 16, 20, 36, 8 - COMBOBOX cmb1, 52, 18, 152, 152, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_GROUP | WS_TABSTOP - LTEXT "Estado:", stc8, 16, 36, 36, 10, SS_NOPREFIX - LTEXT "EStado 'Dummy'", stc12, 52, 36, 224, 10, SS_NOPREFIX | SS_LEFTNOWORDWRAP - LTEXT "Tipo:", stc7, 16, 48, 36, 10, SS_NOPREFIX - LTEXT "Tipo 'Dummy'", stc11, 52, 48, 224, 10, SS_NOPREFIX | SS_LEFTNOWORDWRAP - LTEXT "Localização:", stc10, 16, 60, 36, 10, SS_NOPREFIX - LTEXT "Localização 'Dummy'", stc14, 52, 60, 224, 10, SS_NOPREFIX | SS_LEFTNOWORDWRAP - LTEXT "Comentário", stc9, 16, 72, 36, 10, SS_NOPREFIX - LTEXT "Comentário 'Dummy'", stc13, 52, 72, 224, 10, SS_NOPREFIX | SS_LEFTNOWORDWRAP - - GROUPBOX "Papel", grp2, 8, 92, 164, 56, WS_GROUP - LTEXT "&Tamanho:", stc2, 16, 108, 36, 8 - COMBOBOX cmb2, 52, 106, 112, 112, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_GROUP | WS_TABSTOP - LTEXT "&Origem:", stc3, 16, 128, 36, 8 - COMBOBOX cmb3, 52, 126, 112, 112, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_GROUP | WS_TABSTOP - - GROUPBOX "Orientação", grp1, 180, 92, 100, 56, WS_GROUP - ICON "", ico1, 195, 112, 18, 20, WS_GROUP - CONTROL "&Retrato", rad1, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 224, 106, 52, 12 - CONTROL "&Paisagem", rad2, "Button", BS_AUTORADIOBUTTON, 224, 126, 52, 12 -END - - -LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN - -PAGESETUPDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 240, 240 +PAGESETUPDLGORD DIALOG 32, 32, 240, 240 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Configurações de Página" FONT 8, "MS Shell Dlg" @@ -627,46 +549,14 @@ BEGIN AUTORADIOBUTTON "&Retrato", rad1, 16, 170, 52, 12, BS_AUTORADIOBUTTON AUTORADIOBUTTON "&Paisagem", rad2, 16, 190, 52, 12, BS_AUTORADIOBUTTON GROUPBOX "Bordas", grp4, 80, 156, 152, 56, BS_GROUPBOX - LTEXT "&Esquerda:", stc15, 88, 172, 21, 8 - EDITTEXT edt4, 111, 170, 39, 12, WS_TABSTOP|WS_GROUP|WS_BORDER - LTEXT "&Direita:", stc16, 159, 172, 27, 8 - EDITTEXT edt6, 187, 170, 39, 12, WS_TABSTOP|WS_GROUP|WS_BORDER - LTEXT "&Superior:", stc17, 88, 192, 21, 8 - EDITTEXT edt5, 111, 190, 39, 12, WS_TABSTOP|WS_GROUP|WS_BORDER - LTEXT "&Inferior:", stc18, 159, 192, 23, 8 - EDITTEXT edt7, 187, 190, 39, 12, WS_TABSTOP|WS_GROUP|WS_BORDER - DEFPUSHBUTTON "OK", IDOK, 71, 220, 50, 14, BS_PUSHBUTTON - PUSHBUTTON "Cancelar", IDCANCEL, 126, 220, 50, 14 - PUSHBUTTON "Im&pressora...", psh3, 184, 220, 50, 14 -END - -LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE - -PAGESETUPDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 240, 240 -STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "Configurações de Página" -FONT 8, "MS Shell Dlg" -BEGIN - CONTROL "", rct1, "Static", SS_WHITERECT, 80, 8, 80, 80 - CONTROL "", rct2, "Static", SS_GRAYRECT, 160, 12, 4, 80 - CONTROL "", rct3, "Static", SS_GRAYRECT, 84, 88, 80, 4 - GROUPBOX "Papel", grp2, 8, 96, 224, 56, BS_GROUPBOX - LTEXT "&Tamanho:", stc2, 16, 112, 36, 8 - COMBOBOX cmb2, 64, 110, 160, 160, CBS_SIMPLE|CBS_DROPDOWN|CBS_SORT|WS_GROUP|WS_TABSTOP|WS_VSCROLL - LTEXT "&Bandeja:", stc3, 16, 132, 36, 8 - COMBOBOX cmb3, 64, 130, 160, 160, CBS_SIMPLE|CBS_DROPDOWN|CBS_SORT|WS_GROUP|WS_TABSTOP|WS_VSCROLL - GROUPBOX "Orientação", grp1, 8, 156, 64, 56, BS_GROUPBOX - AUTORADIOBUTTON "&Retrato", rad1, 16, 170, 52, 12, BS_AUTORADIOBUTTON - AUTORADIOBUTTON "&Paisagem", rad2, 16, 190, 52, 12, BS_AUTORADIOBUTTON - GROUPBOX "Bordas", grp4, 80, 156, 152, 56, BS_GROUPBOX - LTEXT "&Esquerda:", stc15, 88, 172, 21, 8 - EDITTEXT edt4, 111, 170, 39, 12, WS_TABSTOP|WS_GROUP|WS_BORDER - LTEXT "&Direita:", stc16, 159, 172, 27, 8 - EDITTEXT edt6, 187, 170, 39, 12, WS_TABSTOP|WS_GROUP|WS_BORDER - LTEXT "&Superior:", stc17, 88, 192, 21, 8 - EDITTEXT edt5, 111, 190, 39, 12, WS_TABSTOP|WS_GROUP|WS_BORDER - LTEXT "&Inferior:", stc18, 159, 192, 23, 8 - EDITTEXT edt7, 187, 190, 39, 12, WS_TABSTOP|WS_GROUP|WS_BORDER + LTEXT "&Esquerda:", stc15, 88, 172, 31, 8 + EDITTEXT edt4, 121, 170, 37, 12, WS_TABSTOP|WS_GROUP|WS_BORDER + LTEXT "&Direita:", stc16, 161, 172, 27, 8 + EDITTEXT edt6, 189, 170, 37, 12, WS_TABSTOP|WS_GROUP|WS_BORDER + LTEXT "&Superior:", stc17, 88, 192, 31, 8 + EDITTEXT edt5, 121, 190, 37, 12, WS_TABSTOP|WS_GROUP|WS_BORDER + LTEXT "&Inferior:", stc18, 161, 192, 26, 8 + EDITTEXT edt7, 189, 190, 37, 12, WS_TABSTOP|WS_GROUP|WS_BORDER DEFPUSHBUTTON "OK", IDOK, 71, 220, 50, 14, BS_PUSHBUTTON PUSHBUTTON "Cancelar", IDCANCEL, 126, 220, 50, 14 PUSHBUTTON "Im&pressora...", psh3, 184, 220, 50, 14 @@ -675,7 +565,7 @@ END LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN -NEWFILEOPENORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 280, 164 +NEWFILEOPENORD DIALOG 0, 0, 280, 164 STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_CLIPCHILDREN CAPTION "Abrir" FONT 8, "MS Shell Dlg" @@ -686,13 +576,13 @@ FONT 8, "MS Shell Dlg" LTEXT "" , IDC_TOOLBARSTATIC, 172, 2, 102, 17, NOT WS_GROUP | NOT WS_VISIBLE LISTBOX IDC_SHELLSTATIC,4,20,272,85, LBS_SORT | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | WS_HSCROLL | NOT WS_VISIBLE - LTEXT "&Nome do arquivo:",IDC_FILENAMESTATIC,5,112,48,16, SS_NOTIFY + LTEXT "&Nome do arquivo:",IDC_FILENAMESTATIC,5,108,48,16, SS_NOTIFY EDITTEXT IDC_FILENAME,54,111,155,12,ES_AUTOHSCROLL - LTEXT "Arquivos do &tipo:",IDC_FILETYPESTATIC,5,131,48,16, SS_NOTIFY + LTEXT "Arquivos do &tipo:",IDC_FILETYPESTATIC,5,127,48,16, SS_NOTIFY COMBOBOX IDC_FILETYPE,54,129,155,100,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "Abrir como &somente-leitura",IDC_OPENREADONLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,54,148,74,10 + CONTROL "Abrir como &somente-leitura",IDC_OPENREADONLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,54,148,98,10 DEFPUSHBUTTON "&Abrir", IDOK,222,110,50,14 PUSHBUTTON "Cancelar", IDCANCEL,222,128,50,14 @@ -701,7 +591,7 @@ FONT 8, "MS Shell Dlg" LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE -NEWFILEOPENORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 280, 164 +NEWFILEOPENORD DIALOG 0, 0, 280, 164 STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_CLIPCHILDREN CAPTION "Abrir" FONT 8, "MS Shell Dlg" @@ -712,13 +602,13 @@ FONT 8, "MS Shell Dlg" LTEXT "" , IDC_TOOLBARSTATIC, 172, 2, 102, 17, NOT WS_GROUP | NOT WS_VISIBLE LISTBOX IDC_SHELLSTATIC,4,20,272,85, LBS_SORT | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | WS_HSCROLL | NOT WS_VISIBLE - LTEXT "&Nome do ficheiro:",IDC_FILENAMESTATIC,5,112,48,16, SS_NOTIFY + LTEXT "&Nome do ficheiro:",IDC_FILENAMESTATIC,5,108,48,16, SS_NOTIFY EDITTEXT IDC_FILENAME,54,111,155,12,ES_AUTOHSCROLL - LTEXT "Ficheiros do &tipo:",IDC_FILETYPESTATIC,5,131,48,16, SS_NOTIFY + LTEXT "Ficheiros do &tipo:",IDC_FILETYPESTATIC,5,127,48,16, SS_NOTIFY COMBOBOX IDC_FILETYPE,54,129,155,100,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "Abrir como &apenas-leitura",IDC_OPENREADONLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,54,148,74,10 + CONTROL "Abrir como &apenas-leitura",IDC_OPENREADONLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,54,148,98,10 DEFPUSHBUTTON "&Abrir", IDOK,222,110,50,14 PUSHBUTTON "Cancelar", IDCANCEL,222,128,50,14 @@ -728,7 +618,7 @@ FONT 8, "MS Shell Dlg" LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_ABOUTBOX "&Sobre FolderPicker Test" IDS_DOCUMENTFOLDERS "Pastas de Documentos" @@ -742,7 +632,7 @@ STRINGTABLE DISCARDABLE LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_ABOUTBOX "&Acerca do Teste FolderPicker" IDS_DOCUMENTFOLDERS "Pastas de Documentos" @@ -757,7 +647,7 @@ STRINGTABLE DISCARDABLE LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_SYSTEMFOLDERS "Pastas do Sistema" IDS_LOCALHARDRIVES "Discos Rígidos Locais" @@ -767,13 +657,13 @@ STRINGTABLE DISCARDABLE IDS_OVERWRITEFILE "Arquivo já existe.\nGostaria de substituí-lo?" IDS_INVALID_FILENAME_TITLE "Caracter(es) inválidos no caminho" IDS_INVALID_FILENAME "Um nome de arquivo não pode conter quaisquer dos seguintes caracteres:\n / : < > |" - IDS_PATHNOTEXISTING "Caminho não existe" - IDS_FILENOTEXISTING "Arquivo não existe" + IDS_PATHNOTEXISTING "O caminho não existe" + IDS_FILENOTEXISTING "O arquivo não existe" } LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_SYSTEMFOLDERS "Pastas do Sistema" IDS_LOCALHARDRIVES "Discos Rígidos Locais" @@ -790,7 +680,7 @@ STRINGTABLE DISCARDABLE LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_UPFOLDER "Um Nível Acima" IDS_NEWFOLDER "Criar Nova Pasta" @@ -801,7 +691,7 @@ STRINGTABLE DISCARDABLE LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_UPFOLDER "Um Nível Acima" IDS_NEWFOLDER "Criar Nova Pasta" @@ -813,28 +703,28 @@ STRINGTABLE DISCARDABLE LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN -STRINGTABLE DISCARDABLE +STRINGTABLE { PD32_PRINT_TITLE "Imprimir" PD32_VALUE_UREADABLE "Entrada Ilegível" - PD32_INVALID_PAGE_RANGE "Este valor não se encaixa na faixa de páginas\n\ -Por favor entre um valor entre %d e %d." - PD32_FROM_NOT_ABOVE_TO "A entrada DE não pode exceder ATÉ." + PD32_INVALID_PAGE_RANGE "Este valor não se encaixa na faixa de páginas.\n\ +Por favor insira um valor entre %d e %d." + PD32_FROM_NOT_ABOVE_TO "A entrada 'de' não pode exceder 'até'." PD32_MARGINS_OVERLAP "As margens estão fora das medidas \ -do papel.\nPor favor reentre as margens." +do papel.\nPor favor reinsira as margens." PD32_NR_OF_COPIES_EMPTY "O número de cópias não pode ter valor vazio." - PD32_TOO_LARGE_COPIES "Esta grande quantidade de cópias não é suportada \ -pela sua impressora.\nPor favor entre um valor entre 1 e %d." + PD32_TOO_LARGE_COPIES "Esta quantidade de cópias é muito grande \ +para a sua impressora.\nPor favor insira um valor entre 1 e %d." PD32_PRINT_ERROR "Ocorreu um erro de impressão." PD32_NO_DEFAULT_PRINTER "Não existe uma impressora padrão." PD32_CANT_FIND_PRINTER "Não é possível encontrar uma impressora." PD32_OUT_OF_MEMORY "Memória insuficiente." PD32_GENERIC_ERROR "Ocorreu algum erro." PD32_DRIVER_UNKNOWN "Driver de impressora desconhecido." - PD32_NO_DEVICES "Before you can perform printer-related tasks \ -such as page setup or printing a document, you need to install a printer. \ -Please install one and retry." + PD32_NO_DEVICES "Antes de realizar tarefas relacionadas com a impressora \ +tais como configuração de páginas ou imprimir um documento, é necessário instalar uma impressora. \ +Por favor instale uma e tente novamente." PD32_DEFAULT_PRINTER "Impressora Padrão; " PD32_NR_OF_DOCUMENTS_IN_QUEUE "Existem %d documentos na fila" @@ -854,7 +744,7 @@ Please install one and retry." PD32_PRINTER_STATUS_IO_ACTIVE "E/S Ativa; " PD32_PRINTER_STATUS_BUSY "Ocupada; " PD32_PRINTER_STATUS_PRINTING "Imprimindo; " - PD32_PRINTER_STATUS_OUTPUT_BIN_FULL "Bandeja de saída está cheia; " + PD32_PRINTER_STATUS_OUTPUT_BIN_FULL "A bandeja de saída está cheia; " PD32_PRINTER_STATUS_NOT_AVAILABLE "Não disponível; " PD32_PRINTER_STATUS_WAITING "Esperando; " PD32_PRINTER_STATUS_PROCESSING "Processando; " @@ -872,14 +762,14 @@ Please install one and retry." LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE -STRINGTABLE DISCARDABLE +STRINGTABLE { PD32_PRINT_TITLE "Imprimir" PD32_VALUE_UREADABLE "Entrada Ilegível" - PD32_INVALID_PAGE_RANGE "Este valor não se encaixa na faixa de páginas\n\ + PD32_INVALID_PAGE_RANGE "Este valor não se encaixa na faixa de páginas.\n\ Por favor indique um valor entre %d e %d." - PD32_FROM_NOT_ABOVE_TO "A entrada DE não pode exceder ATÉ" + PD32_FROM_NOT_ABOVE_TO "A entrada 'de' não pode exceder 'até'." PD32_MARGINS_OVERLAP "As margens estão fora das medidas \ do papel.\nPor favor indique as margens." PD32_NR_OF_COPIES_EMPTY "O número de cópias não pode ter valor vazio." @@ -929,9 +819,9 @@ Por favor instale uma e tente novamente." PD32_PRINTER_STATUS_POWER_SAVE "Modo económico; " } -LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE +LANGUAGE LANG_PORTUGUESE, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE /* Estilos de tipos de letra */ +STRINGTABLE /* Estilos de tipos de letra */ { IDS_FONT_REGULAR "Normal" IDS_FONT_BOLD "Negrito" @@ -939,9 +829,9 @@ STRINGTABLE DISCARDABLE /* Estilos de tipos de letra */ IDS_FONT_BOLD_ITALIC "Negrito Itálico" } -LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN +LANGUAGE LANG_PORTUGUESE, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE /* Nomes de cores */ +STRINGTABLE /* Nomes de cores */ { IDS_COLOR_BLACK "Preto" IDS_COLOR_MAROON "Castanho" @@ -961,32 +851,10 @@ STRINGTABLE DISCARDABLE /* Nomes de cores */ IDS_COLOR_WHITE "Branco" } -LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE - -STRINGTABLE DISCARDABLE /* Nomes de cores */ -{ - IDS_COLOR_BLACK "Preto" - IDS_COLOR_MAROON "Castanho" - IDS_COLOR_GREEN "Verde" - IDS_COLOR_OLIVE "Verde-oliveira" - IDS_COLOR_NAVY "Azul-marinho" - IDS_COLOR_PURPLE "Roxo" - IDS_COLOR_TEAL "Azul-petróleo" - IDS_COLOR_GRAY "Cinza" - IDS_COLOR_SILVER "Prateado" - IDS_COLOR_RED "Vermelho" - IDS_COLOR_LIME "Verde-lima" - IDS_COLOR_YELLOW "Amarelo" - IDS_COLOR_BLUE "Azul" - IDS_COLOR_FUCHSIA "Fcsia" - IDS_COLOR_AQUA "Azul-piscina" - IDS_COLOR_WHITE "Branco" -} - LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_FONT_SIZE "Selecione o tamanho da fonte entre %d e %d pontos." IDS_SAVE_BUTTON "&Salvar" @@ -998,7 +866,7 @@ STRINGTABLE DISCARDABLE LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_FONT_SIZE "Seleccione o tamanho do tipo de letra entre %d e %d pontos." IDS_SAVE_BUTTON "&Gravar" diff --git a/dll/win32/comdlg32/cdlg_Ro.rc b/dll/win32/comdlg32/cdlg_Ro.rc index 0c1b304c29e..a5b975253a6 100644 --- a/dll/win32/comdlg32/cdlg_Ro.rc +++ b/dll/win32/comdlg32/cdlg_Ro.rc @@ -28,7 +28,7 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL #pragma code_page(65001) -OPEN_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134 +OPEN_FILE DIALOG 36, 24, 275, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Deschide" FONT 8, "MS Shell Dlg" @@ -50,7 +50,7 @@ FONT 8, "MS Shell Dlg" } -SAVE_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134 +SAVE_FILE DIALOG 36, 24, 275, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Salvare ca..." FONT 8, "MS Shell Dlg" @@ -72,7 +72,7 @@ FONT 8, "MS Shell Dlg" } -PRINT DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 +PRINT DIALOG 36, 24, 264, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Tipărire" FONT 8, "MS Shell Dlg" @@ -95,7 +95,7 @@ FONT 8, "MS Shell Dlg" } -PRINT_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 +PRINT_SETUP DIALOG 36, 24, 264, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Setări tipărire" FONT 8, "MS Shell Dlg" @@ -121,7 +121,7 @@ FONT 8, "MS Shell Dlg" } -CHOOSE_FONT DIALOG DISCARDABLE 13, 54, 264, 147 +CHOOSE_FONT DIALOG 13, 54, 264, 147 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Font" FONT 8, "MS Shell Dlg" @@ -153,7 +153,7 @@ FONT 8, "MS Shell Dlg" } -CHOOSE_COLOR DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 300, 185 +CHOOSE_COLOR DIALOG 36, 24, 300, 185 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Culoare" FONT 8, "MS Shell Dlg" @@ -187,7 +187,7 @@ FONT 8, "MS Shell Dlg" } -FINDDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 236, 62 +FINDDLGORD DIALOG 36, 24, 236, 62 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Caută" FONT 8, "MS Shell Dlg" @@ -206,7 +206,7 @@ FONT 8, "MS Shell Dlg" } -REPLACEDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 230, 94 +REPLACEDLGORD DIALOG 36, 24, 230, 94 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Înlocuire" FONT 8, "MS Shell Dlg" @@ -226,7 +226,7 @@ FONT 8, "MS Shell Dlg" } -PRINT32 DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 288, 186 +PRINT32 DIALOG 32, 32, 288, 186 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CONTEXTHELP | DS_3DLOOK CAPTION "Tipărire" @@ -266,7 +266,7 @@ FONT 8, "MS Shell Dlg" RTEXT "&la:", stc3, 100,124, 16,8 } -PRINT32_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 288, 178 +PRINT32_SETUP DIALOG 32, 32, 288, 178 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CONTEXTHELP | DS_3DLOOK CAPTION "Setări tipărire" @@ -301,7 +301,7 @@ BEGIN CONTROL "&Peisaj", rad2,"Button",BS_AUTORADIOBUTTON,224,126,52,12 END -PAGESETUPDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 240, 240 +PAGESETUPDLGORD DIALOG 32, 32, 240, 240 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Setare Pagină" FONT 8, "MS Shell Dlg" @@ -331,7 +331,7 @@ BEGIN PUSHBUTTON "&Imprimantă...", psh3, 184, 220, 48, 14 END -NEWFILEOPENORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 280, 164 +NEWFILEOPENORD DIALOG 0, 0, 280, 164 STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_CLIPCHILDREN CAPTION "Deschide" FONT 8, "MS Shell Dlg" @@ -355,7 +355,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON "&Ajutor", pshHelp,222,145,50,14 } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_ABOUTBOX "&Despre testul FolderPicker" IDS_DOCUMENTFOLDERS "Dosarele de documente" @@ -367,7 +367,7 @@ STRINGTABLE DISCARDABLE IDS_MYCOMPUTER "Computerul meu" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_SYSTEMFOLDERS "Dosarele de sistem" IDS_LOCALHARDRIVES "Discurile locale" @@ -381,7 +381,7 @@ STRINGTABLE DISCARDABLE IDS_FILENOTEXISTING "Fişierul nu există" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_UPFOLDER "Un nivel de dosare mai sus" IDS_NEWFOLDER "Creează un dosar nou" @@ -390,7 +390,7 @@ STRINGTABLE DISCARDABLE IDS_TODESKTOP "Navigează la birou" } -STRINGTABLE DISCARDABLE +STRINGTABLE { PD32_PRINT_TITLE "Tipărire" @@ -442,7 +442,7 @@ STRINGTABLE DISCARDABLE PD32_PRINTER_STATUS_POWER_SAVE "Economisire de energie; " } -STRINGTABLE DISCARDABLE /* Font styles */ +STRINGTABLE /* Font styles */ { IDS_FONT_REGULAR "Normal" IDS_FONT_BOLD "Aldin" @@ -450,7 +450,7 @@ STRINGTABLE DISCARDABLE /* Font styles */ IDS_FONT_BOLD_ITALIC "Aldin cursiv" } -STRINGTABLE DISCARDABLE /* Color names */ +STRINGTABLE /* Color names */ { IDS_COLOR_BLACK "Negru" IDS_COLOR_MAROON "Maro" @@ -470,7 +470,7 @@ STRINGTABLE DISCARDABLE /* Color names */ IDS_COLOR_WHITE "Alb" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_FONT_SIZE "Alegeți o mărime de font între %d și %d puncte." IDS_SAVE_BUTTON "&Salvează" diff --git a/dll/win32/comdlg32/cdlg_Ru.rc b/dll/win32/comdlg32/cdlg_Ru.rc index 8ba3bdc7b35..61a1ecf43c2 100644 --- a/dll/win32/comdlg32/cdlg_Ru.rc +++ b/dll/win32/comdlg32/cdlg_Ru.rc @@ -28,7 +28,7 @@ LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT -OPEN_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134 +OPEN_FILE DIALOG 36, 24, 275, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Открыть" FONT 8, "MS Shell Dlg" @@ -50,7 +50,7 @@ FONT 8, "MS Shell Dlg" } -SAVE_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134 +SAVE_FILE DIALOG 36, 24, 275, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Сохранить как..." FONT 8, "MS Shell Dlg" @@ -72,7 +72,7 @@ FONT 8, "MS Shell Dlg" } -PRINT DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 +PRINT DIALOG 36, 24, 264, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Печать" FONT 8, "MS Shell Dlg" @@ -95,7 +95,7 @@ FONT 8, "MS Shell Dlg" } -PRINT_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 +PRINT_SETUP DIALOG 36, 24, 264, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Настройка принтера" FONT 8, "MS Shell Dlg" @@ -121,7 +121,7 @@ FONT 8, "MS Shell Dlg" } -CHOOSE_FONT DIALOG DISCARDABLE 13, 54, 264, 147 +CHOOSE_FONT DIALOG 13, 54, 264, 147 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Шрифт" FONT 8, "MS Shell Dlg" @@ -153,7 +153,7 @@ FONT 8, "MS Shell Dlg" } -CHOOSE_COLOR DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 310, 185 +CHOOSE_COLOR DIALOG 36, 24, 310, 185 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Изменение палитры" FONT 8, "MS Shell Dlg" @@ -187,7 +187,7 @@ FONT 8, "MS Shell Dlg" } -FINDDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 245, 62 +FINDDLGORD DIALOG 36, 24, 245, 62 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Поиск" FONT 8, "MS Shell Dlg" @@ -206,7 +206,7 @@ FONT 8, "MS Shell Dlg" } -REPLACEDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 230, 94 +REPLACEDLGORD DIALOG 36, 24, 230, 94 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Замена" FONT 8, "MS Shell Dlg" @@ -225,7 +225,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON "&Справка", pshHelp , 174, 75, 50, 14, WS_GROUP | WS_TABSTOP } -PRINT32 DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 288, 186 +PRINT32 DIALOG 32, 32, 288, 186 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CONTEXTHELP | DS_3DLOOK CAPTION "Печать" @@ -265,7 +265,7 @@ FONT 8, "MS Shell Dlg" RTEXT "&до:", stc3, 108,124, 12,8 } -PRINT32_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 288, 178 +PRINT32_SETUP DIALOG 32, 32, 288, 178 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CONTEXTHELP | DS_3DLOOK CAPTION "Установки принтера" @@ -300,7 +300,7 @@ BEGIN CONTROL "Л&андшафт", rad2,"Button",BS_AUTORADIOBUTTON,224,126,52,12 END -PAGESETUPDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 240, 240 +PAGESETUPDLGORD DIALOG 32, 32, 240, 240 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Параметры страницы" FONT 8, "MS Shell Dlg" @@ -331,7 +331,7 @@ BEGIN END -NEWFILEOPENORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 280, 164 +NEWFILEOPENORD DIALOG 0, 0, 280, 164 STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_CLIPCHILDREN CAPTION "Открыть" FONT 8, "MS Shell Dlg" @@ -355,7 +355,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON "&Справка", pshHelp,222,145,50,14 } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_ABOUTBOX "&О тесте ВыборПапки" IDS_DOCUMENTFOLDERS "Папки документов" @@ -367,7 +367,7 @@ STRINGTABLE DISCARDABLE IDS_MYCOMPUTER "Мой компьютер" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_SYSTEMFOLDERS "Системные папки" IDS_LOCALHARDRIVES "Локальные жесткие диски" @@ -381,7 +381,7 @@ STRINGTABLE DISCARDABLE IDS_FILENOTEXISTING "Файл не существует" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_UPFOLDER "Вверх на один уровень" IDS_NEWFOLDER "Создать новую папку" @@ -390,7 +390,7 @@ STRINGTABLE DISCARDABLE IDS_TODESKTOP "Переход на рабочий стол" } -STRINGTABLE DISCARDABLE +STRINGTABLE { PD32_PRINT_TITLE "Печать" @@ -448,7 +448,7 @@ STRINGTABLE DISCARDABLE PD32_PRINTER_STATUS_POWER_SAVE "Питание в безопасном режиме; " } -STRINGTABLE DISCARDABLE /* Font styles */ +STRINGTABLE /* Font styles */ { IDS_FONT_REGULAR "Нормальный" IDS_FONT_BOLD "Жирный" @@ -456,7 +456,7 @@ STRINGTABLE DISCARDABLE /* Font styles */ IDS_FONT_BOLD_ITALIC "Жирный курсив" } -STRINGTABLE DISCARDABLE /* Color names */ +STRINGTABLE /* Color names */ { IDS_COLOR_BLACK "Чёрный" IDS_COLOR_MAROON "Тёмно-бордовый" @@ -476,7 +476,7 @@ STRINGTABLE DISCARDABLE /* Color names */ IDS_COLOR_WHITE "Белый" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_FONT_SIZE "Выберите шрифт размером %d - %d пунктов." IDS_SAVE_BUTTON "&Сохранить" diff --git a/dll/win32/comdlg32/cdlg_Si.rc b/dll/win32/comdlg32/cdlg_Si.rc index e3d37e93055..c98c6697444 100644 --- a/dll/win32/comdlg32/cdlg_Si.rc +++ b/dll/win32/comdlg32/cdlg_Si.rc @@ -27,7 +27,7 @@ LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT -OPEN_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134 +OPEN_FILE DIALOG 36, 24, 275, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Odpri" FONT 8, "MS Shell Dlg" @@ -49,7 +49,7 @@ FONT 8, "MS Shell Dlg" } -SAVE_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134 +SAVE_FILE DIALOG 36, 24, 275, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Shrani kot ..." FONT 8, "MS Shell Dlg" @@ -71,7 +71,7 @@ FONT 8, "MS Shell Dlg" } -PRINT DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 +PRINT DIALOG 36, 24, 264, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Tiskanje" FONT 8, "MS Shell Dlg" @@ -94,7 +94,7 @@ FONT 8, "MS Shell Dlg" } -PRINT_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 +PRINT_SETUP DIALOG 36, 24, 264, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Nastavitve tiskanja" FONT 8, "MS Shell Dlg" @@ -120,7 +120,7 @@ FONT 8, "MS Shell Dlg" } -CHOOSE_FONT DIALOG DISCARDABLE 13, 54, 264, 147 +CHOOSE_FONT DIALOG 13, 54, 264, 147 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Pisava" FONT 8, "MS Shell Dlg" @@ -152,7 +152,7 @@ FONT 8, "MS Shell Dlg" } -CHOOSE_COLOR DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 300, 185 +CHOOSE_COLOR DIALOG 36, 24, 300, 185 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Barva" FONT 8, "MS Shell Dlg" @@ -186,7 +186,7 @@ FONT 8, "MS Shell Dlg" } -FINDDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 236, 62 +FINDDLGORD DIALOG 36, 24, 236, 62 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Iskanje" FONT 8, "MS Shell Dlg" @@ -205,7 +205,7 @@ FONT 8, "MS Shell Dlg" } -REPLACEDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 230, 94 +REPLACEDLGORD DIALOG 36, 24, 230, 94 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Zamenjava" FONT 8, "MS Shell Dlg" @@ -225,7 +225,7 @@ FONT 8, "MS Shell Dlg" } -PRINT32 DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 288, 186 +PRINT32 DIALOG 32, 32, 288, 186 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CONTEXTHELP | DS_3DLOOK CAPTION "Tiskanje" @@ -265,7 +265,7 @@ FONT 8, "MS Shell Dlg" RTEXT "&do:", stc3, 94,124, 12,8 } -PRINT32_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 288, 178 +PRINT32_SETUP DIALOG 32, 32, 288, 178 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CONTEXTHELP | DS_3DLOOK CAPTION "Nastavitev tiskanja" @@ -300,7 +300,7 @@ BEGIN CONTROL "L&ežeče", rad2,"Button",BS_AUTORADIOBUTTON,224,126,52,12 END -PAGESETUPDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 240, 240 +PAGESETUPDLGORD DIALOG 32, 32, 240, 240 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Nastavitev strani" FONT 8, "MS Shell Dlg" @@ -330,7 +330,7 @@ BEGIN PUSHBUTTON "&Tiskalnik ...", psh3, 184, 220, 48, 14 END -NEWFILEOPENORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 280, 164 +NEWFILEOPENORD DIALOG 0, 0, 280, 164 STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_CLIPCHILDREN CAPTION "Odpri" FONT 8, "MS Shell Dlg" @@ -354,7 +354,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON "&Pomoč", pshHelp,222,145,50,14 } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_ABOUTBOX "&O FolderPicker Test" IDS_DOCUMENTFOLDERS "Mape z dokumenti" @@ -366,7 +366,7 @@ STRINGTABLE DISCARDABLE IDS_MYCOMPUTER "Moj računalnik" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_SYSTEMFOLDERS "Sistemske mape" IDS_LOCALHARDRIVES "Lokalni trdi diski" @@ -380,7 +380,7 @@ STRINGTABLE DISCARDABLE IDS_FILENOTEXISTING "Datoteka ne obstaja" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_UPFOLDER "V nadrejeno mapo" IDS_NEWFOLDER "Ustvari novo mapo" @@ -389,7 +389,7 @@ STRINGTABLE DISCARDABLE IDS_TODESKTOP "Pogled namizja" } -STRINGTABLE DISCARDABLE +STRINGTABLE { PD32_PRINT_TITLE "Tiskanje" @@ -447,7 +447,7 @@ poskusite znova." PD32_PRINTER_STATUS_POWER_SAVE "V pripravljenosti; " } -STRINGTABLE DISCARDABLE /* Font styles */ +STRINGTABLE /* Font styles */ { IDS_FONT_REGULAR "Navadno" IDS_FONT_BOLD "Krepko" @@ -455,7 +455,7 @@ STRINGTABLE DISCARDABLE /* Font styles */ IDS_FONT_BOLD_ITALIC "Krepko ležeče" } -STRINGTABLE DISCARDABLE /* Color names */ +STRINGTABLE /* Color names */ { IDS_COLOR_BLACK "Črna" IDS_COLOR_MAROON "Kostanjeva" @@ -475,7 +475,7 @@ STRINGTABLE DISCARDABLE /* Color names */ IDS_COLOR_WHITE "Bela" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_FONT_SIZE "Izberite velikost pisave med %d in %d točk." IDS_SAVE_BUTTON "&Shrani" diff --git a/dll/win32/comdlg32/cdlg_Sk.rc b/dll/win32/comdlg32/cdlg_Sk.rc index 4a2ef2745aa..6069bbc4e0a 100644 --- a/dll/win32/comdlg32/cdlg_Sk.rc +++ b/dll/win32/comdlg32/cdlg_Sk.rc @@ -28,7 +28,7 @@ LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT /* Slovak strings in CP1250 */ -OPEN_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134 +OPEN_FILE DIALOG 36, 24, 275, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Otvori" FONT 8, "MS Shell Dlg" @@ -50,7 +50,7 @@ FONT 8, "MS Shell Dlg" } -SAVE_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134 +SAVE_FILE DIALOG 36, 24, 275, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Uloi ako..." FONT 8, "MS Shell Dlg" @@ -72,7 +72,7 @@ FONT 8, "MS Shell Dlg" } -PRINT DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 +PRINT DIALOG 36, 24, 264, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Tla" FONT 8, "MS Shell Dlg" @@ -95,7 +95,7 @@ FONT 8, "MS Shell Dlg" } -PRINT_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 +PRINT_SETUP DIALOG 36, 24, 264, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Nastavenie spsobu tlae" FONT 8, "MS Shell Dlg" @@ -121,7 +121,7 @@ FONT 8, "MS Shell Dlg" } -CHOOSE_FONT DIALOG DISCARDABLE 13, 54, 264, 147 +CHOOSE_FONT DIALOG 13, 54, 264, 147 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Psmo" FONT 8, "MS Shell Dlg" @@ -153,7 +153,7 @@ FONT 8, "MS Shell Dlg" } -CHOOSE_COLOR DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 300, 185 +CHOOSE_COLOR DIALOG 36, 24, 300, 185 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Farby" FONT 8, "MS Shell Dlg" @@ -187,7 +187,7 @@ FONT 8, "MS Shell Dlg" } -FINDDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 236, 62 +FINDDLGORD DIALOG 36, 24, 236, 62 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Hadanie" FONT 8, "MS Shell Dlg" @@ -206,7 +206,7 @@ FONT 8, "MS Shell Dlg" } -REPLACEDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 230, 94 +REPLACEDLGORD DIALOG 36, 24, 230, 94 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Zmena" FONT 8, "MS Shell Dlg" @@ -226,7 +226,7 @@ FONT 8, "MS Shell Dlg" } -PRINT32 DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 288, 186 +PRINT32 DIALOG 32, 32, 288, 186 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CONTEXTHELP | DS_3DLOOK CAPTION "Tla" @@ -266,7 +266,7 @@ FONT 8, "MS Shell Dlg" RTEXT "&do:", stc3, 100,124, 16,8 } -PRINT32_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 288, 178 +PRINT32_SETUP DIALOG 32, 32, 288, 178 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CONTEXTHELP | DS_3DLOOK CAPTION "Nastavenie tlae" @@ -301,7 +301,7 @@ BEGIN CONTROL "Na &rku", rad2,"Button",BS_AUTORADIOBUTTON,224,126,52,12 END -PAGESETUPDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 240, 240 +PAGESETUPDLGORD DIALOG 32, 32, 240, 240 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Setup Page" FONT 8, "MS Shell Dlg" @@ -331,7 +331,7 @@ BEGIN PUSHBUTTON "P&rinter...", psh3, 184, 220, 48, 14 END -NEWFILEOPENORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 280, 164 +NEWFILEOPENORD DIALOG 0, 0, 280, 164 STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_CLIPCHILDREN CAPTION "Otvori" FONT 8, "MS Shell Dlg" @@ -355,7 +355,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON "&Pomoc", pshHelp,222,145,50,14 } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_ABOUTBOX "&O teste uchopovania adresrov" IDS_DOCUMENTFOLDERS "Adresr dokumentov" @@ -367,7 +367,7 @@ STRINGTABLE DISCARDABLE IDS_MYCOMPUTER "Tento pota" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_SYSTEMFOLDERS "Systmov adresre" IDS_LOCALHARDRIVES "Loklne pevn disky" @@ -381,7 +381,7 @@ STRINGTABLE DISCARDABLE IDS_FILENOTEXISTING "Sbor neexistuje" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_UPFOLDER "O rove vyie" IDS_NEWFOLDER "Vytvori nov adresr" @@ -390,7 +390,7 @@ STRINGTABLE DISCARDABLE IDS_TODESKTOP "Listova pracovn plochu" } -STRINGTABLE DISCARDABLE +STRINGTABLE { PD32_PRINT_TITLE "Tla" @@ -449,7 +449,7 @@ Please install one and retry." PD32_PRINTER_STATUS_POWER_SAVE "sporn reim; " } -STRINGTABLE DISCARDABLE /* Font styles */ +STRINGTABLE /* Font styles */ { IDS_FONT_REGULAR "Regular" IDS_FONT_BOLD "Tun" @@ -457,7 +457,7 @@ STRINGTABLE DISCARDABLE /* Font styles */ IDS_FONT_BOLD_ITALIC "Tun kurzva" } -STRINGTABLE DISCARDABLE /* Color names */ +STRINGTABLE /* Color names */ { IDS_COLOR_BLACK "ierna" IDS_COLOR_MAROON "Maroon" @@ -477,7 +477,7 @@ STRINGTABLE DISCARDABLE /* Color names */ IDS_COLOR_WHITE "Biela" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_FONT_SIZE "Select a font size between %d and %d points." IDS_SAVE_BUTTON "&Save" diff --git a/dll/win32/comdlg32/cdlg_Sr.rc b/dll/win32/comdlg32/cdlg_Sr.rc new file mode 100644 index 00000000000..9ee0a39da8f --- /dev/null +++ b/dll/win32/comdlg32/cdlg_Sr.rc @@ -0,0 +1,481 @@ +/* + * Copyright 2010 Nenad Vujic + * Paul Vriens + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include "cdlg.h" +#include "filedlgbrowser.h" + +#pragma code_page(65001) + +/* + * WARNING: DO NOT CHANGE THE SIZE OF THE STANDARD DIALOG TEMPLATES. + */ + +LANGUAGE LANG_SERBIAN, SUBLANG_SERBIAN_LATIN + +OPEN_FILE DIALOG 36, 24, 275, 134 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Otvori" +FONT 8, "MS Shell Dlg" +{ + LTEXT "Ime &Fajla:", 1090, 6, 6, 76, 9 + EDITTEXT edt1, 6, 16, 90, 12, ES_AUTOHSCROLL | ES_OEMCONVERT | WS_BORDER | WS_TABSTOP + LISTBOX 1120, 6, 32, 90, 68, LBS_STANDARD | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_TABSTOP + LTEXT "&Folderi:", -1, 110, 6, 92, 9 + LTEXT "", 1088, 110, 18, 92, 9, SS_NOPREFIX | WS_GROUP + LISTBOX 1121, 110, 32, 92, 68, LBS_STANDARD | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_TABSTOP + LTEXT "Lista fajlova &tipa:", 1089, 6, 104, 90, 9 + COMBOBOX cmb1, 6, 114, 90, 36, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_BORDER | WS_VSCROLL | WS_TABSTOP + LTEXT "Dis&kovi:", 1091, 110, 104, 92, 9 + COMBOBOX cmb2, 110, 114, 92, 68, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP + DEFPUSHBUTTON "Otvori", 1, 208, 6, 56, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Otkaži", 2, 208, 24, 56, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Pomoć", pshHelp, 208, 46, 56, 14, WS_GROUP | WS_TABSTOP + CHECKBOX "&Samo Čitanje", chx1, 208, 68, 50, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP +} + + +SAVE_FILE DIALOG 36, 24, 275, 134 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Sačuvaj kao..." +FONT 8, "MS Shell Dlg" +{ + LTEXT "Ime &Fajla:", 1090, 6, 6, 76, 9 + EDITTEXT edt1, 6, 16, 90, 12, ES_AUTOHSCROLL | ES_OEMCONVERT | WS_BORDER | WS_TABSTOP + LISTBOX 1120, 6, 32, 90, 68, LBS_STANDARD | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_TABSTOP + LTEXT "&Folderi:", -1, 110, 6, 92, 9 + LTEXT "", 1088, 110, 18, 92, 9, SS_NOPREFIX | WS_GROUP + LISTBOX 1121, 110, 32, 92, 68, LBS_STANDARD | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_TABSTOP + LTEXT "Lista fajlova &tipa:", 1089, 6, 104, 90, 9 + COMBOBOX cmb1, 6, 114, 90, 36, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_BORDER | WS_VSCROLL | WS_TABSTOP + LTEXT "Dis&kovi:", 1091, 110, 104, 92, 9 + COMBOBOX cmb2, 110, 114, 92, 68, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP + DEFPUSHBUTTON "Sačuvaj kao", 1, 208, 6, 56, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Otkaži", 2, 208, 24, 56, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Pomoć", pshHelp, 208, 46, 56, 14, WS_GROUP | WS_TABSTOP + CHECKBOX "&Samo Čitanje", chx1, 208, 68, 50, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP +} + + +PRINT DIALOG 36, 24, 264, 134 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Štampaj" +FONT 8, "MS Shell Dlg" +{ + LTEXT "Štampač:", 1088, 6, 6, 40, 9 + LTEXT "", 1089, 60, 6, 150, 9 + GROUPBOX "Opseg štampanja", grp1, 6, 30, 160, 65, BS_GROUPBOX + RADIOBUTTON "&Svi", rad1, 16, 45, 60, 12 + RADIOBUTTON "O&dabir", rad2, 16, 60, 60, 12 + RADIOBUTTON "&Strane", rad3, 16, 75, 60, 12 + DEFPUSHBUTTON "Štampaj", 1, 206, 6, 56, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Otkaži", 2, 206, 24, 56, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Podesi", psh1, 206, 46, 56, 14, WS_GROUP | WS_TABSTOP + LTEXT "&Od:", 1090, 60, 80, 30, 9 + LTEXT "&Do:", 1091, 120, 80, 30, 9 + LTEXT "Kvalitet &Štampe:", 1092, 6, 100, 76, 9 + COMBOBOX cmb1, 80, 100, 92, 68, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP + CHECKBOX "Štampaj u Fa&jl", chx1, 20, 100, 50, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP + CHECKBOX "Kondenzovan", chx2, 160, 100, 50, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP +} + + +PRINT_SETUP DIALOG 36, 24, 264, 134 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Podesi štampanje" +FONT 8, "MS Shell Dlg" +{ + GROUPBOX "Štampač", grp1, 6, 10, 180, 65, BS_GROUPBOX + RADIOBUTTON "&Osnovni štampač", rad1, 16, 20, 80, 12 + LTEXT "[ništa]", 1088, 35, 35, 120, 9 + RADIOBUTTON "Određeni &Štampač", rad2, 16, 50, 80, 12 + COMBOBOX cmb1, 35, 65, 149, 68, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP + DEFPUSHBUTTON "OK", IDOK, 206, 6, 56, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Otkaži", IDCANCEL, 206, 24, 56, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Podesi", psh1, 206, 46, 56, 14, WS_GROUP | WS_TABSTOP + GROUPBOX "Orientacija", grp2, 6, 85, 100, 50, BS_GROUPBOX + RADIOBUTTON "Po&rtret", rad3, 50, 100, 50, 12 + RADIOBUTTON "&Pejzaš", rad4, 50, 115, 50, 12 + ICON "LANDSCAP", stc10, 10, 95, 32, 32 + ICON "PORTRAIT", stc11, 10, 95, 32, 32 + GROUPBOX "Papir", grp3, 120, 85, 180, 50, BS_GROUPBOX + LTEXT "Vel&ičina", 1089, 130, 95, 30, 9 + LTEXT "&Izvor", 1090, 130, 110, 30, 9 + COMBOBOX cmb2, 155, 95, 92, 68, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP + COMBOBOX cmb3, 155, 110, 92, 68, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP +} + + +CHOOSE_FONT DIALOG 13, 54, 264, 147 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Font" +FONT 8, "MS Shell Dlg" +{ + LTEXT "&Font:",stc1 ,6,3,40,9 + COMBOBOX cmb1, 6,13,94,54, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | + CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE + LTEXT "Font St&il:",stc2 ,108,3,44,9 + COMBOBOX cmb2,108,13,64,54, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | + WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE + LTEXT "&Veličina:",stc3,179,3,30,9 + COMBOBOX cmb3,179,13,32,54, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | + WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE | CBS_SORT + DEFPUSHBUTTON "OK",IDOK,218,6,40,14, WS_GROUP | WS_TABSTOP | BS_DEFPUSHBUTTON + PUSHBUTTON "Otkaži",IDCANCEL,218,23,40,14,WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Primeni", psh3,218,40,40,14,WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Pomoć" , pshHelp,218,57,40,14,WS_GROUP | WS_TABSTOP + GROUPBOX "Efekti",grp1,6,72,84,34,WS_GROUP + CHECKBOX "Isti&canje", chx1, 10,82,50,10, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "&Podvučeno", chx2, 10,94,50,10, BS_AUTOCHECKBOX + LTEXT "&Boja:", stc4 ,6,110,30,9 + COMBOBOX cmb4,6,120,84,100,CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | + CBS_AUTOHSCROLL | WS_BORDER | WS_VSCROLL | WS_TABSTOP + GROUPBOX "Uzorak",grp2,98,72,120,36,WS_GROUP + CTEXT "AaBbYyZz",stc5,103,80,109,24,SS_NOPREFIX | NOT WS_VISIBLE + LTEXT "Skr&ipta:",stc7 ,98,114,40,9 + COMBOBOX cmb5,98,124,120,90,CBS_DROPDOWNLIST | CBS_HASSTRINGS | + CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP +} + + +CHOOSE_COLOR DIALOG 36, 24, 300, 185 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Boja" +FONT 8, "MS Shell Dlg" +{ + LTEXT "&Osnovne boje:", 1088, 4, 4, 140, 10 + LTEXT "&Podesi boje:", 1089, 4, 106, 140, 10 + LTEXT "Boja | Ja&ka", 1090, 150, 151, 48, 10 + LTEXT "&Crvena:", 726 /*1094*/,249,126,24,10 + EDITTEXT 706, 275,124,21,12, WS_BORDER | WS_GROUP | WS_TABSTOP + LTEXT "&Zelena:",727/*1095*/,249,140,24,10 + EDITTEXT 707, 275,138,21,12, WS_BORDER | WS_GROUP | WS_TABSTOP + LTEXT "&Plava:",728 /*1096*/,249,154,24,10 + EDITTEXT 708, 275,152,21,12, WS_BORDER | WS_GROUP | WS_TABSTOP + LTEXT "&Sivo:" ,723 /*1091*/,202,126,22,10 + EDITTEXT 703, 226,124,21,12, WS_BORDER | WS_GROUP | WS_TABSTOP + LTEXT "&Zasićenje:" ,724 /*1092*/,202,140,22,10 + EDITTEXT 704, 226,138,21,12, WS_BORDER | WS_GROUP | WS_TABSTOP + LTEXT "&Lum:" ,725 /*1093*/,202,154,22,10 + EDITTEXT 705, 226,152,21,12, WS_BORDER | WS_GROUP | WS_TABSTOP + CONTROL "" ,720,"STATIC",SS_SIMPLE|WS_TABSTOP|WS_GROUP,4,14,140,86 + CONTROL "" ,721,"STATIC",SS_SIMPLE|WS_TABSTOP|WS_GROUP,4,116,140,28 + CONTROL "" ,710,"STATIC",WS_BORDER|SS_SIMPLE|WS_TABSTOP|WS_GROUP, 152,4,118,116 + CONTROL "" ,702,"STATIC",SS_SIMPLE|WS_TABSTOP|WS_GROUP, 278,4,8,116 + CONTROL "" ,709,"STATIC",SS_SIMPLE|WS_TABSTOP|WS_GROUP, 152,124,40,26 + DEFPUSHBUTTON "OK", 1, 4, 166, 44, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Otkaži", 2, 52, 166, 44, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Pomoć", pshHelp,100,166, 44, 14 + PUSHBUTTON "&Dodaj boju", 712/*1024*/, 152, 166, 142, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Odredi boju >>", 719/*1025*/, 4, 150, 142, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&i",713,300,200,4,14 /* just a dummy: 'i' is like &i in "sol&id" */ +} + + +FINDDLGORD DIALOG 36, 24, 236, 62 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Nađi" +FONT 8, "MS Shell Dlg" +{ + LTEXT "Na&đi sta:", -1, 4, 8, 42, 8 + EDITTEXT edt1, 47, 7, 128, 12, ES_AUTOHSCROLL | WS_BORDER | WS_GROUP | WS_TABSTOP + CHECKBOX "Nađi &samo celu reč", chx1, 4, 26, 100, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP + CHECKBOX "Nađi &Sa istom veličinom", chx2, 4, 42, 64, 12, BS_AUTOCHECKBOX | WS_TABSTOP + GROUPBOX "Smer", grp1, 107, 26, 68, 28 + CONTROL "&Gore", rad1, "BUTTON", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, 111, 38, 30, 12 + CONTROL "&Dole", rad2, "BUTTON", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 138, 38, 30, 12 + + DEFPUSHBUTTON "&Nađi sledeće", IDOK, 182, 5, 50, 14, WS_GROUP | WS_TABSTOP | BS_DEFPUSHBUTTON + PUSHBUTTON "Otkaži", IDCANCEL , 182, 23, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Pomoć", pshHelp , 182, 45, 50, 14, WS_GROUP | WS_TABSTOP +} + + +REPLACEDLGORD DIALOG 36, 24, 230, 94 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Zameni" +FONT 8, "MS Shell Dlg" +{ + LTEXT "Na&đi sta:", -1, 4, 9, 48, 8 + EDITTEXT edt1, 54, 7, 114, 12, ES_AUTOHSCROLL | WS_BORDER | WS_GROUP | WS_TABSTOP + LTEXT "Za&meni sa:", -1, 4, 26, 48, 8 + EDITTEXT edt2, 54, 24, 114, 12, ES_AUTOHSCROLL | WS_BORDER | WS_GROUP | WS_TABSTOP + CHECKBOX "Nađi &samo celu reč", chx1, 5, 46, 104, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP + CHECKBOX "Nađi &Sa istom veličinom", chx2, 5, 62, 59, 12, BS_AUTOCHECKBOX | WS_TABSTOP + + DEFPUSHBUTTON "&Nađi sledeće", IDOK, 174, 4, 50, 14, WS_GROUP | WS_TABSTOP | BS_DEFPUSHBUTTON + PUSHBUTTON "&Zameni", psh1 , 174, 21, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Zameni &Sve", psh2 , 174, 38, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Otkaži", IDCANCEL , 174, 55, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Pomoć", pshHelp , 174, 75, 50, 14, WS_GROUP | WS_TABSTOP +} + + +PRINT32 DIALOG 32, 32, 288, 186 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | + DS_CONTEXTHELP | DS_3DLOOK +CAPTION "Štampaj" +FONT 8, "MS Shell Dlg" +{ + DEFPUSHBUTTON "OK", IDOK, 180,164, 48,14, WS_GROUP | BS_DEFPUSHBUTTON + PUSHBUTTON "Otkaži", IDCANCEL, 232,164, 48,14, WS_GROUP + PUSHBUTTON "&Pomoć", pshHelp, 50, 161, 48,14, WS_GROUP + + GROUPBOX "Štampač", grp4, 8, 4, 272,84, WS_GROUP + CONTROL "Štampaj u fa&jl", chx1, "Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,212,70,64,12 + PUSHBUTTON "&Detalji", psh2, 212, 17, 60,14, WS_GROUP + LTEXT "&Ime:", stc6, 16, 20, 36,8 + COMBOBOX cmb4, 52, 18, 152,152,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_GROUP | WS_TABSTOP + LTEXT "Status:", stc8, 16, 36, 36,10, SS_NOPREFIX + LTEXT "Glup status", stc12, 52, 36, 224,10, SS_NOPREFIX | SS_LEFTNOWORDWRAP + LTEXT "Kucaj:", stc7, 16, 48, 36,10, SS_NOPREFIX + LTEXT "Glupo kucanje", stc11, 52, 48, 224,10, SS_NOPREFIX | SS_LEFTNOWORDWRAP + LTEXT "Gde:", stc10, 16, 60, 36,10, SS_NOPREFIX + LTEXT "Glupa lokacija", stc14, 52, 60, 224,10, SS_NOPREFIX | SS_LEFTNOWORDWRAP + LTEXT "Komentar:", stc9, 16, 72, 36,10, SS_NOPREFIX + LTEXT "Glupo označavanje", stc13, 52, 72, 152,10, SS_NOPREFIX | SS_LEFTNOWORDWRAP + + GROUPBOX "Kopije", grp2, 160, 92, 120,64, WS_GROUP + LTEXT "Broj &kopija:",stc5,168,108,68,8 + ICON "", ico3, 162,124, 76,24, WS_GROUP | SS_CENTERIMAGE + CONTROL "S&redi", chx2,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,240,130,36,12 + EDITTEXT edt3, 240,106, 32,12, WS_GROUP | ES_NUMBER + + GROUPBOX "Domet štampe", grp1, 8,92, 144,64, WS_GROUP + CONTROL "&Svi", rad1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,16,106,64,12 + CONTROL "St&rane", rad3,"Button",BS_AUTORADIOBUTTON,16,122,36,12 + CONTROL "&Odabir", rad2,"Button",BS_AUTORADIOBUTTON,16,138,64,12 + EDITTEXT edt1, 74,122, 26,12, WS_GROUP | ES_NUMBER + EDITTEXT edt2, 118,122, 26,12, WS_GROUP | ES_NUMBER + RTEXT "&od:", stc2, 52,124, 20,8 + RTEXT "&do:", stc3, 100,124, 16,8 +} + +PRINT32_SETUP DIALOG 32, 32, 288, 178 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | + DS_CONTEXTHELP | DS_3DLOOK +CAPTION "Podesi štampanje" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "OK",IDOK,180,156,48,14,WS_GROUP + PUSHBUTTON "Otkaži",IDCANCEL,232,156,48,14 +/* PUSHBUTTON "Mreža...", psh5, 284,156,48,14 */ + + GROUPBOX "Štampač", grp4, 8, 4, 272,84, WS_GROUP + PUSHBUTTON "&Detalji", psh2, 212, 17, 60,14, WS_GROUP + LTEXT "&Ime:", stc6, 16, 20, 36,8 + COMBOBOX cmb1, 52, 18, 152,152,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_GROUP | WS_TABSTOP + LTEXT "Status:", stc8, 16, 36, 36,10, SS_NOPREFIX + LTEXT "Glup status", stc12, 52, 36, 224,10, SS_NOPREFIX | SS_LEFTNOWORDWRAP + LTEXT "Kucaj:", stc7, 16, 48, 36,10, SS_NOPREFIX + LTEXT "Glupo kucanje", stc11, 52, 48, 224,10, SS_NOPREFIX | SS_LEFTNOWORDWRAP + LTEXT "Gde:", stc10, 16, 60, 36,10, SS_NOPREFIX + LTEXT "Glupa lokacija", stc14, 52, 60, 224,10, SS_NOPREFIX | SS_LEFTNOWORDWRAP + LTEXT "Komentar:", stc9, 16, 72, 36,10, SS_NOPREFIX + LTEXT "Glupo označavanje", stc13, 52, 72, 224,10, SS_NOPREFIX | SS_LEFTNOWORDWRAP + + GROUPBOX "Papir", grp2, 8, 92, 164,56, WS_GROUP + LTEXT "Vel&ičina:", stc2, 16,108, 36, 8 + COMBOBOX cmb2, 52,106, 112,112,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_GROUP | WS_TABSTOP + LTEXT "&Izvor:", stc3, 16,128, 36, 8 + COMBOBOX cmb3, 52,126, 112,112,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_GROUP | WS_TABSTOP + + GROUPBOX "Orijentacija", grp1, 180, 92, 100,56, WS_GROUP + ICON "", ico1, 195,112, 18,20, WS_GROUP + CONTROL "P&ortet", rad1,"Button",BS_AUTORADIOBUTTON | WS_GROUP |WS_TABSTOP,224,106,52,12 + CONTROL "P&ejzaš", rad2,"Button",BS_AUTORADIOBUTTON,224,126,52,12 +END + +PAGESETUPDLGORD DIALOG 32, 32, 240, 240 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Podesi stranu" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "", rct1, "Static", SS_WHITERECT, 80, 8, 80, 80 + CONTROL "", rct2, "Static", SS_GRAYRECT, 160, 12, 4, 80 + CONTROL "", rct3, "Static", SS_GRAYRECT, 84, 88, 80, 4 + GROUPBOX "Papir", grp2, 8, 96, 224, 56, BS_GROUPBOX + LTEXT "&Veličina:", stc2, 16, 112, 36, 8 + COMBOBOX cmb2, 64, 110, 160, 160, CBS_SIMPLE|CBS_DROPDOWN|CBS_SORT|WS_GROUP|WS_TABSTOP|WS_VSCROLL + LTEXT "&Tray:", stc3, 16, 132, 36, 8 + COMBOBOX cmb3, 64, 130, 160, 160, CBS_SIMPLE|CBS_DROPDOWN|CBS_SORT|WS_GROUP|WS_TABSTOP|WS_VSCROLL + GROUPBOX "Orientacija", grp1, 8, 156, 64, 56, BS_GROUPBOX + AUTORADIOBUTTON "&Portret", rad1, 16, 170, 52, 12, BS_AUTORADIOBUTTON + AUTORADIOBUTTON "&Pejzaš", rad2, 16, 190, 52, 12, BS_AUTORADIOBUTTON + GROUPBOX "Granice", grp4, 80, 156, 152, 56, BS_GROUPBOX + LTEXT "L&evo:", stc15, 88, 172, 21, 8 + EDITTEXT edt4, 111, 170, 39, 12, WS_TABSTOP|WS_GROUP|WS_BORDER + LTEXT "&Desno:", stc16, 159, 172, 27, 8 + EDITTEXT edt6, 187, 170, 39, 12, WS_TABSTOP|WS_GROUP|WS_BORDER + LTEXT "G&ore:", stc17, 88, 192, 21, 8 + EDITTEXT edt5, 111, 190, 39, 12, WS_TABSTOP|WS_GROUP|WS_BORDER + LTEXT "&Dole:", stc18, 159, 192, 23, 8 + EDITTEXT edt7, 187, 190, 39, 12, WS_TABSTOP|WS_GROUP|WS_BORDER + DEFPUSHBUTTON "OK", IDOK, 71, 220, 50, 14, BS_PUSHBUTTON + PUSHBUTTON "Otkaži", IDCANCEL, 126, 220, 50, 14 + PUSHBUTTON "Š&tampac...", psh3, 184, 220, 48, 14 +END + +NEWFILEOPENORD DIALOG 0, 0, 280, 164 +STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_CLIPCHILDREN +CAPTION "Otvori" +FONT 8, "MS Shell Dlg" +{ + LTEXT "Traži &u:",IDC_LOOKINSTATIC,4,6,43,8, SS_NOTIFY + COMBOBOX IDC_LOOKIN,49,3,132,100,CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP + + LTEXT "" , IDC_TOOLBARSTATIC, 181, 2, 102, 17, NOT WS_GROUP | NOT WS_VISIBLE + LISTBOX IDC_SHELLSTATIC,4,20,272,85, LBS_SORT | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | WS_HSCROLL | NOT WS_VISIBLE + + LTEXT "Ime &fajla:",IDC_FILENAMESTATIC,5,112,46,8, SS_NOTIFY + EDITTEXT IDC_FILENAME,54,110,155,12,ES_AUTOHSCROLL + + LTEXT "Fajlovi &tipa:",IDC_FILETYPESTATIC,5,128,42,8, SS_NOTIFY + COMBOBOX IDC_FILETYPE,54,126,155,53,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + + CONTROL "Otvori &samo za čitanje",IDC_OPENREADONLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,54,145,100,10 + + DEFPUSHBUTTON "&Otvori", IDOK,222,110,50,14 + PUSHBUTTON "Otkaži", IDCANCEL,222,128,50,14 + PUSHBUTTON "&Pomoć", pshHelp,222,145,50,14 +} + +STRINGTABLE +{ + IDS_ABOUTBOX "&O FolderPicker Test-u" + IDS_DOCUMENTFOLDERS "Folder Dokumenta" + IDS_PERSONAL "Moja Dokumenta" + IDS_FAVORITES "Moji Favoriti" + IDS_PATH "Sistemska putanja" + IDS_DESKTOP "Desktop" + IDS_FONTS "Font" + IDS_MYCOMPUTER "Moj Kompjuter" +} + +STRINGTABLE +{ + IDS_SYSTEMFOLDERS "Sistemski folderi" + IDS_LOCALHARDRIVES "Lokalni hard disk" + IDS_FILENOTFOUND "Fajl nije nadjen" + IDS_VERIFYFILE "Molim proverite ime fajla" + IDS_CREATEFILE "Fajl ne postoji.\nDa li želite da kreirate fajl?" + IDS_OVERWRITEFILE "Fajl postoji.\nŽelite li da ga zamenite?" + IDS_INVALID_FILENAME_TITLE "Los karakter(i) u putanji" + IDS_INVALID_FILENAME "Ime fajla ne može imati znakove:\n / : < > |" + IDS_PATHNOTEXISTING "Putanja ne postoji" + IDS_FILENOTEXISTING "Fajl ne postoji" +} + +STRINGTABLE +{ + IDS_UPFOLDER "Gore jedan folder" + IDS_NEWFOLDER "Napravi novi folder" + IDS_LISTVIEW "Listing" + IDS_REPORTVIEW "Detalji" + IDS_TODESKTOP "Nađi na Desktopu" +} + +STRINGTABLE +{ + PD32_PRINT_TITLE "Štampaj" + + PD32_VALUE_UREADABLE "Ulaz nečitljiv" + PD32_INVALID_PAGE_RANGE "Ova vrednost ne postoji na strani.\nUnesite vrednosti između %d i %d." + PD32_FROM_NOT_ABOVE_TO "'Od' unos ne može biti posle 'do' unosa." + PD32_MARGINS_OVERLAP "Margine prelaze granice papira.\nMolim ponovo unesite margine" + PD32_NR_OF_COPIES_EMPTY "Broj 'broj kopija' ne moze biti prazan." + PD32_TOO_LARGE_COPIES "Ovoliki broj kopija nije podržan od štampača.\nMolim unesite vrednosti izmedju 1 i %d." + PD32_PRINT_ERROR "Greška štampača." + PD32_NO_DEFAULT_PRINTER "Glavni štampač nije određen." + PD32_CANT_FIND_PRINTER "Ne mogu naći stampač." + PD32_OUT_OF_MEMORY "Malo memorije." + PD32_GENERIC_ERROR "Greška se desila." + PD32_DRIVER_UNKNOWN "Nepoznat driver." + PD32_NO_DEVICES "Pre podešavanja strane i štampanja fajla, morate da instalirate štampač. Molim instalirajte jedan i pokusajte ponovo." + + PD32_DEFAULT_PRINTER "Glavni štampač; " + PD32_NR_OF_DOCUMENTS_IN_QUEUE "Nema dokumenta %d na čekanju." + PD32_MARGINS_IN_INCHES "Margine [inč]" + PD32_MARGINS_IN_MILLIMETERS "Margine [mm]" + PD32_MILLIMETERS "mm" + + PD32_PRINTER_STATUS_READY "Spreman" + PD32_PRINTER_STATUS_PAUSED "Pauza; " + PD32_PRINTER_STATUS_ERROR "Greška; " + PD32_PRINTER_STATUS_PENDING_DELETION "Brisanje u toku; " + PD32_PRINTER_STATUS_PAPER_JAM "Papir zaglavljen; " + PD32_PRINTER_STATUS_PAPER_OUT "Nema papira; " + PD32_PRINTER_STATUS_MANUAL_FEED "Dodajte papir; " + PD32_PRINTER_STATUS_PAPER_PROBLEM "Problem sa papirom; " + PD32_PRINTER_STATUS_OFFLINE "Štampač neaktivan; " + PD32_PRINTER_STATUS_IO_ACTIVE "I/O Aktivan; " + PD32_PRINTER_STATUS_BUSY "Zauzet; " + PD32_PRINTER_STATUS_PRINTING "Štampa; " + PD32_PRINTER_STATUS_OUTPUT_BIN_FULL "Izlazni deo je pun; " + PD32_PRINTER_STATUS_NOT_AVAILABLE "Nije dostupan; " + PD32_PRINTER_STATUS_WAITING "Čekanje; " + PD32_PRINTER_STATUS_PROCESSING "Obrađujem; " + PD32_PRINTER_STATUS_INITIALIZING "Pokretanje; " + PD32_PRINTER_STATUS_WARMING_UP "Zagrevanje; " + PD32_PRINTER_STATUS_TONER_LOW "Toner pri kraju; " + PD32_PRINTER_STATUS_NO_TONER "Nema tonera; " + PD32_PRINTER_STATUS_PAGE_PUNT "Papir punt; " + PD32_PRINTER_STATUS_USER_INTERVENTION "Prekinuto od korisnika; " + PD32_PRINTER_STATUS_OUT_OF_MEMORY "Malo memorije; " + PD32_PRINTER_STATUS_DOOR_OPEN "Vrata štampača su otvorena; " + PD32_PRINTER_STATUS_SERVER_UNKNOWN "Server za štampanje nepoznat; " + PD32_PRINTER_STATUS_POWER_SAVE "Mod uštede struje; " +} + +STRINGTABLE /* Font styles */ +{ + IDS_FONT_REGULAR "Obična" + IDS_FONT_BOLD "Debela" + IDS_FONT_ITALIC "Kosa" + IDS_FONT_BOLD_ITALIC "Debela Kosa" +} + +STRINGTABLE /* Color names */ +{ + IDS_COLOR_BLACK "Crna" + IDS_COLOR_MAROON "Maroon" + IDS_COLOR_GREEN "Zelena" + IDS_COLOR_OLIVE "Sivkasta" + IDS_COLOR_NAVY "Tamno plava" + IDS_COLOR_PURPLE "Ljubičasta" + IDS_COLOR_TEAL "Zelenkasta" + IDS_COLOR_GRAY "Siva" + IDS_COLOR_SILVER "Srebrna" + IDS_COLOR_RED "Crvena" + IDS_COLOR_LIME "Lime" + IDS_COLOR_YELLOW "Žuta" + IDS_COLOR_BLUE "Plava" + IDS_COLOR_FUCHSIA "Fuchsia" + IDS_COLOR_AQUA "Aqua" + IDS_COLOR_WHITE "Bela" +} + +STRINGTABLE +{ + IDS_FONT_SIZE "Izaberite veličinu fonta između %d i %d ." + IDS_SAVE_BUTTON "&Sačuvaj" + IDS_SAVE_IN "Sačuvaj &u:" + IDS_SAVE "Sačuvaj" + IDS_SAVE_AS "Sačuvaj kao" + IDS_OPEN_FILE "Otvori fajl" +} diff --git a/dll/win32/comdlg32/cdlg_Sv.rc b/dll/win32/comdlg32/cdlg_Sv.rc index 21d2ac2c1fe..9c5b6b356ed 100644 --- a/dll/win32/comdlg32/cdlg_Sv.rc +++ b/dll/win32/comdlg32/cdlg_Sv.rc @@ -26,7 +26,7 @@ LANGUAGE LANG_SWEDISH, SUBLANG_NEUTRAL -OPEN_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134 +OPEN_FILE DIALOG 36, 24, 275, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "ppna" FONT 8, "MS Shell Dlg" @@ -48,7 +48,7 @@ FONT 8, "MS Shell Dlg" } -SAVE_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134 +SAVE_FILE DIALOG 36, 24, 275, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Spara som..." FONT 8, "MS Shell Dlg" @@ -70,7 +70,7 @@ FONT 8, "MS Shell Dlg" } -PRINT DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 +PRINT DIALOG 36, 24, 264, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Skriv ut" FONT 8, "MS Shell Dlg" @@ -93,7 +93,7 @@ FONT 8, "MS Shell Dlg" } -PRINT_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 +PRINT_SETUP DIALOG 36, 24, 264, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Skrivarinstllningar" FONT 8, "MS Shell Dlg" @@ -119,7 +119,7 @@ FONT 8, "MS Shell Dlg" } -CHOOSE_FONT DIALOG DISCARDABLE 13, 54, 264, 147 +CHOOSE_FONT DIALOG 13, 54, 264, 147 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Typsnitt" FONT 8, "MS Shell Dlg" @@ -149,7 +149,7 @@ FONT 8, "MS Shell Dlg" } -CHOOSE_COLOR DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 300, 185 +CHOOSE_COLOR DIALOG 36, 24, 300, 185 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Frg" FONT 8, "MS Shell Dlg" @@ -183,7 +183,7 @@ FONT 8, "MS Shell Dlg" } -FINDDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 236, 62 +FINDDLGORD DIALOG 36, 24, 236, 62 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Sk" FONT 8, "MS Shell Dlg" @@ -201,7 +201,7 @@ FONT 8, "MS Shell Dlg" } -REPLACEDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 230, 94 +REPLACEDLGORD DIALOG 36, 24, 230, 94 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Sk/erstt" FONT 8, "MS Shell Dlg" @@ -219,7 +219,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON "&Hjlp", 1038, 174, 75, 50, 14, WS_GROUP | WS_TABSTOP } -PRINT32 DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 288, 186 +PRINT32 DIALOG 32, 32, 288, 186 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CONTEXTHELP | DS_3DLOOK CAPTION "Skriv ut" @@ -260,7 +260,7 @@ FONT 8, "MS Shell Dlg" } -PRINT32_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 288, 178 +PRINT32_SETUP DIALOG 32, 32, 288, 178 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CONTEXTHELP | DS_3DLOOK CAPTION "Utskriftsformat" @@ -292,7 +292,7 @@ BEGIN CONTROL "L&iggande", rad2,"Button",BS_AUTORADIOBUTTON,224,126,52,12 END -PAGESETUPDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 240, 240 +PAGESETUPDLGORD DIALOG 32, 32, 240, 240 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Utskriftsformat" FONT 8, "MS Shell Dlg" @@ -322,7 +322,7 @@ BEGIN PUSHBUTTON "&Skrivare...", psh3, 184, 220, 48, 14 END -NEWFILEOPENORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 280, 164 +NEWFILEOPENORD DIALOG 0, 0, 280, 164 STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_CLIPCHILDREN CAPTION "ppna" FONT 8, "MS Shell Dlg" @@ -346,7 +346,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON "&Hjlp", pshHelp,222,145,50,14 } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_ABOUTBOX "&Om FolderPicker-test" IDS_DOCUMENTFOLDERS "Dokumentmappar" @@ -358,7 +358,7 @@ STRINGTABLE DISCARDABLE IDS_MYCOMPUTER "Den hr datorn" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_SYSTEMFOLDERS "Systemmappar" IDS_LOCALHARDRIVES "Lokala hrddiskar" @@ -372,7 +372,7 @@ STRINGTABLE DISCARDABLE IDS_FILENOTEXISTING "Filen finns inte" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_UPFOLDER "Upp en niv" IDS_NEWFOLDER "Skapa ny mapp" @@ -381,7 +381,7 @@ STRINGTABLE DISCARDABLE IDS_TODESKTOP "Visa Skrivbordet" } -STRINGTABLE DISCARDABLE +STRINGTABLE { PD32_PRINT_TITLE "Skriv ut" @@ -437,7 +437,7 @@ Installera en skrivare och f PD32_PRINTER_STATUS_POWER_SAVE "Felskert lge; " } -STRINGTABLE DISCARDABLE /* Font styles */ +STRINGTABLE /* Font styles */ { IDS_FONT_REGULAR "Standard" IDS_FONT_BOLD "Fet" @@ -445,7 +445,7 @@ STRINGTABLE DISCARDABLE /* Font styles */ IDS_FONT_BOLD_ITALIC "Fet kursiv" } -STRINGTABLE DISCARDABLE /* Color names */ +STRINGTABLE /* Color names */ { IDS_COLOR_BLACK "Svart" IDS_COLOR_MAROON "Rdbrun" @@ -465,7 +465,7 @@ STRINGTABLE DISCARDABLE /* Color names */ IDS_COLOR_WHITE "Vit" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_FONT_SIZE "Vlj en teckenstorlek mellan %d och %d punkter." IDS_SAVE_BUTTON "&Spara" diff --git a/dll/win32/comdlg32/cdlg_Th.rc b/dll/win32/comdlg32/cdlg_Th.rc index 34ef5200ece..90297a0683d 100644 --- a/dll/win32/comdlg32/cdlg_Th.rc +++ b/dll/win32/comdlg32/cdlg_Th.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_THAI, SUBLANG_DEFAULT -OPEN_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134 +OPEN_FILE DIALOG 36, 24, 275, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Դ" FONT 8, "MS Shell Dlg" @@ -47,7 +47,7 @@ FONT 8, "MS Shell Dlg" } -SAVE_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134 +SAVE_FILE DIALOG 36, 24, 275, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "ѹס..." FONT 8, "MS Shell Dlg" @@ -69,7 +69,7 @@ FONT 8, "MS Shell Dlg" } -PRINT DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 +PRINT DIALOG 36, 24, 264, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "" FONT 8, "MS Shell Dlg" @@ -92,7 +92,7 @@ FONT 8, "MS Shell Dlg" } -PRINT_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 +PRINT_SETUP DIALOG 36, 24, 264, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Ѻͧ" FONT 8, "MS Shell Dlg" @@ -118,7 +118,7 @@ FONT 8, "MS Shell Dlg" } -CHOOSE_FONT DIALOG DISCARDABLE 13, 54, 264, 147 +CHOOSE_FONT DIALOG 13, 54, 264, 147 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "ѡ" FONT 8, "MS Shell Dlg" @@ -150,7 +150,7 @@ FONT 8, "MS Shell Dlg" } -CHOOSE_COLOR DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 300, 185 +CHOOSE_COLOR DIALOG 36, 24, 300, 185 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "" FONT 8, "MS Shell Dlg" @@ -184,7 +184,7 @@ FONT 8, "MS Shell Dlg" } -FINDDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 236, 62 +FINDDLGORD DIALOG 36, 24, 236, 62 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "" FONT 8, "MS Shell Dlg" @@ -203,7 +203,7 @@ FONT 8, "MS Shell Dlg" } -REPLACEDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 230, 94 +REPLACEDLGORD DIALOG 36, 24, 230, 94 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "᷹" FONT 8, "MS Shell Dlg" @@ -223,7 +223,7 @@ FONT 8, "MS Shell Dlg" } -PRINT32 DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 288, 186 +PRINT32 DIALOG 32, 32, 288, 186 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CONTEXTHELP | DS_3DLOOK CAPTION "" @@ -263,7 +263,7 @@ FONT 8, "MS Shell Dlg" RTEXT "觶֧:", stc3, 100,124, 16,8 } -PRINT32_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 288, 178 +PRINT32_SETUP DIALOG 32, 32, 288, 178 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CONTEXTHELP | DS_3DLOOK CAPTION "Ѻͧ" @@ -298,7 +298,7 @@ BEGIN CONTROL "ǹ͹", rad2,"Button",BS_AUTORADIOBUTTON,224,126,52,12 END -PAGESETUPDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 240, 240 +PAGESETUPDLGORD DIALOG 32, 32, 240, 240 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Ѻ" FONT 8, "MS Shell Dlg" @@ -328,7 +328,7 @@ BEGIN PUSHBUTTON "ͧ...", psh3, 184, 220, 48, 14 END -NEWFILEOPENORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 280, 164 +NEWFILEOPENORD DIALOG 0, 0, 280, 164 STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_CLIPCHILDREN CAPTION "Դ" FONT 8, "MS Shell Dlg" @@ -352,7 +352,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON "", pshHelp,222,145,50,14 } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_ABOUTBOX "ǡѺ FolderPicker Test" IDS_DOCUMENTFOLDERS "Document Folders" @@ -364,7 +364,7 @@ STRINGTABLE DISCARDABLE IDS_MYCOMPUTER "ͧǹ" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_SYSTEMFOLDERS "System Folders" IDS_LOCALHARDRIVES "촴ʡͧǹ" @@ -378,7 +378,7 @@ STRINGTABLE DISCARDABLE IDS_FILENOTEXISTING "辺" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_UPFOLDER "˹дѺ" IDS_NEWFOLDER "ҧá" @@ -387,7 +387,7 @@ STRINGTABLE DISCARDABLE IDS_TODESKTOP "¡þ鹷ӧҹ" } -STRINGTABLE DISCARDABLE +STRINGTABLE { PD32_PRINT_TITLE "" @@ -443,7 +443,7 @@ Please install one and retry." PD32_PRINTER_STATUS_POWER_SAVE "; " } -STRINGTABLE DISCARDABLE /* Color names */ +STRINGTABLE /* Color names */ { IDS_COLOR_BLACK "մ" IDS_COLOR_MAROON "״" diff --git a/dll/win32/comdlg32/cdlg_Tr.rc b/dll/win32/comdlg32/cdlg_Tr.rc index 52e71ba52b8..049f51eb04c 100644 --- a/dll/win32/comdlg32/cdlg_Tr.rc +++ b/dll/win32/comdlg32/cdlg_Tr.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT -OPEN_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134 +OPEN_FILE DIALOG 36, 24, 275, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "A" FONT 8, "MS Shell Dlg" @@ -47,7 +47,7 @@ FONT 8, "MS Shell Dlg" } -SAVE_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134 +SAVE_FILE DIALOG 36, 24, 275, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Farkl Kaydet..." FONT 8, "MS Shell Dlg" @@ -69,7 +69,7 @@ FONT 8, "MS Shell Dlg" } -PRINT DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 +PRINT DIALOG 36, 24, 264, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Yazdr" FONT 8, "MS Shell Dlg" @@ -92,7 +92,7 @@ FONT 8, "MS Shell Dlg" } -PRINT_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 +PRINT_SETUP DIALOG 36, 24, 264, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Yazdrma Ayarlar" FONT 8, "MS Shell Dlg" @@ -118,7 +118,7 @@ FONT 8, "MS Shell Dlg" } -CHOOSE_FONT DIALOG DISCARDABLE 13, 54, 264, 147 +CHOOSE_FONT DIALOG 13, 54, 264, 147 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Yaz Tipi" FONT 8, "MS Shell Dlg" @@ -150,7 +150,7 @@ FONT 8, "MS Shell Dlg" } -CHOOSE_COLOR DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 300, 185 +CHOOSE_COLOR DIALOG 36, 24, 300, 185 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Renk" FONT 8, "MS Shell Dlg" @@ -184,7 +184,7 @@ FONT 8, "MS Shell Dlg" } -FINDDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 236, 62 +FINDDLGORD DIALOG 36, 24, 236, 62 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Bul" FONT 8, "MS Shell Dlg" @@ -203,7 +203,7 @@ FONT 8, "MS Shell Dlg" } -REPLACEDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 238, 94 +REPLACEDLGORD DIALOG 36, 24, 238, 94 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Deitir" FONT 8, "MS Shell Dlg" @@ -223,7 +223,7 @@ FONT 8, "MS Shell Dlg" } -PRINT32 DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 288, 186 +PRINT32 DIALOG 32, 32, 288, 186 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CONTEXTHELP | DS_3DLOOK CAPTION "Yazdr" @@ -264,7 +264,7 @@ FONT 8, "MS Shell Dlg" RTEXT "Biti&:", stc3, 100,124, 16,8 } -PRINT32_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 288, 178 +PRINT32_SETUP DIALOG 32, 32, 288, 178 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CONTEXTHELP | DS_3DLOOK CAPTION "Yazdrma Ayarlar" @@ -299,7 +299,7 @@ BEGIN CONTROL "M&anzara", rad2,"Button",BS_AUTORADIOBUTTON,224,126,52,12 END -PAGESETUPDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 240, 240 +PAGESETUPDLGORD DIALOG 32, 32, 240, 240 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Sayfa Ayarlar" FONT 8, "MS Shell Dlg" @@ -329,7 +329,7 @@ BEGIN PUSHBUTTON "Ya&zc...", psh3, 184, 220, 48, 14 END -NEWFILEOPENORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 280, 164 +NEWFILEOPENORD DIALOG 0, 0, 280, 164 STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_CLIPCHILDREN CAPTION "A" FONT 8, "MS Shell Dlg" @@ -353,7 +353,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON "&Yardm", pshHelp,222,145,50,14 } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_ABOUTBOX "&Dizin Seme Denemesi Hakknda" IDS_DOCUMENTFOLDERS "Belge Dizinleri" @@ -365,7 +365,7 @@ STRINGTABLE DISCARDABLE IDS_MYCOMPUTER "Bilgisayarm" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_SYSTEMFOLDERS "Sistem Dizinleri" IDS_LOCALHARDRIVES "Yerel Diskler" @@ -379,7 +379,7 @@ STRINGTABLE DISCARDABLE IDS_FILENOTEXISTING "Dosya mevcut deil" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_UPFOLDER "Bir Dzey Yukar" IDS_NEWFOLDER "Yeni Dizin Olutur" @@ -388,7 +388,7 @@ STRINGTABLE DISCARDABLE IDS_TODESKTOP "Masastne Git" } -STRINGTABLE DISCARDABLE +STRINGTABLE { PD32_PRINT_TITLE "Yazdr" @@ -445,7 +445,7 @@ L PD32_PRINTER_STATUS_POWER_SAVE "G koruma modu; " } -STRINGTABLE DISCARDABLE /* Color names */ +STRINGTABLE /* Color names */ { IDS_COLOR_BLACK "Siyah" IDS_COLOR_MAROON "Koyu Krmz" @@ -465,7 +465,7 @@ STRINGTABLE DISCARDABLE /* Color names */ IDS_COLOR_WHITE "Beyaz" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_FONT_SIZE "%d ile %d arasnda bir yaz tipi boyutu sein." IDS_SAVE_BUTTON "&Kaydet" diff --git a/dll/win32/comdlg32/cdlg_Uk.rc b/dll/win32/comdlg32/cdlg_Uk.rc index 14a8f1d2104..a4b4ff5dc55 100644 --- a/dll/win32/comdlg32/cdlg_Uk.rc +++ b/dll/win32/comdlg32/cdlg_Uk.rc @@ -27,7 +27,7 @@ LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT -OPEN_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134 +OPEN_FILE DIALOG 36, 24, 275, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "³" FONT 8, "MS Shell Dlg" @@ -49,12 +49,12 @@ FONT 8, "MS Shell Dlg" } -SAVE_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134 +SAVE_FILE DIALOG 36, 24, 275, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION " ..." FONT 8, "MS Shell Dlg" { - LTEXT "&&' :", 1090, 6, 6, 76, 9 + LTEXT "&' :", 1090, 6, 6, 76, 9 EDITTEXT 1152, 6, 16, 90, 12, ES_AUTOHSCROLL | ES_OEMCONVERT | WS_BORDER | WS_TABSTOP LISTBOX 1120, 6, 32, 90, 68, LBS_STANDARD | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_TABSTOP LTEXT "&:", -1, 110, 6, 92, 9 @@ -71,7 +71,7 @@ FONT 8, "MS Shell Dlg" } -PRINT DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 +PRINT DIALOG 36, 24, 264, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "" FONT 8, "MS Shell Dlg" @@ -94,7 +94,7 @@ FONT 8, "MS Shell Dlg" } -PRINT_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 +PRINT_SETUP DIALOG 36, 24, 264, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION " " FONT 8, "MS Shell Dlg" @@ -120,7 +120,7 @@ FONT 8, "MS Shell Dlg" } -CHOOSE_FONT DIALOG DISCARDABLE 13, 54, 264, 147 +CHOOSE_FONT DIALOG 13, 54, 264, 147 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "" FONT 8, "MS Shell Dlg" @@ -152,7 +152,7 @@ FONT 8, "MS Shell Dlg" } -CHOOSE_COLOR DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 310, 185 +CHOOSE_COLOR DIALOG 36, 24, 310, 185 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION " " FONT 8, "MS Shell Dlg" @@ -186,7 +186,7 @@ FONT 8, "MS Shell Dlg" } -FINDDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 245, 62 +FINDDLGORD DIALOG 36, 24, 245, 62 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "" FONT 8, "MS Shell Dlg" @@ -205,7 +205,7 @@ FONT 8, "MS Shell Dlg" } -REPLACEDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 230, 94 +REPLACEDLGORD DIALOG 36, 24, 230, 94 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "" FONT 8, "MS Shell Dlg" @@ -224,7 +224,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON "&", pshHelp , 174, 75, 50, 14, WS_GROUP | WS_TABSTOP } -PRINT32 DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 288, 186 +PRINT32 DIALOG 32, 32, 288, 186 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CONTEXTHELP | DS_3DLOOK CAPTION "" @@ -264,7 +264,7 @@ FONT 8, "MS Shell Dlg" RTEXT "&:", stc3, 106,124, 10,8 } -PRINT32_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 288, 178 +PRINT32_SETUP DIALOG 32, 32, 288, 178 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CONTEXTHELP | DS_3DLOOK CAPTION " " @@ -299,7 +299,7 @@ BEGIN CONTROL "&", rad2,"Button",BS_AUTORADIOBUTTON,224,126,52,12 END -PAGESETUPDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 240, 240 +PAGESETUPDLGORD DIALOG 32, 32, 240, 240 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION " " FONT 8, "MS Shell Dlg" @@ -313,7 +313,7 @@ BEGIN LTEXT "&:", stc3, 16, 132, 36, 8 COMBOBOX cmb3, 64, 130, 160, 160, CBS_SIMPLE|CBS_DROPDOWN|CBS_SORT|WS_GROUP|WS_TABSTOP|WS_VSCROLL GROUPBOX "", grp1, 8, 156, 64, 56, BS_GROUPBOX - AUTORADIOBUTTON "&", rad1, 16, 170, 52, 12, BS_AUTORADIOBUTTON + AUTORADIOBUTTON "&", rad1, 16, 170, 52, 12, BS_AUTORADIOBUTTON AUTORADIOBUTTON "&", rad2, 16, 190, 52, 12, BS_AUTORADIOBUTTON GROUPBOX "", grp4, 80, 156, 152, 56, BS_GROUPBOX LTEXT "&:", stc15, 88, 172, 21, 8 @@ -329,7 +329,7 @@ BEGIN PUSHBUTTON "&...", psh3, 184, 220, 48, 14 END -NEWFILEOPENORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 280, 164 +NEWFILEOPENORD DIALOG 0, 0, 280, 164 STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_CLIPCHILDREN CAPTION "³" FONT 8, "MS Shell Dlg" @@ -353,7 +353,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON "&", pshHelp,222,145,50,14 } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_ABOUTBOX "& " IDS_DOCUMENTFOLDERS " " @@ -365,7 +365,7 @@ STRINGTABLE DISCARDABLE IDS_MYCOMPUTER "̳ '" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_SYSTEMFOLDERS " " IDS_LOCALHARDRIVES " " @@ -379,7 +379,7 @@ STRINGTABLE DISCARDABLE IDS_FILENOTEXISTING " " } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_UPFOLDER " " IDS_NEWFOLDER " " @@ -388,7 +388,7 @@ STRINGTABLE DISCARDABLE IDS_TODESKTOP " " } -STRINGTABLE DISCARDABLE +STRINGTABLE { PD32_PRINT_TITLE "" @@ -446,7 +446,7 @@ STRINGTABLE DISCARDABLE PD32_PRINTER_STATUS_POWER_SAVE " ; " } -STRINGTABLE DISCARDABLE /* Font styles */ +STRINGTABLE /* Font styles */ { IDS_FONT_REGULAR "" IDS_FONT_BOLD "" @@ -454,13 +454,13 @@ STRINGTABLE DISCARDABLE /* Font styles */ IDS_FONT_BOLD_ITALIC " " } -STRINGTABLE DISCARDABLE /* Color names */ +STRINGTABLE /* Color names */ { IDS_COLOR_BLACK "" IDS_COLOR_MAROON "" IDS_COLOR_GREEN "" IDS_COLOR_OLIVE "" - IDS_COLOR_NAVY "" + IDS_COLOR_NAVY "-" IDS_COLOR_PURPLE "" IDS_COLOR_TEAL "-" IDS_COLOR_GRAY "ѳ" @@ -474,7 +474,7 @@ STRINGTABLE DISCARDABLE /* Color names */ IDS_COLOR_WHITE "" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_FONT_SIZE " %d - %d ." IDS_SAVE_BUTTON "&" diff --git a/dll/win32/comdlg32/cdlg_Zh.rc b/dll/win32/comdlg32/cdlg_Zh.rc index fee8bda01d5..a9c096b6597 100644 --- a/dll/win32/comdlg32/cdlg_Zh.rc +++ b/dll/win32/comdlg32/cdlg_Zh.rc @@ -4,6 +4,7 @@ * Copyright 2000 Aric Stewart * Copyright 2002 Tisheng Chen * Copyright 2008 Hongbo Ni + * Copyright 2010 Cheer Xiao * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -25,6 +26,7 @@ /* * WARNING: DO NOT CHANGE THE SIZE OF THE STANDARD DIALOG TEMPLATES. + * 不要修改标准对话框的大小。 */ /* Chinese text is encoded in UTF-8 */ @@ -32,7 +34,7 @@ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED -OPEN_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134 +OPEN_FILE DIALOG 36, 24, 275, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "打开" FONT 9, "MS Shell Dlg" @@ -54,7 +56,7 @@ FONT 9, "MS Shell Dlg" } -SAVE_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134 +SAVE_FILE DIALOG 36, 24, 275, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "另存为..." FONT 9, "MS Shell Dlg" @@ -76,7 +78,7 @@ FONT 9, "MS Shell Dlg" } -PRINT DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 +PRINT DIALOG 36, 24, 264, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "打印" FONT 9, "MS Shell Dlg" @@ -99,7 +101,7 @@ FONT 9, "MS Shell Dlg" } -PRINT_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134 +PRINT_SETUP DIALOG 36, 24, 264, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "打印设置" FONT 9, "MS Shell Dlg" @@ -125,7 +127,7 @@ FONT 9, "MS Shell Dlg" } -CHOOSE_FONT DIALOG DISCARDABLE 13, 54, 264, 147 +CHOOSE_FONT DIALOG 13, 54, 264, 147 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "字体" FONT 9, "MS Shell Dlg" @@ -157,7 +159,7 @@ FONT 9, "MS Shell Dlg" } -CHOOSE_COLOR DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 300, 185 +CHOOSE_COLOR DIALOG 36, 24, 300, 185 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "颜色" FONT 9, "MS Shell Dlg" @@ -191,7 +193,7 @@ FONT 9, "MS Shell Dlg" } -FINDDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 236, 62 +FINDDLGORD DIALOG 36, 24, 236, 62 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "查找" FONT 9, "MS Shell Dlg" @@ -210,7 +212,7 @@ FONT 9, "MS Shell Dlg" } -REPLACEDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 230, 94 +REPLACEDLGORD DIALOG 36, 24, 230, 94 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "替换" FONT 9, "MS Shell Dlg" @@ -230,7 +232,7 @@ FONT 9, "MS Shell Dlg" } -PRINT32 DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 288, 186 +PRINT32 DIALOG 32, 32, 288, 186 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CONTEXTHELP | DS_3DLOOK CAPTION "打印" @@ -270,7 +272,7 @@ FONT 9, "MS Shell Dlg" RTEXT "到(&t):", stc3, 100,124, 16,8 } -PRINT32_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 288, 178 +PRINT32_SETUP DIALOG 32, 32, 288, 178 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CONTEXTHELP | DS_3DLOOK CAPTION "打印设置" @@ -305,7 +307,7 @@ BEGIN CONTROL "横向(&L)", rad2,"Button",BS_AUTORADIOBUTTON,224,126,52,12 END -PAGESETUPDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 32, 32, 240, 240 +PAGESETUPDLGORD DIALOG 32, 32, 240, 240 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "页面设置" FONT 9, "MS Shell Dlg" @@ -335,7 +337,7 @@ BEGIN PUSHBUTTON "打印机(&P)...", psh3, 184, 220, 48, 14 END -NEWFILEOPENORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 280, 164 +NEWFILEOPENORD DIALOG 0, 0, 280, 164 STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_CLIPCHILDREN CAPTION "打开" FONT 9, "MS Shell Dlg" @@ -359,7 +361,7 @@ FONT 9, "MS Shell Dlg" PUSHBUTTON "帮助(&H)", pshHelp,222,145,50,14 } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_ABOUTBOX "关于文件夹选择器(&A)" IDS_DOCUMENTFOLDERS "文档目录" @@ -371,7 +373,7 @@ STRINGTABLE DISCARDABLE IDS_MYCOMPUTER "我的电脑" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_SYSTEMFOLDERS "系统文件夹" IDS_LOCALHARDRIVES "本地硬盘驱动器" @@ -385,7 +387,7 @@ STRINGTABLE DISCARDABLE IDS_FILENOTEXISTING "文件不存在" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_UPFOLDER "向上移一层" IDS_NEWFOLDER "新建文件夹" @@ -394,7 +396,7 @@ STRINGTABLE DISCARDABLE IDS_TODESKTOP "查看桌面" } -STRINGTABLE DISCARDABLE +STRINGTABLE { PD32_PRINT_TITLE "打印" @@ -449,10 +451,47 @@ STRINGTABLE DISCARDABLE PD32_PRINTER_STATUS_POWER_SAVE "省电状态; " } +STRINGTABLE /* Font styles */ +{ + IDS_FONT_REGULAR "常规" + IDS_FONT_BOLD "粗体" + IDS_FONT_ITALIC "斜体" + IDS_FONT_BOLD_ITALIC "粗斜体" +} + +STRINGTABLE /* Color names */ +{ + IDS_COLOR_BLACK "黑" + IDS_COLOR_MAROON "Maroon" + IDS_COLOR_GREEN "绿" + IDS_COLOR_OLIVE "Olive" + IDS_COLOR_NAVY "Navy" + IDS_COLOR_PURPLE "紫" + IDS_COLOR_TEAL "Teal" + IDS_COLOR_GRAY "灰" + IDS_COLOR_SILVER "Silver" + IDS_COLOR_RED "红" + IDS_COLOR_LIME "Lime" + IDS_COLOR_YELLOW "黄" + IDS_COLOR_BLUE "蓝" + IDS_COLOR_FUCHSIA "Fuchsia" + IDS_COLOR_AQUA "Aqua" + IDS_COLOR_WHITE "白" +} + +STRINGTABLE +{ + IDS_FONT_SIZE "选择 %d 到 %d 的字号。" + IDS_SAVE_BUTTON "保存 (&S)" + IDS_SAVE_IN "保存在 (&I):" + IDS_SAVE "保存" + IDS_SAVE_AS "另存为" + IDS_OPEN_FILE "打开文件" +} LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL -OPEN_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134 +OPEN_FILE DIALOG 36, 24, 275, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "開啟" FONT 9, "MS Shell Dlg" @@ -474,7 +513,7 @@ FONT 9, "MS Shell Dlg" } -SAVE_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134 +SAVE_FILE DIALOG 36, 24, 275, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "另存新檔..." FONT 9, "MS Shell Dlg" @@ -495,7 +534,7 @@ FONT 9, "MS Shell Dlg" CHECKBOX "唯讀(&R)", 1040, 208, 68, 50, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP } -CHOOSE_FONT DIALOG DISCARDABLE 13, 54, 294, 147 +CHOOSE_FONT DIALOG 13, 54, 294, 147 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "字型" FONT 9, "MS Shell Dlg" @@ -527,7 +566,7 @@ FONT 9, "MS Shell Dlg" } -CHOOSE_COLOR DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 300, 185 +CHOOSE_COLOR DIALOG 36, 24, 300, 185 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "色彩" FONT 9, "MS Shell Dlg" @@ -561,7 +600,7 @@ FONT 9, "MS Shell Dlg" } -FINDDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 263, 62 +FINDDLGORD DIALOG 36, 24, 263, 62 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "搜尋" FONT 9, "MS Shell Dlg" @@ -580,7 +619,7 @@ FONT 9, "MS Shell Dlg" } -REPLACEDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 263, 94 +REPLACEDLGORD DIALOG 36, 24, 263, 94 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "取代" FONT 9, "MS Shell Dlg" @@ -599,7 +638,7 @@ FONT 9, "MS Shell Dlg" PUSHBUTTON "求助(&H)", pshHelp , 174, 75, 50, 14, WS_GROUP | WS_TABSTOP } -NEWFILEOPENORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 280, 164 +NEWFILEOPENORD DIALOG 0, 0, 280, 164 STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_CLIPCHILDREN CAPTION "開啟舊檔" FONT 9, "MS Shell Dlg" @@ -623,7 +662,7 @@ FONT 9, "MS Shell Dlg" PUSHBUTTON "求助(&H)", pshHelp,222,145,50,14 } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_ABOUTBOX "关于資料夹选择器(&A)" IDS_DOCUMENTFOLDERS "資料夾" @@ -635,7 +674,7 @@ STRINGTABLE DISCARDABLE IDS_MYCOMPUTER "我的電腦" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_SYSTEMFOLDERS "系統資料夾" IDS_LOCALHARDRIVES "本地硬盤驅動器" @@ -649,7 +688,7 @@ STRINGTABLE DISCARDABLE IDS_FILENOTEXISTING "檔案不存在" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_UPFOLDER "向上一層" IDS_NEWFOLDER "建立新資料夾" @@ -658,7 +697,7 @@ STRINGTABLE DISCARDABLE IDS_TODESKTOP "顯示桌面" } -STRINGTABLE DISCARDABLE +STRINGTABLE { PD32_PRINT_TITLE "列印" diff --git a/dll/win32/comdlg32/cdlg_xx.rc b/dll/win32/comdlg32/cdlg_xx.rc index 24139d2e206..a002ef677d8 100644 --- a/dll/win32/comdlg32/cdlg_xx.rc +++ b/dll/win32/comdlg32/cdlg_xx.rc @@ -34,7 +34,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL * different character set or if the distribution of characters looks wrong. * It is rendered illegibly small and is used to make a mock-up of a document. */ -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_FAKEDOCTEXT "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. \ @@ -60,7 +60,7 @@ STRINGTABLE DISCARDABLE /* @makedep: pd32_collate.ico */ -PD32_COLLATE ICON DISCARDABLE LOADONCALL pd32_collate.ico +PD32_COLLATE ICON pd32_collate.ico /* @makedep: pd32_nocollate.ico */ PD32_NOCOLLATE ICON pd32_nocollate.ico @@ -90,4 +90,4 @@ HDISK ICON hdisk.ico NETWORK ICON network.ico /* @makedep: fontpics.bmp */ -38 BITMAP DISCARDABLE LOADONCALL fontpics.bmp +38 BITMAP fontpics.bmp diff --git a/dll/win32/comdlg32/finddlg.c b/dll/win32/comdlg32/finddlg.c index f6c780e0496..e3a2c1a3f94 100644 --- a/dll/win32/comdlg32/finddlg.c +++ b/dll/win32/comdlg32/finddlg.c @@ -304,7 +304,7 @@ static BOOL COMDLG32_FR_CheckPartial( ) { if(!pfr) { - COMDLG32_SetCommDlgExtendedError(CDERR_GENERALCODES); + COMDLG32_SetCommDlgExtendedError(CDERR_INITIALIZATION); return FALSE; } @@ -321,7 +321,7 @@ static BOOL COMDLG32_FR_CheckPartial( } if((pfr->wFindWhatLen < 1 || !pfr->lpstrFindWhat) - ||(Replace && (pfr->wReplaceWithLen < 1 || !pfr->lpstrReplaceWith))) + ||(Replace && !pfr->lpstrReplaceWith)) { COMDLG32_SetCommDlgExtendedError(FRERR_BUFFERLENGTHZERO); return FALSE; @@ -344,18 +344,12 @@ static BOOL COMDLG32_FR_CheckPartial( return FALSE; } - if((pfr->Flags & (FR_ENABLETEMPLATE | FR_ENABLETEMPLATEHANDLE)) && !pfr->hInstance) + if((pfr->Flags & FR_ENABLETEMPLATEHANDLE) && !pfr->hInstance) { COMDLG32_SetCommDlgExtendedError(CDERR_NOHINSTANCE); return FALSE; } - if((pfr->Flags & FR_ENABLETEMPLATE) && !pfr->lpTemplateName) - { - COMDLG32_SetCommDlgExtendedError(CDERR_NOTEMPLATE); - return FALSE; - } - return TRUE; } @@ -536,7 +530,7 @@ HWND WINAPI ReplaceTextW( TRACE("LPFINDREPLACE=%p\n", pfr); - if(!COMDLG32_FR_CheckPartial((LPFINDREPLACEA)pfr, FALSE)) + if(!COMDLG32_FR_CheckPartial((LPFINDREPLACEA)pfr, TRUE)) return 0; len1 = WideCharToMultiByte( CP_ACP, 0, pfr->lpstrFindWhat, pfr->wFindWhatLen, diff --git a/dll/win32/comdlg32/fontdlg.c b/dll/win32/comdlg32/fontdlg.c index ad580d5c863..6d3ee73da60 100644 --- a/dll/win32/comdlg32/fontdlg.c +++ b/dll/win32/comdlg32/fontdlg.c @@ -903,7 +903,6 @@ static LRESULT CFn_WMCommand(HWND hDlg, WPARAM wParam, LPARAM lParam, LPCHOOSEFO int i; long l; HDC hdc; - LPLOGFONTW lpxx=lpcf->lpLogFont; if (!lpcf) return FALSE; @@ -965,6 +964,7 @@ static LRESULT CFn_WMCommand(HWND hDlg, WPARAM wParam, LPARAM lParam, LPCHOOSEFO { WCHAR str[256]; WINDOWINFO wininfo; + LPLOGFONTW lpxx=lpcf->lpLogFont; TRACE("WM_COMMAND/cmb2,3 =%08lX\n", lParam); i=SendDlgItemMessageW(hDlg,cmb1,CB_GETCURSEL,0,0); diff --git a/dll/win32/comdlg32/pd32_collate.ico b/dll/win32/comdlg32/pd32_collate.ico index cccfc1cf9de..55756e7f7a0 100644 Binary files a/dll/win32/comdlg32/pd32_collate.ico and b/dll/win32/comdlg32/pd32_collate.ico differ diff --git a/dll/win32/comdlg32/pd32_landscape.ico b/dll/win32/comdlg32/pd32_landscape.ico index f06cfa51a30..1a31e6a8d15 100644 Binary files a/dll/win32/comdlg32/pd32_landscape.ico and b/dll/win32/comdlg32/pd32_landscape.ico differ diff --git a/dll/win32/comdlg32/pd32_nocollate.ico b/dll/win32/comdlg32/pd32_nocollate.ico index bf84a231bd5..b71013a9ac2 100644 Binary files a/dll/win32/comdlg32/pd32_nocollate.ico and b/dll/win32/comdlg32/pd32_nocollate.ico differ diff --git a/dll/win32/comdlg32/pd32_portrait.ico b/dll/win32/comdlg32/pd32_portrait.ico index 4001f9c74cb..432f73877a1 100644 Binary files a/dll/win32/comdlg32/pd32_portrait.ico and b/dll/win32/comdlg32/pd32_portrait.ico differ diff --git a/dll/win32/comdlg32/rsrc.rc b/dll/win32/comdlg32/rsrc.rc index 02d3d5f93a9..0389e7ddb97 100644 --- a/dll/win32/comdlg32/rsrc.rc +++ b/dll/win32/comdlg32/rsrc.rc @@ -70,4 +70,5 @@ #include "cdlg_Ro.rc" #include "cdlg_Ru.rc" #include "cdlg_Si.rc" +#include "cdlg_Sr.rc" #include "cdlg_Zh.rc" diff --git a/dll/win32/credui/credui.rc b/dll/win32/credui/credui.rc index 4d3e1b3f217..880a973f434 100644 --- a/dll/win32/credui/credui.rc +++ b/dll/win32/credui/credui.rc @@ -25,7 +25,7 @@ #include "credui_resources.h" /* @makedep: banner.bmp */ -IDB_BANNER BITMAP LOADONCALL DISCARDABLE banner.bmp +IDB_BANNER BITMAP banner.bmp #include "credui_En.rc" #include "credui_Ko.rc" diff --git a/dll/win32/credui/credui_Da.rc b/dll/win32/credui/credui_Da.rc index 1bcaec57a01..7c3013c90d1 100644 --- a/dll/win32/credui/credui_Da.rc +++ b/dll/win32/credui/credui_Da.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_DANISH, SUBLANG_DEFAULT -IDD_CREDDIALOG DIALOG DISCARDABLE 0, 0, 213, 149 +IDD_CREDDIALOG DIALOG 0, 0, 213, 149 STYLE DS_MODALFRAME | DS_NOIDLEMSG | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "IDS_TITLEFORMAT" FONT 8, "MS Shell Dlg" @@ -44,7 +44,7 @@ BEGIN PUSHBUTTON "Annuller",IDCANCEL,156,128,50,14 END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TITLEFORMAT "Tilslut til %s" IDS_MESSAGEFORMAT "Tilslutter til %s" diff --git a/dll/win32/credui/credui_De.rc b/dll/win32/credui/credui_De.rc index 9cbedd2dd60..dbf385f013c 100644 --- a/dll/win32/credui/credui_De.rc +++ b/dll/win32/credui/credui_De.rc @@ -24,7 +24,7 @@ LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL -IDD_CREDDIALOG DIALOG DISCARDABLE 0, 0, 213, 149 +IDD_CREDDIALOG DIALOG 0, 0, 213, 149 STYLE DS_MODALFRAME | DS_NOIDLEMSG | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "IDS_TITLEFORMAT" FONT 8, "MS Shell Dlg" @@ -43,7 +43,7 @@ BEGIN PUSHBUTTON "Abbrechen",IDCANCEL,156,128,50,14 END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TITLEFORMAT "Mit %s verbinden" IDS_MESSAGEFORMAT "Verbindung mit %s wird hergestellt" diff --git a/dll/win32/credui/credui_En.rc b/dll/win32/credui/credui_En.rc index feb4afc4b02..a874e2ee457 100644 --- a/dll/win32/credui/credui_En.rc +++ b/dll/win32/credui/credui_En.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT -IDD_CREDDIALOG DIALOG DISCARDABLE 0, 0, 213, 149 +IDD_CREDDIALOG DIALOG 0, 0, 213, 149 STYLE DS_MODALFRAME | DS_NOIDLEMSG | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "IDS_TITLEFORMAT" FONT 8, "MS Shell Dlg" @@ -41,7 +41,7 @@ BEGIN PUSHBUTTON "Cancel",IDCANCEL,156,128,50,14 END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TITLEFORMAT "Connect to %s" IDS_MESSAGEFORMAT "Connecting to %s" diff --git a/dll/win32/credui/credui_Es.rc b/dll/win32/credui/credui_Es.rc index 8f71d5ff4c5..3e35815b595 100644 --- a/dll/win32/credui/credui_Es.rc +++ b/dll/win32/credui/credui_Es.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL -IDD_CREDDIALOG DIALOG DISCARDABLE 0, 0, 213, 149 +IDD_CREDDIALOG DIALOG 0, 0, 213, 149 STYLE DS_MODALFRAME | DS_NOIDLEMSG | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "IDS_TITLEFORMAT" FONT 8, "MS Shell Dlg" @@ -44,7 +44,7 @@ BEGIN PUSHBUTTON "Cancelar",IDCANCEL,156,128,50,14 END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TITLEFORMAT "Conectar a %s" IDS_MESSAGEFORMAT "Conectando to %s" diff --git a/dll/win32/credui/credui_Fr.rc b/dll/win32/credui/credui_Fr.rc index 387a86d39a1..3e899bf1fbc 100644 --- a/dll/win32/credui/credui_Fr.rc +++ b/dll/win32/credui/credui_Fr.rc @@ -24,7 +24,7 @@ LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL -IDD_CREDDIALOG DIALOG DISCARDABLE 0, 0, 213, 149 +IDD_CREDDIALOG DIALOG 0, 0, 213, 149 STYLE DS_MODALFRAME | DS_NOIDLEMSG | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "IDS_TITLEFORMAT" FONT 8, "MS Shell Dlg" @@ -43,7 +43,7 @@ BEGIN PUSHBUTTON "Annuler",IDCANCEL,156,128,50,14 END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TITLEFORMAT "Se connecter à %s" IDS_MESSAGEFORMAT "Connexion à %s" diff --git a/dll/win32/credui/credui_Hu.rc b/dll/win32/credui/credui_Hu.rc index f6ada49d136..2bb413683f5 100644 --- a/dll/win32/credui/credui_Hu.rc +++ b/dll/win32/credui/credui_Hu.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT -IDD_CREDDIALOG DIALOG DISCARDABLE 0, 0, 213, 149 +IDD_CREDDIALOG DIALOG 0, 0, 213, 149 STYLE DS_MODALFRAME | DS_NOIDLEMSG | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "IDS_TITLEFORMAT" FONT 8, "MS Shell Dlg" @@ -44,7 +44,7 @@ BEGIN PUSHBUTTON "Mégse",IDCANCEL,156,128,50,14 END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TITLEFORMAT "Kapcsolódás: %s" IDS_MESSAGEFORMAT "Kapcsolódás: %s" diff --git a/dll/win32/credui/credui_It.rc b/dll/win32/credui/credui_It.rc index f7708f4b5d1..f42eb9e51a5 100644 --- a/dll/win32/credui/credui_It.rc +++ b/dll/win32/credui/credui_It.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL -IDD_CREDDIALOG DIALOG DISCARDABLE 0, 0, 213, 149 +IDD_CREDDIALOG DIALOG 0, 0, 213, 149 STYLE DS_MODALFRAME | DS_NOIDLEMSG | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "IDS_TITLEFORMAT" FONT 8, "MS Shell Dlg" @@ -44,7 +44,7 @@ BEGIN PUSHBUTTON "Annulla",IDCANCEL,156,128,50,14 END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TITLEFORMAT "Connetti a %s" IDS_MESSAGEFORMAT "Connettendo a %s" diff --git a/dll/win32/credui/credui_Ko.rc b/dll/win32/credui/credui_Ko.rc index ab1f1ec853f..b8d556afcd2 100644 --- a/dll/win32/credui/credui_Ko.rc +++ b/dll/win32/credui/credui_Ko.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT -IDD_CREDDIALOG DIALOG DISCARDABLE 0, 0, 213, 149 +IDD_CREDDIALOG DIALOG 0, 0, 213, 149 STYLE DS_MODALFRAME | DS_NOIDLEMSG | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "IDS_TITLEFORMAT" FONT 9, "MS Shell Dlg" @@ -43,7 +43,7 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TITLEFORMAT " %s " IDS_MESSAGEFORMAT " %s " diff --git a/dll/win32/credui/credui_Lt.rc b/dll/win32/credui/credui_Lt.rc index 4eb6ebaf9b4..a892ca05d80 100644 --- a/dll/win32/credui/credui_Lt.rc +++ b/dll/win32/credui/credui_Lt.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL -IDD_CREDDIALOG DIALOG DISCARDABLE 0, 0, 213, 149 +IDD_CREDDIALOG DIALOG 0, 0, 213, 149 STYLE DS_MODALFRAME | DS_NOIDLEMSG | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "IDS_TITLEFORMAT" FONT 8, "MS Shell Dlg" @@ -44,7 +44,7 @@ BEGIN PUSHBUTTON "Atsisakyti",IDCANCEL,156,128,50,14 END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TITLEFORMAT "Užmegzti ryšį su %s" IDS_MESSAGEFORMAT "Jungiamasi prie %s" diff --git a/dll/win32/credui/credui_Nl.rc b/dll/win32/credui/credui_Nl.rc index ac67a37eb85..1a96a27fd5e 100644 --- a/dll/win32/credui/credui_Nl.rc +++ b/dll/win32/credui/credui_Nl.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL -IDD_CREDDIALOG DIALOG DISCARDABLE 0, 0, 213, 149 +IDD_CREDDIALOG DIALOG 0, 0, 213, 149 STYLE DS_MODALFRAME | DS_NOIDLEMSG | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "IDS_TITLEFORMAT" FONT 8, "MS Shell Dlg" @@ -41,7 +41,7 @@ BEGIN PUSHBUTTON "Annuleren",IDCANCEL,156,128,50,14 END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TITLEFORMAT "Verbind met %s" IDS_MESSAGEFORMAT "Verbinden met %s" diff --git a/dll/win32/credui/credui_No.rc b/dll/win32/credui/credui_No.rc index c47fec1bf74..7f25a1ab0e9 100644 --- a/dll/win32/credui/credui_No.rc +++ b/dll/win32/credui/credui_No.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_NORWEGIAN, SUBLANG_NORWEGIAN_BOKMAL -IDD_CREDDIALOG DIALOG DISCARDABLE 0, 0, 213, 149 +IDD_CREDDIALOG DIALOG 0, 0, 213, 149 STYLE DS_MODALFRAME | DS_NOIDLEMSG | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "IDS_TITLEFORMAT" FONT 8, "MS Shell Dlg" @@ -41,7 +41,7 @@ BEGIN PUSHBUTTON "Avbryt",IDCANCEL,156,128,50,14 END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TITLEFORMAT "Koble til %s" IDS_MESSAGEFORMAT "Kobler til %s" diff --git a/dll/win32/credui/credui_Pl.rc b/dll/win32/credui/credui_Pl.rc index e2fab5ce42e..c7112b914f2 100644 --- a/dll/win32/credui/credui_Pl.rc +++ b/dll/win32/credui/credui_Pl.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_POLISH, SUBLANG_DEFAULT -IDD_CREDDIALOG DIALOG DISCARDABLE 0, 0, 213, 149 +IDD_CREDDIALOG DIALOG 0, 0, 213, 149 STYLE DS_MODALFRAME | DS_NOIDLEMSG | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "IDS_TITLEFORMAT" FONT 8, "MS Shell Dlg" @@ -42,7 +42,7 @@ BEGIN PUSHBUTTON "&Anuluj",IDCANCEL,156,128,50,14 END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TITLEFORMAT "Pocz z %s" IDS_MESSAGEFORMAT "czenie z %s" diff --git a/dll/win32/credui/credui_Pt.rc b/dll/win32/credui/credui_Pt.rc index b4f47979689..e99f1ee4aeb 100644 --- a/dll/win32/credui/credui_Pt.rc +++ b/dll/win32/credui/credui_Pt.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN -IDD_CREDDIALOG DIALOG DISCARDABLE 0, 0, 213, 149 +IDD_CREDDIALOG DIALOG 0, 0, 213, 149 STYLE DS_MODALFRAME | DS_NOIDLEMSG | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "IDS_TITLEFORMAT" FONT 8, "MS Shell Dlg" @@ -46,7 +46,7 @@ END LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE -IDD_CREDDIALOG DIALOG DISCARDABLE 0, 0, 213, 149 +IDD_CREDDIALOG DIALOG 0, 0, 213, 149 STYLE DS_MODALFRAME | DS_NOIDLEMSG | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "IDS_TITLEFORMAT" FONT 8, "MS Shell Dlg" @@ -68,7 +68,7 @@ END LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TITLEFORMAT "Conectar a %s" IDS_MESSAGEFORMAT "Conectando a %s" @@ -80,7 +80,7 @@ STRINGTABLE DISCARDABLE LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TITLEFORMAT "Ligar a %s" IDS_MESSAGEFORMAT "A ligar a %s" diff --git a/dll/win32/credui/credui_Ro.rc b/dll/win32/credui/credui_Ro.rc index 29e98991983..5cb1df06dae 100644 --- a/dll/win32/credui/credui_Ro.rc +++ b/dll/win32/credui/credui_Ro.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL #pragma code_page(65001) -IDD_CREDDIALOG DIALOG DISCARDABLE 0, 0, 213, 149 +IDD_CREDDIALOG DIALOG 0, 0, 213, 149 STYLE DS_MODALFRAME | DS_NOIDLEMSG | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "IDS_TITLEFORMAT" FONT 8, "MS Shell Dlg" @@ -42,7 +42,7 @@ BEGIN PUSHBUTTON "Renunță",IDCANCEL,156,128,50,14 END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TITLEFORMAT "Conectare la %s" IDS_MESSAGEFORMAT "Conectez la %s" diff --git a/dll/win32/credui/credui_Ru.rc b/dll/win32/credui/credui_Ru.rc index 9e0a2d2bbed..a3401ff3096 100644 --- a/dll/win32/credui/credui_Ru.rc +++ b/dll/win32/credui/credui_Ru.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT -IDD_CREDDIALOG DIALOG DISCARDABLE 0, 0, 213, 149 +IDD_CREDDIALOG DIALOG 0, 0, 213, 149 STYLE DS_MODALFRAME | DS_NOIDLEMSG | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "IDS_TITLEFORMAT" FONT 8, "MS Shell Dlg" @@ -44,7 +44,7 @@ BEGIN PUSHBUTTON "Отмена",IDCANCEL,156,128,50,14 END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TITLEFORMAT "Подключение к %s" IDS_MESSAGEFORMAT "Подключение к %s" diff --git a/dll/win32/credui/credui_Si.rc b/dll/win32/credui/credui_Si.rc index 34915e668b5..4b3c6553907 100644 --- a/dll/win32/credui/credui_Si.rc +++ b/dll/win32/credui/credui_Si.rc @@ -24,7 +24,7 @@ LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT -IDD_CREDDIALOG DIALOG DISCARDABLE 0, 0, 213, 149 +IDD_CREDDIALOG DIALOG 0, 0, 213, 149 STYLE DS_MODALFRAME | DS_NOIDLEMSG | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "IDS_TITLEFORMAT" FONT 8, "MS Shell Dlg" @@ -43,7 +43,7 @@ BEGIN PUSHBUTTON "Prekliči",IDCANCEL,156,128,50,14 END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TITLEFORMAT "Poveži se na %s" IDS_MESSAGEFORMAT "Povezovanje na %s" diff --git a/dll/win32/credui/credui_Sv.rc b/dll/win32/credui/credui_Sv.rc index a43c216b227..880b60149f9 100644 --- a/dll/win32/credui/credui_Sv.rc +++ b/dll/win32/credui/credui_Sv.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_SWEDISH, SUBLANG_NEUTRAL -IDD_CREDDIALOG DIALOG DISCARDABLE 0, 0, 213, 149 +IDD_CREDDIALOG DIALOG 0, 0, 213, 149 STYLE DS_MODALFRAME | DS_NOIDLEMSG | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "IDS_TITLEFORMAT" FONT 8, "MS Shell Dlg" diff --git a/dll/win32/credui/credui_Uk.rc b/dll/win32/credui/credui_Uk.rc index e7c04ab7af6..44a649f973f 100644 --- a/dll/win32/credui/credui_Uk.rc +++ b/dll/win32/credui/credui_Uk.rc @@ -26,7 +26,7 @@ LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT -IDD_CREDDIALOG DIALOG DISCARDABLE 0, 0, 213, 149 +IDD_CREDDIALOG DIALOG 0, 0, 213, 149 STYLE DS_MODALFRAME | DS_NOIDLEMSG | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "IDS_TITLEFORMAT" FONT 8, "MS Shell Dlg" @@ -45,7 +45,7 @@ BEGIN PUSHBUTTON "Скасувати",IDCANCEL,156,128,50,14 END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TITLEFORMAT "Під'єднатись до %s" IDS_MESSAGEFORMAT "Під'єднуюсь до %s" diff --git a/dll/win32/credui/credui_Zh.rc b/dll/win32/credui/credui_Zh.rc index 041aecdaaa0..472be284cb9 100644 --- a/dll/win32/credui/credui_Zh.rc +++ b/dll/win32/credui/credui_Zh.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED -IDD_CREDDIALOG DIALOG DISCARDABLE 0, 0, 213, 149 +IDD_CREDDIALOG DIALOG 0, 0, 213, 149 STYLE DS_MODALFRAME | DS_NOIDLEMSG | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "IDS_TITLEFORMAT" FONT 9, "MS Shell Dlg" @@ -44,7 +44,7 @@ BEGIN PUSHBUTTON "取消",IDCANCEL,156,128,50,14 END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TITLEFORMAT "连接到 %s" IDS_MESSAGEFORMAT "正在连接到 %s" @@ -56,7 +56,7 @@ STRINGTABLE DISCARDABLE LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL -IDD_CREDDIALOG DIALOG DISCARDABLE 0, 0, 213, 149 +IDD_CREDDIALOG DIALOG 0, 0, 213, 149 STYLE DS_MODALFRAME | DS_NOIDLEMSG | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "IDS_TITLEFORMAT" FONT 9, "MS Shell Dlg" @@ -75,7 +75,7 @@ BEGIN PUSHBUTTON "取消",IDCANCEL,156,128,50,14 END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TITLEFORMAT "連接到 %s" IDS_MESSAGEFORMAT "正在連接到 %s" diff --git a/dll/win32/crypt32/crypt32_De.rc b/dll/win32/crypt32/crypt32_De.rc index 9c2c91e3714..d8346879f90 100644 --- a/dll/win32/crypt32/crypt32_De.rc +++ b/dll/win32/crypt32/crypt32_De.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL #pragma code_page(65001) -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_AUTHORITY_KEY_ID "Autoritätsschlüsselkennung" IDS_KEY_ATTRIBUTES "Schlüsselattribute" @@ -170,7 +170,7 @@ STRINGTABLE DISCARDABLE IDS_ANY_CERT_POLICY "Alle ausgegebenen Richtlinien" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_LOCALIZEDNAME_ROOT "Vertrauenswürdige Stammzertifizierungsstellen" IDS_LOCALIZEDNAME_MY "Persönlich" @@ -180,7 +180,7 @@ STRINGTABLE DISCARDABLE IDS_LOCALIZEDNAME_DISALLOWED "Nicht Vertrauenswürdige Zertifikate" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_KEY_ID "Schlüsselkennung=" IDS_CERT_ISSUER "Ausgeber des Zertifikats" diff --git a/dll/win32/crypt32/crypt32_En.rc b/dll/win32/crypt32/crypt32_En.rc index be068451813..279f413e1e6 100644 --- a/dll/win32/crypt32/crypt32_En.rc +++ b/dll/win32/crypt32/crypt32_En.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_AUTHORITY_KEY_ID "Authority Key Identifier" IDS_KEY_ATTRIBUTES "Key Attributes" @@ -167,7 +167,7 @@ STRINGTABLE DISCARDABLE IDS_ANY_CERT_POLICY "All issuance policies" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_LOCALIZEDNAME_ROOT "Trusted Root Certification Authorities" IDS_LOCALIZEDNAME_MY "Personal" @@ -177,7 +177,7 @@ STRINGTABLE DISCARDABLE IDS_LOCALIZEDNAME_DISALLOWED "Untrusted Certificates" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_KEY_ID "KeyID=" IDS_CERT_ISSUER "Certificate Issuer" diff --git a/dll/win32/crypt32/crypt32_Fr.rc b/dll/win32/crypt32/crypt32_Fr.rc index b98636dee82..23d3507cdd5 100644 --- a/dll/win32/crypt32/crypt32_Fr.rc +++ b/dll/win32/crypt32/crypt32_Fr.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_AUTHORITY_KEY_ID "Identifiant de l'autorité de la clé" IDS_KEY_ATTRIBUTES "Attributs de la clé" @@ -170,7 +170,7 @@ STRINGTABLE DISCARDABLE IDS_ANY_CERT_POLICY "Toutes les politiques d'émission" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_LOCALIZEDNAME_ROOT "Autorités de certification de confiance" IDS_LOCALIZEDNAME_MY "Personnel" @@ -180,7 +180,7 @@ STRINGTABLE DISCARDABLE IDS_LOCALIZEDNAME_DISALLOWED "Certificats non autorisés" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_KEY_ID "ID de clé =" IDS_CERT_ISSUER "Émetteur du certificat" diff --git a/dll/win32/crypt32/crypt32_Hu.rc b/dll/win32/crypt32/crypt32_Hu.rc index de0399c23ac..86d5c17e6e8 100644 --- a/dll/win32/crypt32/crypt32_Hu.rc +++ b/dll/win32/crypt32/crypt32_Hu.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_AUTHORITY_KEY_ID "Hitelesítési kulcs azonosító" IDS_KEY_ATTRIBUTES "Kulcs attribútumok" @@ -170,7 +170,7 @@ STRINGTABLE DISCARDABLE IDS_ANY_CERT_POLICY "Összes kiadási szabályok" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_LOCALIZEDNAME_ROOT "Megbízható gyökér tanusítvány kiadók" IDS_LOCALIZEDNAME_MY "Személyes" @@ -180,7 +180,7 @@ STRINGTABLE DISCARDABLE IDS_LOCALIZEDNAME_DISALLOWED "Nem megbízható tanusítványok" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_KEY_ID "KulcsID=" IDS_CERT_ISSUER "Tanusítvány kiadó" diff --git a/dll/win32/crypt32/crypt32_It.rc b/dll/win32/crypt32/crypt32_It.rc index 83530fcdede..6ca2a15d4d3 100644 --- a/dll/win32/crypt32/crypt32_It.rc +++ b/dll/win32/crypt32/crypt32_It.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_AUTHORITY_KEY_ID "Identificatore chiave autorità" IDS_KEY_ATTRIBUTES "Attributi chiave" @@ -170,7 +170,7 @@ STRINGTABLE DISCARDABLE IDS_ANY_CERT_POLICY "Tutte le policy di rilascio" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_LOCALIZEDNAME_ROOT "Autorità Certificazione Root Fidate" IDS_LOCALIZEDNAME_MY "Personale" @@ -180,7 +180,7 @@ STRINGTABLE DISCARDABLE IDS_LOCALIZEDNAME_DISALLOWED "Certificati non fidati" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_KEY_ID "IDChiave=" IDS_CERT_ISSUER "Emittente Certificato" diff --git a/dll/win32/crypt32/crypt32_Ko.rc b/dll/win32/crypt32/crypt32_Ko.rc index 0d83815c3ff..cfac6ac33ec 100644 --- a/dll/win32/crypt32/crypt32_Ko.rc +++ b/dll/win32/crypt32/crypt32_Ko.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_AUTHORITY_KEY_ID " Ű ĺ" IDS_KEY_ATTRIBUTES "Ű Ӽ" @@ -168,7 +168,7 @@ STRINGTABLE DISCARDABLE IDS_ANY_CERT_POLICY " ħ" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_LOCALIZEDNAME_ROOT "ȸ ִ Ʈ " IDS_LOCALIZEDNAME_MY "" @@ -178,7 +178,7 @@ STRINGTABLE DISCARDABLE IDS_LOCALIZEDNAME_DISALLOWED "ŷ " } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_KEY_ID "KeyID=" IDS_CERT_ISSUER " " diff --git a/dll/win32/crypt32/crypt32_Lt.rc b/dll/win32/crypt32/crypt32_Lt.rc index 9ed21510372..980987cac89 100644 --- a/dll/win32/crypt32/crypt32_Lt.rc +++ b/dll/win32/crypt32/crypt32_Lt.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_AUTHORITY_KEY_ID "Įstaigos rakto identifikatorius" IDS_KEY_ATTRIBUTES "Rakto atributai" @@ -170,7 +170,7 @@ STRINGTABLE DISCARDABLE IDS_ANY_CERT_POLICY "Visos išdavimo politikos" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_LOCALIZEDNAME_ROOT "Patikimos vyriausiosios liudijimų įstaigos" IDS_LOCALIZEDNAME_MY "Asmeniniai" @@ -180,7 +180,7 @@ STRINGTABLE DISCARDABLE IDS_LOCALIZEDNAME_DISALLOWED "Nepatikimi liudijimai" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_KEY_ID "Rakto identifikatorius=" IDS_CERT_ISSUER "Liudijimo išdavėjas" diff --git a/dll/win32/crypt32/crypt32_Nl.rc b/dll/win32/crypt32/crypt32_Nl.rc index bc5cda87c50..0f40e5e6f70 100644 --- a/dll/win32/crypt32/crypt32_Nl.rc +++ b/dll/win32/crypt32/crypt32_Nl.rc @@ -24,7 +24,7 @@ LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_AUTHORITY_KEY_ID "Autoriteits Sleutel Identificatie nummer" IDS_KEY_ATTRIBUTES "Sleutel Attributen" @@ -169,7 +169,7 @@ STRINGTABLE DISCARDABLE IDS_ANY_CERT_POLICY "Alle uitgifte beleid" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_LOCALIZEDNAME_ROOT "Vertrouwde Basis Certificatie Autoriteiten" IDS_LOCALIZEDNAME_MY "Persoonlijk" @@ -179,7 +179,7 @@ STRINGTABLE DISCARDABLE IDS_LOCALIZEDNAME_DISALLOWED "Niet-vertrouwde certificaten" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_KEY_ID "SleutelID=" IDS_CERT_ISSUER "Certificaat verstrekker" diff --git a/dll/win32/crypt32/crypt32_No.rc b/dll/win32/crypt32/crypt32_No.rc index b9edbff2837..be6b9942fc1 100644 --- a/dll/win32/crypt32/crypt32_No.rc +++ b/dll/win32/crypt32/crypt32_No.rc @@ -24,7 +24,7 @@ LANGUAGE LANG_NORWEGIAN, SUBLANG_NORWEGIAN_BOKMAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_AUTHORITY_KEY_ID "Identifiserer for autentiseringsnøkkel" IDS_KEY_ATTRIBUTES "Nøkkelegenskaper" @@ -169,7 +169,7 @@ STRINGTABLE DISCARDABLE IDS_ANY_CERT_POLICY "Alle framgangsmåter for utsteding" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_LOCALIZEDNAME_ROOT "Klarerte rotsertifiseringsinstanser" IDS_LOCALIZEDNAME_MY "Personlig" @@ -179,7 +179,7 @@ STRINGTABLE DISCARDABLE IDS_LOCALIZEDNAME_DISALLOWED "Mistrodde sertifikater" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_KEY_ID "NøkkelID=" IDS_CERT_ISSUER "Utsteder" diff --git a/dll/win32/crypt32/crypt32_Pl.rc b/dll/win32/crypt32/crypt32_Pl.rc index 997b5d7f5eb..327c3d1fa36 100644 --- a/dll/win32/crypt32/crypt32_Pl.rc +++ b/dll/win32/crypt32/crypt32_Pl.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_POLISH, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_AUTHORITY_KEY_ID "Identyfikator klucza urzdu" IDS_KEY_ATTRIBUTES "Atrybuty klucza" @@ -167,7 +167,7 @@ STRINGTABLE DISCARDABLE IDS_ANY_CERT_POLICY "Wszystkie wydane zasady" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_LOCALIZEDNAME_ROOT "Zaufane gwne urzdy certyfikacji" IDS_LOCALIZEDNAME_MY "Osobisty" @@ -177,7 +177,7 @@ STRINGTABLE DISCARDABLE IDS_LOCALIZEDNAME_DISALLOWED "Niezaufani wydawcy" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_KEY_ID "ID Klucza=" IDS_CERT_ISSUER "Wystawca certyfikatu" diff --git a/dll/win32/crypt32/crypt32_Pt.rc b/dll/win32/crypt32/crypt32_Pt.rc index dcce8097a01..a5c62f43646 100644 --- a/dll/win32/crypt32/crypt32_Pt.rc +++ b/dll/win32/crypt32/crypt32_Pt.rc @@ -2,6 +2,7 @@ * crypt32 dll resources * * Copyright (C) 2008 Ricardo Filipe + * Copyright 2010 Gustavo Henrique Milaré * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -22,9 +23,9 @@ #pragma code_page(65001) -LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE +LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_AUTHORITY_KEY_ID "Identificador da Chave de Autoridade" IDS_KEY_ATTRIBUTES "Atributos da Chave" @@ -43,13 +44,166 @@ STRINGTABLE DISCARDABLE IDS_NEXT_UPDATE_LOCATION "Localização da próxima actualização" IDS_YES_OR_NO_TRUST "Confiança Sim ou Não" IDS_EMAIL_ADDRESS "Endereço de Email" - IDS_UNSTRUCTURED_NAME "Nome não estruturado" + IDS_UNSTRUCTURED_NAME "Nome Desestruturado" IDS_CONTENT_TYPE "Tipo de Conteúdo" - IDS_MESSAGE_DIGEST "Resumo da mensagem" - IDS_SIGNING_TIME "Tempo de assinatura" - IDS_COUNTER_SIGN "Contra assinar" + IDS_MESSAGE_DIGEST "Digesto da Mensagem" + IDS_SIGNING_TIME "Tempo de Assinatura" + IDS_COUNTER_SIGN "Contra Assinar" + IDS_CHALLENGE_PASSWORD "Desafiar Senha" + IDS_UNSTRUCTURED_ADDRESS "Endereço Desestruturado" + IDS_SMIME_CAPABILITIES "Capacidades SMIME" + IDS_PREFER_SIGNED_DATA "Preferir Dados Assinados" + IDS_CPS "CPS" + IDS_USER_NOTICE "Aviso de Usuário" + IDS_OCSP "Protocolo de Estado de Certificados Online" + IDS_CA_ISSUER "Emissor de Certificados Autorizados" + IDS_CERT_TEMPLATE_NAME "Nome de Certificação por Template" + IDS_CERT_TYPE "Tipo de Certificado" + IDS_CERT_MANIFOLD "Agrupador de Certificados" + IDS_NETSCAPE_CERT_TYPE "Tipo de Certificados Netscape" + IDS_NETSCAPE_BASE_URL "URL Base Netscape" + IDS_NETSCAPE_REVOCATION_URL "URL Revogação Netscape" + IDS_NETSCAPE_CA_REVOCATION_URL "URL Revogação CA Netscape" + IDS_NETSCAPE_CERT_RENEWAL_URL "URL Renovação de Certificados Netscape" + IDS_NETSCAPE_CA_POLICY_URL "URL Política CA Netscape" + IDS_NETSCAPE_SSL_SERVER_NAME "Nome de Servidor SSL Netscape" + IDS_NETSCAPE_COMMENT "Comentário Netscape" + IDS_SPC_SP_AGENCY_INFO "SpcSpAgencyInfo" + IDS_SPC_FINANCIAL_CRITERIA "SpcFinancialCriteria" + IDS_SPC_MINIMAL_CRITERIA "SpcMinimalCriteria" + IDS_COUNTRY "País/Região" + IDS_ORGANIZATION "Organização" + IDS_ORGANIZATIONAL_UNIT "Unidade Organizacional" + IDS_COMMON_NAME "Nome Comum" + IDS_LOCALITY "Localidade" + IDS_STATE_OR_PROVINCE "Estado ou Província" + IDS_TITLE "Título" + IDS_GIVEN_NAME "Nome Dado" + IDS_INITIALS "Iniciais" + IDS_SUR_NAME "Apelido" + IDS_DOMAIN_COMPONENT "Componente de Domínio" + IDS_STREET_ADDRESS "Endereço da Rua" + IDS_SERIAL_NUMBER "Número de série" + IDS_CA_VERSION "Versão CA" + IDS_CROSS_CA_VERSION "Versão Cruzada CA" + IDS_SERIALIZED_SIG_SERIAL_NUMBER "Número de Série Assinado Serializado" + IDS_PRINCIPAL_NAME "Nome Principal" + IDS_WINDOWS_PRODUCT_UPDATE "Actualização de Produto Windows" + IDS_ENROLLMENT_NAME_VALUE_PAIR "Par de Inscrição Nome Valor" + IDS_OS_VERSION "Versão do SO" + IDS_ENROLLMENT_CSP "Inscrição CSP" + IDS_CRL_NUMBER "Número CRL" + IDS_DELTA_CRL_INDICATOR "Indicador Delta CRL" + IDS_ISSUING_DIST_POINT "Emissão de Ponto de Distribuição" + IDS_FRESHEST_CRL "CRL Mais Recente" + IDS_NAME_CONSTRAINTS "Restrições de Nome" + IDS_POLICY_MAPPINGS "Mapeamento de Políticas" + IDS_POLICY_CONSTRAINTS "Restrições de Políticas" + IDS_CROSS_CERT_DIST_POINTS "Cross-Certificate Distribution Points" + IDS_APPLICATION_POLICIES "Políticas da Aplicação" + IDS_APPLICATION_POLICY_MAPPINGS "Mapeamento das Políticas da Aplicação" + IDS_APPLICATION_POLICY_CONSTRAINTS "Restrições da Política da Aplicação" + IDS_CMC_DATA "Dados CMC" + IDS_CMC_RESPONSE "Resposta CMC" + IDS_UNSIGNED_CMC_REQUEST "Pedido CMC não assinado" + IDS_CMC_STATUS_INFO "Informação de Estado CMC" + IDS_CMC_EXTENSIONS "Extensões CMC" + IDS_CMC_ATTRIBUTES "Atributos CMC" + IDS_PKCS_7_DATA "Dados PKCS 7" + IDS_PKCS_7_SIGNED "PKCS 7 Assinado" + IDS_PKCS_7_ENVELOPED "PKCS 7 Envolvido" + IDS_PKCS_7_SIGNED_ENVELOPED "PKCS 7 Assinado e Envolvido" + IDS_PKCS_7_DIGESTED "PKCS 7 Digesto" + IDS_PKCS_7_ENCRYPTED "PKCS 7 Encriptado" + IDS_PREVIOUS_CA_CERT_HASH "Hash Anterior de Certificado CA" + IDS_CRL_VIRTUAL_BASE "Número CRL de Base Virtual" + IDS_CRL_NEXT_PUBLISH "Próxima Publicação CRL" + IDS_CA_EXCHANGE "Certificado de Encriptação CA" + IDS_KEY_RECOVERY_AGENT "Agente Recuperador de Chaves" + IDS_CERTIFICATE_TEMPLATE "Informação do Template do Certificado" + IDS_ENTERPRISE_ROOT_OID "Enterprise Root OID" + IDS_RDN_DUMMY_SIGNER "Assinador Falso" + IDS_ARCHIVED_KEY_ATTR "Chave Privada Encriptada" + IDS_CRL_SELF_CDP "Localizações CRL Publicadas" + IDS_REQUIRE_CERT_CHAIN_POLICY "Forçar Política Encadeada de Certificados" + IDS_TRANSACTION_ID "Id da transacção" + IDS_SENDER_NONCE "Expedidor Nonce" + IDS_RECIPIENT_NONCE "Recipiente Nonce" + IDS_REG_INFO "Registro de Informação" + IDS_GET_CERTIFICATE "Obter Certificado" + IDS_GET_CRL "Obter CRL" + IDS_REVOKE_REQUEST "Revogar Pedido" + IDS_QUERY_PENDING "Consulta Pendente" + IDS_SORTED_CTL "Lista de Certificados Confiáveis" + IDS_ARCHIVED_KEY_CERT_HASH "Hash de Certificados Chave Arquivados" + IDS_PRIVATE_KEY_USAGE_PERIOD "Período de Uso da Chave Privada" + IDS_CLIENT_INFORMATION "Informação do Cliente" + IDS_SERVER_AUTHENTICATION "Autenticação do Servidor" + IDS_CLIENT_AUTHENTICATION "Autenticação do Cliente" + IDS_CODE_SIGNING "Assinatura de Código" + IDS_SECURE_EMAIL "E-mail seguro" + IDS_TIME_STAMPING "Selo Temporal" + IDS_MICROSOFT_TRUST_LIST_SIGNING "Assinatura de Lista Confiável da Microsoft" + IDS_MICROSOFT_TIME_STAMPING "Selo Temporal da Microsoft" + IDS_IPSEC_END_SYSTEM "Sistema de segurança IP" + IDS_IPSEC_TUNNEL "Terminação do túnel de segurança IP" + IDS_IPSEC_USER "Usuário de segurança IP" + IDS_EFS "Encriptando Sistema de Arquivos" + IDS_WHQL_CRYPTO "Verificação de Driver de Hardware Windows" + IDS_NT5_CRYPTO "Verificação de Componentes de Sistema Windows" + IDS_OEM_WHQL_CRYPTO "Verificação de Componentes de Sistema Windows OEM" + IDS_EMBEDDED_NT_CRYPTO "Verificação de Componentes de Sistema Windows Embebida" + IDS_KEY_PACK_LICENSES "Licenças de Pacotes de Chaves" + IDS_LICENSE_SERVER "Verificação de Licença de Servidor" + IDS_SMART_CARD_LOGON "Logon Smart Card" + IDS_DIGITAL_RIGHTS "Direitos Digitais" + IDS_QUALIFIED_SUBORDINATION "Subordinação Qualificada" + IDS_KEY_RECOVERY "Recuperação de chaves" + IDS_DOCUMENT_SIGNING "Assinatura de Documento" + IDS_IPSEC_IKE_INTERMEDIATE "Segurança IP intermédia IKE" + IDS_FILE_RECOVERY "Recuperação de Arquivos" + IDS_ROOT_LIST_SIGNER "Assinador de Lista Raiz" + IDS_ANY_APPLICATION_POLICIES "Políticas para todas as aplicações" + IDS_DS_EMAIL_REPLICATION "Replicação do Diretório de Serviço E-mail" + IDS_ENROLLMENT_AGENT "Agente de Requisição de Certificados" + IDS_LIFETIME_SIGNING "Assinatura de Tempo de Vida" + IDS_ANY_CERT_POLICY "Políticas para todas as emissões" + IDS_LOCALIZEDNAME_ROOT "Autoridades de Certificação de Raiz Confiáveis" + IDS_LOCALIZEDNAME_MY "Pessoal" + IDS_LOCALIZEDNAME_CA "Autoridades de Certificação Intermédias" + IDS_LOCALIZEDNAME_ADDRESSBOOK "Outras pessoas" + IDS_LOCALIZEDNAME_TRUSTEDPUBLISHER "Publicadores Confiáveis" + IDS_LOCALIZEDNAME_DISALLOWED "Certificados Desconfiáveis" +} + +LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE + +STRINGTABLE +{ + IDS_AUTHORITY_KEY_ID "Identificador da Chave de Autoridade" + IDS_KEY_ATTRIBUTES "Atributos da Chave" + IDS_KEY_USAGE_RESTRICTION "Restrições ao uso da Chave" + IDS_SUBJECT_ALT_NAME "Nome Alternativo do Sujeito" + IDS_ISSUER_ALT_NAME "Nome Alternativo do Emissor" + IDS_BASIC_CONSTRAINTS "Restrições Básicas" + IDS_KEY_USAGE "Uso da Chave" + IDS_CERT_POLICIES "Políticas de Certificados" + IDS_SUBJECT_KEY_IDENTIFIER "Identificador da Chave do Sujeito" + IDS_CRL_REASON_CODE "Código de Razão CRL" + IDS_CRL_DIST_POINTS "Pontos de Distribuição CRL" + IDS_ENHANCED_KEY_USAGE "Uso da Chave melhorado" + IDS_AUTHORITY_INFO_ACCESS "Acesso Autorizado a Informação" + IDS_CERT_EXTENSIONS "Extensões de Certificados" + IDS_NEXT_UPDATE_LOCATION "Localização da próxima actualização" + IDS_YES_OR_NO_TRUST "Confiança Sim ou Não" + IDS_EMAIL_ADDRESS "Endereço de Email" + IDS_UNSTRUCTURED_NAME "Nome não Estruturado" + IDS_CONTENT_TYPE "Tipo de Conteúdo" + IDS_MESSAGE_DIGEST "Resumo da Mensagem" + IDS_SIGNING_TIME "Tempo de Assinatura" + IDS_COUNTER_SIGN "Contra Assinar" IDS_CHALLENGE_PASSWORD "Desafiar Password" - IDS_UNSTRUCTURED_ADDRESS "Endereço não estruturado" + IDS_UNSTRUCTURED_ADDRESS "Endereço não Estruturado" IDS_SMIME_CAPABILITIES "Capacidades SMIME" IDS_PREFER_SIGNED_DATA "Preferir Dados Assinados" IDS_CPS "CPS" @@ -133,7 +287,7 @@ STRINGTABLE DISCARDABLE IDS_GET_CRL "Obter CRL" IDS_REVOKE_REQUEST "Revogar Pedido" IDS_QUERY_PENDING "Consulta Pendente" - IDS_SORTED_CTL "Lista Confiável de Certificados" + IDS_SORTED_CTL "Lista de Certificados Confiáveis" IDS_ARCHIVED_KEY_CERT_HASH "Hash de Certificados Chave Arquivados" IDS_PRIVATE_KEY_USAGE_PERIOD "Período de Uso da Chave Privada" IDS_CLIENT_INFORMATION "Informação do Cliente" @@ -167,10 +321,6 @@ STRINGTABLE DISCARDABLE IDS_ENROLLMENT_AGENT "Agente de Pedido de Certificados" IDS_LIFETIME_SIGNING "Assinatura de tempo de vida" IDS_ANY_CERT_POLICY "Políticas para todas as emissões" -} - -STRINGTABLE DISCARDABLE -{ IDS_LOCALIZEDNAME_ROOT "Autoridades de Certificação de Raiz Confiáveis" IDS_LOCALIZEDNAME_MY "Pessoal" IDS_LOCALIZEDNAME_CA "Autoridades de Certificação Intermédias" @@ -179,7 +329,75 @@ STRINGTABLE DISCARDABLE IDS_LOCALIZEDNAME_DISALLOWED "Certificados Desconfiáveis" } -STRINGTABLE DISCARDABLE + +LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN + +STRINGTABLE +{ + IDS_KEY_ID "KeyID=" + IDS_CERT_ISSUER "Emissor do Certificado: " + IDS_CERT_SERIAL_NUMBER "Número de Série do Certificado=" + IDS_ALT_NAME_OTHER_NAME "Outro Nome=" + IDS_ALT_NAME_RFC822_NAME "Endereço de E-mail=" + IDS_ALT_NAME_DNS_NAME "Nome DNS=" + IDS_ALT_NAME_DIRECTORY_NAME "Nome do Diretório" + IDS_ALT_NAME_URL "URL=" + IDS_ALT_NAME_IP_ADDRESS "Endereço IP=" + IDS_ALT_NAME_MASK "Máscara=" + IDS_ALT_NAME_REGISTERED_ID "ID Registrado=" + IDS_USAGE_UNKNOWN "Uso de Chave Desconhecido" + IDS_SUBJECT_TYPE "Tipo de Sujeito=" + IDS_SUBJECT_TYPE_CA "CA" + IDS_SUBJECT_TYPE_END_CERT "Fim de Entidade" + IDS_PATH_LENGTH "Restrição de Tamanho de Caminho=" + IDS_PATH_LENGTH_NONE "Nenhum" + IDS_INFO_NOT_AVAILABLE "Informação não Disponível" + IDS_AIA "Acesso à Informação de Autoridade" + IDS_ACCESS_METHOD "Método de Acesso=" + IDS_ACCESS_METHOD_OCSP "OCSP" + IDS_ACCESS_METHOD_CA_ISSUERS "Emissores CA" + IDS_ACCESS_METHOD_UNKNOWN "Método de Acesso Desconhecido" + IDS_ACCESS_LOCATION "Nome Alternativo" + IDS_CRL_DIST_POINT "Ponto de Distribuição CRL" + IDS_CRL_DIST_POINT_NAME "Nome do Ponto de Distribuição" + IDS_CRL_DIST_POINT_FULL_NAME "Nome Completo" + IDS_CRL_DIST_POINT_RDN_NAME "Nome RDN" + IDS_CRL_DIST_POINT_REASON "Razão CRL=" + IDS_CRL_DIST_POINT_ISSUER "Emissor CRL" + IDS_REASON_KEY_COMPROMISE "Compromisso da Chave" + IDS_REASON_CA_COMPROMISE "Compromisso CA" + IDS_REASON_AFFILIATION_CHANGED "Mudança de Afiliação" + IDS_REASON_SUPERSEDED "Sobrescrito" + IDS_REASON_CESSATION_OF_OPERATION "Operação Interrompida" + IDS_REASON_CERTIFICATE_HOLD "Certificado de Espera" + IDS_FINANCIAL_CRITERIA "Informação Financeira=" + IDS_FINANCIAL_CRITERIA_AVAILABLE "Disponível" + IDS_FINANCIAL_CRITERIA_NOT_AVAILABLE "Não Disponível" + IDS_FINANCIAL_CRITERIA_MEETS_CRITERIA "Conforme os Critérios=" + IDS_YES "Sim" + IDS_NO "Não" + IDS_DIGITAL_SIGNATURE "Assinatura Digital" + IDS_NON_REPUDIATION "Não-Repudiação" + IDS_KEY_ENCIPHERMENT "Encriptação de Chaves" + IDS_DATA_ENCIPHERMENT "Encriptação de Dados" + IDS_KEY_AGREEMENT "Acordo de Chaves" + IDS_CERT_SIGN "Assinatura de Certificados" + IDS_OFFLINE_CRL_SIGN "Assinatura CRL Off-line" + IDS_CRL_SIGN "Assinatura CRL" + IDS_ENCIPHER_ONLY "Apenas Encriptar" + IDS_DECIPHER_ONLY "Apenas Decriptar" + IDS_NETSCAPE_SSL_CLIENT "Autenticação de Cliente SSL" + IDS_NETSCAPE_SSL_SERVER "Autenticação de Servidor SSL" + IDS_NETSCAPE_SMIME "S/MIME" + IDS_NETSCAPE_SIGN "Assinatura" + IDS_NETSCAPE_SSL_CA "SSL CA" + IDS_NETSCAPE_SMIME_CA "S/MIME CA" + IDS_NETSCAPE_SIGN_CA "CA de Assinatura" +} + +LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE + +STRINGTABLE { IDS_KEY_ID "KeyID=" IDS_CERT_ISSUER "Emissor do Certificado: " @@ -213,10 +431,10 @@ STRINGTABLE DISCARDABLE IDS_CRL_DIST_POINT_ISSUER "Emissor CRL" IDS_REASON_KEY_COMPROMISE "Compromisso da Chave" IDS_REASON_CA_COMPROMISE "Compromisso CA" - IDS_REASON_AFFILIATION_CHANGED "Mudança de afiliação" + IDS_REASON_AFFILIATION_CHANGED "Mudança de Afiliação" IDS_REASON_SUPERSEDED "Supercedente" - IDS_REASON_CESSATION_OF_OPERATION "Operação terminada" - IDS_REASON_CERTIFICATE_HOLD "Certificado em espera" + IDS_REASON_CESSATION_OF_OPERATION "Operação Terminada" + IDS_REASON_CERTIFICATE_HOLD "Certificado em Espera" IDS_FINANCIAL_CRITERIA "Informação Financeira=" IDS_FINANCIAL_CRITERIA_AVAILABLE "Disponível" IDS_FINANCIAL_CRITERIA_NOT_AVAILABLE "Não Disponível" @@ -231,8 +449,8 @@ STRINGTABLE DISCARDABLE IDS_CERT_SIGN "Assinatura de Certificados" IDS_OFFLINE_CRL_SIGN "Assinatura CRL Off-line" IDS_CRL_SIGN "Assinatura CRL" - IDS_ENCIPHER_ONLY "Cifrar apenas" - IDS_DECIPHER_ONLY "Decifrar apenas" + IDS_ENCIPHER_ONLY "Cifrar Apenas" + IDS_DECIPHER_ONLY "Decifrar Apenas" IDS_NETSCAPE_SSL_CLIENT "Autenticação de Cliente SSL" IDS_NETSCAPE_SSL_SERVER "Autenticação de Servidor SSL" IDS_NETSCAPE_SMIME "S/MIME" diff --git a/dll/win32/crypt32/crypt32_Ro.rc b/dll/win32/crypt32/crypt32_Ro.rc index 10e33ea4794..6d605280e3d 100644 --- a/dll/win32/crypt32/crypt32_Ro.rc +++ b/dll/win32/crypt32/crypt32_Ro.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_AUTHORITY_KEY_ID "Identificatorul cheii autorității" IDS_KEY_ATTRIBUTES "Atributele cheii" @@ -170,7 +170,7 @@ STRINGTABLE DISCARDABLE IDS_ANY_CERT_POLICY "Toate politicile de emitere" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_LOCALIZEDNAME_ROOT "Autorități de încredere de bază de certificare" IDS_LOCALIZEDNAME_MY "Personale" @@ -180,7 +180,7 @@ STRINGTABLE DISCARDABLE IDS_LOCALIZEDNAME_DISALLOWED "Lipsite de încredere" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_KEY_ID "KeyID=" IDS_CERT_ISSUER "Emitentul certificatului" diff --git a/dll/win32/crypt32/crypt32_Sv.rc b/dll/win32/crypt32/crypt32_Sv.rc index 4a242fe10a6..012c417c23f 100644 --- a/dll/win32/crypt32/crypt32_Sv.rc +++ b/dll/win32/crypt32/crypt32_Sv.rc @@ -24,7 +24,7 @@ LANGUAGE LANG_SWEDISH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_AUTHORITY_KEY_ID "Authority Key Identifier" IDS_KEY_ATTRIBUTES "Nyckelattribut" diff --git a/dll/win32/crypt32/crypt32_Uk.rc b/dll/win32/crypt32/crypt32_Uk.rc index c21d274006c..47a1037c031 100644 --- a/dll/win32/crypt32/crypt32_Uk.rc +++ b/dll/win32/crypt32/crypt32_Uk.rc @@ -28,7 +28,7 @@ LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_AUTHORITY_KEY_ID "Authority Key Identifier" IDS_KEY_ATTRIBUTES "Властивості Ключа" @@ -173,7 +173,7 @@ STRINGTABLE DISCARDABLE IDS_ANY_CERT_POLICY "All issuance policies" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_LOCALIZEDNAME_ROOT "Trusted Root Certification Authorities" IDS_LOCALIZEDNAME_MY "Personal" @@ -183,7 +183,7 @@ STRINGTABLE DISCARDABLE IDS_LOCALIZEDNAME_DISALLOWED "Untrusted Certificates" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_KEY_ID "ID Ключа=" IDS_CERT_ISSUER "Certificate Issuer" diff --git a/dll/win32/cryptdlg/cryptdlg.rc b/dll/win32/cryptdlg/cryptdlg.rc index 215d3c1b083..8331f337bc9 100644 --- a/dll/win32/cryptdlg/cryptdlg.rc +++ b/dll/win32/cryptdlg/cryptdlg.rc @@ -34,6 +34,7 @@ #include "cryptdlg_Hu.rc" #include "cryptdlg_It.rc" #include "cryptdlg_Lt.rc" +#include "cryptdlg_No.rc" #include "cryptdlg_Pt.rc" #include "cryptdlg_Ro.rc" #include "cryptdlg_Uk.rc" diff --git a/dll/win32/cryptdlg/cryptdlg_Da.rc b/dll/win32/cryptdlg/cryptdlg_Da.rc index 4d6acf0af83..7d0ffc3441f 100644 --- a/dll/win32/cryptdlg/cryptdlg_Da.rc +++ b/dll/win32/cryptdlg/cryptdlg_Da.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_DANISH, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_CERT_POLICY "Certifikat Politik" IDS_POLICY_ID "Politik Identifikation:" diff --git a/dll/win32/cryptdlg/cryptdlg_De.rc b/dll/win32/cryptdlg/cryptdlg_De.rc index cd3fa96c013..af2348bdf81 100644 --- a/dll/win32/cryptdlg/cryptdlg_De.rc +++ b/dll/win32/cryptdlg/cryptdlg_De.rc @@ -24,7 +24,7 @@ LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_CERT_POLICY "Zertifikatsrichtlinie" IDS_POLICY_ID "Richtlinien Qualifizierung: " diff --git a/dll/win32/cryptdlg/cryptdlg_En.rc b/dll/win32/cryptdlg/cryptdlg_En.rc index 72ceecddc9f..7e6d742e98a 100644 --- a/dll/win32/cryptdlg/cryptdlg_En.rc +++ b/dll/win32/cryptdlg/cryptdlg_En.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_CERT_POLICY "Certificate Policy" IDS_POLICY_ID "Policy Identifier: " diff --git a/dll/win32/cryptdlg/cryptdlg_Fr.rc b/dll/win32/cryptdlg/cryptdlg_Fr.rc index 25d8a644ecf..79664eab3a1 100644 --- a/dll/win32/cryptdlg/cryptdlg_Fr.rc +++ b/dll/win32/cryptdlg/cryptdlg_Fr.rc @@ -26,7 +26,7 @@ LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_CERT_POLICY "Politique de certificat" IDS_POLICY_ID "Identifiant de politique : " diff --git a/dll/win32/cryptdlg/cryptdlg_Hu.rc b/dll/win32/cryptdlg/cryptdlg_Hu.rc index b603de6fb53..53afcd72b1d 100644 --- a/dll/win32/cryptdlg/cryptdlg_Hu.rc +++ b/dll/win32/cryptdlg/cryptdlg_Hu.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_CERT_POLICY "Tanusítvány szabályok" IDS_POLICY_ID "Szabály azonosító: " diff --git a/dll/win32/cryptdlg/cryptdlg_It.rc b/dll/win32/cryptdlg/cryptdlg_It.rc index da6a5d0ab2b..eda869710c3 100644 --- a/dll/win32/cryptdlg/cryptdlg_It.rc +++ b/dll/win32/cryptdlg/cryptdlg_It.rc @@ -26,7 +26,7 @@ LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_CERT_POLICY "Policy del certificato" IDS_POLICY_ID "Identificatore della policy: " diff --git a/dll/win32/cryptdlg/cryptdlg_Ko.rc b/dll/win32/cryptdlg/cryptdlg_Ko.rc index e9a6d9d8e97..5ace44ddd29 100644 --- a/dll/win32/cryptdlg/cryptdlg_Ko.rc +++ b/dll/win32/cryptdlg/cryptdlg_Ko.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_CERT_POLICY " å" IDS_POLICY_ID "å ĺ: " diff --git a/dll/win32/cryptdlg/cryptdlg_Lt.rc b/dll/win32/cryptdlg/cryptdlg_Lt.rc index 74ef2937baf..2083e932220 100644 --- a/dll/win32/cryptdlg/cryptdlg_Lt.rc +++ b/dll/win32/cryptdlg/cryptdlg_Lt.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_CERT_POLICY "Liudijimo politika" IDS_POLICY_ID "Politikos identifikatorius: " diff --git a/dll/win32/cryptdlg/cryptdlg_Nl.rc b/dll/win32/cryptdlg/cryptdlg_Nl.rc index 3e8aca0d11a..8aa60a3805e 100644 --- a/dll/win32/cryptdlg/cryptdlg_Nl.rc +++ b/dll/win32/cryptdlg/cryptdlg_Nl.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_CERT_POLICY "Certificaat beleid" IDS_POLICY_ID "Beleid Identificatie: " diff --git a/dll/win32/cryptdlg/cryptdlg_No.rc b/dll/win32/cryptdlg/cryptdlg_No.rc new file mode 100644 index 00000000000..670a24729c9 --- /dev/null +++ b/dll/win32/cryptdlg/cryptdlg_No.rc @@ -0,0 +1,40 @@ +/* + * cryptdlg dll resources (Norwegian Bokmål) + * + * Copyright 2010 Alexander N. Sørnes + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include "cryptres.h" + +#pragma code_page(65001) + +LANGUAGE LANG_NORWEGIAN, SUBLANG_NORWEGIAN_BOKMAL + +STRINGTABLE +{ + IDS_CERT_POLICY "Sertifikatpolitikk" + IDS_POLICY_ID "Politikk-ID: " + IDS_POLICY_QUALIFIER_INFO "Info om politikkvalifisering" + IDS_POLICY_QUALIFIER_ID "Kvalifiserings-ID=" + IDS_CPS "CPS" /* Certification Practice Statement */ + IDS_USER_NOTICE "Brukernotis" + IDS_QUALIFIER "Kvalifisering" + IDS_NOTICE_REF "Notisreferanse" + IDS_ORGANIZATION "Organisasjon=" + IDS_NOTICE_NUM "Notisnummer=" + IDS_NOTICE_TEXT "Notistekst=" +} diff --git a/dll/win32/cryptdlg/cryptdlg_Pl.rc b/dll/win32/cryptdlg/cryptdlg_Pl.rc index fbf52f177b0..347850c135d 100644 --- a/dll/win32/cryptdlg/cryptdlg_Pl.rc +++ b/dll/win32/cryptdlg/cryptdlg_Pl.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_POLISH, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_CERT_POLICY "Zasady certyfikatu" IDS_POLICY_ID "Identyfikator zasad: " diff --git a/dll/win32/cryptdlg/cryptdlg_Pt.rc b/dll/win32/cryptdlg/cryptdlg_Pt.rc index 165081b3c98..cfc4f0435bd 100644 --- a/dll/win32/cryptdlg/cryptdlg_Pt.rc +++ b/dll/win32/cryptdlg/cryptdlg_Pt.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_CERT_POLICY "Política de Certificados" IDS_POLICY_ID "Identificador da Política: " @@ -42,7 +42,7 @@ STRINGTABLE DISCARDABLE LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_CERT_POLICY "Política de Certificados" IDS_POLICY_ID "Identificador da Política: " diff --git a/dll/win32/cryptdlg/cryptdlg_Ro.rc b/dll/win32/cryptdlg/cryptdlg_Ro.rc index 17b60e0ef5c..0230102a2ba 100644 --- a/dll/win32/cryptdlg/cryptdlg_Ro.rc +++ b/dll/win32/cryptdlg/cryptdlg_Ro.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_CERT_POLICY "Politica certificatului" IDS_POLICY_ID "Identificatorul politicii: " diff --git a/dll/win32/cryptdlg/cryptdlg_Uk.rc b/dll/win32/cryptdlg/cryptdlg_Uk.rc index dc14749e251..ae4d788cf1a 100644 --- a/dll/win32/cryptdlg/cryptdlg_Uk.rc +++ b/dll/win32/cryptdlg/cryptdlg_Uk.rc @@ -26,7 +26,7 @@ LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_CERT_POLICY "Політика сертифікату" IDS_POLICY_ID "Ідентифікатор політики: " diff --git a/dll/win32/cryptui/cryptui.rc b/dll/win32/cryptui/cryptui.rc index ba30d9d2656..eb5593c3ed9 100644 --- a/dll/win32/cryptui/cryptui.rc +++ b/dll/win32/cryptui/cryptui.rc @@ -26,25 +26,25 @@ #include "cryptuires.h" /* @makedep: smallicons.bmp */ -IDB_SMALL_ICONS BITMAP LOADONCALL DISCARDABLE smallicons.bmp +IDB_SMALL_ICONS BITMAP smallicons.bmp /* @makedep: cert.bmp */ -IDB_CERT BITMAP LOADONCALL DISCARDABLE cert.bmp +IDB_CERT BITMAP cert.bmp /* @makedep: certerror.bmp */ -IDB_CERT_ERROR BITMAP LOADONCALL DISCARDABLE certerror.bmp +IDB_CERT_ERROR BITMAP certerror.bmp /* @makedep: certwarning.bmp */ -IDB_CERT_WARNING BITMAP LOADONCALL DISCARDABLE certwarning.bmp +IDB_CERT_WARNING BITMAP certwarning.bmp /* @makedep: checks.bmp */ -IDB_CHECKS BITMAP LOADONCALL DISCARDABLE checks.bmp +IDB_CHECKS BITMAP checks.bmp /* @makedep: certwatermark.bmp */ -IDB_CERT_WATERMARK BITMAP LOADONCALL DISCARDABLE certwatermark.bmp +IDB_CERT_WATERMARK BITMAP certwatermark.bmp /* @makedep: certheader.bmp */ -IDB_CERT_HEADER BITMAP LOADONCALL DISCARDABLE certheader.bmp +IDB_CERT_HEADER BITMAP certheader.bmp #include "cryptui_En.rc" #include "cryptui_Ko.rc" @@ -56,5 +56,7 @@ IDB_CERT_HEADER BITMAP LOADONCALL DISCARDABLE certheader.bmp #include "cryptui_It.rc" #include "cryptui_Lt.rc" #include "cryptui_Nl.rc" +#include "cryptui_No.rc" #include "cryptui_Pt.rc" #include "cryptui_Ro.rc" +#include "cryptui_Uk.rc" diff --git a/dll/win32/cryptui/cryptui_De.rc b/dll/win32/cryptui/cryptui_De.rc index 71740157666..c03c06c51ca 100644 --- a/dll/win32/cryptui/cryptui_De.rc +++ b/dll/win32/cryptui/cryptui_De.rc @@ -24,7 +24,7 @@ LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_CERTIFICATE "Zertifikat" IDS_CERTIFICATEINFORMATION "Zertifikatsinformationen" @@ -175,7 +175,7 @@ STRINGTABLE DISCARDABLE IDS_EXPORT_PRIVATE_KEY_NON_EXPORTABLE "Hinweis: Der private Schlüssel des Zertifikats kann nicht exportiert werden." } -IDD_GENERAL DIALOG DISCARDABLE 0, 0, 255, 236 +IDD_GENERAL DIALOG 0, 0, 255, 236 CAPTION "Allgemein" STYLE WS_VISIBLE FONT 8, "MS Shell Dlg" @@ -195,7 +195,7 @@ BEGIN PUSHBUTTON "Au&sstellererklärung", IDC_ISSUERSTATEMENT,177,216,70,14 END -IDD_DETAIL DIALOG DISCARDABLE 0, 0, 255, 236 +IDD_DETAIL DIALOG 0, 0, 255, 236 CAPTION "Details" STYLE WS_VISIBLE FONT 8, "MS Shell Dlg" @@ -212,7 +212,7 @@ BEGIN PUSHBUTTON "In &Datei kopieren...", IDC_EXPORT,177,216,70,14 END -IDD_HIERARCHY DIALOG DISCARDABLE 0, 0, 255, 236 +IDD_HIERARCHY DIALOG 0, 0, 255, 236 CAPTION "Zertifizierungspfad" STYLE WS_VISIBLE FONT 8, "MS Shell Dlg" @@ -226,7 +226,7 @@ BEGIN WS_BORDER|ES_READONLY|ES_MULTILINE|WS_DISABLED,6,195,245,36 END -IDD_USERNOTICE DIALOG DISCARDABLE 0, 0, 255, 256 +IDD_USERNOTICE DIALOG 0, 0, 255, 256 CAPTION "Haftungsausschluss" STYLE WS_VISIBLE FONT 8, "MS Shell Dlg" @@ -237,7 +237,7 @@ BEGIN PUSHBUTTON "weitere &Informationen", IDC_CPS,171,216,76,14 END -IDD_CERT_PROPERTIES_GENERAL DIALOG DISCARDABLE 0, 0, 255, 236 +IDD_CERT_PROPERTIES_GENERAL DIALOG 0, 0, 255, 236 CAPTION "Allgemein" STYLE WS_VISIBLE FONT 8, "MS Shell Dlg" @@ -259,7 +259,7 @@ BEGIN PUSHBUTTON "&Zweck hinzufügen...", IDC_ADD_PURPOSE,173,194,71,14 END -IDD_ADD_CERT_PURPOSE DIALOG DISCARDABLE 0,0,200,68 +IDD_ADD_CERT_PURPOSE DIALOG 0,0,200,68 CAPTION "Zweck hinzufügen" FONT 8, "MS Shell Dlg" BEGIN @@ -270,7 +270,7 @@ BEGIN PUSHBUTTON "Abbrechen", IDCANCEL, 100,48,60,14 END -IDD_SELECT_STORE DIALOG DISCARDABLE 0,0,200,136 +IDD_SELECT_STORE DIALOG 0,0,200,136 CAPTION "Zertifikatsspeicher wählen" FONT 8, "MS Shell Dlg" BEGIN @@ -283,7 +283,7 @@ BEGIN PUSHBUTTON "Abbrechen", IDCANCEL, 144,118,50,14 END -IDD_IMPORT_WELCOME DIALOG DISCARDABLE 0,0,317,143 +IDD_IMPORT_WELCOME DIALOG 0,0,317,143 CAPTION "Importassistent für die Zertifikatsverwaltung" FONT 8, "MS Shell Dlg" BEGIN @@ -297,7 +297,7 @@ BEGIN -1, 115,111,195,8 END -IDD_IMPORT_FILE DIALOG DISCARDABLE 0,0,317,143 +IDD_IMPORT_FILE DIALOG 0,0,317,143 CAPTION "Importassistent für die Zertifikatsverwaltung" FONT 8, "MS Shell Dlg" BEGIN @@ -314,7 +314,7 @@ BEGIN -1, 31,79,265,10 END -IDD_IMPORT_STORE DIALOG DISCARDABLE 0,0,317,143 +IDD_IMPORT_STORE DIALOG 0,0,317,143 CAPTION "Importassistent für die Zertifikatsverwaltung" FONT 8, "MS Shell Dlg" BEGIN @@ -328,7 +328,7 @@ BEGIN PUSHBUTTON "&Durchsuchen...", IDC_IMPORT_BROWSE_STORE, 236,49,60,14 END -IDD_IMPORT_FINISH DIALOG DISCARDABLE 0,0,317,143 +IDD_IMPORT_FINISH DIALOG 0,0,317,143 CAPTION "Importassistent für die Zertifikatsverwaltung" FONT 8, "MS Shell Dlg" BEGIN @@ -343,7 +343,7 @@ BEGIN 115,67,174,100 END -IDD_CERT_MGR DIALOG DISCARDABLE 0,0,335,270 +IDD_CERT_MGR DIALOG 0,0,335,270 CAPTION "Zertifikatsverwaltung" FONT 8, "MS Shell Dlg" BEGIN @@ -364,7 +364,7 @@ BEGIN PUSHBUTTON "&Schließen", IDCANCEL, 277,249,51,14, BS_DEFPUSHBUTTON END -IDD_CERT_MGR_ADVANCED DIALOG DISCARDABLE 0,0,248,176 +IDD_CERT_MGR_ADVANCED DIALOG 0,0,248,176 CAPTION "Erweiterte Optionen" FONT 8, "MS Shell Dlg" BEGIN @@ -379,7 +379,7 @@ BEGIN PUSHBUTTON "Abbrechen", IDCANCEL, 190,155,51,14 END -IDD_EXPORT_WELCOME DIALOG DISCARDABLE 0,0,317,143 +IDD_EXPORT_WELCOME DIALOG 0,0,317,143 CAPTION "Exportassistent für die Zertifikatsverwaltung" FONT 8, "MS Shell Dlg" BEGIN @@ -393,7 +393,7 @@ BEGIN -1, 115,103,195,8 END -IDD_EXPORT_PRIVATE_KEY DIALOG DISCARDABLE 0,0,317,143 +IDD_EXPORT_PRIVATE_KEY DIALOG 0,0,317,143 CAPTION "Exportassistent für die Zertifikatsverwaltung" FONT 8, "MS Shell Dlg" BEGIN @@ -406,7 +406,7 @@ BEGIN LTEXT "", IDC_EXPORT_PRIVATE_KEY_UNAVAILABLE, 21,60,200,24 END -IDD_EXPORT_PASSWORD DIALOG DISCARDABLE 0,0,317,143 +IDD_EXPORT_PASSWORD DIALOG 0,0,317,143 CAPTION "Exportassistent für die Zertifikatsverwaltung" FONT 8, "MS Shell Dlg" BEGIN @@ -416,7 +416,7 @@ BEGIN EDITTEXT IDC_EXPORT_PASSWORD_CONFIRM, 21,45,208,14, ES_AUTOHSCROLL|WS_TABSTOP END -IDD_EXPORT_FORMAT DIALOG DISCARDABLE 0,0,317,143 +IDD_EXPORT_FORMAT DIALOG 0,0,317,143 CAPTION "Exportassistent für die Zertifikatsverwaltung" FONT 8, "MS Shell Dlg" BEGIN @@ -441,7 +441,7 @@ BEGIN BS_AUTOCHECKBOX|WS_TABSTOP|WS_DISABLED END -IDD_EXPORT_FILE DIALOG DISCARDABLE 0,0,317,143 +IDD_EXPORT_FILE DIALOG 0,0,317,143 CAPTION "Exportassistent für die Zertifikatsverwaltung" FONT 8, "MS Shell Dlg" BEGIN @@ -450,7 +450,7 @@ BEGIN PUSHBUTTON "&Durchsuchen...", IDC_EXPORT_BROWSE_FILE, 236,11,60,14 END -IDD_EXPORT_FINISH DIALOG DISCARDABLE 0,0,317,143 +IDD_EXPORT_FINISH DIALOG 0,0,317,143 CAPTION "Exportassistent für die Zertifikatsverwaltung" FONT 8, "MS Shell Dlg" BEGIN diff --git a/dll/win32/cryptui/cryptui_En.rc b/dll/win32/cryptui/cryptui_En.rc index 527ffa584f7..a608210c7f3 100644 --- a/dll/win32/cryptui/cryptui_En.rc +++ b/dll/win32/cryptui/cryptui_En.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_CERTIFICATE "Certificate" IDS_CERTIFICATEINFORMATION "Certificate Information" @@ -173,7 +173,7 @@ STRINGTABLE DISCARDABLE IDS_EXPORT_PRIVATE_KEY_NON_EXPORTABLE "Note: The private key for this certificate is not exportable." } -IDD_GENERAL DIALOG DISCARDABLE 0, 0, 255, 236 +IDD_GENERAL DIALOG 0, 0, 255, 236 CAPTION "General" STYLE WS_VISIBLE FONT 8, "MS Shell Dlg" @@ -193,7 +193,7 @@ BEGIN PUSHBUTTON "Issuer &Statement", IDC_ISSUERSTATEMENT,177,216,70,14 END -IDD_DETAIL DIALOG DISCARDABLE 0, 0, 255, 236 +IDD_DETAIL DIALOG 0, 0, 255, 236 CAPTION "Details" STYLE WS_VISIBLE FONT 8, "MS Shell Dlg" @@ -210,7 +210,7 @@ BEGIN PUSHBUTTON "&Copy to File...", IDC_EXPORT,177,216,70,14 END -IDD_HIERARCHY DIALOG DISCARDABLE 0, 0, 255, 236 +IDD_HIERARCHY DIALOG 0, 0, 255, 236 CAPTION "Certification Path" STYLE WS_VISIBLE FONT 8, "MS Shell Dlg" @@ -224,7 +224,7 @@ BEGIN WS_BORDER|ES_READONLY|ES_MULTILINE|WS_DISABLED,6,195,245,36 END -IDD_USERNOTICE DIALOG DISCARDABLE 0, 0, 255, 256 +IDD_USERNOTICE DIALOG 0, 0, 255, 256 CAPTION "Disclaimer" STYLE WS_VISIBLE FONT 8, "MS Shell Dlg" @@ -235,7 +235,7 @@ BEGIN PUSHBUTTON "More &Info", IDC_CPS,177,216,70,14 END -IDD_CERT_PROPERTIES_GENERAL DIALOG DISCARDABLE 0, 0, 255, 236 +IDD_CERT_PROPERTIES_GENERAL DIALOG 0, 0, 255, 236 CAPTION "General" STYLE WS_VISIBLE FONT 8, "MS Shell Dlg" @@ -257,7 +257,7 @@ BEGIN PUSHBUTTON "Add &Purpose...", IDC_ADD_PURPOSE,184,194,60,14 END -IDD_ADD_CERT_PURPOSE DIALOG DISCARDABLE 0,0,200,68 +IDD_ADD_CERT_PURPOSE DIALOG 0,0,200,68 CAPTION "Add Purpose" FONT 8, "MS Shell Dlg" BEGIN @@ -268,7 +268,7 @@ BEGIN PUSHBUTTON "Cancel", IDCANCEL, 100,48,60,14 END -IDD_SELECT_STORE DIALOG DISCARDABLE 0,0,200,136 +IDD_SELECT_STORE DIALOG 0,0,200,136 CAPTION "Select Certificate Store" FONT 8, "MS Shell Dlg" BEGIN @@ -281,7 +281,7 @@ BEGIN PUSHBUTTON "Cancel", IDCANCEL, 144,118,50,14 END -IDD_IMPORT_WELCOME DIALOG DISCARDABLE 0,0,317,143 +IDD_IMPORT_WELCOME DIALOG 0,0,317,143 CAPTION "Certificate Import Wizard" FONT 8, "MS Shell Dlg" BEGIN @@ -295,7 +295,7 @@ BEGIN -1, 115,103,195,8 END -IDD_IMPORT_FILE DIALOG DISCARDABLE 0,0,317,178 +IDD_IMPORT_FILE DIALOG 0,0,317,178 CAPTION "Certificate Import Wizard" FONT 8, "MS Shell Dlg" BEGIN @@ -312,7 +312,7 @@ BEGIN -1, 31,79,265,10 END -IDD_IMPORT_STORE DIALOG DISCARDABLE 0,0,317,143 +IDD_IMPORT_STORE DIALOG 0,0,317,143 CAPTION "Certificate Import Wizard" FONT 8, "MS Shell Dlg" BEGIN @@ -326,7 +326,7 @@ BEGIN PUSHBUTTON "B&rowse...", IDC_IMPORT_BROWSE_STORE, 236,49,60,14 END -IDD_IMPORT_FINISH DIALOG DISCARDABLE 0,0,317,178 +IDD_IMPORT_FINISH DIALOG 0,0,317,178 CAPTION "Certificate Import Wizard" FONT 8, "MS Shell Dlg" BEGIN @@ -341,7 +341,7 @@ BEGIN 115,67,174,100 END -IDD_CERT_MGR DIALOG DISCARDABLE 0,0,335,270 +IDD_CERT_MGR DIALOG 0,0,335,270 CAPTION "Certificates" FONT 8, "MS Shell Dlg" BEGIN @@ -362,7 +362,7 @@ BEGIN PUSHBUTTON "&Close", IDCANCEL, 277,249,51,14, BS_DEFPUSHBUTTON END -IDD_CERT_MGR_ADVANCED DIALOG DISCARDABLE 0,0,248,176 +IDD_CERT_MGR_ADVANCED DIALOG 0,0,248,176 CAPTION "Advanced Options" FONT 8, "MS Shell Dlg" BEGIN @@ -377,7 +377,7 @@ BEGIN PUSHBUTTON "Cancel", IDCANCEL, 190,155,51,14 END -IDD_EXPORT_WELCOME DIALOG DISCARDABLE 0,0,317,143 +IDD_EXPORT_WELCOME DIALOG 0,0,317,143 CAPTION "Certificate Export Wizard" FONT 8, "MS Shell Dlg" BEGIN @@ -391,7 +391,7 @@ BEGIN -1, 115,103,195,8 END -IDD_EXPORT_PRIVATE_KEY DIALOG DISCARDABLE 0,0,317,143 +IDD_EXPORT_PRIVATE_KEY DIALOG 0,0,317,143 CAPTION "Certificate Export Wizard" FONT 8, "MS Shell Dlg" BEGIN @@ -404,7 +404,7 @@ BEGIN LTEXT "", IDC_EXPORT_PRIVATE_KEY_UNAVAILABLE, 21,60,200,24 END -IDD_EXPORT_PASSWORD DIALOG DISCARDABLE 0,0,317,143 +IDD_EXPORT_PASSWORD DIALOG 0,0,317,143 CAPTION "Certificate Export Wizard" FONT 8, "MS Shell Dlg" BEGIN @@ -414,7 +414,7 @@ BEGIN EDITTEXT IDC_EXPORT_PASSWORD_CONFIRM, 21,45,208,14, ES_AUTOHSCROLL|WS_TABSTOP END -IDD_EXPORT_FORMAT DIALOG DISCARDABLE 0,0,317,143 +IDD_EXPORT_FORMAT DIALOG 0,0,317,143 CAPTION "Certificate Export Wizard" FONT 8, "MS Shell Dlg" BEGIN @@ -439,7 +439,7 @@ BEGIN BS_AUTOCHECKBOX|WS_TABSTOP|WS_DISABLED END -IDD_EXPORT_FILE DIALOG DISCARDABLE 0,0,317,143 +IDD_EXPORT_FILE DIALOG 0,0,317,143 CAPTION "Certificate Export Wizard" FONT 8, "MS Shell Dlg" BEGIN @@ -448,7 +448,7 @@ BEGIN PUSHBUTTON "B&rowse...", IDC_EXPORT_BROWSE_FILE, 236,11,60,14 END -IDD_EXPORT_FINISH DIALOG DISCARDABLE 0,0,317,178 +IDD_EXPORT_FINISH DIALOG 0,0,317,178 CAPTION "Certificate Export Wizard" FONT 8, "MS Shell Dlg" BEGIN diff --git a/dll/win32/cryptui/cryptui_Fr.rc b/dll/win32/cryptui/cryptui_Fr.rc index 5c5ca6891db..93601266646 100644 --- a/dll/win32/cryptui/cryptui_Fr.rc +++ b/dll/win32/cryptui/cryptui_Fr.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_CERTIFICATE "Certificat" IDS_CERTIFICATEINFORMATION "Informations sur le certificat" @@ -176,7 +176,7 @@ STRINGTABLE DISCARDABLE IDS_EXPORT_PRIVATE_KEY_NON_EXPORTABLE "Note : la clé privée de ce certificat n'est pas exportable." } -IDD_GENERAL DIALOG DISCARDABLE 0, 0, 255, 236 +IDD_GENERAL DIALOG 0, 0, 255, 236 CAPTION "Général" STYLE WS_VISIBLE FONT 8, "MS Shell Dlg" @@ -196,7 +196,7 @@ BEGIN PUSHBUTTON "&Déclaration de l'émetteur", IDC_ISSUERSTATEMENT,161,216,86,14 END -IDD_DETAIL DIALOG DISCARDABLE 0, 0, 255, 236 +IDD_DETAIL DIALOG 0, 0, 255, 236 CAPTION "Détails" STYLE WS_VISIBLE FONT 8, "MS Shell Dlg" @@ -213,7 +213,7 @@ BEGIN PUSHBUTTON "&Copier dans le fichier...", IDC_EXPORT,167,216,80,14 END -IDD_HIERARCHY DIALOG DISCARDABLE 0, 0, 255, 236 +IDD_HIERARCHY DIALOG 0, 0, 255, 236 CAPTION "Chemin de certification" STYLE WS_VISIBLE FONT 8, "MS Shell Dlg" @@ -227,7 +227,7 @@ BEGIN WS_BORDER|ES_READONLY|ES_MULTILINE|WS_DISABLED,6,195,245,36 END -IDD_USERNOTICE DIALOG DISCARDABLE 0, 0, 255, 256 +IDD_USERNOTICE DIALOG 0, 0, 255, 256 CAPTION "Avis de non-responsabilité" STYLE WS_VISIBLE FONT 8, "MS Shell Dlg" @@ -238,7 +238,7 @@ BEGIN PUSHBUTTON "&Infos complémentaires", IDC_CPS,164,216,83,14 END -IDD_CERT_PROPERTIES_GENERAL DIALOG DISCARDABLE 0, 0, 255, 236 +IDD_CERT_PROPERTIES_GENERAL DIALOG 0, 0, 255, 236 CAPTION "Général" STYLE WS_VISIBLE FONT 8, "MS Shell Dlg" @@ -260,7 +260,7 @@ BEGIN PUSHBUTTON "&Ajouter un rôle...", IDC_ADD_PURPOSE,180,194,64,14 END -IDD_ADD_CERT_PURPOSE DIALOG DISCARDABLE 0,0,200,68 +IDD_ADD_CERT_PURPOSE DIALOG 0,0,200,68 CAPTION "Ajouter un rôle" FONT 8, "MS Shell Dlg" BEGIN @@ -271,7 +271,7 @@ BEGIN PUSHBUTTON "Annuler", IDCANCEL, 100,48,60,14 END -IDD_SELECT_STORE DIALOG DISCARDABLE 0,0,200,136 +IDD_SELECT_STORE DIALOG 0,0,200,136 CAPTION "Sélectionner un magasin de certificats" FONT 8, "MS Shell Dlg" BEGIN @@ -284,7 +284,7 @@ BEGIN PUSHBUTTON "Annuler", IDCANCEL, 144,118,50,14 END -IDD_IMPORT_WELCOME DIALOG DISCARDABLE 0,0,317,143 +IDD_IMPORT_WELCOME DIALOG 0,0,317,143 CAPTION "Assistant d'importation de certificats" FONT 8, "MS Shell Dlg" BEGIN @@ -298,7 +298,7 @@ BEGIN -1, 115,114,195,8 END -IDD_IMPORT_FILE DIALOG DISCARDABLE 0,0,317,143 +IDD_IMPORT_FILE DIALOG 0,0,317,143 CAPTION "Assistant Importation de certificats" FONT 8, "MS Shell Dlg" BEGIN @@ -315,7 +315,7 @@ BEGIN -1, 31,79,265,10 END -IDD_IMPORT_STORE DIALOG DISCARDABLE 0,0,317,143 +IDD_IMPORT_STORE DIALOG 0,0,317,143 CAPTION "Assistant Importation de certificats" FONT 8, "MS Shell Dlg" BEGIN @@ -329,7 +329,7 @@ BEGIN PUSHBUTTON "&Parcourir...", IDC_IMPORT_BROWSE_STORE, 236,49,60,14 END -IDD_IMPORT_FINISH DIALOG DISCARDABLE 0,0,317,179 +IDD_IMPORT_FINISH DIALOG 0,0,317,179 CAPTION "Assistant Importation de certificats" FONT 8, "MS Shell Dlg" BEGIN @@ -344,7 +344,7 @@ BEGIN 115,67,174,100 END -IDD_CERT_MGR DIALOG DISCARDABLE 0,0,335,270 +IDD_CERT_MGR DIALOG 0,0,335,270 CAPTION "Certificats" FONT 8, "MS Shell Dlg" BEGIN @@ -365,7 +365,7 @@ BEGIN PUSHBUTTON "&Fermer", IDCANCEL, 277,249,51,14, BS_DEFPUSHBUTTON END -IDD_CERT_MGR_ADVANCED DIALOG DISCARDABLE 0,0,248,176 +IDD_CERT_MGR_ADVANCED DIALOG 0,0,248,176 CAPTION "Options avancées" FONT 8, "MS Shell Dlg" BEGIN @@ -380,7 +380,7 @@ BEGIN PUSHBUTTON "Annuler", IDCANCEL, 190,155,51,14 END -IDD_EXPORT_WELCOME DIALOG DISCARDABLE 0,0,317,143 +IDD_EXPORT_WELCOME DIALOG 0,0,317,143 CAPTION "Assistant d'exportation de certificats" FONT 8, "MS Shell Dlg" BEGIN @@ -394,7 +394,7 @@ BEGIN -1, 115,114,195,8 END -IDD_EXPORT_PRIVATE_KEY DIALOG DISCARDABLE 0,0,317,143 +IDD_EXPORT_PRIVATE_KEY DIALOG 0,0,317,143 CAPTION "Assistant Exportation de certificats" FONT 8, "MS Shell Dlg" BEGIN @@ -407,7 +407,7 @@ BEGIN LTEXT "", IDC_EXPORT_PRIVATE_KEY_UNAVAILABLE, 21,60,200,24 END -IDD_EXPORT_PASSWORD DIALOG DISCARDABLE 0,0,317,143 +IDD_EXPORT_PASSWORD DIALOG 0,0,317,143 CAPTION "Assistant Exportation de certificats" FONT 8, "MS Shell Dlg" BEGIN @@ -417,7 +417,7 @@ BEGIN EDITTEXT IDC_EXPORT_PASSWORD_CONFIRM, 21,45,208,14, ES_AUTOHSCROLL|WS_TABSTOP END -IDD_EXPORT_FORMAT DIALOG DISCARDABLE 0,0,317,143 +IDD_EXPORT_FORMAT DIALOG 0,0,317,143 CAPTION "Assistant Exportation de certificats" FONT 8, "MS Shell Dlg" BEGIN @@ -442,7 +442,7 @@ BEGIN BS_AUTOCHECKBOX|WS_TABSTOP|WS_DISABLED END -IDD_EXPORT_FILE DIALOG DISCARDABLE 0,0,317,143 +IDD_EXPORT_FILE DIALOG 0,0,317,143 CAPTION "Assistant Exportation de certificats" FONT 8, "MS Shell Dlg" BEGIN @@ -451,7 +451,7 @@ BEGIN PUSHBUTTON "Parco&urir...", IDC_EXPORT_BROWSE_FILE, 236,11,60,14 END -IDD_EXPORT_FINISH DIALOG DISCARDABLE 0,0,317,179 +IDD_EXPORT_FINISH DIALOG 0,0,317,179 CAPTION "Assistant Exportation de certificats" FONT 8, "MS Shell Dlg" BEGIN diff --git a/dll/win32/cryptui/cryptui_It.rc b/dll/win32/cryptui/cryptui_It.rc index 5046ee40d99..3ca7e00abbe 100644 --- a/dll/win32/cryptui/cryptui_It.rc +++ b/dll/win32/cryptui/cryptui_It.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_CERTIFICATE "Certificato" IDS_CERTIFICATEINFORMATION "Informazioni sul certificato" @@ -176,7 +176,7 @@ STRINGTABLE DISCARDABLE IDS_EXPORT_PRIVATE_KEY_NON_EXPORTABLE "Nota: la chiave privata per questo certificato non è esportabile." } -IDD_GENERAL DIALOG DISCARDABLE 0, 0, 255, 236 +IDD_GENERAL DIALOG 0, 0, 255, 236 CAPTION "Generale" STYLE WS_VISIBLE FONT 8, "MS Shell Dlg" @@ -196,7 +196,7 @@ BEGIN PUSHBUTTON "&Annuncio dell'emittente", IDC_ISSUERSTATEMENT,177,216,70,14 END -IDD_DETAIL DIALOG DISCARDABLE 0, 0, 255, 236 +IDD_DETAIL DIALOG 0, 0, 255, 236 CAPTION "Dettagli" STYLE WS_VISIBLE FONT 8, "MS Shell Dlg" @@ -213,7 +213,7 @@ BEGIN PUSHBUTTON "&Copia su File...", IDC_EXPORT,177,216,70,14 END -IDD_HIERARCHY DIALOG DISCARDABLE 0, 0, 255, 236 +IDD_HIERARCHY DIALOG 0, 0, 255, 236 CAPTION "Percorso di certificazione" STYLE WS_VISIBLE FONT 8, "MS Shell Dlg" @@ -227,7 +227,7 @@ BEGIN WS_BORDER|ES_READONLY|ES_MULTILINE|WS_DISABLED,6,195,245,36 END -IDD_USERNOTICE DIALOG DISCARDABLE 0, 0, 255, 256 +IDD_USERNOTICE DIALOG 0, 0, 255, 256 CAPTION "Disclaimer" STYLE WS_VISIBLE FONT 8, "MS Shell Dlg" @@ -238,7 +238,7 @@ BEGIN PUSHBUTTON "Più %Informazioni", IDC_CPS,177,216,70,14 END -IDD_CERT_PROPERTIES_GENERAL DIALOG DISCARDABLE 0, 0, 255, 236 +IDD_CERT_PROPERTIES_GENERAL DIALOG 0, 0, 255, 236 CAPTION "Generale" STYLE WS_VISIBLE FONT 8, "MS Shell Dlg" @@ -260,7 +260,7 @@ BEGIN PUSHBUTTON "A&ggiungi Soggetto...", IDC_ADD_PURPOSE,184,194,60,14 END -IDD_ADD_CERT_PURPOSE DIALOG DISCARDABLE 0,0,200,68 +IDD_ADD_CERT_PURPOSE DIALOG 0,0,200,68 CAPTION "Aggiungi Soggetto" FONT 8, "MS Shell Dlg" BEGIN @@ -271,7 +271,7 @@ BEGIN PUSHBUTTON "Annulla", IDCANCEL, 100,48,60,14 END -IDD_SELECT_STORE DIALOG DISCARDABLE 0,0,200,136 +IDD_SELECT_STORE DIALOG 0,0,200,136 CAPTION "Seleziona il Deposito Certificati" FONT 8, "MS Shell Dlg" BEGIN @@ -284,7 +284,7 @@ BEGIN PUSHBUTTON "Annulla", IDCANCEL, 144,118,50,14 END -IDD_IMPORT_WELCOME DIALOG DISCARDABLE 0,0,317,143 +IDD_IMPORT_WELCOME DIALOG 0,0,317,143 CAPTION "Guida all'Importazione di Certificati" FONT 8, "MS Shell Dlg" BEGIN @@ -298,7 +298,7 @@ BEGIN -1, 115,103,195,8 END -IDD_IMPORT_FILE DIALOG DISCARDABLE 0,0,317,178 +IDD_IMPORT_FILE DIALOG 0,0,317,178 CAPTION "Guida all'Importazione di Certificati" FONT 8, "MS Shell Dlg" BEGIN @@ -315,7 +315,7 @@ BEGIN -1, 31,79,265,10 END -IDD_IMPORT_STORE DIALOG DISCARDABLE 0,0,317,143 +IDD_IMPORT_STORE DIALOG 0,0,317,143 CAPTION "Guida all'Importazione di Certificati" FONT 8, "MS Shell Dlg" BEGIN @@ -329,7 +329,7 @@ BEGIN PUSHBUTTON "&Sfoglia...", IDC_IMPORT_BROWSE_STORE, 236,49,60,14 END -IDD_IMPORT_FINISH DIALOG DISCARDABLE 0,0,317,178 +IDD_IMPORT_FINISH DIALOG 0,0,317,178 CAPTION "Guida all'Importazione di Certificati" FONT 8, "MS Shell Dlg" BEGIN @@ -344,7 +344,7 @@ BEGIN 115,67,174,100 END -IDD_CERT_MGR DIALOG DISCARDABLE 0,0,335,270 +IDD_CERT_MGR DIALOG 0,0,335,270 CAPTION "Certificati" FONT 8, "MS Shell Dlg" BEGIN @@ -365,7 +365,7 @@ BEGIN PUSHBUTTON "&Chiudi", IDCANCEL, 277,249,51,14, BS_DEFPUSHBUTTON END -IDD_CERT_MGR_ADVANCED DIALOG DISCARDABLE 0,0,248,176 +IDD_CERT_MGR_ADVANCED DIALOG 0,0,248,176 CAPTION "Opzioni Avanzate" FONT 8, "MS Shell Dlg" BEGIN @@ -380,7 +380,7 @@ BEGIN PUSHBUTTON "Annulla", IDCANCEL, 190,155,51,14 END -IDD_EXPORT_WELCOME DIALOG DISCARDABLE 0,0,317,143 +IDD_EXPORT_WELCOME DIALOG 0,0,317,143 CAPTION "Guida all'Esportazione del Certificato" FONT 8, "MS Shell Dlg" BEGIN @@ -394,7 +394,7 @@ BEGIN -1, 115,103,195,8 END -IDD_EXPORT_PRIVATE_KEY DIALOG DISCARDABLE 0,0,317,143 +IDD_EXPORT_PRIVATE_KEY DIALOG 0,0,317,143 CAPTION "Guida all'Esportazione del Certificato" FONT 8, "MS Shell Dlg" BEGIN @@ -407,7 +407,7 @@ BEGIN LTEXT "", IDC_EXPORT_PRIVATE_KEY_UNAVAILABLE, 21,60,200,24 END -IDD_EXPORT_PASSWORD DIALOG DISCARDABLE 0,0,317,143 +IDD_EXPORT_PASSWORD DIALOG 0,0,317,143 CAPTION "Guida all'Esportazione del Certificato" FONT 8, "MS Shell Dlg" BEGIN @@ -417,7 +417,7 @@ BEGIN EDITTEXT IDC_EXPORT_PASSWORD_CONFIRM, 21,45,208,14, ES_AUTOHSCROLL|WS_TABSTOP END -IDD_EXPORT_FORMAT DIALOG DISCARDABLE 0,0,317,143 +IDD_EXPORT_FORMAT DIALOG 0,0,317,143 CAPTION "Guida all'Esportazione del Certificato" FONT 8, "MS Shell Dlg" BEGIN @@ -442,7 +442,7 @@ BEGIN BS_AUTOCHECKBOX|WS_TABSTOP|WS_DISABLED END -IDD_EXPORT_FILE DIALOG DISCARDABLE 0,0,317,143 +IDD_EXPORT_FILE DIALOG 0,0,317,143 CAPTION "Guida all'Esportazione del Certificato" FONT 8, "MS Shell Dlg" BEGIN @@ -451,7 +451,7 @@ BEGIN PUSHBUTTON "%Sfoglia...", IDC_EXPORT_BROWSE_FILE, 236,11,60,14 END -IDD_EXPORT_FINISH DIALOG DISCARDABLE 0,0,317,178 +IDD_EXPORT_FINISH DIALOG 0,0,317,178 CAPTION "Guida all'Esportazione del Certificato" FONT 8, "MS Shell Dlg" BEGIN diff --git a/dll/win32/cryptui/cryptui_Ko.rc b/dll/win32/cryptui/cryptui_Ko.rc index eaa6222f160..27b1c4bda2d 100644 --- a/dll/win32/cryptui/cryptui_Ko.rc +++ b/dll/win32/cryptui/cryptui_Ko.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_CERTIFICATE "" IDS_CERTIFICATEINFORMATION " " @@ -175,7 +175,7 @@ STRINGTABLE DISCARDABLE } -IDD_GENERAL DIALOG DISCARDABLE 0, 0, 255, 236 +IDD_GENERAL DIALOG 0, 0, 255, 236 CAPTION "Ϲ" STYLE WS_VISIBLE FONT 8, "MS Shell Dlg" @@ -195,7 +195,7 @@ BEGIN PUSHBUTTON " (&S)", IDC_ISSUERSTATEMENT,177,216,70,14 END -IDD_DETAIL DIALOG DISCARDABLE 0, 0, 255, 236 +IDD_DETAIL DIALOG 0, 0, 255, 236 CAPTION "ڼ" STYLE WS_VISIBLE FONT 8, "MS Shell Dlg" @@ -212,7 +212,7 @@ BEGIN PUSHBUTTON "Ϸ (&C)...", IDC_EXPORT,177,216,70,14 END -IDD_HIERARCHY DIALOG DISCARDABLE 0, 0, 255, 236 +IDD_HIERARCHY DIALOG 0, 0, 255, 236 CAPTION " " STYLE WS_VISIBLE FONT 8, "MS Shell Dlg" @@ -226,7 +226,7 @@ BEGIN WS_BORDER|ES_READONLY|ES_MULTILINE|WS_DISABLED,6,195,245,36 END -IDD_USERNOTICE DIALOG DISCARDABLE 0, 0, 255, 256 +IDD_USERNOTICE DIALOG 0, 0, 255, 256 CAPTION "ź" STYLE WS_VISIBLE FONT 8, "MS Shell Dlg" @@ -237,7 +237,7 @@ BEGIN PUSHBUTTON "߰ (&I)", IDC_CPS,177,216,70,14 END -IDD_CERT_PROPERTIES_GENERAL DIALOG DISCARDABLE 0, 0, 255, 236 +IDD_CERT_PROPERTIES_GENERAL DIALOG 0, 0, 255, 236 CAPTION "Ϲ" STYLE WS_VISIBLE FONT 8, "MS Shell Dlg" @@ -258,7 +258,7 @@ BEGIN PUSHBUTTON "뵵 ߰(&)...", IDC_ADD_PURPOSE,184,194,60,14 END -IDD_ADD_CERT_PURPOSE DIALOG DISCARDABLE 0,0,200,68 +IDD_ADD_CERT_PURPOSE DIALOG 0,0,200,68 CAPTION "뵵 ߰" FONT 8, "MS Shell Dlg" BEGIN @@ -268,7 +268,7 @@ BEGIN PUSHBUTTON "", IDCANCEL, 100,48,60,14 END -IDD_SELECT_STORE DIALOG DISCARDABLE 0,0,200,136 +IDD_SELECT_STORE DIALOG 0,0,200,136 CAPTION " " FONT 8, "MS Shell Dlg" BEGIN @@ -279,7 +279,7 @@ BEGIN PUSHBUTTON "", IDCANCEL, 144,118,50,14 END -IDD_IMPORT_WELCOME DIALOG DISCARDABLE 0,0,317,143 +IDD_IMPORT_WELCOME DIALOG 0,0,317,143 CAPTION " " FONT 8, "MS Shell Dlg" BEGIN @@ -289,7 +289,7 @@ BEGIN LTEXT "Ϸ, ŬϽʽÿ.",-1, 115,103,195,8 END -IDD_IMPORT_FILE DIALOG DISCARDABLE 0,0,317,178 +IDD_IMPORT_FILE DIALOG 0,0,317,178 CAPTION " " FONT 8, "MS Shell Dlg" BEGIN @@ -302,7 +302,7 @@ BEGIN LTEXT "Microsoft (.sst)",-1, 31,79,265,10 END -IDD_IMPORT_STORE DIALOG DISCARDABLE 0,0,317,143 +IDD_IMPORT_STORE DIALOG 0,0,317,143 CAPTION " " FONT 8, "MS Shell Dlg" BEGIN @@ -313,7 +313,7 @@ BEGIN PUSHBUTTON "ã(&R)...", IDC_IMPORT_BROWSE_STORE, 236,49,60,14 END -IDD_IMPORT_FINISH DIALOG DISCARDABLE 0,0,317,178 +IDD_IMPORT_FINISH DIALOG 0,0,317,178 CAPTION " " FONT 8, "MS Shell Dlg" BEGIN @@ -325,7 +325,7 @@ BEGIN 115,67,174,100 END -IDD_CERT_MGR DIALOG DISCARDABLE 0,0,335,270 +IDD_CERT_MGR DIALOG 0,0,335,270 CAPTION "" FONT 8, "MS Shell Dlg" BEGIN @@ -346,7 +346,7 @@ BEGIN PUSHBUTTON "ݱ(&C)", IDCANCEL, 277,249,51,14, BS_DEFPUSHBUTTON END -IDD_CERT_MGR_ADVANCED DIALOG DISCARDABLE 0,0,248,176 +IDD_CERT_MGR_ADVANCED DIALOG 0,0,248,176 CAPTION "߰ ɼ" FONT 8, "MS Shell Dlg" BEGIN @@ -362,7 +362,7 @@ BEGIN END -IDD_EXPORT_WELCOME DIALOG DISCARDABLE 0,0,317,143 +IDD_EXPORT_WELCOME DIALOG 0,0,317,143 CAPTION " " FONT 8, "MS Shell Dlg" BEGIN @@ -376,7 +376,7 @@ BEGIN -1, 115,103,195,8 END -IDD_EXPORT_PRIVATE_KEY DIALOG DISCARDABLE 0,0,317,143 +IDD_EXPORT_PRIVATE_KEY DIALOG 0,0,317,143 CAPTION " " FONT 8, "MS Shell Dlg" BEGIN @@ -389,7 +389,7 @@ BEGIN LTEXT "", IDC_EXPORT_PRIVATE_KEY_UNAVAILABLE, 21,60,200,24 END -IDD_EXPORT_PASSWORD DIALOG DISCARDABLE 0,0,317,143 +IDD_EXPORT_PASSWORD DIALOG 0,0,317,143 CAPTION " " FONT 8, "MS Shell Dlg" BEGIN @@ -399,7 +399,7 @@ LTEXT " EDITTEXT IDC_EXPORT_PASSWORD_CONFIRM, 21,45,208,14, ES_AUTOHSCROLL|WS_TABSTOP END -IDD_EXPORT_FORMAT DIALOG DISCARDABLE 0,0,317,143 +IDD_EXPORT_FORMAT DIALOG 0,0,317,143 CAPTION " " FONT 8, "MS Shell Dlg" BEGIN @@ -424,7 +424,7 @@ BEGIN BS_AUTOCHECKBOX|WS_TABSTOP|WS_DISABLED END -IDD_EXPORT_FILE DIALOG DISCARDABLE 0,0,317,143 +IDD_EXPORT_FILE DIALOG 0,0,317,143 CAPTION " " FONT 8, "MS Shell Dlg" BEGIN @@ -433,7 +433,7 @@ BEGIN PUSHBUTTON "ã(&R)...", IDC_EXPORT_BROWSE_FILE, 236,11,60,14 END -IDD_EXPORT_FINISH DIALOG DISCARDABLE 0,0,317,178 +IDD_EXPORT_FINISH DIALOG 0,0,317,178 CAPTION " " FONT 8, "MS Shell Dlg" BEGIN diff --git a/dll/win32/cryptui/cryptui_Lt.rc b/dll/win32/cryptui/cryptui_Lt.rc index ee02eabf018..bfba1babbea 100644 --- a/dll/win32/cryptui/cryptui_Lt.rc +++ b/dll/win32/cryptui/cryptui_Lt.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_CERTIFICATE "Liudijimas" IDS_CERTIFICATEINFORMATION "Liudijimo informacija" @@ -176,7 +176,7 @@ STRINGTABLE DISCARDABLE IDS_EXPORT_PRIVATE_KEY_NON_EXPORTABLE "Pastaba: šio liudijimo privatusis raktas neišeksportuojamas." } -IDD_GENERAL DIALOG DISCARDABLE 0, 0, 255, 236 +IDD_GENERAL DIALOG 0, 0, 255, 236 CAPTION "Bendras" STYLE WS_VISIBLE FONT 8, "MS Shell Dlg" @@ -196,7 +196,7 @@ BEGIN PUSHBUTTON "Išdavėjo &teiginys", IDC_ISSUERSTATEMENT,177,216,70,14 END -IDD_DETAIL DIALOG DISCARDABLE 0, 0, 255, 236 +IDD_DETAIL DIALOG 0, 0, 255, 236 CAPTION "Išsamiau" STYLE WS_VISIBLE FONT 8, "MS Shell Dlg" @@ -213,7 +213,7 @@ BEGIN PUSHBUTTON "&Kopijuoti į failą...", IDC_EXPORT,167,216,80,14 END -IDD_HIERARCHY DIALOG DISCARDABLE 0, 0, 255, 236 +IDD_HIERARCHY DIALOG 0, 0, 255, 236 CAPTION "Liudijimo kelias" STYLE WS_VISIBLE FONT 8, "MS Shell Dlg" @@ -227,7 +227,7 @@ BEGIN WS_BORDER|ES_READONLY|ES_MULTILINE|WS_DISABLED,6,195,245,36 END -IDD_USERNOTICE DIALOG DISCARDABLE 0, 0, 255, 256 +IDD_USERNOTICE DIALOG 0, 0, 255, 256 CAPTION "Garantijų nedavimas" STYLE WS_VISIBLE FONT 8, "MS Shell Dlg" @@ -238,7 +238,7 @@ BEGIN PUSHBUTTON "Daugiau &informacijos", IDC_CPS,172,216,75,14 END -IDD_CERT_PROPERTIES_GENERAL DIALOG DISCARDABLE 0, 0, 255, 236 +IDD_CERT_PROPERTIES_GENERAL DIALOG 0, 0, 255, 236 CAPTION "Bendras" STYLE WS_VISIBLE FONT 8, "MS Shell Dlg" @@ -260,7 +260,7 @@ BEGIN PUSHBUTTON "Pridėti &paskirtį...", IDC_ADD_PURPOSE,184,194,60,14 END -IDD_ADD_CERT_PURPOSE DIALOG DISCARDABLE 0,0,200,68 +IDD_ADD_CERT_PURPOSE DIALOG 0,0,200,68 CAPTION "Pridėti paskirtį" FONT 8, "MS Shell Dlg" BEGIN @@ -271,7 +271,7 @@ BEGIN PUSHBUTTON "Atsisakyti", IDCANCEL, 100,48,60,14 END -IDD_SELECT_STORE DIALOG DISCARDABLE 0,0,200,136 +IDD_SELECT_STORE DIALOG 0,0,200,136 CAPTION "Išrinkite liudijimų saugyklą" FONT 8, "MS Shell Dlg" BEGIN @@ -284,7 +284,7 @@ BEGIN PUSHBUTTON "Atsisakyti", IDCANCEL, 144,118,50,14 END -IDD_IMPORT_WELCOME DIALOG DISCARDABLE 0,0,317,143 +IDD_IMPORT_WELCOME DIALOG 0,0,317,143 CAPTION "Liudijimo importo vediklis" FONT 8, "MS Shell Dlg" BEGIN @@ -298,7 +298,7 @@ BEGIN -1, 115,103,195,8 END -IDD_IMPORT_FILE DIALOG DISCARDABLE 0,0,317,143 +IDD_IMPORT_FILE DIALOG 0,0,317,143 CAPTION "Liudijimo importo vediklis" FONT 8, "MS Shell Dlg" BEGIN @@ -315,7 +315,7 @@ BEGIN -1, 31,79,265,10 END -IDD_IMPORT_STORE DIALOG DISCARDABLE 0,0,317,143 +IDD_IMPORT_STORE DIALOG 0,0,317,143 CAPTION "Liudijimo importo vediklis" FONT 8, "MS Shell Dlg" BEGIN @@ -329,7 +329,7 @@ BEGIN PUSHBUTTON "&Parinkti...", IDC_IMPORT_BROWSE_STORE, 236,49,60,14 END -IDD_IMPORT_FINISH DIALOG DISCARDABLE 0,0,317,143 +IDD_IMPORT_FINISH DIALOG 0,0,317,143 CAPTION "Liudijimo importo vediklis" FONT 8, "MS Shell Dlg" BEGIN @@ -344,7 +344,7 @@ BEGIN 115,67,174,100 END -IDD_CERT_MGR DIALOG DISCARDABLE 0,0,335,270 +IDD_CERT_MGR DIALOG 0,0,335,270 CAPTION "Liudijimai" FONT 8, "MS Shell Dlg" BEGIN @@ -365,7 +365,7 @@ BEGIN PUSHBUTTON "&Užverti", IDCANCEL, 277,249,51,14, BS_DEFPUSHBUTTON END -IDD_CERT_MGR_ADVANCED DIALOG DISCARDABLE 0,0,248,176 +IDD_CERT_MGR_ADVANCED DIALOG 0,0,248,176 CAPTION "Išsamios parinktys" FONT 8, "MS Shell Dlg" BEGIN @@ -380,7 +380,7 @@ BEGIN PUSHBUTTON "Atsisakyti", IDCANCEL, 190,155,51,14 END -IDD_EXPORT_WELCOME DIALOG DISCARDABLE 0,0,317,143 +IDD_EXPORT_WELCOME DIALOG 0,0,317,143 CAPTION "Liudijimo eksporto vediklis" FONT 8, "MS Shell Dlg" BEGIN @@ -394,7 +394,7 @@ BEGIN -1, 115,103,195,8 END -IDD_EXPORT_PRIVATE_KEY DIALOG DISCARDABLE 0,0,317,143 +IDD_EXPORT_PRIVATE_KEY DIALOG 0,0,317,143 CAPTION "Liudijimo eksporto vediklis" FONT 8, "MS Shell Dlg" BEGIN @@ -407,7 +407,7 @@ BEGIN LTEXT "", IDC_EXPORT_PRIVATE_KEY_UNAVAILABLE, 21,60,200,24 END -IDD_EXPORT_PASSWORD DIALOG DISCARDABLE 0,0,317,143 +IDD_EXPORT_PASSWORD DIALOG 0,0,317,143 CAPTION "Liudijimo eksporto vediklis" FONT 8, "MS Shell Dlg" BEGIN @@ -417,7 +417,7 @@ BEGIN EDITTEXT IDC_EXPORT_PASSWORD_CONFIRM, 21,45,208,14, ES_AUTOHSCROLL|WS_TABSTOP END -IDD_EXPORT_FORMAT DIALOG DISCARDABLE 0,0,317,143 +IDD_EXPORT_FORMAT DIALOG 0,0,317,143 CAPTION "Liudijimo eksporto vediklis" FONT 8, "MS Shell Dlg" BEGIN @@ -442,7 +442,7 @@ BEGIN BS_AUTOCHECKBOX|WS_TABSTOP|WS_DISABLED END -IDD_EXPORT_FILE DIALOG DISCARDABLE 0,0,317,143 +IDD_EXPORT_FILE DIALOG 0,0,317,143 CAPTION "Liudijimo eksporto vediklis" FONT 8, "MS Shell Dlg" BEGIN @@ -451,7 +451,7 @@ BEGIN PUSHBUTTON "&Parinkti...", IDC_EXPORT_BROWSE_FILE, 236,11,60,14 END -IDD_EXPORT_FINISH DIALOG DISCARDABLE 0,0,317,143 +IDD_EXPORT_FINISH DIALOG 0,0,317,143 CAPTION "Liudijimo eksporto vediklis" FONT 8, "MS Shell Dlg" BEGIN diff --git a/dll/win32/cryptui/cryptui_Nl.rc b/dll/win32/cryptui/cryptui_Nl.rc index 3a2d2edfb43..fdf5af153fa 100644 --- a/dll/win32/cryptui/cryptui_Nl.rc +++ b/dll/win32/cryptui/cryptui_Nl.rc @@ -24,7 +24,7 @@ LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_CERTIFICATE "Certificaat" IDS_CERTIFICATEINFORMATION "Certificaat informatie" @@ -175,7 +175,7 @@ STRINGTABLE DISCARDABLE IDS_EXPORT_PRIVATE_KEY_NON_EXPORTABLE "Note: De persoonlijke sleutel voor dit certificaat kan niet geëxporteerd worden." } -IDD_GENERAL DIALOG DISCARDABLE 0, 0, 255, 236 +IDD_GENERAL DIALOG 0, 0, 255, 236 CAPTION "Algemeen" STYLE WS_VISIBLE FONT 8, "MS Shell Dlg" @@ -195,7 +195,7 @@ BEGIN PUSHBUTTON "Uitgevers &verklaring", IDC_ISSUERSTATEMENT,177,216,70,14 END -IDD_DETAIL DIALOG DISCARDABLE 0, 0, 255, 236 +IDD_DETAIL DIALOG 0, 0, 255, 236 CAPTION "Details" STYLE WS_VISIBLE FONT 8, "MS Shell Dlg" @@ -212,7 +212,7 @@ BEGIN PUSHBUTTON "&Kopieer naar bestand...", IDC_EXPORT,177,216,70,14 END -IDD_HIERARCHY DIALOG DISCARDABLE 0, 0, 255, 236 +IDD_HIERARCHY DIALOG 0, 0, 255, 236 CAPTION "Certificatie pad" STYLE WS_VISIBLE FONT 8, "MS Shell Dlg" @@ -226,7 +226,7 @@ BEGIN WS_BORDER|ES_READONLY|ES_MULTILINE|WS_DISABLED,6,195,245,36 END -IDD_USERNOTICE DIALOG DISCARDABLE 0, 0, 255, 256 +IDD_USERNOTICE DIALOG 0, 0, 255, 256 CAPTION "Disclaimer" STYLE WS_VISIBLE FONT 8, "MS Shell Dlg" @@ -237,7 +237,7 @@ BEGIN PUSHBUTTON "Meer &informatie", IDC_CPS,177,216,70,14 END -IDD_CERT_PROPERTIES_GENERAL DIALOG DISCARDABLE 0, 0, 255, 236 +IDD_CERT_PROPERTIES_GENERAL DIALOG 0, 0, 255, 236 CAPTION "Algemeen" STYLE WS_VISIBLE FONT 8, "MS Shell Dlg" @@ -259,7 +259,7 @@ BEGIN PUSHBUTTON "Voeg &doeleinde toe...", IDC_ADD_PURPOSE,184,194,60,14 END -IDD_ADD_CERT_PURPOSE DIALOG DISCARDABLE 0,0,200,68 +IDD_ADD_CERT_PURPOSE DIALOG 0,0,200,68 CAPTION "Voeg doeleinde toe" FONT 8, "MS Shell Dlg" BEGIN @@ -270,7 +270,7 @@ BEGIN PUSHBUTTON "Annuleren", IDCANCEL, 100,48,60,14 END -IDD_SELECT_STORE DIALOG DISCARDABLE 0,0,200,136 +IDD_SELECT_STORE DIALOG 0,0,200,136 CAPTION "Selecteer certificatenopslag" FONT 8, "MS Shell Dlg" BEGIN @@ -283,7 +283,7 @@ BEGIN PUSHBUTTON "Annuleren", IDCANCEL, 144,118,50,14 END -IDD_IMPORT_WELCOME DIALOG DISCARDABLE 0,0,317,143 +IDD_IMPORT_WELCOME DIALOG 0,0,317,143 CAPTION "Certificaat importeerhulp" FONT 8, "MS Shell Dlg" BEGIN @@ -297,7 +297,7 @@ BEGIN -1, 115,119,195,8 END -IDD_IMPORT_FILE DIALOG DISCARDABLE 0,0,317,143 +IDD_IMPORT_FILE DIALOG 0,0,317,143 CAPTION "Certificaat importeerhulp" FONT 8, "MS Shell Dlg" BEGIN @@ -314,7 +314,7 @@ BEGIN -1, 31,79,265,10 END -IDD_IMPORT_STORE DIALOG DISCARDABLE 0,0,317,143 +IDD_IMPORT_STORE DIALOG 0,0,317,143 CAPTION "Certificaat importeerhulp" FONT 8, "MS Shell Dlg" BEGIN @@ -328,7 +328,7 @@ BEGIN PUSHBUTTON "B&laderen...", IDC_IMPORT_BROWSE_STORE, 236,49,60,14 END -IDD_IMPORT_FINISH DIALOG DISCARDABLE 0,0,317,143 +IDD_IMPORT_FINISH DIALOG 0,0,317,143 CAPTION "Certificaat importeerhulp" FONT 8, "MS Shell Dlg" BEGIN @@ -343,7 +343,7 @@ BEGIN 115,67,174,100 END -IDD_CERT_MGR DIALOG DISCARDABLE 0,0,335,270 +IDD_CERT_MGR DIALOG 0,0,335,270 CAPTION "Certificaten" FONT 8, "MS Shell Dlg" BEGIN @@ -364,7 +364,7 @@ BEGIN PUSHBUTTON "&Sluiten", IDCANCEL, 277,249,51,14, BS_DEFPUSHBUTTON END -IDD_CERT_MGR_ADVANCED DIALOG DISCARDABLE 0,0,248,176 +IDD_CERT_MGR_ADVANCED DIALOG 0,0,248,176 CAPTION "Geavanceerde opties" FONT 8, "MS Shell Dlg" BEGIN @@ -379,7 +379,7 @@ BEGIN PUSHBUTTON "Annuleren", IDCANCEL, 190,155,51,14 END -IDD_EXPORT_WELCOME DIALOG DISCARDABLE 0,0,317,143 +IDD_EXPORT_WELCOME DIALOG 0,0,317,143 CAPTION "Certificaat exporteerhulp" FONT 8, "MS Shell Dlg" BEGIN @@ -393,7 +393,7 @@ BEGIN -1, 115,119,195,8 END -IDD_EXPORT_PRIVATE_KEY DIALOG DISCARDABLE 0,0,317,143 +IDD_EXPORT_PRIVATE_KEY DIALOG 0,0,317,143 CAPTION "Certificaat exporteerhulp" FONT 8, "MS Shell Dlg" BEGIN @@ -406,7 +406,7 @@ BEGIN LTEXT "", IDC_EXPORT_PRIVATE_KEY_UNAVAILABLE, 21,60,200,24 END -IDD_EXPORT_PASSWORD DIALOG DISCARDABLE 0,0,317,143 +IDD_EXPORT_PASSWORD DIALOG 0,0,317,143 CAPTION "Certificaat exporteerhulp" FONT 8, "MS Shell Dlg" BEGIN @@ -416,7 +416,7 @@ BEGIN EDITTEXT IDC_EXPORT_PASSWORD_CONFIRM, 21,45,208,14, ES_AUTOHSCROLL|WS_TABSTOP END -IDD_EXPORT_FORMAT DIALOG DISCARDABLE 0,0,317,143 +IDD_EXPORT_FORMAT DIALOG 0,0,317,143 CAPTION "Certificaat exporteerhulp" FONT 8, "MS Shell Dlg" BEGIN @@ -441,7 +441,7 @@ BEGIN BS_AUTOCHECKBOX|WS_TABSTOP|WS_DISABLED END -IDD_EXPORT_FILE DIALOG DISCARDABLE 0,0,317,143 +IDD_EXPORT_FILE DIALOG 0,0,317,143 CAPTION "Certificaat exporteerhulp" FONT 8, "MS Shell Dlg" BEGIN @@ -450,7 +450,7 @@ BEGIN PUSHBUTTON "&Bladeren...", IDC_EXPORT_BROWSE_FILE, 236,11,60,14 END -IDD_EXPORT_FINISH DIALOG DISCARDABLE 0,0,317,143 +IDD_EXPORT_FINISH DIALOG 0,0,317,143 CAPTION "Certificaat exporteerhulp" FONT 8, "MS Shell Dlg" BEGIN diff --git a/dll/win32/cryptui/cryptui_No.rc b/dll/win32/cryptui/cryptui_No.rc new file mode 100644 index 00000000000..0764989ee2e --- /dev/null +++ b/dll/win32/cryptui/cryptui_No.rc @@ -0,0 +1,466 @@ +/* + * cryptui dll resources (Norwegian Bokmål) + * + * Copyright 2010 Alexander N. Sørnes + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include "cryptuires.h" + +#pragma code_page(65001) + +LANGUAGE LANG_NORWEGIAN, SUBLANG_NORWEGIAN_BOKMAL + +STRINGTABLE +{ + IDS_CERTIFICATE "Sertifikat" + IDS_CERTIFICATEINFORMATION "Sertifikatinformasjon" + IDS_CERT_INFO_BAD_SIG "Dette sertifikatet har en ugyldig signatur. Sertifikatet kan ha blitt endret eller skadet." + IDS_CERT_INFO_UNTRUSTED_CA "Dette rotsertifikatet er ikke tiltrodd. Legg det til i systemets lagringssted for tiltrodde sertifikater hvis du ønsker å stole på det." + IDS_CERT_INFO_UNTRUSTED_ROOT "Dette sertifikatet kunne ikke godkjennes med et rotsertifikat." + IDS_CERT_INFO_PARTIAL_CHAIN "Klarte ikke finne sertifikatets utsteder." + IDS_CERT_INFO_BAD_PURPOSES "Klarte ikke godkjenne alle formålene til dette sertifikatet." + IDS_CERT_INFO_PURPOSES "Dette sertifikatet er ment for følgende formål:" + IDS_SUBJECT_HEADING "Utstedt til: " + IDS_ISSUER_HEADING "Utstedt av: " + IDS_VALID_FROM "Gyldig fra " + IDS_VALID_TO " til " + IDS_CERTIFICATE_BAD_SIGNATURE "Dette sertifikatet har en ugyldig signatur." + IDS_CERTIFICATE_BAD_TIME "Dette sertifikatet har utgått eller er ikke gyldig ennå." + IDS_CERTIFICATE_BAD_TIMENEST "Dette sertifikatets gyldighetsperiode er lenger enn utstederens." + IDS_CERTIFICATE_REVOKED "Dette sertifikatet ble tilbakekalt av utstederen." + IDS_CERTIFICATE_VALID "Dette sertifikatet er OK." + IDS_FIELD "Felt" + IDS_VALUE "Verdi" + IDS_FIELDS_ALL "" + IDS_FIELDS_V1 "Kun versjon 1 felt" + IDS_FIELDS_EXTENSIONS "Kun utvidelser" + IDS_FIELDS_CRITICAL_EXTENSIONS "Kun kritiske utvidelser" + IDS_FIELDS_PROPERTIES "Kun egenskaper" + IDS_FIELD_VERSION "Versjon" + IDS_FIELD_SERIAL_NUMBER "Serienummer" + IDS_FIELD_ISSUER "Utsteder" + IDS_FIELD_VALID_FROM "Gyldig fra" + IDS_FIELD_VALID_TO "Gyldig til" + IDS_FIELD_SUBJECT "Emne" + IDS_FIELD_PUBLIC_KEY "Offentlig nøkkel" + IDS_FIELD_PUBLIC_KEY_FORMAT "%s (%d bits)" + IDS_PROP_HASH "SHA1-kode" + IDS_PROP_ENHKEY_USAGE "Utvidet nøkkelbruk (egenskap)" + IDS_PROP_FRIENDLY_NAME "Vennlig navn" + IDS_PROP_DESCRIPTION "Beskrivelse" + IDS_CERTIFICATE_PROPERTIES "Sertifikategenskaper" + IDS_CERTIFICATE_PURPOSE_ERROR "Angi en OID på formen 1.2.3.4" + IDS_CERTIFICATE_PURPOSE_EXISTS "OID'en du oppgav finnes allerede." + IDS_SELECT_STORE_TITLE "Velg sertifikatlager" + IDS_SELECT_STORE "Velg et lagringssted for sertifikater." + IDS_IMPORT_WIZARD "Veiviser for import av sertifikater" + IDS_IMPORT_TYPE_MISMATCH "Filen inneholder objekter som ikke passer de oppgitte kriteriene. Velg en annen fil." + IDS_IMPORT_FILE_TITLE "Fil å importere" + IDS_IMPORT_FILE_SUBTITLE "Velg filen du ønsker å importere." + IDS_IMPORT_STORE_TITLE "Sertifikatlager" + IDS_IMPORT_STORE_SUBTITLE "Sertifikatlagre er samlinger av sertifikater, tilbakekallingslister og lister over tiltrodde sertifikater." + IDS_IMPORT_FILTER_CERT "X.509-sertifikat (*.cer; *.crt)" + IDS_IMPORT_FILTER_PFX "Personlig informasjonsutveksling (*.pfx; *.p12)" + IDS_IMPORT_FILTER_CRL "Liste over tilbakekalte sertifikater (*.crl)" + IDS_IMPORT_FILTER_CTL "Liste over tiltrodde sertifikater (*.stl)" + IDS_IMPORT_FILTER_SERIALIZED_STORE "Microsoft Serialized Certificate Store (*.sst)" + IDS_IMPORT_FILTER_CMS "CMS/PKCS #7 meldinger (*.spc; *.p7b)" + IDS_IMPORT_FILTER_ALL "Alle filer (*.*)" + IDS_IMPORT_EMPTY_FILE "Velg en fil." + IDS_IMPORT_BAD_FORMAT "Filformatet ble ikke gjenkjent. Velg en annen fil." + IDS_IMPORT_OPEN_FAILED "Klarte ikke åpne " + IDS_IMPORT_DEST_DETERMINED "Bestemt av programmet" + IDS_IMPORT_SELECT_STORE "Velg en lagringsplass" + IDS_IMPORT_STORE_SELECTION "Sertifikatlager valgt" + IDS_IMPORT_DEST_AUTOMATIC "Bestemt av proggramet" + IDS_IMPORT_FILE "Fil" + IDS_IMPORT_CONTENT "Innhold" + IDS_IMPORT_CONTENT_CERT "Sertifikat" + IDS_IMPORT_CONTENT_CRL "Liste over tilbakekalte sertifikater" + IDS_IMPORT_CONTENT_CTL "Liste over tiltrodde sertifikater" + IDS_IMPORT_CONTENT_CMS "CMS/PKCS #7 meldinger" + IDS_IMPORT_CONTENT_PFX "Personlig informasjonsutveksling" + IDS_IMPORT_CONTENT_STORE "Sertifikatlager" + IDS_IMPORT_SUCCEEDED "Importeringen var vellykket." + IDS_IMPORT_FAILED "Klarte ikke importere." + IDS_WIZARD_TITLE_FONT "Arial" + IDS_PURPOSE_ALL "" + IDS_PURPOSE_ADVANCED "" + IDS_SUBJECT_COLUMN "Utstedt til" + IDS_ISSUER_COLUMN "Utstedt av" + IDS_EXPIRATION_COLUMN "Utløpsdato" + IDS_FRIENDLY_NAME_COLUMN "Vennlig navn" + IDS_ALLOWED_PURPOSE_ALL "" + IDS_ALLOWED_PURPOSE_NONE "" + IDS_WARN_REMOVE_MY "Du vil ikke lenger ha mulighet til å dekryptere meldinger med dette sertifikatet, eller til å signere med det.\nEr du sikker på at du vil fjerne dette sertifikatet?" + IDS_WARN_REMOVE_PLURAL_MY "Du vil ikke lenger ha mulighet til å dekryptere meldinger med disse sertifikatene, eller til å signere med dem.\nEr du sikker på at du vil fjerne disse sertifikatene?" + IDS_WARN_REMOVE_ADDRESSBOOK "Du vil ikke lenger ha mulighet til å kryptere meldinger med dette sertifikatet, eller til å kontrollere meldinger som er signert med det.\nEr du sikker på at du vil fjerne dette sertifikatet?" + IDS_WARN_REMOVE_PLURAL_ADDRESSBOOK "Du vil ikke lenger ha mulighet til å kryptere meldinger med disse sertifikatene, eller til å kontrollere meldinger som er signert med dem.\nEr du sikker på at du vil fjerne disse sertifikatene?" + IDS_WARN_REMOVE_CA "Sertifikater utstedt av denne sertifiseringsenheten vil ikke lenger være tiltrodd.\nEr du sikker på at du vil fjerne dette sertifikatet?" + IDS_WARN_REMOVE_PLURAL_CA "Sertifikater utstedt av disse sertifiseringsenhetene vil ikke lenger være tiltrodde.\nEr du sikker på at du vil fjerne disse sertifikatene?" + IDS_WARN_REMOVE_ROOT "Sertifikater utstedt av denne rotsertifikatenheten, eller underenheter av denne, vil ikke lenger være tiltrodd.\nEr du sikker på at du vil fjerne dette rotsertifikatet?" + IDS_WARN_REMOVE_PLURAL_ROOT "Sertifikater utstedt av disse rotsertifikatenhetene, eller underenheter av disse, vil ikke lenger være tiltrodde.\nEr du sikker på at du vil fjerne disse rotsertifikatene?" + IDS_WARN_REMOVE_TRUSTEDPUBLISHER "Programvare signert av denne utgiveren vil ikke lenger være tiltrodd.\nEr du sikker på at du vil fjerne dette sertifikatet?" + IDS_WARN_REMOVE_PLURAL_TRUSTEDPUBLISHER "Programvare signert av disse utgiverne vil ikke lenger være tiltrodd.\nEr du sikker på at du vil fjerne disse sertifikatene?" + IDS_WARN_REMOVE_DEFAULT "Er du sikker på at du vil fjerne dette sertifikatet?" + IDS_WARN_REMOVE_PLURAL_DEFAULT "Er du sikker på at du vil fjerne disse sertifikatene?" + IDS_CERT_MGR "Sertifikater" + IDS_FRIENDLY_NAME_NONE "" + IDS_PURPOSE_SERVER_AUTH "Kontrollerer identiteten til en ekstern datamaskin" + IDS_PURPOSE_CLIENT_AUTH "Bekrefter din identitet overfor en ekstern datamaskin" + IDS_PURPOSE_CODE_SIGNING "Forsikrer at programvare kommer fra den originale utgiveren\nBeskytter programvare mot endringer" + IDS_PURPOSE_EMAIL_PROTECTION "Beskytter e-postmeldinger" + IDS_PURPOSE_IPSEC "Muliggjør sikker kommunikasjon over Internett" + IDS_PURPOSE_TIMESTAMP_SIGNING "Gjør det mulig å signere data med klokkeslett" + IDS_PURPOSE_CTL_USAGE_SIGNING "Gjør det mulig å signere en liste over tiltrodde sertifikater digitalt" + IDS_PURPOSE_EFS "Gjør det mulig å kryptere data på disken" + IDS_PURPOSE_EFS_RECOVERY "Filgjenoppretting" + IDS_PURPOSE_WHQL "Kontroll av maskinvaredrivere for Windows" + IDS_PURPOSE_NT5 "Kontroll av systemkomponenter for Windows" + IDS_PURPOSE_OEM_WHQL "Kontroll av Windows-komponenter fra PC-leverandører" + IDS_PURPOSE_EMBEDDED_NT "Kontroll av innebygde Windows-komponenter" + IDS_PURPOSE_ROOT_LIST_SIGNER "Rotsignerer for lister" + IDS_PURPOSE_QUALIFIED_SUBORDINATION "Kvalifisert underenhet" + IDS_PURPOSE_KEY_RECOVERY "Gjenoppretting av nøkler" + IDS_PURPOSE_DOCUMENT_SIGNING "Dokumentsignering" + IDS_PURPOSE_LIFETIME_SIGNING "Livstidssignering" + IDS_PURPOSE_DRM "Kontroll av opphavsrett" + IDS_PURPOSE_LICENSES "Lisenser for nøkkelpakker" + IDS_PURPOSE_LICENSE_SERVER "Kontroll av lisenstjener" + IDS_PURPOSE_ENROLLMENT_AGENT "Agent for sertifikatforespørsler" + IDS_PURPOSE_SMARTCARD_LOGON "Smart Card-pålogging" + IDS_PURPOSE_CA_EXCHANGE "Arkivering av private nøkler" + IDS_PURPOSE_KEY_RECOVERY_AGENT "Agent for gjenoppretting av nøkler" + IDS_PURPOSE_DS_EMAIL_REPLICATION "Kopiering av e-post fra katalogtjenester" + IDS_EXPORT_WIZARD "Veiviser for eksport av sertifikater" + IDS_EXPORT_FORMAT_TITLE "Eksportformat" + IDS_EXPORT_FORMAT_SUBTITLE "Velg formatet du vil lagre innholdet i." + IDS_EXPORT_FILE_TITLE "Filnavn" + IDS_EXPORT_FILE_SUBTITLE "Angi navnet på filen som innholdet skal lagres i." + IDS_EXPORT_FILE_EXISTS "Filen finnes fra før. Vil du erstatte den?" + IDS_EXPORT_FILTER_CERT "DER-kodet binær X.509 (*.cer)" + IDS_EXPORT_FILTER_BASE64_CERT "Base64-kodet X.509 (*.cer)" + IDS_EXPORT_FILTER_CRL "Liste over tilbakekalte sertifikater (*.crl)" + IDS_EXPORT_FILTER_CTL "Liste over tiltrodde sertifikater (*.stl)" + IDS_EXPORT_FILTER_CMS "CMS/PKCS #7 meldinger (*.p7b)" + IDS_EXPORT_FILTER_PFX "Personlig informasjonsutveksling (*.pfx)" + IDS_EXPORT_FILTER_SERIALIZED_CERT_STORE "Serialized Certificate Store (*.sst)" + IDS_EXPORT_FORMAT "Filformat" + IDS_EXPORT_INCLUDE_CHAIN "Ta med alle sertifikater i sertifikatstien" + IDS_EXPORT_KEYS "Eksportér nøkler" + IDS_YES "Ja" + IDS_NO "Nei" + IDS_EXPORT_SUCCEEDED "Eksporteringen var vellykket." + IDS_EXPORT_FAILED "Eksporteringen mislyktes." + IDS_EXPORT_PRIVATE_KEY_TITLE "Eksportér privat nøkkel" + IDS_EXPORT_PRIVATE_KEY_SUBTITLE "Sertifikatet inneholder en privat nøkkel som kan bli eksportert sammen med sertifikatet." + IDS_EXPORT_PASSWORD_TITLE "Angi passord" + IDS_EXPORT_PASSWORD_SUBTITLE "Du kan passordbeskytte en privat nøkkel." + IDS_EXPORT_PASSWORD_MISMATCH "Passordene er ikke like." + IDS_EXPORT_PRIVATE_KEY_UNAVAILABLE "Merk: Klarte ikke åpne den private nøkkelen for dette sertifikatet." + IDS_EXPORT_PRIVATE_KEY_NON_EXPORTABLE "Merk: Den private nøkkelen for dette sertifikatet kan ikke eksporteres." +} + +IDD_GENERAL DIALOG 0, 0, 255, 236 +CAPTION "Generelt" +STYLE WS_VISIBLE +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "", -1, "Static", WS_BORDER|SS_WHITERECT, 6,10,241,200 + CONTROL "", IDC_CERTIFICATE_ICON,"RichEdit20W", + ES_READONLY|WS_DISABLED,8,11,26,26 + CONTROL "", IDC_CERTIFICATE_INFO,"RichEdit20W", + ES_READONLY|WS_DISABLED,34,11,212,26 + CONTROL "", -1, "Static", SS_BLACKFRAME, 16,37,222,1 + CONTROL "", IDC_CERTIFICATE_STATUS,"RichEdit20W", + ES_READONLY|ES_MULTILINE,8,38,238,78 + CONTROL "", -1, "Static", SS_BLACKFRAME, 16,116,222,1 + CONTROL "", IDC_CERTIFICATE_NAMES,"RichEdit20W", + ES_READONLY|ES_MULTILINE|WS_DISABLED,8,118,238,90 + PUSHBUTTON "&Installer sertifikat...", IDC_ADDTOSTORE,103,216,70,14 + PUSHBUTTON "Info fra ut&steder", IDC_ISSUERSTATEMENT,177,216,70,14 +END + +IDD_DETAIL DIALOG 0, 0, 255, 236 +CAPTION "Detaljer" +STYLE WS_VISIBLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Vi&s:", -1, 6,12,40,14 + COMBOBOX IDC_DETAIL_SELECT, 28,10,100,14, + CBS_DROPDOWNLIST|WS_BORDER|WS_VSCROLL|WS_TABSTOP + CONTROL "", IDC_DETAIL_LIST, "SysListView32", + LVS_REPORT|LVS_SINGLESEL|WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_BORDER, + 6,28,241,100 + CONTROL "", IDC_DETAIL_VALUE, "RichEdit20W", + ES_READONLY|ES_MULTILINE|WS_TABSTOP, 6,136,241,70 + PUSHBUTTON "R&ediger egenskaper...", IDC_EDITPROPERTIES,103,216,70,14 + PUSHBUTTON "&Kopier til fil...", IDC_EXPORT,177,216,70,14 +END + +IDD_HIERARCHY DIALOG 0, 0, 255, 236 +CAPTION "Sertifiseringssti" +STYLE WS_VISIBLE +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Sertifiseringsst&i", -1,6,10,245,165, BS_GROUPBOX + CONTROL "",IDC_CERTPATH, "SysTreeView32", TVS_HASLINES|WS_BORDER, + 13,22,231,130 + PUSHBUTTON "&Vis sertifikat", IDC_VIEWCERTIFICATE,175,156,70,14 + LTEXT "Sertifikatstatu&s:", IDC_CERTIFICATESTATUS,6,183,70,14 + CONTROL "", IDC_CERTIFICATESTATUSTEXT,"RichEdit20W", + WS_BORDER|ES_READONLY|ES_MULTILINE|WS_DISABLED,6,195,245,36 +END + +IDD_USERNOTICE DIALOG 0, 0, 255, 256 +CAPTION "Ansvarsfraskrivelse" +STYLE WS_VISIBLE +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "", IDC_USERNOTICE,"RichEdit20W", + WS_BORDER|ES_READONLY|ES_MULTILINE|WS_DISABLED,6,10,241,200 + PUSHBUTTON "Lukk", IDOK,103,216,70,14 + PUSHBUTTON "Mer &info", IDC_CPS,177,216,70,14 +END + +IDD_CERT_PROPERTIES_GENERAL DIALOG 0, 0, 255, 236 +CAPTION "Generelt" +STYLE WS_VISIBLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Vennlig navn:", -1, 6,14,60,14 + EDITTEXT IDC_FRIENDLY_NAME, 60,12,191,14, ES_AUTOHSCROLL|WS_TABSTOP + LTEXT "&Beskrivelse:", -1, 6,32,60,14 + EDITTEXT IDC_DESCRIPTION, 60,30,191,14, ES_AUTOVSCROLL|ES_MULTILINE|WS_TABSTOP|WS_VSCROLL + GROUPBOX "Sertifikatformål", -1,6,48,245,165, BS_GROUPBOX + AUTORADIOBUTTON "Bruk sertifikat&et til alle mulige formål", + IDC_ENABLE_ALL_PURPOSES, 12,58,180,14, BS_AUTORADIOBUTTON|WS_TABSTOP + AUTORADIOBUTTON "Ikke bruk dette sertifikatet til noen formål", + IDC_DISABLE_ALL_PURPOSES, 12,70,180,14, BS_AUTORADIOBUTTON + AUTORADIOBUTTON "Bruk sertifikatet kun til følgende f&ormål:", + IDC_ENABLE_SELECTED_PURPOSES, 12,82,180,14, BS_AUTORADIOBUTTON + CONTROL "", IDC_CERTIFICATE_USAGES,"SysListView32", + LVS_REPORT|LVS_NOCOLUMNHEADER|LVS_SINGLESEL|WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_BORDER, + 24,100,220,90 + PUSHBUTTON "Legg til &formål...", IDC_ADD_PURPOSE,184,194,60,14 +END + +IDD_ADD_CERT_PURPOSE DIALOG 0,0,200,68 +CAPTION "Legg til formål" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Skriv inn identifiseringskoden (OID'en) for formålet du vil legge til:", + -1, 6,6,190,28 + EDITTEXT IDC_NEW_PURPOSE, 6,28,190,14, ES_AUTOVSCROLL|ES_MULTILINE|WS_TABSTOP|WS_VSCROLL + PUSHBUTTON "OK", IDOK, 33,48,60,14 + PUSHBUTTON "Avbryt", IDCANCEL, 100,48,60,14 +END + +IDD_SELECT_STORE DIALOG 0,0,200,136 +CAPTION "Velg sertifikatlager" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Velg sertifikatlageret du vil bruke:", IDC_STORE_TEXT, 6,6,190,28 + CONTROL "",IDC_STORE_LIST, "SysTreeView32", TVS_HASLINES|WS_BORDER|WS_TABSTOP, + 6,28,188,70 + CHECKBOX "Vi&s fysiske lagre", IDC_SHOW_PHYSICAL_STORES, 6,102,90,14, + BS_AUTOCHECKBOX|WS_TABSTOP + PUSHBUTTON "OK", IDOK, 90,118,50,14, BS_DEFPUSHBUTTON + PUSHBUTTON "Avbryt", IDCANCEL, 144,118,50,14 +END + +IDD_IMPORT_WELCOME DIALOG 0,0,317,143 +CAPTION "Veiviser for import av sertifikater" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Velkommen til veiviseren for import av sertifikater", IDC_IMPORT_TITLE, + 115,7,195,12 + LTEXT "Denne veiviseren hjelper deg å importere sertifikater og lister over tiltrodde eller tilbakekalte sertifikater fra en fil til et sertifikatlager.", + -1, 115,26,195,25 + LTEXT "Et sertifikat kan brukes til å identifisere deg eller datamaskinen du kommuniserer med. Det kan også brukes til signering av meldinger eller andre former for godkjenning. Sertifikatlagre er samlinger av sertifikater og lister over tiltrodde eller tilbakekalte sertifikater.", + -1, 115,56,195,40 + LTEXT "Trykk «Neste» for å fortsette.", + -1, 115,103,195,8 +END + +IDD_IMPORT_FILE DIALOG 0,0,317,178 +CAPTION "Veiviser for import av sertifikater" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Filnavn:", -1, 21,1,195,10 + EDITTEXT IDC_IMPORT_FILENAME, 21,11,208,14, ES_AUTOHSCROLL|WS_TABSTOP + PUSHBUTTON "Bla...", IDC_IMPORT_BROWSE_FILE, 236,11,60,14 + LTEXT "Merk: Følgende filformater kan inneholde mer enn ett sertifikat eller liste over tiltrodde eller tilbakekalte sertifikater:", + -1, 21,26,265,16 + LTEXT "Standardformat for kryptografiske meldinger/PKCS #7 Messages (.p7b)", + -1, 31,49,265,10 + LTEXT "Personlig informasjonsutveksling/PKCS #12 (.pfx, .p12)", + -1, 31,64,265,10 + LTEXT "Microsoft Serialized Certificate Store (.sst)", + -1, 31,79,265,10 +END + +IDD_IMPORT_STORE DIALOG 0,0,317,143 +CAPTION "Veiviser for import av sertifikater" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Wine kan velge sertifikatlageret automatisk, eller du kan oppgi en plassering for sertifikatene selv.", + -1, 21,1,195,20 + AUTORADIOBUTTON "Velg sertifikatlager &automatisk", + IDC_IMPORT_AUTO_STORE, 31,18,180,12, BS_AUTORADIOBUTTON|WS_TABSTOP + AUTORADIOBUTTON "&Plasser aller sertifikatene i følgende lager:", + IDC_IMPORT_SPECIFY_STORE, 31,30,180,12, BS_AUTORADIOBUTTON + EDITTEXT IDC_IMPORT_STORE, 44,49,185,14, ES_READONLY + PUSHBUTTON "&Bla...", IDC_IMPORT_BROWSE_STORE, 236,49,60,14 +END + +IDD_IMPORT_FINISH DIALOG 0,0,317,178 +CAPTION "Veiviser for import av sertifikater" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Fullføring av veiviseren for import av sertifikater", IDC_IMPORT_TITLE, + 115,1,195,40 + LTEXT "Veiviseren for import av sertifikater er fullført; operasjonene var vellykket.", + -1, 115,33,195,24 + LTEXT "Følgende innstillinger ble valgt:", + -1, 115,57,195,12 + CONTROL "", IDC_IMPORT_SETTINGS, "SysListView32", + LVS_REPORT|LVS_NOCOLUMNHEADER|LVS_SINGLESEL|WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_BORDER, + 115,67,174,100 +END + +IDD_CERT_MGR DIALOG 0,0,335,270 +CAPTION "Sertifikater" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Tilte&nkt formål:", -1, 7,9,100,12 + COMBOBOX IDC_MGR_PURPOSE_SELECTION, 83,7,245,14, + CBS_DROPDOWNLIST|WS_BORDER|WS_VSCROLL|WS_TABSTOP + CONTROL "", IDC_MGR_STORES, "SysTabControl32", + WS_CLIPSIBLINGS|WS_TABSTOP, 7,25,321,140 + CONTROL "", IDC_MGR_CERTS, "SysListView32", + LVS_REPORT|WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_BORDER, 15,46,305,111 + PUSHBUTTON "&Importér...", IDC_MGR_IMPORT, 7,172,51,14 + PUSHBUTTON "&Eksportér...", IDC_MGR_EXPORT, 62,172,51,14, WS_DISABLED + PUSHBUTTON "Fje&rn", IDC_MGR_REMOVE, 117,172,51,14, WS_DISABLED + PUSHBUTTON "&Avansert...", IDC_MGR_ADVANCED, 277,172,51,14 + GROUPBOX "Sertifikatets tiltenkte formål", -1,7,194,321,47, BS_GROUPBOX + LTEXT "", IDC_MGR_PURPOSES, 13,208,252,30 + PUSHBUTTON "&Vis...", IDC_MGR_VIEW, 269,218,51,14, WS_DISABLED + PUSHBUTTON "&Lukk", IDCANCEL, 277,249,51,14, BS_DEFPUSHBUTTON +END + +IDD_CERT_MGR_ADVANCED DIALOG 0,0,248,176 +CAPTION "Avanserte innstillinger" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Sertifikatformål", -1, 7,7,234,141, BS_GROUPBOX + LTEXT "Velg ett eller flere formål som skal vises når avanserte formål er valgt.", + -1, 14,18,220,16 + LTEXT "&Sertifikatformål:", -1, 14,41,90,12, WS_TABSTOP + CONTROL "", IDC_CERTIFICATE_USAGES,"SysListView32", + LVS_REPORT|LVS_NOCOLUMNHEADER|LVS_SINGLESEL|WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_BORDER, + 14,51,220,90 + PUSHBUTTON "OK", IDOK, 132,155,51,14, BS_DEFPUSHBUTTON + PUSHBUTTON "Avbryt", IDCANCEL, 190,155,51,14 +END + +IDD_EXPORT_WELCOME DIALOG 0,0,317,143 +CAPTION "Veiviser for eksport av sertifikater" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Velkommen til veiviseren for eksport av sertifikater", IDC_EXPORT_TITLE, + 115,7,195,12 + LTEXT "Denne veiviseren hjelper deg med å eksportere sertifikater og lister over tiltrodde eller tilbakekalte sertifikater fra et sertifikatlager til en fil.", + -1, 115,26,195,25 + LTEXT "Et sertifikat kan brukes til å identifisere deg eller datamaskinen du kommuniserer med. Det kan også brukes til signering av meldinger eller andre former for godkjenning. Sertifikatlagre er samlinger av sertifikater og lister over tiltrodde eller tilbakekalte sertifikater.", + -1, 115,56,195,40 + LTEXT "Trykk «Neste» for å fortsette.", + -1, 115,103,195,8 +END + +IDD_EXPORT_PRIVATE_KEY DIALOG 0,0,317,143 +CAPTION "Veiviser for eksport av sertifikater" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Hvis du velger å eksportere den private nøkkelen vil du bli bedt om å velge et passord seinere, slik at du kan beskytte nøkkelen.", -1, 21,1,195,25 + LTEXT "Vil du eksportere den private nøkkelen?", -1, 21,27,195,10 + AUTORADIOBUTTON "&Ja, eksportér den private nøkkelen", + IDC_EXPORT_PRIVATE_KEY_YES, 31,36,200,12, BS_AUTORADIOBUTTON|WS_TABSTOP + AUTORADIOBUTTON "&Nei, ikke eksportér den private nøkkelen", + IDC_EXPORT_PRIVATE_KEY_NO, 31,48,200,12, BS_AUTORADIOBUTTON + LTEXT "", IDC_EXPORT_PRIVATE_KEY_UNAVAILABLE, 21,60,200,24 +END + +IDD_EXPORT_PASSWORD DIALOG 0,0,317,143 +CAPTION "Veiviser for eksport av sertifikater" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Passord:", -1, 21,1,195,10 + EDITTEXT IDC_EXPORT_PASSWORD, 21,11,208,14, ES_AUTOHSCROLL|WS_TABSTOP + LTEXT "&Bekreft passord:", -1, 21,35,195,10 + EDITTEXT IDC_EXPORT_PASSWORD_CONFIRM, 21,45,208,14, ES_AUTOHSCROLL|WS_TABSTOP +END + +IDD_EXPORT_FORMAT DIALOG 0,0,317,143 +CAPTION "Veiviser for eksport av sertifikater" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Velg formatet du ønsker å bruke:", -1, 21,1,195,10 + AUTORADIOBUTTON "&DER-kodet X.509 (.cer)", + IDC_EXPORT_FORMAT_DER, 31,18,240,12, BS_AUTORADIOBUTTON|WS_TABSTOP + AUTORADIOBUTTON "Ba&se64-kodet X.509 (.cer):", + IDC_EXPORT_FORMAT_BASE64, 31,30,240,12, BS_AUTORADIOBUTTON + AUTORADIOBUTTON "Standardformat for &kryptografiske meldinger/PKCS #7 Message (.p7b)", + IDC_EXPORT_FORMAT_CMS, 31,42,240,12, BS_AUTORADIOBUTTON + CHECKBOX "Ta med alle sertifikater &i sertifikatstien, hvis mulig", + IDC_EXPORT_CMS_INCLUDE_CHAIN, 44,57,240,8, BS_AUTOCHECKBOX|WS_TABSTOP|WS_DISABLED + AUTORADIOBUTTON "&Personlig informasjonsutveksling/PKCS #12 (.pfx)", + IDC_EXPORT_FORMAT_PFX, 31,72,240,12, BS_AUTORADIOBUTTON|WS_DISABLED + CHECKBOX "Ta med aller sertifikater i sertifikatstien, hvis m&ulig", + IDC_EXPORT_PFX_INCLUDE_CHAIN, 44,87,240,8, BS_AUTOCHECKBOX|WS_TABSTOP|WS_DISABLED + CHECKBOX "Bruk st&erk kryptering", + IDC_EXPORT_PFX_STRONG_ENCRYPTION, 44,102,240,8, + BS_AUTOCHECKBOX|WS_TABSTOP|WS_DISABLED + CHECKBOX "Slett den private nø&kkelen hvis eksporten er vellykket", + IDC_EXPORT_PFX_DELETE_PRIVATE_KEY, 44,117,240,8, + BS_AUTOCHECKBOX|WS_TABSTOP|WS_DISABLED +END + +IDD_EXPORT_FILE DIALOG 0,0,317,143 +CAPTION "Veiviser for eksport av sertifikater" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Filnavn:", -1, 21,1,195,10 + EDITTEXT IDC_EXPORT_FILENAME, 21,11,208,14, ES_AUTOHSCROLL|WS_TABSTOP + PUSHBUTTON "&Bla...", IDC_EXPORT_BROWSE_FILE, 236,11,60,14 +END + +IDD_EXPORT_FINISH DIALOG 0,0,317,178 +CAPTION "Veiviser for eksport av sertifikater" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Fullføring av veiviseren for eksport av sertifikater", IDC_EXPORT_TITLE, + 115,1,195,40 + LTEXT "Veiviseren for eksport av sertifikater er fullført; operasjonene var vellykket.", + -1, 115,33,195,24 + LTEXT "Følgende innstillinger ble valgt:", + -1, 115,57,195,12 + CONTROL "", IDC_EXPORT_SETTINGS, "SysListView32", + LVS_REPORT|LVS_NOCOLUMNHEADER|LVS_SINGLESEL|WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_BORDER, + 115,67,174,100 +END diff --git a/dll/win32/cryptui/cryptui_Pl.rc b/dll/win32/cryptui/cryptui_Pl.rc index c82712c993d..585a8bee742 100644 --- a/dll/win32/cryptui/cryptui_Pl.rc +++ b/dll/win32/cryptui/cryptui_Pl.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_POLISH, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_CERTIFICATE "Certyfikat" IDS_CERTIFICATEINFORMATION "Informacje o certyfikacie" @@ -173,7 +173,7 @@ STRINGTABLE DISCARDABLE IDS_EXPORT_PRIVATE_KEY_NON_EXPORTABLE "Uwaga: Klucz prywatny dla tego certyfikatu jest oznaczony jako nie do eksportu." } -IDD_GENERAL DIALOG DISCARDABLE 0, 0, 255, 236 +IDD_GENERAL DIALOG 0, 0, 255, 236 CAPTION "Oglne" STYLE WS_VISIBLE FONT 8, "MS Shell Dlg" @@ -193,7 +193,7 @@ BEGIN PUSHBUTTON "&Owiadczenie wystawcy", IDC_ISSUERSTATEMENT,177,216,70,14 END -IDD_DETAIL DIALOG DISCARDABLE 0, 0, 255, 236 +IDD_DETAIL DIALOG 0, 0, 255, 236 CAPTION "Szczegy" STYLE WS_VISIBLE FONT 8, "MS Shell Dlg" @@ -210,7 +210,7 @@ BEGIN PUSHBUTTON "&Kopiuj do pliku...", IDC_EXPORT,177,216,70,14 END -IDD_HIERARCHY DIALOG DISCARDABLE 0, 0, 255, 236 +IDD_HIERARCHY DIALOG 0, 0, 255, 236 CAPTION "cieka certyfikacji" STYLE WS_VISIBLE FONT 8, "MS Shell Dlg" @@ -224,7 +224,7 @@ BEGIN WS_BORDER|ES_READONLY|ES_MULTILINE|WS_DISABLED,6,195,245,36 END -IDD_USERNOTICE DIALOG DISCARDABLE 0, 0, 255, 256 +IDD_USERNOTICE DIALOG 0, 0, 255, 256 CAPTION "Zrzeczenie" STYLE WS_VISIBLE FONT 8, "MS Shell Dlg" @@ -235,7 +235,7 @@ BEGIN PUSHBUTTON "Wicej &informacji", IDC_CPS,177,216,70,14 END -IDD_CERT_PROPERTIES_GENERAL DIALOG DISCARDABLE 0, 0, 255, 236 +IDD_CERT_PROPERTIES_GENERAL DIALOG 0, 0, 255, 236 CAPTION "Oglne" STYLE WS_VISIBLE FONT 8, "MS Shell Dlg" @@ -257,7 +257,7 @@ BEGIN PUSHBUTTON "&Dodaj cel...", IDC_ADD_PURPOSE,184,194,60,14 END -IDD_ADD_CERT_PURPOSE DIALOG DISCARDABLE 0,0,200,68 +IDD_ADD_CERT_PURPOSE DIALOG 0,0,200,68 CAPTION "Dodaj cel" FONT 8, "MS Shell Dlg" BEGIN @@ -268,7 +268,7 @@ BEGIN PUSHBUTTON "Anuluj", IDCANCEL, 100,48,60,14 END -IDD_SELECT_STORE DIALOG DISCARDABLE 0,0,200,136 +IDD_SELECT_STORE DIALOG 0,0,200,136 CAPTION "Wybr magazynu certyfikatw" FONT 8, "MS Shell Dlg" BEGIN @@ -281,7 +281,7 @@ BEGIN PUSHBUTTON "Anuluj", IDCANCEL, 144,118,50,14 END -IDD_IMPORT_WELCOME DIALOG DISCARDABLE 0,0,317,143 +IDD_IMPORT_WELCOME DIALOG 0,0,317,143 CAPTION "Kreator importu certyfikatw" FONT 8, "MS Shell Dlg" BEGIN @@ -295,7 +295,7 @@ BEGIN -1, 115,103,195,8 END -IDD_IMPORT_FILE DIALOG DISCARDABLE 0,0,317,178 +IDD_IMPORT_FILE DIALOG 0,0,317,178 CAPTION "Kreator importu certyfikatw" FONT 8, "MS Shell Dlg" BEGIN @@ -312,7 +312,7 @@ BEGIN -1, 31,79,265,10 END -IDD_IMPORT_STORE DIALOG DISCARDABLE 0,0,317,143 +IDD_IMPORT_STORE DIALOG 0,0,317,143 CAPTION "Kreator importu certyfikatw" FONT 8, "MS Shell Dlg" BEGIN @@ -326,7 +326,7 @@ BEGIN PUSHBUTTON "&Przegldaj...", IDC_IMPORT_BROWSE_STORE, 236,49,60,14 END -IDD_IMPORT_FINISH DIALOG DISCARDABLE 0,0,317,178 +IDD_IMPORT_FINISH DIALOG 0,0,317,178 CAPTION "Kreator importu certyfikatw" FONT 8, "MS Shell Dlg" BEGIN @@ -341,7 +341,7 @@ BEGIN 115,67,174,100 END -IDD_CERT_MGR DIALOG DISCARDABLE 0,0,335,270 +IDD_CERT_MGR DIALOG 0,0,335,270 CAPTION "Certyfikaty" FONT 8, "MS Shell Dlg" BEGIN @@ -362,7 +362,7 @@ BEGIN PUSHBUTTON "Za&mknij", IDCANCEL, 277,249,51,14, BS_DEFPUSHBUTTON END -IDD_CERT_MGR_ADVANCED DIALOG DISCARDABLE 0,0,248,176 +IDD_CERT_MGR_ADVANCED DIALOG 0,0,248,176 CAPTION "Zaawansowane opcje" FONT 8, "MS Shell Dlg" BEGIN @@ -377,7 +377,7 @@ BEGIN PUSHBUTTON "Anuluj", IDCANCEL, 190,155,51,14 END -IDD_EXPORT_WELCOME DIALOG DISCARDABLE 0,0,317,143 +IDD_EXPORT_WELCOME DIALOG 0,0,317,143 CAPTION "Kreator eksportu certyfikatw" FONT 8, "MS Shell Dlg" BEGIN @@ -391,7 +391,7 @@ BEGIN -1, 115,103,195,8 END -IDD_EXPORT_PRIVATE_KEY DIALOG DISCARDABLE 0,0,317,143 +IDD_EXPORT_PRIVATE_KEY DIALOG 0,0,317,143 CAPTION "Kreator eksportu certyfikatw" FONT 8, "MS Shell Dlg" BEGIN @@ -404,7 +404,7 @@ BEGIN LTEXT "", IDC_EXPORT_PRIVATE_KEY_UNAVAILABLE, 21,60,200,24 END -IDD_EXPORT_PASSWORD DIALOG DISCARDABLE 0,0,317,143 +IDD_EXPORT_PASSWORD DIALOG 0,0,317,143 CAPTION "Kreator eksportu certyfikatw" FONT 8, "MS Shell Dlg" BEGIN @@ -414,7 +414,7 @@ BEGIN EDITTEXT IDC_EXPORT_PASSWORD_CONFIRM, 21,45,208,14, ES_AUTOHSCROLL|WS_TABSTOP END -IDD_EXPORT_FORMAT DIALOG DISCARDABLE 0,0,317,143 +IDD_EXPORT_FORMAT DIALOG 0,0,317,143 CAPTION "Kreator eksportu certyfikatw" FONT 8, "MS Shell Dlg" BEGIN @@ -439,7 +439,7 @@ BEGIN BS_AUTOCHECKBOX|WS_TABSTOP|WS_DISABLED END -IDD_EXPORT_FILE DIALOG DISCARDABLE 0,0,317,143 +IDD_EXPORT_FILE DIALOG 0,0,317,143 CAPTION "Kreator eksportu certyfikatw" FONT 8, "MS Shell Dlg" BEGIN @@ -448,7 +448,7 @@ BEGIN PUSHBUTTON "&Przegldaj...", IDC_EXPORT_BROWSE_FILE, 236,11,60,14 END -IDD_EXPORT_FINISH DIALOG DISCARDABLE 0,0,317,178 +IDD_EXPORT_FINISH DIALOG 0,0,317,178 CAPTION "Kreator eksportu certyfikatw" FONT 8, "MS Shell Dlg" BEGIN diff --git a/dll/win32/cryptui/cryptui_Pt.rc b/dll/win32/cryptui/cryptui_Pt.rc index 4b528b5b1f9..60aee8328ef 100644 --- a/dll/win32/cryptui/cryptui_Pt.rc +++ b/dll/win32/cryptui/cryptui_Pt.rc @@ -2,6 +2,7 @@ * cryptui dll Portuguese resources * * Copyright 2009 Ricardo Filipe + * Copyright 2010 Gustavo Henrique Milaré * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -22,9 +23,162 @@ #pragma code_page(65001) +LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN + +STRINGTABLE +{ + IDS_CERTIFICATE "Certificado" + IDS_CERTIFICATEINFORMATION "Informação do Certificado" + IDS_CERT_INFO_BAD_SIG "Este certificado tem uma assinatura inválida. O certificado pode ter sido alterado ou corrompido." + IDS_CERT_INFO_UNTRUSTED_CA "Este certificado raíz não é confiável. Para ficar confiável, adicione-o ao conjunto de certificados raíz confiáveis do seu sistema." + IDS_CERT_INFO_UNTRUSTED_ROOT "Este certificado não foi validado num certificado raíz confiável." + IDS_CERT_INFO_PARTIAL_CHAIN "O emissor deste certificado não foi encontrado." + IDS_CERT_INFO_BAD_PURPOSES "Todos os propósitos deste certificado não foram verificados." + IDS_CERT_INFO_PURPOSES "Este certificado é intencionado com os seguintes propósitos::" + IDS_SUBJECT_HEADING "Emitido a: " + IDS_ISSUER_HEADING "Emitido por: " + IDS_VALID_FROM "Válido de " + IDS_VALID_TO " para " + IDS_CERTIFICATE_BAD_SIGNATURE "Este certificado tem uma assinatura inválida." + IDS_CERTIFICATE_BAD_TIME "Este certificado expirou ou ainda não é válido." + IDS_CERTIFICATE_BAD_TIMENEST "O período de validade deste certificado excede o do seu emissor." + IDS_CERTIFICATE_REVOKED "Este certificado foi revogado pelo seu emissor." + IDS_CERTIFICATE_VALID "Este certificado está OK." + IDS_FIELD "Campo" + IDS_VALUE "Valor" + IDS_FIELDS_ALL "" + IDS_FIELDS_V1 "Campos da Versão 1 Apenas" + IDS_FIELDS_EXTENSIONS "Extensões Apenas" + IDS_FIELDS_CRITICAL_EXTENSIONS "Extensões Críticas Apenas" + IDS_FIELDS_PROPERTIES "Propriedades Apenas" + IDS_FIELD_VERSION "Versão" + IDS_FIELD_SERIAL_NUMBER "Número de Série" + IDS_FIELD_ISSUER "Emissor" + IDS_FIELD_VALID_FROM "Válido desde" + IDS_FIELD_VALID_TO "Válido até" + IDS_FIELD_SUBJECT "Sujeito" + IDS_FIELD_PUBLIC_KEY "Chave Pública" + IDS_FIELD_PUBLIC_KEY_FORMAT "%s (%d bits)" + IDS_PROP_HASH "SHA1 hash" + IDS_PROP_ENHKEY_USAGE "Uso de chave avançado (propriedade)" + IDS_PROP_FRIENDLY_NAME "Nome amigável" + IDS_PROP_DESCRIPTION "Descrição" + IDS_CERTIFICATE_PROPERTIES "Propriedades do Certificado" + IDS_CERTIFICATE_PURPOSE_ERROR "Por favor insira um OID na forma 1.2.3.4" + IDS_CERTIFICATE_PURPOSE_EXISTS "O OID inserido já existe." + IDS_SELECT_STORE_TITLE "Selecione o Conjunto de Certificados" + IDS_SELECT_STORE "Por favor selecione um conjunto de certificados." + IDS_IMPORT_WIZARD "Assistente de Importação de Certificados" + IDS_IMPORT_TYPE_MISMATCH "O arquivo contém objetos que não correspondem ao critério dado. Por favor selecione outro arquivo." + IDS_IMPORT_FILE_TITLE "Arquivo a Importar" + IDS_IMPORT_FILE_SUBTITLE "Especifique o arquivo que deseja importar." + IDS_IMPORT_STORE_TITLE "Conjunto de Certificados" + IDS_IMPORT_STORE_SUBTITLE "Os Conjuntos de Certificados são colecões de certificados, listas de revogação de certificados e listas de certificados confiáveis." + IDS_IMPORT_FILTER_CERT "Certificado X.509 (*.cer; *.crt)" + IDS_IMPORT_FILTER_PFX "Troca de Informações Pessoais (*.pfx; *.p12)" + IDS_IMPORT_FILTER_CRL "Lista de Revogação de Certificados (*.crl)" + IDS_IMPORT_FILTER_CTL "Lista de Certificados Confiáveis (*.stl)" + IDS_IMPORT_FILTER_SERIALIZED_STORE "Conjunto de Certificados Serializados da Microsoft (*.sst)" + IDS_IMPORT_FILTER_CMS "Mensagens CMS/PKCS #7 (*.spc; *.p7b)" + IDS_IMPORT_FILTER_ALL "Todos os Arquivos (*.*)" + IDS_IMPORT_EMPTY_FILE "Por favor selecione um arquivo." + IDS_IMPORT_BAD_FORMAT "O formato do arquivo não é reconhecido. Por favor selecione outro arquivo." + IDS_IMPORT_OPEN_FAILED "Não foi possível abrir " + IDS_IMPORT_DEST_DETERMINED "Determinado pelo programa" + IDS_IMPORT_SELECT_STORE "Por favor selecione um conjunto" + IDS_IMPORT_STORE_SELECTION "Conjunto de Certificados Selecionado" + IDS_IMPORT_DEST_AUTOMATIC "Determinado automaticamente pelo programa" + IDS_IMPORT_FILE "Arquivo" + IDS_IMPORT_CONTENT "Conteúdo" + IDS_IMPORT_CONTENT_CERT "Certificado" + IDS_IMPORT_CONTENT_CRL "Lista de Revogação de Certificados" + IDS_IMPORT_CONTENT_CTL "Lista de Certificados Confiáveis" + IDS_IMPORT_CONTENT_CMS "Mensagem CMS/PKCS #7" + IDS_IMPORT_CONTENT_PFX "Troca de Informações Pessoais" + IDS_IMPORT_CONTENT_STORE "Conjunto de Certificados" + IDS_IMPORT_SUCCEEDED "A importação foi bem sucedida." + IDS_IMPORT_FAILED "A importação falhou." + IDS_WIZARD_TITLE_FONT "Arial" + IDS_PURPOSE_ALL "" + IDS_PURPOSE_ADVANCED "" + IDS_SUBJECT_COLUMN "Emitido para" + IDS_ISSUER_COLUMN "Emitido por" + IDS_EXPIRATION_COLUMN "Data de Validade" + IDS_FRIENDLY_NAME_COLUMN "Nome Amigável" + IDS_ALLOWED_PURPOSE_ALL "" + IDS_ALLOWED_PURPOSE_NONE "" + IDS_WARN_REMOVE_MY "Não será mais possível continuar a decifrar ou assinar mensagens com este certificado.\nTem certeza que deseja remover este certificado?" + IDS_WARN_REMOVE_PLURAL_MY "Não será mais possível continuar a decifrar ou assinar mensagens com estes certificados.\nTem certeza que deseja remover estes certificados?" + IDS_WARN_REMOVE_ADDRESSBOOK "Não será mais possível continuar a cifrar ou verificar mensagens com este certificado.\nTem certeza que deseja remover este certificado?" + IDS_WARN_REMOVE_PLURAL_ADDRESSBOOK "Não será mais possível continuar a cifrar ou verificar mensagens com estes certificados.\nTem certeza que deseja remover estes certificados?" + IDS_WARN_REMOVE_CA "Os certificados emitidos por esta autoridade de certificação não serão considerados confiáveis de agora em diante.\nTem certeza que deseja remover este certificado?" + IDS_WARN_REMOVE_PLURAL_CA "Os certificados emitidos por estas autoridades de certificação não serão considerados confiáveis de agora em diante.\nTem certeza que deseja remover estes certificados?" + IDS_WARN_REMOVE_ROOT "Os certificados emitidos por esta autoridade de certificação raíz ou quaisquer autoridades de certificação por ela emitidas não serão consideradas confiáveis de agora em diante.\nTem certeza que deseja remover este certificado raíz confiável?" + IDS_WARN_REMOVE_PLURAL_ROOT "Os certificados emitidos por estas autoridades de certificação raíz ou quaisquer autoridades de certificação por elas emitidas não serão consideradas confiáveis de agora em diante.\nTem certeza que deseja remover estes certificados raíz confiáveis?" + IDS_WARN_REMOVE_TRUSTEDPUBLISHER "Os softwares assinados por este editor não continuarão a ser considerado confiáveis.\nTem certeza que deseja remover este certificado?" + IDS_WARN_REMOVE_PLURAL_TRUSTEDPUBLISHER "Os softwares assinado por estes editores não continuarão a ser considerados confiáveis.\nTem certeza que deseja remover estes certificados?" + IDS_WARN_REMOVE_DEFAULT "Tem certeza que deseja remover este certificado?" + IDS_WARN_REMOVE_PLURAL_DEFAULT "Tem certeza que deseja remover estes certificados?" + IDS_CERT_MGR "Certificados" + IDS_FRIENDLY_NAME_NONE "" + IDS_PURPOSE_SERVER_AUTH "Assegura a identidade de um computador remoto" + IDS_PURPOSE_CLIENT_AUTH "Prova a sua identidade a um computador remoto" + IDS_PURPOSE_CODE_SIGNING "Assegura que o software veio de uma editora de software\nProtege o software de alterações após a publicação" + IDS_PURPOSE_EMAIL_PROTECTION "Protege mensagens de e-mail" + IDS_PURPOSE_IPSEC "Permite comunicação segura pela Internet" + IDS_PURPOSE_TIMESTAMP_SIGNING "Permite que os dados sejam assinados com o tempo atual" + IDS_PURPOSE_CTL_USAGE_SIGNING "Permite assinar digitalmente uma lista de certificados confiáveis" + IDS_PURPOSE_EFS "Permite que os dados em disco sejam encriptados" + IDS_PURPOSE_EFS_RECOVERY "Recuperação de Arquivos" + IDS_PURPOSE_WHQL "Verificação de Driver de Hardware do Windows" + IDS_PURPOSE_NT5 "Verificação de Componente de Sistema do Windows" + IDS_PURPOSE_OEM_WHQL "Verificação de Componente de Sistema do Windows OEM" + IDS_PURPOSE_EMBEDDED_NT "Verificação de Componente de Sistema do Windows Embebido" + IDS_PURPOSE_ROOT_LIST_SIGNER "Assinador de Lista Raiz" + IDS_PURPOSE_QUALIFIED_SUBORDINATION "Subordinação Qualificada" + IDS_PURPOSE_KEY_RECOVERY "Recuperação de Chaves" + IDS_PURPOSE_DOCUMENT_SIGNING "Assinatura de Documento" + IDS_PURPOSE_LIFETIME_SIGNING "Assinatura de Lifetime" + IDS_PURPOSE_DRM "Direito Digital" + IDS_PURPOSE_LICENSES "Key Pack Licenses" + IDS_PURPOSE_LICENSE_SERVER "License Server Verification" + IDS_PURPOSE_ENROLLMENT_AGENT "Agente de Requerimento de Certificado" + IDS_PURPOSE_SMARTCARD_LOGON "Logon de Smart Card" + IDS_PURPOSE_CA_EXCHANGE "Arquivação de Chave Privada" + IDS_PURPOSE_KEY_RECOVERY_AGENT "Agente de Recuperação de Chave" + IDS_PURPOSE_DS_EMAIL_REPLICATION "Directory Service Email Replication" + IDS_EXPORT_WIZARD "Assistente de Exportação de Certificados" + IDS_EXPORT_FORMAT_TITLE "Formato de Exportação" + IDS_EXPORT_FORMAT_SUBTITLE "Escolha o formato em que o conteúdo será salvo." + IDS_EXPORT_FILE_TITLE "Exportar Arquivo" + IDS_EXPORT_FILE_SUBTITLE "Especifique o nome do arquivo em que o conteúdo será salvo." + IDS_EXPORT_FILE_EXISTS "O arquivo especificado já existe. Deseja substituí-lo?" + IDS_EXPORT_FILTER_CERT "Binário DER-Codificado X.509 (*.cer)" + IDS_EXPORT_FILTER_BASE64_CERT "Base64-Codificado X.509 (*.cer)" + IDS_EXPORT_FILTER_CRL "Lista de Revogação de Certificados (*.crl)" + IDS_EXPORT_FILTER_CTL "Lista de Certificados Confiáveis (*.stl)" + IDS_EXPORT_FILTER_CMS "Mensagens CMS/PKCS #7 (*.p7b)" + IDS_EXPORT_FILTER_PFX "Troca de Informações Pessoais (*.pfx)" + IDS_EXPORT_FILTER_SERIALIZED_CERT_STORE "Conjunto de Certificados Serializados (*.sst)" + IDS_EXPORT_FORMAT "Formato do Arquivo" + IDS_EXPORT_INCLUDE_CHAIN "Incluir todos os certificados no caminho do certificado" + IDS_EXPORT_KEYS "Exportar Chaves" + IDS_YES "Sim" + IDS_NO "Não" + IDS_EXPORT_SUCCEEDED "A exportação foi bem sucedida." + IDS_EXPORT_FAILED "A exportação falhou." + IDS_EXPORT_PRIVATE_KEY_TITLE "Exportar Chave Privada" + IDS_EXPORT_PRIVATE_KEY_SUBTITLE "O certificado contém uma chave privada que pode ser exportada em conjunto com o certificado." + IDS_EXPORT_PASSWORD_TITLE "Digite Palavra Chave" + IDS_EXPORT_PASSWORD_SUBTITLE "Você pode proteger uma chave privada com uma palavra chave." + IDS_EXPORT_PASSWORD_MISMATCH "As palavras chave não coincidem." + IDS_EXPORT_PRIVATE_KEY_UNAVAILABLE "Nota: A chave privada para este certificado não pôde ser aberta." + IDS_EXPORT_PRIVATE_KEY_NON_EXPORTABLE "Nota: A chave privada para este certificado não é exportável." +} + LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_CERTIFICATE "Certificado" IDS_CERTIFICATEINFORMATION "Informação do Certificado" @@ -70,7 +224,7 @@ STRINGTABLE DISCARDABLE IDS_IMPORT_WIZARD "Assistente de Importação de Certificados" IDS_IMPORT_TYPE_MISMATCH "O ficheiro contém objectos que não correspondem ao critério dado. Por favor seleccione outro ficheiro." IDS_IMPORT_FILE_TITLE "Ficheiro a Importar" - IDS_IMPORT_FILE_SUBTITLE "Especifique o ficheiro que deseja Importar." + IDS_IMPORT_FILE_SUBTITLE "Especifique o ficheiro que deseja importar." IDS_IMPORT_STORE_TITLE "Conjunto de Certificados" IDS_IMPORT_STORE_SUBTITLE "Os Conjuntos de Certificados são coleccões de certificados, listas de revogação de certificados e listas de certificados confiáveis." IDS_IMPORT_FILTER_CERT "Certificado X.509 (*.cer; *.crt)" @@ -154,11 +308,11 @@ STRINGTABLE DISCARDABLE IDS_EXPORT_FILE_EXISTS "O ficheiro especificado já existe. Deseja substituí-lo?" IDS_EXPORT_FILTER_CERT "DER-Encoded Binary X.509 (*.cer)" IDS_EXPORT_FILTER_BASE64_CERT "Base64-Encoded X.509 (*.cer)" - IDS_EXPORT_FILTER_CRL "Certificate Revocation List (*.crl)" - IDS_EXPORT_FILTER_CTL "Certificate Trust List (*.stl)" - IDS_EXPORT_FILTER_CMS "CMS/PKCS #7 Messages (*.p7b)" - IDS_EXPORT_FILTER_PFX "Personal Information Exchange (*.pfx)" - IDS_EXPORT_FILTER_SERIALIZED_CERT_STORE "Serialized Certificate Store (*.sst)" + IDS_EXPORT_FILTER_CRL "Lista de Revogação de Certificados (*.crl)" + IDS_EXPORT_FILTER_CTL "Lista de Certificados Confiáveis (*.stl)" + IDS_EXPORT_FILTER_CMS "Mensagens CMS/PKCS #7 (*.p7b)" + IDS_EXPORT_FILTER_PFX "Troca de Informações Pessoais (*.pfx)" + IDS_EXPORT_FILTER_SERIALIZED_CERT_STORE "Conjunto de Certificados Serializados (*.sst)" IDS_EXPORT_FORMAT "Formato do Ficheiro" IDS_EXPORT_INCLUDE_CHAIN "Incluir todos os certificados no caminho do certificado" IDS_EXPORT_KEYS "Exportar Chaves" @@ -175,7 +329,10 @@ STRINGTABLE DISCARDABLE IDS_EXPORT_PRIVATE_KEY_NON_EXPORTABLE "Nota: A chave privada para este certificado não é exportável." } -IDD_GENERAL DIALOG DISCARDABLE 0, 0, 255, 236 + +LANGUAGE LANG_PORTUGUESE, SUBLANG_NEUTRAL + +IDD_GENERAL DIALOG 0, 0, 255, 236 CAPTION "Geral" STYLE WS_VISIBLE FONT 8, "MS Shell Dlg" @@ -195,7 +352,29 @@ BEGIN PUSHBUTTON "&Declaração do Emissor", IDC_ISSUERSTATEMENT,177,216,70,14 END -IDD_DETAIL DIALOG DISCARDABLE 0, 0, 255, 236 + +LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN + +IDD_DETAIL DIALOG 0, 0, 255, 236 +CAPTION "Detalhes" +STYLE WS_VISIBLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Mostrar:", -1, 6,12,40,14 + COMBOBOX IDC_DETAIL_SELECT, 28,10,100,14, + CBS_DROPDOWNLIST|WS_BORDER|WS_VSCROLL|WS_TABSTOP + CONTROL "", IDC_DETAIL_LIST, "SysListView32", + LVS_REPORT|LVS_SINGLESEL|WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_BORDER, + 6,28,241,100 + CONTROL "", IDC_DETAIL_VALUE, "RichEdit20W", + ES_READONLY|ES_MULTILINE|WS_TABSTOP, 6,136,241,70 + PUSHBUTTON "&Editar Propriedades...", IDC_EDITPROPERTIES,103,216,70,14 + PUSHBUTTON "&Copiar para Arquivo...", IDC_EXPORT,177,216,70,14 +END + +LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE + +IDD_DETAIL DIALOG 0, 0, 255, 236 CAPTION "Detalhes" STYLE WS_VISIBLE FONT 8, "MS Shell Dlg" @@ -212,7 +391,10 @@ BEGIN PUSHBUTTON "&Copiar para Ficheiro...", IDC_EXPORT,177,216,70,14 END -IDD_HIERARCHY DIALOG DISCARDABLE 0, 0, 255, 236 + +LANGUAGE LANG_PORTUGUESE, SUBLANG_NEUTRAL + +IDD_HIERARCHY DIALOG 0, 0, 255, 236 CAPTION "Caminho de Certificação" STYLE WS_VISIBLE FONT 8, "MS Shell Dlg" @@ -226,7 +408,10 @@ BEGIN WS_BORDER|ES_READONLY|ES_MULTILINE|WS_DISABLED,6,195,245,36 END -IDD_USERNOTICE DIALOG DISCARDABLE 0, 0, 255, 256 + +LANGUAGE LANG_PORTUGUESE, SUBLANG_NEUTRAL + +IDD_USERNOTICE DIALOG 0, 0, 255, 256 CAPTION "Declaração" STYLE WS_VISIBLE FONT 8, "MS Shell Dlg" @@ -237,7 +422,10 @@ BEGIN PUSHBUTTON "&Mais Informação", IDC_CPS,177,216,70,14 END -IDD_CERT_PROPERTIES_GENERAL DIALOG DISCARDABLE 0, 0, 255, 236 + +LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN + +IDD_CERT_PROPERTIES_GENERAL DIALOG 0, 0, 255, 236 CAPTION "Geral" STYLE WS_VISIBLE FONT 8, "MS Shell Dlg" @@ -245,6 +433,31 @@ BEGIN LTEXT "&Nome amigável:", -1, 6,14,60,14 EDITTEXT IDC_FRIENDLY_NAME, 60,12,191,14, ES_AUTOHSCROLL|WS_TABSTOP LTEXT "&Descrição:", -1, 6,32,60,14 + EDITTEXT IDC_DESCRIPTION, 60,30,191,14, ES_AUTOVSCROLL|ES_MULTILINE|WS_TABSTOP|WS_VSCROLL + GROUPBOX "Propósitos do Certificado", -1,6,48,245,165, BS_GROUPBOX + AUTORADIOBUTTON "&Ativar todos os propósitos para este certificado", + IDC_ENABLE_ALL_PURPOSES, 12,58,180,14, BS_AUTORADIOBUTTON|WS_TABSTOP + AUTORADIOBUTTON "D&esativar todos os propósitos para este certificado", + IDC_DISABLE_ALL_PURPOSES, 12,70,180,14, BS_AUTORADIOBUTTON + AUTORADIOBUTTON "A&tivar apenas os seguintes propósitos para este certificado:", + IDC_ENABLE_SELECTED_PURPOSES, 12,82,180,14, BS_AUTORADIOBUTTON + CONTROL "", IDC_CERTIFICATE_USAGES,"SysListView32", + LVS_REPORT|LVS_NOCOLUMNHEADER|LVS_SINGLESEL|WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_BORDER, + 24,100,220,90 + PUSHBUTTON "Adicionar &Propósito...", IDC_ADD_PURPOSE,184,194,60,14 +END + +LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE + +IDD_CERT_PROPERTIES_GENERAL DIALOG 0, 0, 255, 236 +CAPTION "Geral" +STYLE WS_VISIBLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Nome amigável:", -1, 6,14,60,14 + EDITTEXT IDC_FRIENDLY_NAME, 60,12,191,14, ES_AUTOHSCROLL|WS_TABSTOP + LTEXT "&Descrição:" +, -1, 6,32,60,14 EDITTEXT IDC_DESCRIPTION, 60,30,191,14, ES_AUTOVSCROLL|ES_MULTILINE|WS_TABSTOP|WS_VSCROLL GROUPBOX "Propósitos do Certificado", -1,6,48,245,165, BS_GROUPBOX AUTORADIOBUTTON "&Activar todos os propósitos para este certificado", @@ -259,7 +472,23 @@ BEGIN PUSHBUTTON "Adicionar &Propósito...", IDC_ADD_PURPOSE,184,194,60,14 END -IDD_ADD_CERT_PURPOSE DIALOG DISCARDABLE 0,0,200,68 + +LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN + +IDD_ADD_CERT_PURPOSE DIALOG 0,0,200,68 +CAPTION "Adicionar Propósito" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Adicione o identificador de objeto (OID) para o propósito que deseja adicionar:", + -1, 6,6,190,28 + EDITTEXT IDC_NEW_PURPOSE, 6,28,190,14, ES_AUTOVSCROLL|ES_MULTILINE|WS_TABSTOP|WS_VSCROLL + PUSHBUTTON "OK", IDOK, 33,48,60,14 + PUSHBUTTON "Cancelar", IDCANCEL, 100,48,60,14 +END + +LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE + +IDD_ADD_CERT_PURPOSE DIALOG 0,0,200,68 CAPTION "Adicionar Propósito" FONT 8, "MS Shell Dlg" BEGIN @@ -270,7 +499,25 @@ BEGIN PUSHBUTTON "Cancelar", IDCANCEL, 100,48,60,14 END -IDD_SELECT_STORE DIALOG DISCARDABLE 0,0,200,136 + +LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN + +IDD_SELECT_STORE DIALOG 0,0,200,136 +CAPTION "Selecione Conjunto de Certificados" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Selecione o conjunto de certificados que deseja usar:", IDC_STORE_TEXT, 6,6,190,28 + CONTROL "",IDC_STORE_LIST, "SysTreeView32", TVS_HASLINES|WS_BORDER|WS_TABSTOP, + 6,28,188,70 + CHECKBOX "&Mostrar conjuntos físicos", IDC_SHOW_PHYSICAL_STORES, 6,102,90,14, + BS_AUTOCHECKBOX|WS_TABSTOP + PUSHBUTTON "OK", IDOK, 90,118,50,14, BS_DEFPUSHBUTTON + PUSHBUTTON "Cancelar", IDCANCEL, 144,118,50,14 +END + +LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE + +IDD_SELECT_STORE DIALOG 0,0,200,136 CAPTION "Seleccione Conjunto de Certificados" FONT 8, "MS Shell Dlg" BEGIN @@ -283,7 +530,26 @@ BEGIN PUSHBUTTON "Cancelar", IDCANCEL, 144,118,50,14 END -IDD_IMPORT_WELCOME DIALOG DISCARDABLE 0,0,317,143 + +LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN + +IDD_IMPORT_WELCOME DIALOG 0,0,317,143 +CAPTION "Assistente de Importação de Certificados" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Bem-vindo ao Assistente de Importação de Certificados", IDC_IMPORT_TITLE, + 115,7,195,12 + LTEXT "Este assistente vai ajudá-lo a importar certificados, listas de revogação de certificados e listas de certificados confiáveis a partir de um arquivo para um conjunto de certificados.", + -1, 115,26,195,25 + LTEXT "Um certificado pode ser usado para identificá-lo ou ao computador usado na comunicação. Também pode ser usado para autenticação e para assinar mensagens. Conjuntos de certificados são coleções de certificados, listas de revogação de certificados e listas de certificados confiáveis.", + -1, 115,56,195,40 + LTEXT "Para continuar clique em Próximo.", + -1, 115,103,195,8 +END + +LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE + +IDD_IMPORT_WELCOME DIALOG 0,0,317,143 CAPTION "Assistente de Importação de Certificados" FONT 8, "MS Shell Dlg" BEGIN @@ -297,7 +563,29 @@ BEGIN -1, 115,103,195,8 END -IDD_IMPORT_FILE DIALOG DISCARDABLE 0,0,317,178 + +LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN + +IDD_IMPORT_FILE DIALOG 0,0,317,178 +CAPTION "Assistente de Importação de Certificados" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Nome do arquivo:", -1, 21,1,195,10 + EDITTEXT IDC_IMPORT_FILENAME, 21,11,208,14, ES_AUTOHSCROLL|WS_TABSTOP + PUSHBUTTON "&Procurar...", IDC_IMPORT_BROWSE_FILE, 236,11,60,14 + LTEXT "Nota: os seguintes formatos de arquivo podem conter mais que um certificado, lista de revogação de certificados ou lista de certificados confiáveis:", + -1, 21,26,265,16 + LTEXT "Padrão de Sintaxe de Mensagem Criptográfica/Mensagens PKCS #7 (.p7b)", + -1, 31,49,265,10 + LTEXT "Troca de Informações Pessoais/PKCS #12 (.pfx, .p12)", + -1, 31,64,265,10 + LTEXT "Conjunto de Certificados Serializados da Microsoft (.sst)", + -1, 31,79,265,10 +END + +LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE + +IDD_IMPORT_FILE DIALOG 0,0,317,178 CAPTION "Assistente de Importação de Certificados" FONT 8, "MS Shell Dlg" BEGIN @@ -308,13 +596,32 @@ BEGIN -1, 21,26,265,16 LTEXT "Cryptographic Message Syntax Standard/PKCS #7 Messages (.p7b)", -1, 31,49,265,10 - LTEXT "Personal Information Exchange/PKCS #12 (.pfx, .p12)", + LTEXT "Troca de Informações Pessoais/PKCS #12 (.pfx, .p12)", -1, 31,64,265,10 - LTEXT "Microsoft Serialized Certificate Store (.sst)", + LTEXT "Conjunto de Certificados Serializados da Microsoft (.sst)", -1, 31,79,265,10 END -IDD_IMPORT_STORE DIALOG DISCARDABLE 0,0,317,143 + +LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN + +IDD_IMPORT_STORE DIALOG 0,0,317,143 +CAPTION "Assistente de Importação de Certificados" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "O Wine pode automaticamente selecionar o conjunto de certificados ou você pode especificar a localização para os certificados.", + -1, 21,1,195,20 + AUTORADIOBUTTON "&Selecionar conjunto de certificados automaticamente", + IDC_IMPORT_AUTO_STORE, 31,18,180,12, BS_AUTORADIOBUTTON|WS_TABSTOP + AUTORADIOBUTTON "&Colocar todos os certificados no seguinte conjunto:", + IDC_IMPORT_SPECIFY_STORE, 31,30,180,12, BS_AUTORADIOBUTTON + EDITTEXT IDC_IMPORT_STORE, 44,49,185,14, ES_READONLY + PUSHBUTTON "&Procurar...", IDC_IMPORT_BROWSE_STORE, 236,49,60,14 +END + +LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE + +IDD_IMPORT_STORE DIALOG 0,0,317,143 CAPTION "Assistente de Importação de Certificados" FONT 8, "MS Shell Dlg" BEGIN @@ -328,7 +635,27 @@ BEGIN PUSHBUTTON "&Procurar...", IDC_IMPORT_BROWSE_STORE, 236,49,60,14 END -IDD_IMPORT_FINISH DIALOG DISCARDABLE 0,0,317,178 + +LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN + +IDD_IMPORT_FINISH DIALOG 0,0,317,178 +CAPTION "Assistente de Importação de Certificados" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Finalizando o Assistente de Importação de Certificados", IDC_IMPORT_TITLE, + 115,1,195,40 + LTEXT "O Assistente de Importação de Certificados finalizou com sucesso.", + -1, 115,33,195,24 + LTEXT "Foram especificadas as seguintes configurações:", + -1, 115,57,195,12 + CONTROL "", IDC_IMPORT_SETTINGS, "SysListView32", + LVS_REPORT|LVS_NOCOLUMNHEADER|LVS_SINGLESEL|WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_BORDER, + 115,67,174,100 +END + +LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE + +IDD_IMPORT_FINISH DIALOG 0,0,317,178 CAPTION "Assistente de Importação de Certificados" FONT 8, "MS Shell Dlg" BEGIN @@ -343,7 +670,10 @@ BEGIN 115,67,174,100 END -IDD_CERT_MGR DIALOG DISCARDABLE 0,0,335,270 + +LANGUAGE LANG_PORTUGUESE, SUBLANG_NEUTRAL + +IDD_CERT_MGR DIALOG 0,0,335,270 CAPTION "Certificados" FONT 8, "MS Shell Dlg" BEGIN @@ -364,7 +694,27 @@ BEGIN PUSHBUTTON "&Fechar", IDCANCEL, 277,249,51,14, BS_DEFPUSHBUTTON END -IDD_CERT_MGR_ADVANCED DIALOG DISCARDABLE 0,0,248,176 + +LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN + +IDD_CERT_MGR_ADVANCED DIALOG 0,0,248,176 +CAPTION "Opções Avançadas" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Propósito do certificado", -1, 7,7,234,141, BS_GROUPBOX + LTEXT "Selecione um ou mais propósitos a serem listados quando Propósitos Avançados estiver selecionado.", + -1, 14,18,220,16 + LTEXT "&Propósitos de Certificados:", -1, 14,41,90,12, WS_TABSTOP + CONTROL "", IDC_CERTIFICATE_USAGES,"SysListView32", + LVS_REPORT|LVS_NOCOLUMNHEADER|LVS_SINGLESEL|WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_BORDER, + 14,51,220,90 + PUSHBUTTON "OK", IDOK, 132,155,51,14, BS_DEFPUSHBUTTON + PUSHBUTTON "Cancelar", IDCANCEL, 190,155,51,14 +END + +LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE + +IDD_CERT_MGR_ADVANCED DIALOG 0,0,248,176 CAPTION "Opções Avançadas" FONT 8, "MS Shell Dlg" BEGIN @@ -379,13 +729,32 @@ BEGIN PUSHBUTTON "Cancelar", IDCANCEL, 190,155,51,14 END -IDD_EXPORT_WELCOME DIALOG DISCARDABLE 0,0,317,143 + +LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN + +IDD_EXPORT_WELCOME DIALOG 0,0,317,143 +CAPTION "Assistente de Exportação de Certificados" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Bem-vindo ao Assistente de Exportação de Certificados", IDC_EXPORT_TITLE, + 115,7,195,12 + LTEXT "Este assistente vai ajudá-lo a exportar certificados, listas de revogação de certificados e listas de certificados confiáveis a partir de um conjunto de certificados para um arquivo.", + -1, 115,26,195,25 + LTEXT "Um certificado pode ser usado para identificá-lo ou ao computador usado na comunicação. Pode também ser usado para autenticação e para assinar mensagens. Conjuntos de certificados são coleções de certificados, listas de revogação de certificados e listas de certificados confiáveis.", + -1, 115,56,195,40 + LTEXT "Para continuar clique em Próximo.", + -1, 115,103,195,8 +END + +LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE + +IDD_EXPORT_WELCOME DIALOG 0,0,317,143 CAPTION "Assistente de Exportação de Certificados" FONT 8, "MS Shell Dlg" BEGIN LTEXT "Benvindo ao Assistente de Exportação de Certificados", IDC_EXPORT_TITLE, 115,7,195,12 - LTEXT "Este assostente vai ajudá-lo a exportar certificados, listas de revogação de certificados e listas de certificados confiáveis a partir de um conjunto de certificados para um ficheiro.", + LTEXT "Este assistente vai ajudá-lo a exportar certificados, listas de revogação de certificados e listas de certificados confiáveis a partir de um conjunto de certificados para um ficheiro.", -1, 115,26,195,25 LTEXT "Um certificado pode ser usado para identificá-lo ou ao computador de onde está a comunicar. Pode também ser usado para autenticação e para assinar mensagens. Conjuntos de certificados são colecções de certificados, listas de revogação de certificados e listas de certificados confiáveis.", -1, 115,56,195,40 @@ -393,7 +762,25 @@ BEGIN -1, 115,103,195,8 END -IDD_EXPORT_PRIVATE_KEY DIALOG DISCARDABLE 0,0,317,143 + +LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN + +IDD_EXPORT_PRIVATE_KEY DIALOG 0,0,317,143 +CAPTION "Assistente de Exportação de Certificados" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Ao escolher exportar a chave privada será pedida uma palavra chave para proteger a chave privada mais à frente.", -1, 21,1,195,25 + LTEXT "Deseja exportar a chave privada?", -1, 21,27,195,10 + AUTORADIOBUTTON "&Sim, exportar a chave privada", + IDC_EXPORT_PRIVATE_KEY_YES, 31,36,200,12, BS_AUTORADIOBUTTON|WS_TABSTOP + AUTORADIOBUTTON "&Não, não exportar a chave privada", + IDC_EXPORT_PRIVATE_KEY_NO, 31,48,200,12, BS_AUTORADIOBUTTON + LTEXT "", IDC_EXPORT_PRIVATE_KEY_UNAVAILABLE, 21,60,200,24 +END + +LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE + +IDD_EXPORT_PRIVATE_KEY DIALOG 0,0,317,143 CAPTION "Assistente de Exportação de Certificados" FONT 8, "MS Shell Dlg" BEGIN @@ -406,7 +793,22 @@ BEGIN LTEXT "", IDC_EXPORT_PRIVATE_KEY_UNAVAILABLE, 21,60,200,24 END -IDD_EXPORT_PASSWORD DIALOG DISCARDABLE 0,0,317,143 + +LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN + +IDD_EXPORT_PASSWORD DIALOG 0,0,317,143 +CAPTION "Assistente de Exportação de Certificados" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Palavra chave:", -1, 21,1,195,10 + EDITTEXT IDC_EXPORT_PASSWORD, 21,11,208,14, ES_AUTOHSCROLL|WS_TABSTOP + LTEXT "&Confirmar palavra chave:", -1, 21,35,195,10 + EDITTEXT IDC_EXPORT_PASSWORD_CONFIRM, 21,45,208,14, ES_AUTOHSCROLL|WS_TABSTOP +END + +LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE + +IDD_EXPORT_PASSWORD DIALOG 0,0,317,143 CAPTION "Assistente de Exportação de Certificados" FONT 8, "MS Shell Dlg" BEGIN @@ -416,7 +818,37 @@ BEGIN EDITTEXT IDC_EXPORT_PASSWORD_CONFIRM, 21,45,208,14, ES_AUTOHSCROLL|WS_TABSTOP END -IDD_EXPORT_FORMAT DIALOG DISCARDABLE 0,0,317,143 + +LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN + +IDD_EXPORT_FORMAT DIALOG 0,0,317,143 +CAPTION "Assistente de Exportação de Certificados" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Selecione o formato que deseja utilizar:", -1, 21,1,195,10 + AUTORADIOBUTTON "&DER-codificado X.509 (.cer)", + IDC_EXPORT_FORMAT_DER, 31,18,240,12, BS_AUTORADIOBUTTON|WS_TABSTOP + AUTORADIOBUTTON "Ba&se64-codificado X.509 (.cer):", + IDC_EXPORT_FORMAT_BASE64, 31,30,240,12, BS_AUTORADIOBUTTON + AUTORADIOBUTTON "Padrão de Sintaxe de Mensagem &Criptográfica/PKCS #7 Message (.p7b)", + IDC_EXPORT_FORMAT_CMS, 31,42,240,12, BS_AUTORADIOBUTTON + CHECKBOX "&Incluir todos os certificados no caminho do certificado se possível", + IDC_EXPORT_CMS_INCLUDE_CHAIN, 44,57,240,8, BS_AUTOCHECKBOX|WS_TABSTOP|WS_DISABLED + AUTORADIOBUTTON "Troca de Informações &Pessoais/PKCS #12 (.pfx)", + IDC_EXPORT_FORMAT_PFX, 31,72,240,12, BS_AUTORADIOBUTTON|WS_DISABLED + CHECKBOX "Incl&uir todos os certificados no caminho de certificação se possível", + IDC_EXPORT_PFX_INCLUDE_CHAIN, 44,87,240,8, BS_AUTOCHECKBOX|WS_TABSTOP|WS_DISABLED + CHECKBOX "&Ativar criptografia forte", + IDC_EXPORT_PFX_STRONG_ENCRYPTION, 44,102,240,8, + BS_AUTOCHECKBOX|WS_TABSTOP|WS_DISABLED + CHECKBOX "&Apagar a chave privada se a exportação for bem sucedida", + IDC_EXPORT_PFX_DELETE_PRIVATE_KEY, 44,117,240,8, + BS_AUTOCHECKBOX|WS_TABSTOP|WS_DISABLED +END + +LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE + +IDD_EXPORT_FORMAT DIALOG 0,0,317,143 CAPTION "Assistente de Exportação de Certificados" FONT 8, "MS Shell Dlg" BEGIN @@ -427,11 +859,11 @@ BEGIN IDC_EXPORT_FORMAT_BASE64, 31,30,240,12, BS_AUTORADIOBUTTON AUTORADIOBUTTON "&Cryptographic Message Syntax Standard/PKCS #7 Message (.p7b)", IDC_EXPORT_FORMAT_CMS, 31,42,240,12, BS_AUTORADIOBUTTON - CHECKBOX "&Include all certificates in the certification path if possible", - IDC_EXPORT_CMS_INCLUDE_CHAIN, 44,57,240,8, BS_AUTOCHECKBOX|WS_TABSTOP|WS_DISABLED - AUTORADIOBUTTON "&Personal Information Exchange/PKCS #12 (.pfx)", - IDC_EXPORT_FORMAT_PFX, 31,72,240,12, BS_AUTORADIOBUTTON|WS_DISABLED CHECKBOX "&Incluir todos os certificados no caminho de certificação se possível", + IDC_EXPORT_CMS_INCLUDE_CHAIN, 44,57,240,8, BS_AUTOCHECKBOX|WS_TABSTOP|WS_DISABLED + AUTORADIOBUTTON "Troca de Informações &Pessoais/PKCS #12 (.pfx)", + IDC_EXPORT_FORMAT_PFX, 31,72,240,12, BS_AUTORADIOBUTTON|WS_DISABLED + CHECKBOX "Incl&uir todos os certificados no caminho de certificação se possível", IDC_EXPORT_PFX_INCLUDE_CHAIN, 44,87,240,8, BS_AUTOCHECKBOX|WS_TABSTOP|WS_DISABLED CHECKBOX "&Activar cifra forte", IDC_EXPORT_PFX_STRONG_ENCRYPTION, 44,102,240,8, @@ -441,7 +873,21 @@ BEGIN BS_AUTOCHECKBOX|WS_TABSTOP|WS_DISABLED END -IDD_EXPORT_FILE DIALOG DISCARDABLE 0,0,317,143 + +LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN + +IDD_EXPORT_FILE DIALOG 0,0,317,143 +CAPTION "Assistente de Exportação de Certificados" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Nome do arquivo:", -1, 21,1,195,10 + EDITTEXT IDC_EXPORT_FILENAME, 21,11,208,14, ES_AUTOHSCROLL|WS_TABSTOP + PUSHBUTTON "&Procurar...", IDC_EXPORT_BROWSE_FILE, 236,11,60,14 +END + +LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE + +IDD_EXPORT_FILE DIALOG 0,0,317,143 CAPTION "Assistente de Exportação de Certificados" FONT 8, "MS Shell Dlg" BEGIN @@ -450,7 +896,27 @@ BEGIN PUSHBUTTON "&Procurar...", IDC_EXPORT_BROWSE_FILE, 236,11,60,14 END -IDD_EXPORT_FINISH DIALOG DISCARDABLE 0,0,317,178 + +LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN + +IDD_EXPORT_FINISH DIALOG 0,0,317,178 +CAPTION "Assistente de Exportação de Certificados" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Finalizando o Assistente de Exportação de Certificados", IDC_EXPORT_TITLE, + 115,1,195,40 + LTEXT "O Assistente de Exportação de Certificados finalizou com sucesso.", + -1, 115,33,195,24 + LTEXT "Foram especificadas as seguintes configurações:", + -1, 115,57,195,12 + CONTROL "", IDC_EXPORT_SETTINGS, "SysListView32", + LVS_REPORT|LVS_NOCOLUMNHEADER|LVS_SINGLESEL|WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_BORDER, + 115,67,174,100 +END + +LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE + +IDD_EXPORT_FINISH DIALOG 0,0,317,178 CAPTION "Assistente de Exportação de Certificados" FONT 8, "MS Shell Dlg" BEGIN diff --git a/dll/win32/cryptui/cryptui_Ro.rc b/dll/win32/cryptui/cryptui_Ro.rc index 28f4d185f95..c49c1978e58 100644 --- a/dll/win32/cryptui/cryptui_Ro.rc +++ b/dll/win32/cryptui/cryptui_Ro.rc @@ -26,7 +26,7 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL #pragma code_page(65001) -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_CERTIFICATE "Certificat" IDS_CERTIFICATEINFORMATION "Informații certificat" @@ -177,7 +177,7 @@ STRINGTABLE DISCARDABLE IDS_EXPORT_PRIVATE_KEY_NON_EXPORTABLE "Notă: Cheia privată pentru acest certificat nu este exportabilă." } -IDD_GENERAL DIALOG DISCARDABLE 0, 0, 255, 236 +IDD_GENERAL DIALOG 0, 0, 255, 236 CAPTION "General" STYLE WS_VISIBLE FONT 8, "MS Shell Dlg" @@ -197,7 +197,7 @@ BEGIN PUSHBUTTON "&Declarația emitentului", IDC_ISSUERSTATEMENT,172,216,75,14 END -IDD_DETAIL DIALOG DISCARDABLE 0, 0, 255, 236 +IDD_DETAIL DIALOG 0, 0, 255, 236 CAPTION "Detalii" STYLE WS_VISIBLE FONT 8, "MS Shell Dlg" @@ -214,7 +214,7 @@ BEGIN PUSHBUTTON "&Copiere în fișier...", IDC_EXPORT,177,216,70,14 END -IDD_HIERARCHY DIALOG DISCARDABLE 0, 0, 255, 236 +IDD_HIERARCHY DIALOG 0, 0, 255, 236 CAPTION "Cale de certificare" STYLE WS_VISIBLE FONT 8, "MS Shell Dlg" @@ -228,7 +228,7 @@ BEGIN WS_BORDER|ES_READONLY|ES_MULTILINE|WS_DISABLED,6,195,245,36 END -IDD_USERNOTICE DIALOG DISCARDABLE 0, 0, 255, 256 +IDD_USERNOTICE DIALOG 0, 0, 255, 256 CAPTION "Declinare a responsabilității" STYLE WS_VISIBLE FONT 8, "MS Shell Dlg" @@ -239,7 +239,7 @@ BEGIN PUSHBUTTON "Alte &informații", IDC_CPS,177,216,70,14 END -IDD_CERT_PROPERTIES_GENERAL DIALOG DISCARDABLE 0, 0, 255, 236 +IDD_CERT_PROPERTIES_GENERAL DIALOG 0, 0, 255, 236 CAPTION "General" STYLE WS_VISIBLE FONT 8, "MS Shell Dlg" @@ -261,7 +261,7 @@ BEGIN PUSHBUTTON "Adăugare &rol...", IDC_ADD_PURPOSE,184,194,60,14 END -IDD_ADD_CERT_PURPOSE DIALOG DISCARDABLE 0,0,200,68 +IDD_ADD_CERT_PURPOSE DIALOG 0,0,200,68 CAPTION "Adăugare rol" FONT 8, "MS Shell Dlg" BEGIN @@ -272,7 +272,7 @@ BEGIN PUSHBUTTON "Renunță", IDCANCEL, 100,48,60,14 END -IDD_SELECT_STORE DIALOG DISCARDABLE 0,0,200,136 +IDD_SELECT_STORE DIALOG 0,0,200,136 CAPTION "Selectați depozitul de certificate" FONT 8, "MS Shell Dlg" BEGIN @@ -285,7 +285,7 @@ BEGIN PUSHBUTTON "Renunță", IDCANCEL, 144,118,50,14 END -IDD_IMPORT_WELCOME DIALOG DISCARDABLE 0,0,317,143 +IDD_IMPORT_WELCOME DIALOG 0,0,317,143 CAPTION "Asistent de importare a certificatelor" FONT 8, "MS Shell Dlg" BEGIN @@ -299,7 +299,7 @@ BEGIN -1, 115,103,195,8 END -IDD_IMPORT_FILE DIALOG DISCARDABLE 0,0,317,178 +IDD_IMPORT_FILE DIALOG 0,0,317,178 CAPTION "Asistent de importare a certificatelor" FONT 8, "MS Shell Dlg" BEGIN @@ -316,7 +316,7 @@ BEGIN -1, 31,83,265,10 END -IDD_IMPORT_STORE DIALOG DISCARDABLE 0,0,317,143 +IDD_IMPORT_STORE DIALOG 0,0,317,143 CAPTION "Asistent de importare a certificatelor" FONT 8, "MS Shell Dlg" BEGIN @@ -330,7 +330,7 @@ BEGIN PUSHBUTTON "Naviga&re...", IDC_IMPORT_BROWSE_STORE, 236,49,60,14 END -IDD_IMPORT_FINISH DIALOG DISCARDABLE 0,0,317,178 +IDD_IMPORT_FINISH DIALOG 0,0,317,178 CAPTION "Asistent de importare a certificatelor" FONT 8, "MS Shell Dlg" BEGIN @@ -345,7 +345,7 @@ BEGIN 115,67,174,100 END -IDD_CERT_MGR DIALOG DISCARDABLE 0,0,335,270 +IDD_CERT_MGR DIALOG 0,0,335,270 CAPTION "Certificate" FONT 8, "MS Shell Dlg" BEGIN @@ -366,7 +366,7 @@ BEGIN PUSHBUTTON "În&chide", IDCANCEL, 277,249,51,14, BS_DEFPUSHBUTTON END -IDD_CERT_MGR_ADVANCED DIALOG DISCARDABLE 0,0,248,176 +IDD_CERT_MGR_ADVANCED DIALOG 0,0,248,176 CAPTION "Opțiuni avansate" FONT 8, "MS Shell Dlg" BEGIN @@ -381,7 +381,7 @@ BEGIN PUSHBUTTON "Renunță", IDCANCEL, 190,155,51,14 END -IDD_EXPORT_WELCOME DIALOG DISCARDABLE 0,0,317,143 +IDD_EXPORT_WELCOME DIALOG 0,0,317,143 CAPTION "Asistent de exportare a certificatelor" FONT 8, "MS Shell Dlg" BEGIN @@ -395,7 +395,7 @@ BEGIN -1, 115,103,195,8 END -IDD_EXPORT_PRIVATE_KEY DIALOG DISCARDABLE 0,0,317,143 +IDD_EXPORT_PRIVATE_KEY DIALOG 0,0,317,143 CAPTION "Asistent de exportare a certificatelor" FONT 8, "MS Shell Dlg" BEGIN @@ -408,7 +408,7 @@ BEGIN LTEXT "", IDC_EXPORT_PRIVATE_KEY_UNAVAILABLE, 21,60,200,24 END -IDD_EXPORT_PASSWORD DIALOG DISCARDABLE 0,0,317,143 +IDD_EXPORT_PASSWORD DIALOG 0,0,317,143 CAPTION "Asistent de exportare a certificatelor" FONT 8, "MS Shell Dlg" BEGIN @@ -418,7 +418,7 @@ BEGIN EDITTEXT IDC_EXPORT_PASSWORD_CONFIRM, 21,45,208,14, ES_AUTOHSCROLL|WS_TABSTOP END -IDD_EXPORT_FORMAT DIALOG DISCARDABLE 0,0,317,143 +IDD_EXPORT_FORMAT DIALOG 0,0,317,143 CAPTION "Asistent de exportare a certificatelor" FONT 8, "MS Shell Dlg" BEGIN @@ -443,7 +443,7 @@ BEGIN BS_AUTOCHECKBOX|WS_TABSTOP|WS_DISABLED END -IDD_EXPORT_FILE DIALOG DISCARDABLE 0,0,317,143 +IDD_EXPORT_FILE DIALOG 0,0,317,143 CAPTION "Asistent de exportare a certificatelor" FONT 8, "MS Shell Dlg" BEGIN @@ -452,7 +452,7 @@ BEGIN PUSHBUTTON "Naviga&re...", IDC_EXPORT_BROWSE_FILE, 236,11,60,14 END -IDD_EXPORT_FINISH DIALOG DISCARDABLE 0,0,317,178 +IDD_EXPORT_FINISH DIALOG 0,0,317,178 CAPTION "Asistent de exportare a certificatelor" FONT 8, "MS Shell Dlg" BEGIN diff --git a/dll/win32/cryptui/cryptui_Uk.rc b/dll/win32/cryptui/cryptui_Uk.rc new file mode 100644 index 00000000000..11e9e4abe3f --- /dev/null +++ b/dll/win32/cryptui/cryptui_Uk.rc @@ -0,0 +1,468 @@ +/* + * cryptui dll resources + * + * Copyright 2008 Juan Lang + * 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 "cryptuires.h" + +/* UTF-8 */ +#pragma code_page(65001) + +LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT + +STRINGTABLE +{ + IDS_CERTIFICATE "Сертифікат" + IDS_CERTIFICATEINFORMATION "Інформація про сертифікат" + IDS_CERT_INFO_BAD_SIG "Цей сертифікат має недійсний підпис. Сертифікат може бути змінений або пошкоджений." + IDS_CERT_INFO_UNTRUSTED_CA "Цей кореневий сертифікат не є довіреним. Щоб довіряти йому, додайте його в системне сховище довірених кореневих сертифікатів." + IDS_CERT_INFO_UNTRUSTED_ROOT "Даний сертифікат не може бути затверджений як довірений кореневий сертифікат." + IDS_CERT_INFO_PARTIAL_CHAIN "Не знайдено видавця даного сертифікату." + IDS_CERT_INFO_BAD_PURPOSES "Неможливо перевірити всі цілі призначення цього сертифікату." + IDS_CERT_INFO_PURPOSES "Цей сертифікат призначений для наступних цілей:" + IDS_SUBJECT_HEADING "Кому видано: " + IDS_ISSUER_HEADING "Ким видано: " + IDS_VALID_FROM "Дійсний з " + IDS_VALID_TO " до " + IDS_CERTIFICATE_BAD_SIGNATURE "Цей сертифікат має недійсний підпис." + IDS_CERTIFICATE_BAD_TIME "Час дії цього сертифікату закінчився або ще не розпочався." + IDS_CERTIFICATE_BAD_TIMENEST "Термін дії цього сертифікату перевищує вказаний його видавцем." + IDS_CERTIFICATE_REVOKED "Цей сертифікат був анульований його видавцем." + IDS_CERTIFICATE_VALID "Цей сертифікат дійсний." + IDS_FIELD "Поле" + IDS_VALUE "Значення" + IDS_FIELDS_ALL "<Всі>" + IDS_FIELDS_V1 "Лише поля версії 1" + IDS_FIELDS_EXTENSIONS "Лише розширення" + IDS_FIELDS_CRITICAL_EXTENSIONS "Лише критичні розширення" + IDS_FIELDS_PROPERTIES "Лише властивості" + IDS_FIELD_VERSION "Версія" + IDS_FIELD_SERIAL_NUMBER "Серійний номер" + IDS_FIELD_ISSUER "Видавець" + IDS_FIELD_VALID_FROM "Дійсний з" + IDS_FIELD_VALID_TO "Дійсний до" + IDS_FIELD_SUBJECT "Предмет" + IDS_FIELD_PUBLIC_KEY "Публічний ключ" + IDS_FIELD_PUBLIC_KEY_FORMAT "%s (%d bits)" + IDS_PROP_HASH "SHA1 hash" + IDS_PROP_ENHKEY_USAGE "Розширене використання ключа (властивість)" + IDS_PROP_FRIENDLY_NAME "Дружня назва" + IDS_PROP_DESCRIPTION "Опис" + IDS_CERTIFICATE_PROPERTIES "Властивості сертифікату" + IDS_CERTIFICATE_PURPOSE_ERROR "Будь-ласка, введіть OID в формі 1.2.3.4" + IDS_CERTIFICATE_PURPOSE_EXISTS "OID, який ви ввели, вже існує." + IDS_SELECT_STORE_TITLE "Вибір сховища сертифікатів" + IDS_SELECT_STORE "Будь-ласка, виберіть сховище сертифікатів." + IDS_IMPORT_WIZARD "Майстер імпорту сертифікатів" + IDS_IMPORT_TYPE_MISMATCH "Файл містить об'єкти, що не відповідають заданим критеріям. Виберіть інший файл." + IDS_IMPORT_FILE_TITLE "Файл для імпорту" + IDS_IMPORT_FILE_SUBTITLE "Виберіть файл, який треба імпортувати." + IDS_IMPORT_STORE_TITLE "Сховище сертифікатів" + IDS_IMPORT_STORE_SUBTITLE "Сховища сертифікатів це колекції сертифікатів, списки анульованих сертифікатів, та списки довірених сертифікатів." + IDS_IMPORT_FILTER_CERT "Сертифікат X.509 (*.cer; *.crt)" + IDS_IMPORT_FILTER_PFX "Обмін особистою інформацією (*.pfx; *.p12)" + IDS_IMPORT_FILTER_CRL "Список анульованих сертифікатів (*.crl)" + IDS_IMPORT_FILTER_CTL "Список довірених сертифікатів (*.stl)" + IDS_IMPORT_FILTER_SERIALIZED_STORE "Сховище серійних сертифікатів Microsoft (*.sst)" + IDS_IMPORT_FILTER_CMS "Повідомлення CMS/PKCS #7 (*.spc; *.p7b)" + IDS_IMPORT_FILTER_ALL "Всі файли (*.*)" + IDS_IMPORT_EMPTY_FILE "Виберіть файл." + IDS_IMPORT_BAD_FORMAT "Формат файлу не розпізнаний. Виберіть інший файл." + IDS_IMPORT_OPEN_FAILED "Неможливо відкрити " + IDS_IMPORT_DEST_DETERMINED "Визначено програмою" + IDS_IMPORT_SELECT_STORE "Виберіть сховище" + IDS_IMPORT_STORE_SELECTION "Сховище сертифікатів вибране" + IDS_IMPORT_DEST_AUTOMATIC "Автоматично визначено програмою" + IDS_IMPORT_FILE "Файл" + IDS_IMPORT_CONTENT "Вміст" + IDS_IMPORT_CONTENT_CERT "Сертифікат" + IDS_IMPORT_CONTENT_CRL "Список анульованих сертифікатів" + IDS_IMPORT_CONTENT_CTL "Список довірених сертифікатів" + IDS_IMPORT_CONTENT_CMS "Повідомлення CMS/PKCS #7" + IDS_IMPORT_CONTENT_PFX "Обмін особистою інформацією" + IDS_IMPORT_CONTENT_STORE "Сховище сертифікатів" + IDS_IMPORT_SUCCEEDED "Імпорт завершено успішно." + IDS_IMPORT_FAILED "Імпорт не вдався." + IDS_WIZARD_TITLE_FONT "Arial" + IDS_PURPOSE_ALL "<Всі>" + IDS_PURPOSE_ADVANCED "<Розширені цілі>" + IDS_SUBJECT_COLUMN "Кому видано" + IDS_ISSUER_COLUMN "Ким видано" + IDS_EXPIRATION_COLUMN "Дата закінчення дії" + IDS_FRIENDLY_NAME_COLUMN "Дружня назва" + IDS_ALLOWED_PURPOSE_ALL "<Всі>" + IDS_ALLOWED_PURPOSE_NONE "<Немає>" + IDS_WARN_REMOVE_MY "Ви більше не зможете розшифровувати чи підписувати повідомлення цим сертифікатом.\nВи дійсно хочете видалити цей сертифікат?" + IDS_WARN_REMOVE_PLURAL_MY "Ви більше не зможете розшифровувати чи підписувати повідомлення цими сертифікатами.\nВи дійсно хочете видалити ці сертифікати?" + IDS_WARN_REMOVE_ADDRESSBOOK "Ви більше не зможете зашифровувати чи перевіряти повідомлення цим сертифікатом.\nВи дійсно хочете видалити цей сертифікат?" + IDS_WARN_REMOVE_PLURAL_ADDRESSBOOK "Ви більше не зможете зашифровувати чи перевіряти повідомлення цими сертифікатами.\nВи дійсно хочете видалити ці сертифікати?" + IDS_WARN_REMOVE_CA "Сертифікати, видані цим органом сертифікації, втратять довіру.\nВи дійсно хочете видалити цей сертифікат?" + IDS_WARN_REMOVE_PLURAL_CA "Сертифікати, видані цими органами сертифікації, втратять довіру.\nВи дійсно хочете видалити ці сертифікати?" + IDS_WARN_REMOVE_ROOT "Сертифікати, видані цим органом кореневої сертифікації, чи іншим органом сертифікації, який їх видав, втратять довіру.\nВи дійсно хочете видалити цей довірений кореневий сертифікат?" + IDS_WARN_REMOVE_PLURAL_ROOT "Сертифікати, видані цими органами кореневої сертифікації, чи іншими органами сертифікації, які їх видали, втратять довіру.\nВи дійсно хочете видалити ці довірені кореневі сертифікати?" + IDS_WARN_REMOVE_TRUSTEDPUBLISHER "ПЗ, підписане цим видавцем втратить довіру.\nВи дійсно хочете видалити цей сертифікат?" + IDS_WARN_REMOVE_PLURAL_TRUSTEDPUBLISHER "ПЗ, підписане цими видавцями втратить довіру.\nВи дійсно хочете видалити ці сертифікати?" + IDS_WARN_REMOVE_DEFAULT "Ви дійсно хочете видалити цей сертифікат?" + IDS_WARN_REMOVE_PLURAL_DEFAULT "Ви дійсно хочете видалити ці сертифікати?" + IDS_CERT_MGR "Сертифікати" + IDS_FRIENDLY_NAME_NONE "<Немає>" + IDS_PURPOSE_SERVER_AUTH "Забезпечує ідентифікацію віддаленого комп'ютера" + IDS_PURPOSE_CLIENT_AUTH "Забезпечує ваше виявлення на віддаленому комп'ютері" + IDS_PURPOSE_CODE_SIGNING "Гарантує, що програмне забезпечення прийшло від\n видавця ПЗ.Захищає ПЗ від змін після публікації" + IDS_PURPOSE_EMAIL_PROTECTION "Захищає повідомлення e-mail" + IDS_PURPOSE_IPSEC "Забезпечує безпечний зв'язок через Інтернет" + IDS_PURPOSE_TIMESTAMP_SIGNING "Дозволяє підписати дані поточним часом" + IDS_PURPOSE_CTL_USAGE_SIGNING "Дозвіл на цифровий підпис списку довірених сертифікатів" + IDS_PURPOSE_EFS "Дозволяє шифрувати дані на диску" + IDS_PURPOSE_EFS_RECOVERY "Відновлення файлів" + IDS_PURPOSE_WHQL "Перевірка драйверів обладнання Windows" + IDS_PURPOSE_NT5 "Перевірка системних компонентів Windows" + IDS_PURPOSE_OEM_WHQL "Перевірка системних компонентів OEM Windows" + IDS_PURPOSE_EMBEDDED_NT "Перевірка системних компонентів Embedded Windows" + IDS_PURPOSE_ROOT_LIST_SIGNER "Особа, що підписала кореневий список" + IDS_PURPOSE_QUALIFIED_SUBORDINATION "Кваліфікована субординація" + IDS_PURPOSE_KEY_RECOVERY "Відновлення ключів" + IDS_PURPOSE_DOCUMENT_SIGNING "Підписання документу" + IDS_PURPOSE_LIFETIME_SIGNING "Підписання на час життя" + IDS_PURPOSE_DRM "Цифрові права" + IDS_PURPOSE_LICENSES "Ліцензії пакету ключів" + IDS_PURPOSE_LICENSE_SERVER "Перевірка сервера ліцензії" + IDS_PURPOSE_ENROLLMENT_AGENT "Агент запиту сертифікату" + IDS_PURPOSE_SMARTCARD_LOGON "Вхід для смарт-карт" + IDS_PURPOSE_CA_EXCHANGE "Архівний приватний ключ" + IDS_PURPOSE_KEY_RECOVERY_AGENT "Агент відновлення ключів" + IDS_PURPOSE_DS_EMAIL_REPLICATION "Тиражування Email служби каталогів" + IDS_EXPORT_WIZARD "Майстер експорту сертифікатів" + IDS_EXPORT_FORMAT_TITLE "Формат експорту" + IDS_EXPORT_FORMAT_SUBTITLE "Виберіть формат, в якому буде збережено вміст." + IDS_EXPORT_FILE_TITLE "Назва експортованого файлу" + IDS_EXPORT_FILE_SUBTITLE "Вкажіть ім'я файлу, в якому буде збережений вміст." + IDS_EXPORT_FILE_EXISTS "Вказаний файл вже існує. Ви хочете його замінити?" + IDS_EXPORT_FILTER_CERT "DER-Encoded Binary X.509 (*.cer)" + IDS_EXPORT_FILTER_BASE64_CERT "Base64-Encoded X.509 (*.cer)" + IDS_EXPORT_FILTER_CRL "Список анульованих сертифікатів (*.crl)" + IDS_EXPORT_FILTER_CTL "Список довірених сертифікатів (*.stl)" + IDS_EXPORT_FILTER_CMS "Повідомлення CMS/PKCS #7 (*.p7b)" + IDS_EXPORT_FILTER_PFX "Обмін особистою інформацією (*.pfx)" + IDS_EXPORT_FILTER_SERIALIZED_CERT_STORE "Сховище серійних сертифікатів (*.sst)" + IDS_EXPORT_FORMAT "Формат файлу" + IDS_EXPORT_INCLUDE_CHAIN "Включити всі сертифікати за вказаним шляхом" + IDS_EXPORT_KEYS "Експортовані ключі" + IDS_YES "Так" + IDS_NO "Ні" + IDS_EXPORT_SUCCEEDED "Експорт завершено успішно." + IDS_EXPORT_FAILED "Експорт не вдався." + IDS_EXPORT_PRIVATE_KEY_TITLE "Експорт приватного ключа" + IDS_EXPORT_PRIVATE_KEY_SUBTITLE "Сертифікат містить приватний ключ, який може бути експортований разом з сертифікатом." + IDS_EXPORT_PASSWORD_TITLE "Введіть пароль" + IDS_EXPORT_PASSWORD_SUBTITLE "Ви можете захистити паролем привантий ключ." + IDS_EXPORT_PASSWORD_MISMATCH "Паролі не співпадають." + IDS_EXPORT_PRIVATE_KEY_UNAVAILABLE "Увага: Приватний ключ для цього сертифікату не може бути відкритий." + IDS_EXPORT_PRIVATE_KEY_NON_EXPORTABLE "Увага: Приватний ключ для цього сертифікату не може бути експортований." +} + +IDD_GENERAL DIALOG 0, 0, 255, 236 +CAPTION "Загальні" +STYLE WS_VISIBLE +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "", -1, "Static", WS_BORDER|SS_WHITERECT, 6,10,241,200 + CONTROL "", IDC_CERTIFICATE_ICON,"RichEdit20W", + ES_READONLY|WS_DISABLED,8,11,26,26 + CONTROL "", IDC_CERTIFICATE_INFO,"RichEdit20W", + ES_READONLY|WS_DISABLED,34,11,212,26 + CONTROL "", -1, "Static", SS_BLACKFRAME, 16,37,222,1 + CONTROL "", IDC_CERTIFICATE_STATUS,"RichEdit20W", + ES_READONLY|ES_MULTILINE,8,38,238,78 + CONTROL "", -1, "Static", SS_BLACKFRAME, 16,116,222,1 + CONTROL "", IDC_CERTIFICATE_NAMES,"RichEdit20W", + ES_READONLY|ES_MULTILINE|WS_DISABLED,8,118,238,90 + PUSHBUTTON "&Встановити сертифікат...", IDC_ADDTOSTORE,83,216,90,14 + PUSHBUTTON "&Заява видавця", IDC_ISSUERSTATEMENT,177,216,70,14 +END + +IDD_DETAIL DIALOG 0, 0, 255, 236 +CAPTION "Деталі" +STYLE WS_VISIBLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Показати:", -1, 6,12,40,14 + COMBOBOX IDC_DETAIL_SELECT, 40,10,100,14, + CBS_DROPDOWNLIST|WS_BORDER|WS_VSCROLL|WS_TABSTOP + CONTROL "", IDC_DETAIL_LIST, "SysListView32", + LVS_REPORT|LVS_SINGLESEL|WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_BORDER, + 6,28,241,100 + CONTROL "", IDC_DETAIL_VALUE, "RichEdit20W", + ES_READONLY|ES_MULTILINE|WS_TABSTOP, 6,136,241,70 + PUSHBUTTON "&Змінити властивості...", IDC_EDITPROPERTIES,91,216,80,14 + PUSHBUTTON "&Копіювати в файл...", IDC_EXPORT,175,216,72,14 +END + +IDD_HIERARCHY DIALOG 0, 0, 255, 236 +CAPTION "Шлях сертифікації" +STYLE WS_VISIBLE +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "&Шлях сертифікації", -1,6,10,245,165, BS_GROUPBOX + CONTROL "",IDC_CERTPATH, "SysTreeView32", TVS_HASLINES|WS_BORDER, + 13,22,231,130 + PUSHBUTTON "&Перегляд сертифікату", IDC_VIEWCERTIFICATE,167,156,78,14 + LTEXT "&Стан сертифікату:", IDC_CERTIFICATESTATUS,6,183,70,14 + CONTROL "", IDC_CERTIFICATESTATUSTEXT,"RichEdit20W", + WS_BORDER|ES_READONLY|ES_MULTILINE|WS_DISABLED,6,195,245,36 +END + +IDD_USERNOTICE DIALOG 0, 0, 255, 256 +CAPTION "Відмова" +STYLE WS_VISIBLE +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "", IDC_USERNOTICE,"RichEdit20W", + WS_BORDER|ES_READONLY|ES_MULTILINE|WS_DISABLED,6,10,241,200 + PUSHBUTTON "Закрити", IDOK,103,216,70,14 + PUSHBUTTON "&Детальніше", IDC_CPS,177,216,70,14 +END + +IDD_CERT_PROPERTIES_GENERAL DIALOG 0, 0, 255, 236 +CAPTION "Загальні" +STYLE WS_VISIBLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Дружня назва:", -1, 6,14,60,14 + EDITTEXT IDC_FRIENDLY_NAME, 60,12,191,14, ES_AUTOHSCROLL|WS_TABSTOP + LTEXT "&Опис:", -1, 6,32,60,14 + EDITTEXT IDC_DESCRIPTION, 60,30,191,14, ES_AUTOVSCROLL|ES_MULTILINE|WS_TABSTOP|WS_VSCROLL + GROUPBOX "Цілі сертифікату", -1,6,48,245,165, BS_GROUPBOX + AUTORADIOBUTTON "&Ввімкнути всі цілі для цього сертифікату", + IDC_ENABLE_ALL_PURPOSES, 12,58,180,14, BS_AUTORADIOBUTTON|WS_TABSTOP + AUTORADIOBUTTON "В&имкнути всі цілі для цього сертифікату", + IDC_DISABLE_ALL_PURPOSES, 12,70,180,14, BS_AUTORADIOBUTTON + AUTORADIOBUTTON "Ввімкнути &лише наступні цілі для цього сертифікату:", + IDC_ENABLE_SELECTED_PURPOSES, 12,82,188,14, BS_AUTORADIOBUTTON + CONTROL "", IDC_CERTIFICATE_USAGES,"SysListView32", + LVS_REPORT|LVS_NOCOLUMNHEADER|LVS_SINGLESEL|WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_BORDER, + 24,100,220,90 + PUSHBUTTON "Додати &ціль...", IDC_ADD_PURPOSE,184,194,60,14 +END + +IDD_ADD_CERT_PURPOSE DIALOG 0,0,200,68 +CAPTION "Додати ціль" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Додайте ідентифікатор об'єкту (OID) для цілі сертифікату, що ви хочете додати:", + -1, 6,6,190,28 + EDITTEXT IDC_NEW_PURPOSE, 6,28,190,14, ES_AUTOVSCROLL|ES_MULTILINE|WS_TABSTOP|WS_VSCROLL + PUSHBUTTON "OK", IDOK, 33,48,60,14 + PUSHBUTTON "Скасувати", IDCANCEL, 100,48,60,14 +END + +IDD_SELECT_STORE DIALOG 0,0,200,136 +CAPTION "Вибір сховища сертифікатів" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Виберіть потрібне сховище сертифікатів:", IDC_STORE_TEXT, 6,6,190,28 + CONTROL "",IDC_STORE_LIST, "SysTreeView32", TVS_HASLINES|WS_BORDER|WS_TABSTOP, + 6,28,188,70 + CHECKBOX "&Показати фізичні сховища", IDC_SHOW_PHYSICAL_STORES, 6,102,102,14, + BS_AUTOCHECKBOX|WS_TABSTOP + PUSHBUTTON "OK", IDOK, 90,118,50,14, BS_DEFPUSHBUTTON + PUSHBUTTON "Скасувати", IDCANCEL, 144,118,50,14 +END + +IDD_IMPORT_WELCOME DIALOG 0,0,317,143 +CAPTION "Майстер імпорту сертифікатів" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Вас вітає Майстер імпорту сертифікатів", IDC_IMPORT_TITLE, + 115,7,195,12 + LTEXT "Цей майстер допоможе імпортувати сертифікати, списки анульованих сертифікатів та списки довірених сертифікатів з файлу до сховища сертифікатів.", + -1, 115,26,195,25 + LTEXT "Сертифікат може бути використаний для вашої ідентифікації або ідентифікації комп'ютера, з яким ви з'єднані. Також він може бути використаний для завірення і для підписуваня повідомлень. Сховищами сертифікатів є колекції сертифікатів, списки анульованих сертифікатів та списки довірених сертифікатів.", + -1, 115,52,195,48 + LTEXT "Для продовження натисніть Далі.", + -1, 115,103,195,8 +END + +IDD_IMPORT_FILE DIALOG 0,0,317,178 +CAPTION "Майстер імпорту сертифікатів" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Ім'я файлу:", -1, 21,1,195,10 + EDITTEXT IDC_IMPORT_FILENAME, 21,11,208,14, ES_AUTOHSCROLL|WS_TABSTOP + PUSHBUTTON "&Огляд...", IDC_IMPORT_BROWSE_FILE, 236,11,60,14 + LTEXT "Увага: Наступні формати файлів можуть містити більше одного сертифікату, списку анульованих сертифікатів, чи списку довірених сертифікатів:", + -1, 21,26,265,16 + LTEXT "Cryptographic Message Syntax Standard/PKCS #7 Messages (.p7b)", + -1, 31,49,265,10 + LTEXT "Обмін особистою інформацією/PKCS #12 (.pfx, .p12)", + -1, 31,64,265,10 + LTEXT "Сховище серійних сертифікатів Microsoft (.sst)", + -1, 31,79,265,10 +END + +IDD_IMPORT_STORE DIALOG 0,0,317,143 +CAPTION "Майстер імпорту сертифікатів" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Wine може автоматично вибрати сховище сертифікатів, або ви можете вказати місце для сертифікатів.", + -1, 21,1,195,20 + AUTORADIOBUTTON "&Автоматично вибрати сховище сертифікатів", + IDC_IMPORT_AUTO_STORE, 31,18,180,12, BS_AUTORADIOBUTTON|WS_TABSTOP + AUTORADIOBUTTON "&Помістити всі сертифікати в наступне сховище:", + IDC_IMPORT_SPECIFY_STORE, 31,30,180,12, BS_AUTORADIOBUTTON + EDITTEXT IDC_IMPORT_STORE, 44,49,185,14, ES_READONLY + PUSHBUTTON "&Огляд...", IDC_IMPORT_BROWSE_STORE, 236,49,60,14 +END + +IDD_IMPORT_FINISH DIALOG 0,0,317,178 +CAPTION "Майстер імпорту сертифікатів" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Завершення роботи Майстра імпорту сертифікатів", IDC_IMPORT_TITLE, + 115,1,195,40 + LTEXT "Майстер імпорту сертифікатів завершив роботу успішно.", + -1, 115,33,195,24 + LTEXT "Ви вказали наступні параметри:", + -1, 115,57,195,12 + CONTROL "", IDC_IMPORT_SETTINGS, "SysListView32", + LVS_REPORT|LVS_NOCOLUMNHEADER|LVS_SINGLESEL|WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_BORDER, + 115,67,174,100 +END + +IDD_CERT_MGR DIALOG 0,0,335,270 +CAPTION "Сертифікати" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Призначена ціль:", -1, 7,9,100,12 + COMBOBOX IDC_MGR_PURPOSE_SELECTION, 83,7,245,14, + CBS_DROPDOWNLIST|WS_BORDER|WS_VSCROLL|WS_TABSTOP + CONTROL "", IDC_MGR_STORES, "SysTabControl32", + WS_CLIPSIBLINGS|WS_TABSTOP, 7,25,321,140 + CONTROL "", IDC_MGR_CERTS, "SysListView32", + LVS_REPORT|WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_BORDER, 15,46,305,111 + PUSHBUTTON "&Імпорт...", IDC_MGR_IMPORT, 7,172,51,14 + PUSHBUTTON "&Експорт...", IDC_MGR_EXPORT, 62,172,51,14, WS_DISABLED + PUSHBUTTON "&Видалити", IDC_MGR_REMOVE, 117,172,51,14, WS_DISABLED + PUSHBUTTON "&Додатково...", IDC_MGR_ADVANCED, 277,172,51,14 + GROUPBOX "Призначені цілі сертифікату", -1,7,194,321,47, BS_GROUPBOX + LTEXT "", IDC_MGR_PURPOSES, 13,208,252,30 + PUSHBUTTON "Пе&регляд...", IDC_MGR_VIEW, 269,218,51,14, WS_DISABLED + PUSHBUTTON "&Закрити", IDCANCEL, 277,249,51,14, BS_DEFPUSHBUTTON +END + +IDD_CERT_MGR_ADVANCED DIALOG 0,0,248,176 +CAPTION "Додаткові параметри" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Ціль сертифікату", -1, 7,7,234,141, BS_GROUPBOX + LTEXT "Виберіть одну чи кілька цілей, які будуть в списку при вибраному пункті Додаткові цілі.", + -1, 14,18,220,16 + LTEXT "&Цілі сертифікату:", -1, 14,41,90,12, WS_TABSTOP + CONTROL "", IDC_CERTIFICATE_USAGES,"SysListView32", + LVS_REPORT|LVS_NOCOLUMNHEADER|LVS_SINGLESEL|WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_BORDER, + 14,51,220,90 + PUSHBUTTON "OK", IDOK, 132,155,51,14, BS_DEFPUSHBUTTON + PUSHBUTTON "Скасувати", IDCANCEL, 190,155,51,14 +END + +IDD_EXPORT_WELCOME DIALOG 0,0,317,143 +CAPTION "Майстер експорту сертифікатів" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Вас вітає Майстер експорту сертифікатів", IDC_EXPORT_TITLE, + 115,7,195,12 + LTEXT "Цей майстер допоможе імпортувати сертифікати, списки анульованих сертифікатів та списки довірених сертифікатів з сховища сертифікатів до файлу.", + -1, 115,26,195,25 + LTEXT "Сертифікат може бути використаний для вашої ідентифікації або ідентифікації комп'ютера, з яким ви з'єднані. Також він може бути використаний для завірення і для підписуваня повідомлень. Сховищами сертифікатів є колекції сертифікатів, списки анульованих сертифікатів та списки довірених сертифікатів.", + -1, 115,52,195,48 + LTEXT "Для продовження натисніть Далі.", + -1, 115,103,195,8 +END + +IDD_EXPORT_PRIVATE_KEY DIALOG 0,0,317,143 +CAPTION "Майстер експорту сертифікатів" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Якщо ви вирішили експортувати приватний ключ, вам буде запропоновано ввести пароль для захисту приватного ключа на наступній сторінці.", -1, 21,1,195,25 + LTEXT "Ви хочете експортувати приватний ключ?", -1, 21,27,195,10 + AUTORADIOBUTTON "&Так, експортувати приватний ключ", + IDC_EXPORT_PRIVATE_KEY_YES, 31,36,200,12, BS_AUTORADIOBUTTON|WS_TABSTOP + AUTORADIOBUTTON "&Ні, не експортувати приватний ключ", + IDC_EXPORT_PRIVATE_KEY_NO, 31,48,200,12, BS_AUTORADIOBUTTON + LTEXT "", IDC_EXPORT_PRIVATE_KEY_UNAVAILABLE, 21,60,200,24 +END + +IDD_EXPORT_PASSWORD DIALOG 0,0,317,143 +CAPTION "Майстер експорту сертифікатів" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Пароль:", -1, 21,1,195,10 + EDITTEXT IDC_EXPORT_PASSWORD, 21,11,208,14, ES_AUTOHSCROLL|WS_TABSTOP + LTEXT "&Підтвердження паролю:", -1, 21,35,195,10 + EDITTEXT IDC_EXPORT_PASSWORD_CONFIRM, 21,45,208,14, ES_AUTOHSCROLL|WS_TABSTOP +END + +IDD_EXPORT_FORMAT DIALOG 0,0,317,143 +CAPTION "Майстер експорту сертифікатів" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Виберіть формат, який ви хочете використати:", -1, 21,1,195,10 + AUTORADIOBUTTON "&DER-encoded X.509 (.cer)", + IDC_EXPORT_FORMAT_DER, 31,18,240,12, BS_AUTORADIOBUTTON|WS_TABSTOP + AUTORADIOBUTTON "Ba&se64-encoded X.509 (.cer):", + IDC_EXPORT_FORMAT_BASE64, 31,30,240,12, BS_AUTORADIOBUTTON + AUTORADIOBUTTON "&Cryptographic Message Syntax Standard/PKCS #7 Message (.p7b)", + IDC_EXPORT_FORMAT_CMS, 31,42,240,12, BS_AUTORADIOBUTTON + CHECKBOX "&Включити всі сертифікати за сертифікаційним шляхом якщо можливо", + IDC_EXPORT_CMS_INCLUDE_CHAIN, 44,57,245,8, BS_AUTOCHECKBOX|WS_TABSTOP|WS_DISABLED + AUTORADIOBUTTON "&Обмін особистою інформацією/PKCS #12 (.pfx)", + IDC_EXPORT_FORMAT_PFX, 31,72,240,12, BS_AUTORADIOBUTTON|WS_DISABLED + CHECKBOX "Включити вс&і сертифікати за сертифікаційним шляхом якщо можливо", + IDC_EXPORT_PFX_INCLUDE_CHAIN, 44,87,245,8, BS_AUTOCHECKBOX|WS_TABSTOP|WS_DISABLED + CHECKBOX "&Ввімкнути сильне шифрування", + IDC_EXPORT_PFX_STRONG_ENCRYPTION, 44,102,240,8, + BS_AUTOCHECKBOX|WS_TABSTOP|WS_DISABLED + CHECKBOX "Видалити приватний &ключ після успішного експорту", + IDC_EXPORT_PFX_DELETE_PRIVATE_KEY, 44,117,240,8, + BS_AUTOCHECKBOX|WS_TABSTOP|WS_DISABLED +END + +IDD_EXPORT_FILE DIALOG 0,0,317,143 +CAPTION "Майстер експорту сертифікатів" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Ім'я файлу:", -1, 21,1,195,10 + EDITTEXT IDC_EXPORT_FILENAME, 21,11,208,14, ES_AUTOHSCROLL|WS_TABSTOP + PUSHBUTTON "&Огляд...", IDC_EXPORT_BROWSE_FILE, 236,11,60,14 +END + +IDD_EXPORT_FINISH DIALOG 0,0,317,178 +CAPTION "Майстер експорту сертифікатів" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Завершення роботи Майстра експорту сертифікатів", IDC_EXPORT_TITLE, + 115,1,195,40 + LTEXT "Майстер експорту сертифікатів завершив роботу успішно.", + -1, 115,33,195,24 + LTEXT "Ви вказали наступні параметри:", + -1, 115,57,195,12 + CONTROL "", IDC_EXPORT_SETTINGS, "SysListView32", + LVS_REPORT|LVS_NOCOLUMNHEADER|LVS_SINGLESEL|WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_BORDER, + 115,67,174,100 +END diff --git a/dll/win32/dbghelp/cpu_i386.c b/dll/win32/dbghelp/cpu_i386.c index f3de6523539..a88b00f4af2 100644 --- a/dll/win32/dbghelp/cpu_i386.c +++ b/dll/win32/dbghelp/cpu_i386.c @@ -98,7 +98,7 @@ enum st_mode {stm_start, stm_32bit, stm_16bit, stm_done}; #define curr_switch (frame->Reserved[__CurrentSwitch]) #define next_switch (frame->Reserved[__NextSwitch]) -static BOOL i386_stack_walk(struct cpu_stack_walk* csw, LPSTACKFRAME64 frame) +static BOOL i386_stack_walk(struct cpu_stack_walk* csw, LPSTACKFRAME64 frame, CONTEXT* context) { STACK32FRAME frame32; STACK16FRAME frame16; @@ -107,6 +107,7 @@ static BOOL i386_stack_walk(struct cpu_stack_walk* csw, LPSTACKFRAME64 frame) DWORD p; WORD val; BOOL do_switch; + unsigned deltapc = 1; /* sanity check */ if (curr_mode >= stm_done) return FALSE; @@ -132,6 +133,7 @@ static BOOL i386_stack_walk(struct cpu_stack_walk* csw, LPSTACKFRAME64 frame) /* Init done */ curr_mode = (frame->AddrPC.Mode == AddrModeFlat) ? stm_32bit : stm_16bit; + deltapc = 0; /* cur_switch holds address of WOW32Reserved field in TEB in debuggee * address space @@ -191,6 +193,21 @@ static BOOL i386_stack_walk(struct cpu_stack_walk* csw, LPSTACKFRAME64 frame) * we will get it in the next frame */ memset(&frame->AddrBStore, 0, sizeof(frame->AddrBStore)); +#ifdef __i386__ + if (curr_mode == stm_32bit) + { + DWORD_PTR xframe; + + if (dwarf2_virtual_unwind(csw, frame->AddrPC.Offset - deltapc, context, &xframe)) + { + frame->AddrStack.Mode = frame->AddrFrame.Mode = frame->AddrReturn.Mode = AddrModeFlat; + frame->AddrStack.Offset = context->Esp = xframe; + frame->AddrFrame.Offset = context->Ebp; + frame->AddrReturn.Offset = context->Eip; + goto done_pep; + } + } +#endif } else { @@ -317,6 +334,18 @@ static BOOL i386_stack_walk(struct cpu_stack_walk* csw, LPSTACKFRAME64 frame) } else { +#ifdef __i386__ + DWORD_PTR xframe; + + if (dwarf2_virtual_unwind(csw, frame->AddrPC.Offset - deltapc, context, &xframe)) + { + frame->AddrStack.Mode = frame->AddrFrame.Mode = frame->AddrReturn.Mode = AddrModeFlat; + frame->AddrStack.Offset = context->Esp = xframe; + frame->AddrFrame.Offset = context->Ebp; + frame->AddrReturn.Offset = context->Eip; + goto done_pep; + } +#endif frame->AddrStack.Offset = frame->AddrFrame.Offset + 2 * sizeof(DWORD); /* "pop up" previous EBP value */ if (!sw_read_mem(csw, frame->AddrFrame.Offset, @@ -381,6 +410,23 @@ static BOOL i386_stack_walk(struct cpu_stack_walk* csw, LPSTACKFRAME64 frame) sw_read_mem(csw, frame->AddrFrame.Offset + 2 * sizeof(DWORD), frame->Params, sizeof(frame->Params)); } +#ifdef __i386__ + if (context) + { +#define SET(field, seg, reg) \ + switch (frame->field.Mode) \ + { \ + case AddrModeFlat: context->reg = frame->field.Offset; break; \ + case AddrMode1616: context->seg = frame->field.Segment; context->reg = frame->field.Offset; break; \ + default: assert(0); \ + } + SET(AddrStack, SegSs, Esp); + SET(AddrFrame, SegSs, Ebp); + SET(AddrReturn, SegCs, Eip); +#undef SET + } +done_pep: +#endif frame->Far = TRUE; frame->Virtual = TRUE; @@ -404,9 +450,132 @@ done_err: return FALSE; } +static unsigned i386_map_dwarf_register(unsigned regno) +{ + unsigned reg; + + switch (regno) + { + case 0: reg = CV_REG_EAX; break; + case 1: reg = CV_REG_ECX; break; + case 2: reg = CV_REG_EDX; break; + case 3: reg = CV_REG_EBX; break; + case 4: reg = CV_REG_ESP; break; + case 5: reg = CV_REG_EBP; break; + case 6: reg = CV_REG_ESI; break; + case 7: reg = CV_REG_EDI; break; + case 8: reg = CV_REG_EIP; break; + case 9: reg = CV_REG_EFLAGS; break; + case 10: reg = CV_REG_CS; break; + case 11: reg = CV_REG_SS; break; + case 12: reg = CV_REG_DS; break; + case 13: reg = CV_REG_ES; break; + case 14: reg = CV_REG_FS; break; + case 15: reg = CV_REG_GS; break; + case 16: case 17: case 18: case 19: + case 20: case 21: case 22: case 23: + reg = CV_REG_ST0 + regno - 16; break; + case 24: reg = CV_REG_CTRL; break; + case 25: reg = CV_REG_STAT; break; + case 26: reg = CV_REG_TAG; break; +/* +reg: fiseg 27 +reg: fioff 28 +reg: foseg 29 +reg: fooff 30 +reg: fop 31 +*/ + case 32: case 33: case 34: case 35: + case 36: case 37: case 38: case 39: + reg = CV_REG_XMM0 + regno - 32; break; + case 40: reg = CV_REG_MXCSR; break; + default: + FIXME("Don't know how to map register %d\n", regno); + return 0; + } + return reg; +} + +static void* i386_fetch_context_reg(CONTEXT* ctx, unsigned regno, unsigned* size) +{ +#ifdef __i386__ + switch (regno) + { + case CV_REG_EAX: *size = sizeof(ctx->Eax); return &ctx->Eax; + case CV_REG_EDX: *size = sizeof(ctx->Edx); return &ctx->Edx; + case CV_REG_ECX: *size = sizeof(ctx->Ecx); return &ctx->Ecx; + case CV_REG_EBX: *size = sizeof(ctx->Ebx); return &ctx->Ebx; + case CV_REG_ESI: *size = sizeof(ctx->Esi); return &ctx->Esi; + case CV_REG_EDI: *size = sizeof(ctx->Edi); return &ctx->Edi; + case CV_REG_EBP: *size = sizeof(ctx->Ebp); return &ctx->Ebp; + case CV_REG_ESP: *size = sizeof(ctx->Esp); return &ctx->Esp; + case CV_REG_EIP: *size = sizeof(ctx->Eip); return &ctx->Eip; + + case CV_REG_ST0 + 0: *size = sizeof(long double); return &ctx->FloatSave.RegisterArea[0*sizeof(long double)]; + case CV_REG_ST0 + 1: *size = sizeof(long double); return &ctx->FloatSave.RegisterArea[1*sizeof(long double)]; + case CV_REG_ST0 + 2: *size = sizeof(long double); return &ctx->FloatSave.RegisterArea[2*sizeof(long double)]; + case CV_REG_ST0 + 3: *size = sizeof(long double); return &ctx->FloatSave.RegisterArea[3*sizeof(long double)]; + case CV_REG_ST0 + 4: *size = sizeof(long double); return &ctx->FloatSave.RegisterArea[4*sizeof(long double)]; + case CV_REG_ST0 + 5: *size = sizeof(long double); return &ctx->FloatSave.RegisterArea[5*sizeof(long double)]; + case CV_REG_ST0 + 6: *size = sizeof(long double); return &ctx->FloatSave.RegisterArea[6*sizeof(long double)]; + case CV_REG_ST0 + 7: *size = sizeof(long double); return &ctx->FloatSave.RegisterArea[7*sizeof(long double)]; + + case CV_REG_EFLAGS: *size = sizeof(ctx->EFlags); return &ctx->EFlags; + case CV_REG_ES: *size = sizeof(ctx->SegEs); return &ctx->SegEs; + case CV_REG_CS: *size = sizeof(ctx->SegCs); return &ctx->SegCs; + case CV_REG_SS: *size = sizeof(ctx->SegSs); return &ctx->SegSs; + case CV_REG_DS: *size = sizeof(ctx->SegDs); return &ctx->SegDs; + case CV_REG_FS: *size = sizeof(ctx->SegFs); return &ctx->SegFs; + case CV_REG_GS: *size = sizeof(ctx->SegGs); return &ctx->SegGs; + + } +#endif + FIXME("Unknown register %x\n", regno); + return NULL; +} + +static const char* i386_fetch_regname(unsigned regno) +{ + switch (regno) + { + case CV_REG_EAX: return "eax"; + case CV_REG_EDX: return "edx"; + case CV_REG_ECX: return "ecx"; + case CV_REG_EBX: return "ebx"; + case CV_REG_ESI: return "esi"; + case CV_REG_EDI: return "edi"; + case CV_REG_EBP: return "ebp"; + case CV_REG_ESP: return "esp"; + case CV_REG_EIP: return "eip"; + + case CV_REG_ST0 + 0: return "st0"; + case CV_REG_ST0 + 1: return "st1"; + case CV_REG_ST0 + 2: return "st2"; + case CV_REG_ST0 + 3: return "st3"; + case CV_REG_ST0 + 4: return "st4"; + case CV_REG_ST0 + 5: return "st5"; + case CV_REG_ST0 + 6: return "st6"; + case CV_REG_ST0 + 7: return "st7"; + + case CV_REG_EFLAGS: return "eflags"; + case CV_REG_ES: return "es"; + case CV_REG_CS: return "cs"; + case CV_REG_SS: return "ss"; + case CV_REG_DS: return "ds"; + case CV_REG_FS: return "fs"; + case CV_REG_GS: return "gs"; + } + FIXME("Unknown register %x\n", regno); + return NULL; +} + struct cpu cpu_i386 = { IMAGE_FILE_MACHINE_I386, 4, i386_get_addr, i386_stack_walk, + NULL, + i386_map_dwarf_register, + i386_fetch_context_reg, + i386_fetch_regname, }; diff --git a/dll/win32/dbghelp/cpu_ppc.c b/dll/win32/dbghelp/cpu_ppc.c index fca5ec76ccf..938e3712f7a 100644 --- a/dll/win32/dbghelp/cpu_ppc.c +++ b/dll/win32/dbghelp/cpu_ppc.c @@ -48,15 +48,37 @@ static unsigned ppc_get_addr(HANDLE hThread, const CONTEXT* ctx, return FALSE; } -static BOOL ppc_stack_walk(struct cpu_stack_walk* csw, LPSTACKFRAME64 frame) +static BOOL ppc_stack_walk(struct cpu_stack_walk* csw, LPSTACKFRAME64 frame, CONTEXT* context) { FIXME("not done\n"); return FALSE; } +static unsigned ppc_map_dwarf_register(unsigned regno) +{ + FIXME("not done\n"); + return 0; +} + +static void* ppc_fetch_context_reg(CONTEXT* ctx, unsigned regno, unsigned* size) +{ + FIXME("NIY\n"); + return NULL; +} + +static const char* ppc_fetch_regname(unsigned regno) +{ + FIXME("Unknown register %x\n", regno); + return NULL; +} + struct cpu cpu_ppc = { IMAGE_FILE_MACHINE_POWERPC, 4, ppc_get_addr, ppc_stack_walk, + NULL, + ppc_map_dwarf_register, + ppc_fetch_context_reg, + ppc_fetch_regname, }; diff --git a/dll/win32/dbghelp/cpu_x86_64.c b/dll/win32/dbghelp/cpu_x86_64.c index cd0e32c5081..7b719cee829 100644 --- a/dll/win32/dbghelp/cpu_x86_64.c +++ b/dll/win32/dbghelp/cpu_x86_64.c @@ -1,7 +1,8 @@ /* * File cpu_x86_64.c * - * Copyright (C) 2009-2009, Eric Pouech. + * Copyright (C) 1999, 2005 Alexandre Julliard + * Copyright (C) 2009 Eric Pouech. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -20,6 +21,8 @@ #include +#define NONAMELESSUNION +#define NONAMELESSSTRUCT #include "ntstatus.h" #define WIN32_NO_STATUS #include "dbghelp_private.h" @@ -28,6 +31,66 @@ WINE_DEFAULT_DEBUG_CHANNEL(dbghelp); +/* x86-64 unwind information, for PE modules, as described on MSDN */ + +typedef enum _UNWIND_OP_CODES +{ + UWOP_PUSH_NONVOL = 0, + UWOP_ALLOC_LARGE, + UWOP_ALLOC_SMALL, + UWOP_SET_FPREG, + UWOP_SAVE_NONVOL, + UWOP_SAVE_NONVOL_FAR, + UWOP_SAVE_XMM128, + UWOP_SAVE_XMM128_FAR, + UWOP_PUSH_MACHFRAME +} UNWIND_CODE_OPS; + +typedef union _UNWIND_CODE +{ + struct + { + BYTE CodeOffset; + BYTE UnwindOp : 4; + BYTE OpInfo : 4; + }; + USHORT FrameOffset; +} UNWIND_CODE, *PUNWIND_CODE; + +typedef struct _UNWIND_INFO +{ + BYTE Version : 3; + BYTE Flags : 5; + BYTE SizeOfProlog; + BYTE CountOfCodes; + BYTE FrameRegister : 4; + BYTE FrameOffset : 4; + UNWIND_CODE UnwindCode[1]; /* actually CountOfCodes (aligned) */ +/* + * union + * { + * OPTIONAL ULONG ExceptionHandler; + * OPTIONAL ULONG FunctionEntry; + * }; + * OPTIONAL ULONG ExceptionData[]; + */ +} UNWIND_INFO, *PUNWIND_INFO; + +#define GetUnwindCodeEntry(info, index) \ + ((info)->UnwindCode[index]) + +#define GetLanguageSpecificDataPtr(info) \ + ((PVOID)&GetUnwindCodeEntry((info),((info)->CountOfCodes + 1) & ~1)) + +#define GetExceptionHandler(base, info) \ + ((PEXCEPTION_HANDLER)((base) + *(PULONG)GetLanguageSpecificDataPtr(info))) + +#define GetChainedFunctionEntry(base, info) \ + ((PRUNTIME_FUNCTION)((base) + *(PULONG)GetLanguageSpecificDataPtr(info))) + +#define GetExceptionDataPtr(info) \ + ((PVOID)((PULONG)GetLanguageSpecificData(info) + 1) + static unsigned x86_64_get_addr(HANDLE hThread, const CONTEXT* ctx, enum cpu_addr ca, ADDRESS64* addr) { @@ -55,8 +118,368 @@ enum st_mode {stm_start, stm_64bit, stm_done}; #define curr_switch (frame->Reserved[__CurrentSwitch]) #define next_switch (frame->Reserved[__NextSwitch]) -static BOOL x86_64_stack_walk(struct cpu_stack_walk* csw, LPSTACKFRAME64 frame) +#ifdef __x86_64__ +union handler_data { + RUNTIME_FUNCTION chain; + ULONG handler; +}; + +static void dump_unwind_info(HANDLE hProcess, ULONG64 base, RUNTIME_FUNCTION *function) +{ + static const char * const reg_names[16] = + { "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15" }; + + union handler_data *handler_data; + char buffer[sizeof(UNWIND_INFO) + 256 * sizeof(UNWIND_CODE)]; + UNWIND_INFO* info = (UNWIND_INFO*)buffer; + unsigned int i, count; + SIZE_T r; + + TRACE("**** func %x-%x\n", function->BeginAddress, function->EndAddress); + for (;;) + { + if (function->UnwindData & 1) + { +#if 0 + RUNTIME_FUNCTION *next = (RUNTIME_FUNCTION*)((char*)base + (function->UnwindData & ~1)); + TRACE("unwind info for function %p-%p chained to function %p-%p\n", + (char*)base + function->BeginAddress, (char*)base + function->EndAddress, + (char*)base + next->BeginAddress, (char*)base + next->EndAddress); + function = next; + continue; +#else + FIXME("NOT SUPPORTED\n"); +#endif + } + ReadProcessMemory(hProcess, (char*)base + function->UnwindData, info, sizeof(*info), &r); + ReadProcessMemory(hProcess, (char*)base + function->UnwindData + FIELD_OFFSET(UNWIND_INFO, UnwindCode), + info->UnwindCode, 256 * sizeof(UNWIND_CODE), &r); + TRACE("unwind info at %p flags %x prolog 0x%x bytes function %p-%p\n", + info, info->Flags, info->SizeOfProlog, + (char*)base + function->BeginAddress, (char*)base + function->EndAddress); + + if (info->FrameRegister) + TRACE(" frame register %s offset 0x%x(%%rsp)\n", + reg_names[info->FrameRegister], info->FrameOffset * 16); + + for (i = 0; i < info->CountOfCodes; i++) + { + TRACE(" 0x%x: ", info->UnwindCode[i].CodeOffset); + switch (info->UnwindCode[i].UnwindOp) + { + case UWOP_PUSH_NONVOL: + TRACE("pushq %%%s\n", reg_names[info->UnwindCode[i].OpInfo]); + break; + case UWOP_ALLOC_LARGE: + if (info->UnwindCode[i].OpInfo) + { + count = *(DWORD*)&info->UnwindCode[i+1]; + i += 2; + } + else + { + count = *(USHORT*)&info->UnwindCode[i+1] * 8; + i++; + } + TRACE("subq $0x%x,%%rsp\n", count); + break; + case UWOP_ALLOC_SMALL: + count = (info->UnwindCode[i].OpInfo + 1) * 8; + TRACE("subq $0x%x,%%rsp\n", count); + break; + case UWOP_SET_FPREG: + TRACE("leaq 0x%x(%%rsp),%s\n", + info->FrameOffset * 16, reg_names[info->FrameRegister]); + break; + case UWOP_SAVE_NONVOL: + count = *(USHORT*)&info->UnwindCode[i+1] * 8; + TRACE("movq %%%s,0x%x(%%rsp)\n", reg_names[info->UnwindCode[i].OpInfo], count); + i++; + break; + case UWOP_SAVE_NONVOL_FAR: + count = *(DWORD*)&info->UnwindCode[i+1]; + TRACE("movq %%%s,0x%x(%%rsp)\n", reg_names[info->UnwindCode[i].OpInfo], count); + i += 2; + break; + case UWOP_SAVE_XMM128: + count = *(USHORT*)&info->UnwindCode[i+1] * 16; + TRACE("movaps %%xmm%u,0x%x(%%rsp)\n", info->UnwindCode[i].OpInfo, count); + i++; + break; + case UWOP_SAVE_XMM128_FAR: + count = *(DWORD*)&info->UnwindCode[i+1]; + TRACE("movaps %%xmm%u,0x%x(%%rsp)\n", info->UnwindCode[i].OpInfo, count); + i += 2; + break; + case UWOP_PUSH_MACHFRAME: + TRACE("PUSH_MACHFRAME %u\n", info->UnwindCode[i].OpInfo); + break; + default: + FIXME("unknown code %u\n", info->UnwindCode[i].UnwindOp); + break; + } + } + + handler_data = (union handler_data*)&info->UnwindCode[(info->CountOfCodes + 1) & ~1]; + if (info->Flags & UNW_FLAG_CHAININFO) + { + TRACE(" chained to function %p-%p\n", + (char*)base + handler_data->chain.BeginAddress, + (char*)base + handler_data->chain.EndAddress); + function = &handler_data->chain; + continue; + } + if (info->Flags & (UNW_FLAG_EHANDLER | UNW_FLAG_UHANDLER)) + TRACE(" handler %p data at %p\n", + (char*)base + handler_data->handler, &handler_data->handler + 1); + break; + } +} + +/* highly derived from dlls/ntdll/signal_x86_64.c */ +static ULONG64 get_int_reg(CONTEXT *context, int reg) +{ + return *(&context->Rax + reg); +} + +static void set_int_reg(CONTEXT *context, int reg, ULONG64 val) +{ + *(&context->Rax + reg) = val; +} + +static void set_float_reg(CONTEXT *context, int reg, M128A val) +{ + *(&context->u.s.Xmm0 + reg) = val; +} + +static int get_opcode_size(UNWIND_CODE op) +{ + switch (op.UnwindOp) + { + case UWOP_ALLOC_LARGE: + return 2 + (op.OpInfo != 0); + case UWOP_SAVE_NONVOL: + case UWOP_SAVE_XMM128: + return 2; + case UWOP_SAVE_NONVOL_FAR: + case UWOP_SAVE_XMM128_FAR: + return 3; + default: + return 1; + } +} + +static BOOL is_inside_epilog(struct cpu_stack_walk* csw, DWORD64 pc) +{ + BYTE op0, op1, op2; + + if (!sw_read_mem(csw, pc, &op0, 1)) return FALSE; + + /* add or lea must be the first instruction, and it must have a rex.W prefix */ + if ((op0 & 0xf8) == 0x48) + { + if (!sw_read_mem(csw, pc + 1, &op1, 1)) return FALSE; + switch (op1) + { + case 0x81: /* add $nnnn,%rsp */ + if (!sw_read_mem(csw, pc + 2, &op2, 1)) return FALSE; + if (op0 == 0x48 && op2 == 0xc4) + { + pc += 7; + break; + } + return FALSE; + case 0x83: /* add $n,%rsp */ + if (op0 == 0x48 && op2 == 0xc4) + { + pc += 4; + break; + } + return FALSE; + case 0x8d: /* lea n(reg),%rsp */ + if (op0 & 0x06) return FALSE; /* rex.RX must be cleared */ + if (((op2 >> 3) & 7) != 4) return FALSE; /* dest reg mus be %rsp */ + if ((op2 & 7) == 4) return FALSE; /* no SIB byte allowed */ + if ((op2 >> 6) == 1) /* 8-bit offset */ + { + pc += 4; + break; + } + if ((op2 >> 6) == 2) /* 32-bit offset */ + { + pc += 7; + break; + } + return FALSE; + } + } + + /* now check for various pop instructions */ + for (;;) + { + BYTE rex = 0; + + if (!sw_read_mem(csw, pc, &op0, 1)) return FALSE; + if ((op0 & 0xf0) == 0x40) + { + rex = op0 & 0x0f; /* rex prefix */ + if (!sw_read_mem(csw, ++pc, &op0, 1)) return FALSE; + } + + switch (op0) + { + case 0x58: /* pop %rax/%r8 */ + case 0x59: /* pop %rcx/%r9 */ + case 0x5a: /* pop %rdx/%r10 */ + case 0x5b: /* pop %rbx/%r11 */ + case 0x5c: /* pop %rsp/%r12 */ + case 0x5d: /* pop %rbp/%r13 */ + case 0x5e: /* pop %rsi/%r14 */ + case 0x5f: /* pop %rdi/%r15 */ + pc++; + continue; + case 0xc2: /* ret $nn */ + case 0xc3: /* ret */ + return TRUE; + /* FIXME: add various jump instructions */ + } + return FALSE; + } +} + +static BOOL default_unwind(struct cpu_stack_walk* csw, LPSTACKFRAME64 frame, CONTEXT* context) +{ + if (!sw_read_mem(csw, frame->AddrStack.Offset, + &frame->AddrReturn.Offset, sizeof(DWORD64))) + { + WARN("Cannot read new frame offset %s\n", wine_dbgstr_longlong(frame->AddrStack.Offset)); + return FALSE; + } + context->Rip = frame->AddrReturn.Offset; + frame->AddrStack.Offset += sizeof(DWORD64); + context->Rsp += sizeof(DWORD64); + return TRUE; +} + +static BOOL interpret_function_table_entry(struct cpu_stack_walk* csw, LPSTACKFRAME64 frame, + CONTEXT* context, RUNTIME_FUNCTION* function, DWORD64 base) +{ + char buffer[sizeof(UNWIND_INFO) + 256 * sizeof(UNWIND_CODE)]; + UNWIND_INFO* info = (UNWIND_INFO*)buffer; + unsigned i; + DWORD64 newframe, prolog_offset, off, value; + M128A floatvalue; + union handler_data handler_data; + + /* FIXME: we have some assumptions here */ + assert(context); + if (context->Rsp != frame->AddrStack.Offset) FIXME("unconsistent Stack Pointer\n"); + if (context->Rip != frame->AddrPC.Offset) FIXME("unconsistent Instruction Pointer\n"); + dump_unwind_info(csw->hProcess, sw_module_base(csw, frame->AddrPC.Offset), frame->FuncTableEntry); + newframe = context->Rsp; + for (;;) + { + if (!sw_read_mem(csw, base + function->UnwindData, info, sizeof(*info)) || + !sw_read_mem(csw, base + function->UnwindData + FIELD_OFFSET(UNWIND_INFO, UnwindCode), + info->UnwindCode, info->CountOfCodes * sizeof(UNWIND_CODE))) + { + WARN("Couldn't read unwind_code at %lx\n", base + function->UnwindData); + return FALSE; + } + + if (info->Version != 1) + { + WARN("unknown unwind info version %u at %lx\n", info->Version, base + function->UnwindData); + return FALSE; + } + + if (info->FrameRegister) + newframe = get_int_reg(context, info->FrameRegister) - info->FrameOffset * 16; + + /* check if in prolog */ + if (frame->AddrPC.Offset >= base + function->BeginAddress && + frame->AddrPC.Offset < base + function->BeginAddress + info->SizeOfProlog) + { + prolog_offset = frame->AddrPC.Offset - base - function->BeginAddress; + } + else + { + prolog_offset = ~0; + if (is_inside_epilog(csw, frame->AddrPC.Offset)) + { + FIXME("epilog management not fully done\n"); + /* interpret_epilog((const BYTE*)frame->AddrPC.Offset, context); */ + return TRUE; + } + } + + for (i = 0; i < info->CountOfCodes; i += get_opcode_size(info->UnwindCode[i])) + { + if (prolog_offset < info->UnwindCode[i].CodeOffset) continue; /* skip it */ + + switch (info->UnwindCode[i].UnwindOp) + { + case UWOP_PUSH_NONVOL: /* pushq %reg */ + if (!sw_read_mem(csw, context->Rsp, &value, sizeof(DWORD64))) return FALSE; + set_int_reg(context, info->UnwindCode[i].OpInfo, value); + context->Rsp += sizeof(ULONG64); + break; + case UWOP_ALLOC_LARGE: /* subq $nn,%rsp */ + if (info->UnwindCode[i].OpInfo) context->Rsp += *(DWORD*)&info->UnwindCode[i+1]; + else context->Rsp += *(USHORT*)&info->UnwindCode[i+1] * 8; + break; + case UWOP_ALLOC_SMALL: /* subq $n,%rsp */ + context->Rsp += (info->UnwindCode[i].OpInfo + 1) * 8; + break; + case UWOP_SET_FPREG: /* leaq nn(%rsp),%framereg */ + context->Rsp = newframe; + break; + case UWOP_SAVE_NONVOL: /* movq %reg,n(%rsp) */ + off = newframe + *(USHORT*)&info->UnwindCode[i+1] * 8; + if (!sw_read_mem(csw, context->Rsp, &value, sizeof(DWORD64))) return FALSE; + set_int_reg(context, info->UnwindCode[i].OpInfo, value); + break; + case UWOP_SAVE_NONVOL_FAR: /* movq %reg,nn(%rsp) */ + off = newframe + *(DWORD*)&info->UnwindCode[i+1]; + if (!sw_read_mem(csw, context->Rsp, &value, sizeof(DWORD64))) return FALSE; + set_int_reg(context, info->UnwindCode[i].OpInfo, value); + break; + case UWOP_SAVE_XMM128: /* movaps %xmmreg,n(%rsp) */ + off = newframe + *(USHORT*)&info->UnwindCode[i+1] * 16; + if (!sw_read_mem(csw, context->Rsp, &floatvalue, sizeof(M128A))) return FALSE; + set_float_reg(context, info->UnwindCode[i].OpInfo, floatvalue); + break; + case UWOP_SAVE_XMM128_FAR: /* movaps %xmmreg,nn(%rsp) */ + off = newframe + *(DWORD*)&info->UnwindCode[i+1]; + if (!sw_read_mem(csw, context->Rsp, &floatvalue, sizeof(M128A))) return FALSE; + set_float_reg(context, info->UnwindCode[i].OpInfo, floatvalue); + break; + case UWOP_PUSH_MACHFRAME: + FIXME("PUSH_MACHFRAME %u\n", info->UnwindCode[i].OpInfo); + break; + default: + FIXME("unknown code %u\n", info->UnwindCode[i].UnwindOp); + break; + } + } + if (!(info->Flags & UNW_FLAG_CHAININFO)) break; + if (!sw_read_mem(csw, base + function->UnwindData + FIELD_OFFSET(UNWIND_INFO, UnwindCode) + + ((info->CountOfCodes + 1) & ~1) * sizeof(UNWIND_CODE), + &handler_data, sizeof(handler_data))) return FALSE; + function = &handler_data.chain; /* restart with the chained info */ + } + frame->AddrStack.Offset = context->Rsp; + return default_unwind(csw, frame, context); +} + +static BOOL x86_64_stack_walk(struct cpu_stack_walk* csw, LPSTACKFRAME64 frame, CONTEXT* context) +{ + DWORD64 base; + DWORD_PTR cfa; + unsigned deltapc = 0; + /* sanity check */ if (curr_mode >= stm_done) return FALSE; assert(!csw->is32); @@ -90,25 +513,37 @@ static BOOL x86_64_stack_walk(struct cpu_stack_walk* csw, LPSTACKFRAME64 frame) { if (frame->AddrReturn.Offset == 0) goto done_err; frame->AddrPC = frame->AddrReturn; + deltapc = 1; } - if (!sw_read_mem(csw, frame->AddrStack.Offset, - &frame->AddrReturn.Offset, sizeof(DWORD64))) + if (!frame->AddrPC.Offset || !(base = sw_module_base(csw, frame->AddrPC.Offset))) goto done_err; + frame->FuncTableEntry = sw_table_access(csw, frame->AddrPC.Offset); + frame->AddrStack.Mode = frame->AddrFrame.Mode = frame->AddrReturn.Mode = AddrModeFlat; + if (frame->FuncTableEntry) { - WARN("Cannot read new frame offset %s\n", - wine_dbgstr_longlong(frame->AddrFrame.Offset + sizeof(DWORD64))); - goto done_err; + if (!interpret_function_table_entry(csw, frame, context, frame->FuncTableEntry, base)) + goto done_err; } - /* FIXME: simplistic stuff... need to handle both dwarf & PE stack information */ - frame->AddrStack.Offset += sizeof(DWORD64); + else if (dwarf2_virtual_unwind(csw, frame->AddrPC.Offset - deltapc, context, &cfa)) + { + frame->AddrStack.Offset = context->Rsp = cfa; + frame->AddrReturn.Offset = context->Rip; + TRACE("next function rip=%016lx\n", context->Rip); + TRACE(" rax=%016lx rbx=%016lx rcx=%016lx rdx=%016lx\n", + context->Rax, context->Rbx, context->Rcx, context->Rdx); + TRACE(" rsi=%016lx rdi=%016lx rbp=%016lx rsp=%016lx\n", + context->Rsi, context->Rdi, context->Rbp, context->Rsp); + TRACE(" r8=%016lx r9=%016lx r10=%016lx r11=%016lx\n", + context->R8, context->R9, context->R10, context->R11); + TRACE(" r12=%016lx r13=%016lx r14=%016lx r15=%016lx\n", + context->R12, context->R13, context->R14, context->R15); + } + else if (!default_unwind(csw, frame, context)) goto done_err; + memset(&frame->Params, 0, sizeof(frame->Params)); frame->Far = TRUE; frame->Virtual = TRUE; - if (frame->AddrPC.Offset && sw_module_base(csw, frame->AddrPC.Offset)) - frame->FuncTableEntry = sw_table_access(csw, frame->AddrPC.Offset); - else - frame->FuncTableEntry = NULL; TRACE("Leave: PC=%s Frame=%s Return=%s Stack=%s Mode=%s FuncTable=%p\n", wine_dbgstr_addr(&frame->AddrPC), @@ -123,10 +558,226 @@ done_err: curr_mode = stm_done; return FALSE; } +#else +static BOOL x86_64_stack_walk(struct cpu_stack_walk* csw, LPSTACKFRAME64 frame, CONTEXT* context) +{ + return FALSE; +} +#endif + +static void* x86_64_find_runtime_function(struct module* module, DWORD64 addr) +{ +#ifdef __x86_64__ + RUNTIME_FUNCTION* rtf; + ULONG size; + int min, max; + + rtf = (RUNTIME_FUNCTION*)pe_map_directory(module, IMAGE_DIRECTORY_ENTRY_EXCEPTION, &size); + if (rtf) for (min = 0, max = size / sizeof(*rtf); min <= max; ) + { + int pos = (min + max) / 2; + if (addr < module->module.BaseOfImage + rtf[pos].BeginAddress) max = pos - 1; + else if (addr >= module->module.BaseOfImage + rtf[pos].EndAddress) min = pos + 1; + else + { + rtf += pos; + while (rtf->UnwindData & 1) /* follow chained entry */ + { + FIXME("RunTime_Function outside IMAGE_DIRECTORY_ENTRY_EXCEPTION unimplemented yet!\n"); + /* we need to read into the other process */ + /* rtf = (RUNTIME_FUNCTION*)(module->module.BaseOfImage + (rtf->UnwindData & ~1)); */ + } + return rtf; + } + } +#endif + return NULL; +} + +static unsigned x86_64_map_dwarf_register(unsigned regno) +{ + unsigned reg; + + if (regno >= 17 && regno <= 24) + reg = CV_AMD64_XMM0 + regno - 17; + else if (regno >= 25 && regno <= 32) + reg = CV_AMD64_XMM8 + regno - 25; + else if (regno >= 33 && regno <= 40) + reg = CV_AMD64_ST0 + regno - 33; + else switch (regno) + { + case 0: reg = CV_AMD64_RAX; break; + case 1: reg = CV_AMD64_RDX; break; + case 2: reg = CV_AMD64_RCX; break; + case 3: reg = CV_AMD64_RBX; break; + case 4: reg = CV_AMD64_RSI; break; + case 5: reg = CV_AMD64_RDI; break; + case 6: reg = CV_AMD64_RBP; break; + case 7: reg = CV_AMD64_RSP; break; + case 8: reg = CV_AMD64_R8; break; + case 9: reg = CV_AMD64_R9; break; + case 10: reg = CV_AMD64_R10; break; + case 11: reg = CV_AMD64_R11; break; + case 12: reg = CV_AMD64_R12; break; + case 13: reg = CV_AMD64_R13; break; + case 14: reg = CV_AMD64_R14; break; + case 15: reg = CV_AMD64_R15; break; + case 16: reg = CV_AMD64_RIP; break; + case 49: reg = CV_AMD64_EFLAGS; break; + case 50: reg = CV_AMD64_ES; break; + case 51: reg = CV_AMD64_CS; break; + case 52: reg = CV_AMD64_SS; break; + case 53: reg = CV_AMD64_DS; break; + case 54: reg = CV_AMD64_FS; break; + case 55: reg = CV_AMD64_GS; break; + case 62: reg = CV_AMD64_TR; break; + case 63: reg = CV_AMD64_LDTR; break; + case 64: reg = CV_AMD64_MXCSR; break; + case 65: reg = CV_AMD64_CTRL; break; + case 66: reg = CV_AMD64_STAT; break; +/* + * 56-57 reserved + * 58 %fs.base + * 59 %gs.base + * 60-61 reserved + */ + default: + FIXME("Don't know how to map register %d\n", regno); + return 0; + } + return reg; +} + +static void* x86_64_fetch_context_reg(CONTEXT* ctx, unsigned regno, unsigned* size) +{ +#ifdef __x86_64__ + switch (regno) + { + case CV_AMD64_RAX: *size = sizeof(ctx->Rax); return &ctx->Rax; + case CV_AMD64_RDX: *size = sizeof(ctx->Rdx); return &ctx->Rdx; + case CV_AMD64_RCX: *size = sizeof(ctx->Rcx); return &ctx->Rcx; + case CV_AMD64_RBX: *size = sizeof(ctx->Rbx); return &ctx->Rbx; + case CV_AMD64_RSI: *size = sizeof(ctx->Rsi); return &ctx->Rsi; + case CV_AMD64_RDI: *size = sizeof(ctx->Rdi); return &ctx->Rdi; + case CV_AMD64_RBP: *size = sizeof(ctx->Rbp); return &ctx->Rbp; + case CV_AMD64_RSP: *size = sizeof(ctx->Rsp); return &ctx->Rsp; + case CV_AMD64_R8: *size = sizeof(ctx->R8); return &ctx->R8; + case CV_AMD64_R9: *size = sizeof(ctx->R9); return &ctx->R9; + case CV_AMD64_R10: *size = sizeof(ctx->R10); return &ctx->R10; + case CV_AMD64_R11: *size = sizeof(ctx->R11); return &ctx->R11; + case CV_AMD64_R12: *size = sizeof(ctx->R12); return &ctx->R12; + case CV_AMD64_R13: *size = sizeof(ctx->R13); return &ctx->R13; + case CV_AMD64_R14: *size = sizeof(ctx->R14); return &ctx->R14; + case CV_AMD64_R15: *size = sizeof(ctx->R15); return &ctx->R15; + case CV_AMD64_RIP: *size = sizeof(ctx->Rip); return &ctx->Rip; + + case CV_AMD64_XMM0 + 0: *size = sizeof(ctx->u.s.Xmm0 ); return &ctx->u.s.Xmm0; + case CV_AMD64_XMM0 + 1: *size = sizeof(ctx->u.s.Xmm1 ); return &ctx->u.s.Xmm1; + case CV_AMD64_XMM0 + 2: *size = sizeof(ctx->u.s.Xmm2 ); return &ctx->u.s.Xmm2; + case CV_AMD64_XMM0 + 3: *size = sizeof(ctx->u.s.Xmm3 ); return &ctx->u.s.Xmm3; + case CV_AMD64_XMM0 + 4: *size = sizeof(ctx->u.s.Xmm4 ); return &ctx->u.s.Xmm4; + case CV_AMD64_XMM0 + 5: *size = sizeof(ctx->u.s.Xmm5 ); return &ctx->u.s.Xmm5; + case CV_AMD64_XMM0 + 6: *size = sizeof(ctx->u.s.Xmm6 ); return &ctx->u.s.Xmm6; + case CV_AMD64_XMM0 + 7: *size = sizeof(ctx->u.s.Xmm7 ); return &ctx->u.s.Xmm7; + case CV_AMD64_XMM8 + 0: *size = sizeof(ctx->u.s.Xmm8 ); return &ctx->u.s.Xmm8; + case CV_AMD64_XMM8 + 1: *size = sizeof(ctx->u.s.Xmm9 ); return &ctx->u.s.Xmm9; + case CV_AMD64_XMM8 + 2: *size = sizeof(ctx->u.s.Xmm10); return &ctx->u.s.Xmm10; + case CV_AMD64_XMM8 + 3: *size = sizeof(ctx->u.s.Xmm11); return &ctx->u.s.Xmm11; + case CV_AMD64_XMM8 + 4: *size = sizeof(ctx->u.s.Xmm12); return &ctx->u.s.Xmm12; + case CV_AMD64_XMM8 + 5: *size = sizeof(ctx->u.s.Xmm13); return &ctx->u.s.Xmm13; + case CV_AMD64_XMM8 + 6: *size = sizeof(ctx->u.s.Xmm14); return &ctx->u.s.Xmm14; + case CV_AMD64_XMM8 + 7: *size = sizeof(ctx->u.s.Xmm15); return &ctx->u.s.Xmm15; + + case CV_AMD64_ST0 + 0: *size = sizeof(ctx->u.s.Legacy[0]); return &ctx->u.s.Legacy[0]; + case CV_AMD64_ST0 + 1: *size = sizeof(ctx->u.s.Legacy[1]); return &ctx->u.s.Legacy[1]; + case CV_AMD64_ST0 + 2: *size = sizeof(ctx->u.s.Legacy[2]); return &ctx->u.s.Legacy[2]; + case CV_AMD64_ST0 + 3: *size = sizeof(ctx->u.s.Legacy[3]); return &ctx->u.s.Legacy[3]; + case CV_AMD64_ST0 + 4: *size = sizeof(ctx->u.s.Legacy[4]); return &ctx->u.s.Legacy[4]; + case CV_AMD64_ST0 + 5: *size = sizeof(ctx->u.s.Legacy[5]); return &ctx->u.s.Legacy[5]; + case CV_AMD64_ST0 + 6: *size = sizeof(ctx->u.s.Legacy[6]); return &ctx->u.s.Legacy[6]; + case CV_AMD64_ST0 + 7: *size = sizeof(ctx->u.s.Legacy[7]); return &ctx->u.s.Legacy[7]; + + case CV_AMD64_EFLAGS: *size = sizeof(ctx->EFlags); return &ctx->EFlags; + case CV_AMD64_ES: *size = sizeof(ctx->SegEs); return &ctx->SegEs; + case CV_AMD64_CS: *size = sizeof(ctx->SegCs); return &ctx->SegCs; + case CV_AMD64_SS: *size = sizeof(ctx->SegSs); return &ctx->SegSs; + case CV_AMD64_DS: *size = sizeof(ctx->SegDs); return &ctx->SegDs; + case CV_AMD64_FS: *size = sizeof(ctx->SegFs); return &ctx->SegFs; + case CV_AMD64_GS: *size = sizeof(ctx->SegGs); return &ctx->SegGs; + + } +#endif + FIXME("Unknown register %x\n", regno); + return NULL; +} + +static const char* x86_64_fetch_regname(unsigned regno) +{ + switch (regno) + { + case CV_AMD64_RAX: return "rax"; + case CV_AMD64_RDX: return "rdx"; + case CV_AMD64_RCX: return "rcx"; + case CV_AMD64_RBX: return "rbx"; + case CV_AMD64_RSI: return "rsi"; + case CV_AMD64_RDI: return "rdi"; + case CV_AMD64_RBP: return "rbp"; + case CV_AMD64_RSP: return "rsp"; + case CV_AMD64_R8: return "r8"; + case CV_AMD64_R9: return "r9"; + case CV_AMD64_R10: return "r10"; + case CV_AMD64_R11: return "r11"; + case CV_AMD64_R12: return "r12"; + case CV_AMD64_R13: return "r13"; + case CV_AMD64_R14: return "r14"; + case CV_AMD64_R15: return "r15"; + case CV_AMD64_RIP: return "rip"; + + case CV_AMD64_XMM0 + 0: return "xmm0"; + case CV_AMD64_XMM0 + 1: return "xmm1"; + case CV_AMD64_XMM0 + 2: return "xmm2"; + case CV_AMD64_XMM0 + 3: return "xmm3"; + case CV_AMD64_XMM0 + 4: return "xmm4"; + case CV_AMD64_XMM0 + 5: return "xmm5"; + case CV_AMD64_XMM0 + 6: return "xmm6"; + case CV_AMD64_XMM0 + 7: return "xmm7"; + case CV_AMD64_XMM8 + 0: return "xmm8"; + case CV_AMD64_XMM8 + 1: return "xmm9"; + case CV_AMD64_XMM8 + 2: return "xmm10"; + case CV_AMD64_XMM8 + 3: return "xmm11"; + case CV_AMD64_XMM8 + 4: return "xmm12"; + case CV_AMD64_XMM8 + 5: return "xmm13"; + case CV_AMD64_XMM8 + 6: return "xmm14"; + case CV_AMD64_XMM8 + 7: return "xmm15"; + + case CV_AMD64_ST0 + 0: return "st0"; + case CV_AMD64_ST0 + 1: return "st1"; + case CV_AMD64_ST0 + 2: return "st2"; + case CV_AMD64_ST0 + 3: return "st3"; + case CV_AMD64_ST0 + 4: return "st4"; + case CV_AMD64_ST0 + 5: return "st5"; + case CV_AMD64_ST0 + 6: return "st6"; + case CV_AMD64_ST0 + 7: return "st7"; + + case CV_AMD64_EFLAGS: return "eflags"; + case CV_AMD64_ES: return "es"; + case CV_AMD64_CS: return "cs"; + case CV_AMD64_SS: return "ss"; + case CV_AMD64_DS: return "ds"; + case CV_AMD64_FS: return "fs"; + case CV_AMD64_GS: return "gs"; + } + FIXME("Unknown register %x\n", regno); + return NULL; +} struct cpu cpu_x86_64 = { IMAGE_FILE_MACHINE_AMD64, 8, x86_64_get_addr, x86_64_stack_walk, + x86_64_find_runtime_function, + x86_64_map_dwarf_register, + x86_64_fetch_context_reg, + x86_64_fetch_regname, }; diff --git a/dll/win32/dbghelp/crc32.c b/dll/win32/dbghelp/crc32.c index edd42eacfba..f07bf427d81 100644 --- a/dll/win32/dbghelp/crc32.c +++ b/dll/win32/dbghelp/crc32.c @@ -139,8 +139,8 @@ DWORD calc_crc32(int fd) unsigned char buffer[8192]; DWORD crc = ~0; - _lseek(fd, 0, SEEK_SET); - while ((r = _read(fd, buffer, sizeof(buffer))) > 0) + lseek(fd, 0, SEEK_SET); + while ((r = read(fd, buffer, sizeof(buffer))) > 0) { for (i = 0; i < r; i++) crc = UPDC32(buffer[i], crc); } diff --git a/dll/win32/dbghelp/dbghelp.c b/dll/win32/dbghelp/dbghelp.c index d9a828fcef9..0966f27ca44 100644 --- a/dll/win32/dbghelp/dbghelp.c +++ b/dll/win32/dbghelp/dbghelp.c @@ -151,14 +151,16 @@ const char* wine_dbgstr_addr(const ADDRESS64* addr) } } -extern struct cpu cpu_i386, cpu_x86_64; +extern struct cpu cpu_i386, cpu_x86_64, cpu_ppc; -static struct cpu* dbghelp_cpus[] = {&cpu_i386, &cpu_x86_64, NULL}; +static struct cpu* dbghelp_cpus[] = {&cpu_i386, &cpu_x86_64, &cpu_ppc, NULL}; struct cpu* dbghelp_current_cpu = #if defined(__i386__) &cpu_i386 #elif defined(__x86_64__) &cpu_x86_64 +#elif defined(__powerpc__) + &cpu_ppc #else #error define support for your CPU #endif diff --git a/dll/win32/dbghelp/dbghelp.spec b/dll/win32/dbghelp/dbghelp.spec index 07a6e48ee54..624a10d805a 100644 --- a/dll/win32/dbghelp/dbghelp.spec +++ b/dll/win32/dbghelp/dbghelp.spec @@ -90,9 +90,9 @@ @ stdcall SymGetLineFromAddr64(long double ptr ptr) @ stdcall SymGetLineFromAddr(long long ptr ptr) @ stdcall SymGetLineFromAddrW64(long double ptr ptr) -@ stdcall SymGetLineFromName64(ptr str str long ptr ptr) -@ stdcall SymGetLineFromName(ptr str str long ptr ptr) -@ stdcall SymGetLineFromNameW64(ptr str str long ptr ptr) +@ stdcall SymGetLineFromName64(long str str long ptr ptr) +@ stdcall SymGetLineFromName(long str str long ptr ptr) +@ stdcall SymGetLineFromNameW64(long wstr wstr long ptr ptr) @ stdcall SymGetLineNext64(long ptr) @ stdcall SymGetLineNext(long ptr) @ stdcall SymGetLineNextW64(ptr ptr) @@ -105,7 +105,7 @@ @ stdcall SymGetModuleInfo(long long ptr) @ stdcall SymGetModuleInfoW64(long double ptr) @ stdcall SymGetModuleInfoW(long long ptr) -@ stdcall SymGetOmaps(ptr double ptr ptr ptr ptr) +@ stub SymGetOmapBlockBase @ stdcall SymGetOptions() @ stdcall SymGetScope(ptr double long ptr) @ stdcall SymGetScopeW(ptr double long ptr) @@ -121,11 +121,11 @@ @ stdcall SymGetSourceVarFromTokenW(ptr ptr str str str long) @ stdcall SymGetSymFromAddr64(long double ptr ptr) @ stdcall SymGetSymFromAddr(long long ptr ptr) -@ stdcall SymGetSymFromName64(ptr str ptr) +@ stdcall SymGetSymFromName64(long str ptr) @ stdcall SymGetSymFromName(long str ptr) -@ stdcall SymGetSymNext64(ptr ptr) +@ stdcall SymGetSymNext64(long ptr) @ stdcall SymGetSymNext(long ptr) -@ stdcall SymGetSymPrev64(ptr ptr) +@ stdcall SymGetSymPrev64(long ptr) @ stdcall SymGetSymPrev(long ptr) @ stdcall SymGetSymbolFile(ptr str str long str ptr str ptr) @ stdcall SymGetSymbolFileW(ptr str str long str ptr str ptr) @@ -149,7 +149,7 @@ @ stdcall SymNextW(ptr ptr) @ stdcall SymPrev(ptr ptr) @ stdcall SymPrevW(ptr ptr) -@ stdcall SymRefreshModuleList(ptr) +@ stdcall SymRefreshModuleList(long) @ stdcall SymRegisterCallback64(long ptr double) @ stdcall SymRegisterCallback(long ptr ptr) @ stdcall SymRegisterCallbackW64(long ptr double) @@ -182,6 +182,7 @@ @ stdcall SymSrvStoreFileW(ptr str str long) @ stdcall SymSrvStoreSupplement(ptr str str str long) @ stdcall SymSrvStoreSupplementW(ptr str str str long) +@ stub SymSetSymWithAddr64 @ stdcall SymUnDName64(ptr str long) @ stdcall SymUnDName(ptr str long) @ stdcall SymUnloadModule64(long double) diff --git a/dll/win32/dbghelp/dbghelp_private.h b/dll/win32/dbghelp/dbghelp_private.h index 5ea2e824b6e..f4c88a00fac 100644 --- a/dll/win32/dbghelp/dbghelp_private.h +++ b/dll/win32/dbghelp/dbghelp_private.h @@ -120,6 +120,7 @@ extern unsigned dbghelp_options; #define SYMOPT_WINE_WITH_NATIVE_MODULES 0x40000000 enum location_kind {loc_error, /* reg is the error code */ + loc_unavailable, /* location is not available */ loc_absolute, /* offset is the location */ loc_register, /* reg is the location */ loc_regrel, /* [reg+offset] is the location */ @@ -346,12 +347,14 @@ struct module_format struct module { + struct process* process; IMAGEHLP_MODULEW64 module; /* ANSI copy of module.ModuleName for efficiency */ char module_name[MAX_PATH]; struct module* next; enum module_type type : 16; unsigned short is_virtual : 1; + DWORD64 reloc_delta; /* specific information for debug types */ struct module_format* format_info[DFI_LAST]; @@ -474,7 +477,17 @@ struct cpu enum cpu_addr, ADDRESS64* addr); /* stack manipulation */ - BOOL (*stack_walk)(struct cpu_stack_walk* csw, LPSTACKFRAME64 frame); + BOOL (*stack_walk)(struct cpu_stack_walk* csw, LPSTACKFRAME64 frame, CONTEXT* context); + + /* module manipulation */ + void* (*find_runtime_function)(struct module*, DWORD64 addr); + + /* dwarf dedicated information */ + unsigned (*map_dwarf_register)(unsigned regno); + + /* context related maniputation */ + void* (*fetch_context_reg)(CONTEXT* context, unsigned regno, unsigned* size); + const char* (*fetch_regname)(unsigned regno); }; extern struct cpu* dbghelp_current_cpu; @@ -570,6 +583,9 @@ extern struct module* DWORD64 base, DWORD64 size); extern BOOL pe_load_debug_info(const struct process* pcs, struct module* module); +extern const char* pe_map_directory(struct module* module, int dirno, DWORD* size); +extern void pe_unmap_directoy(struct module* module, int dirno); + /* source.c */ extern unsigned source_new(struct module* module, const char* basedir, const char* source); extern const char* source_get(const struct module* module, unsigned idx); @@ -588,6 +604,8 @@ extern BOOL stabs_parse(struct module* module, unsigned long load_offset extern BOOL dwarf2_parse(struct module* module, unsigned long load_offset, const struct elf_thunk_area* thunks, struct image_file_map* fmap); +extern BOOL dwarf2_virtual_unwind(struct cpu_stack_walk* csw, DWORD_PTR ip, + CONTEXT* context, ULONG_PTR* cfa); /* stack.c */ extern BOOL sw_read_mem(struct cpu_stack_walk* csw, DWORD64 addr, void* ptr, DWORD sz); diff --git a/dll/win32/dbghelp/dwarf.c b/dll/win32/dbghelp/dwarf.c index 199b3bb4b8a..4fec9ccbe4e 100644 --- a/dll/win32/dbghelp/dwarf.c +++ b/dll/win32/dbghelp/dwarf.c @@ -2,7 +2,8 @@ * File dwarf.c - read dwarf2 information from the ELF modules * * Copyright (C) 2005, Raphael Junqueira - * Copyright (C) 2006, Eric Pouech + * Copyright (C) 2006-2010, Eric Pouech + * Copyright (C) 2010, Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -167,7 +168,6 @@ enum dwarf2_sections {section_debug, section_string, section_abbrev, section_lin typedef struct dwarf2_traverse_context_s { const unsigned char* data; - const unsigned char* start_data; const unsigned char* end_data; unsigned char word_size; } dwarf2_traverse_context_t; @@ -190,7 +190,6 @@ typedef struct dwarf2_parse_context_s struct sparse_array debug_info_table; unsigned long load_offset; unsigned long ref_offset; - unsigned char word_size; struct symt* symt_cache[sc_num]; /* void, int1, int2, int4 */ } dwarf2_parse_context_t; @@ -198,6 +197,9 @@ typedef struct dwarf2_parse_context_s struct dwarf2_module_info_s { dwarf2_section_t debug_loc; + dwarf2_section_t debug_frame; + dwarf2_section_t eh_frame; + unsigned char word_size; }; #define loc_dwarf2_location_list (loc_user + 0) @@ -490,7 +492,8 @@ static void dwarf2_fill_attr(const dwarf2_parse_context_t* ctx, { case DW_FORM_ref_addr: case DW_FORM_addr: - attr->u.uvalue = dwarf2_get_addr(data, ctx->word_size); + attr->u.uvalue = dwarf2_get_addr(data, + ctx->module->format_info[DFI_DWARF]->u.dwarf2_info->word_size); TRACE("addr<0x%lx>\n", attr->u.uvalue); break; @@ -629,49 +632,12 @@ static void dwarf2_load_one_entry(dwarf2_parse_context_t*, dwarf2_debug_info_t*, static unsigned dwarf2_map_register(int regno) { - unsigned reg; - - switch (regno) + if (regno == Wine_DW_no_register) { - case Wine_DW_no_register: FIXME("What the heck map reg 0x%x\n",regno); reg = 0; break; - case 0: reg = CV_REG_EAX; break; - case 1: reg = CV_REG_ECX; break; - case 2: reg = CV_REG_EDX; break; - case 3: reg = CV_REG_EBX; break; - case 4: reg = CV_REG_ESP; break; - case 5: reg = CV_REG_EBP; break; - case 6: reg = CV_REG_ESI; break; - case 7: reg = CV_REG_EDI; break; - case 8: reg = CV_REG_EIP; break; - case 9: reg = CV_REG_EFLAGS; break; - case 10: reg = CV_REG_CS; break; - case 11: reg = CV_REG_SS; break; - case 12: reg = CV_REG_DS; break; - case 13: reg = CV_REG_ES; break; - case 14: reg = CV_REG_FS; break; - case 15: reg = CV_REG_GS; break; - case 16: case 17: case 18: case 19: - case 20: case 21: case 22: case 23: - reg = CV_REG_ST0 + regno - 16; break; - case 24: reg = CV_REG_CTRL; break; - case 25: reg = CV_REG_STAT; break; - case 26: reg = CV_REG_TAG; break; -/* -reg: fiseg 27 -reg: fioff 28 -reg: foseg 29 -reg: fooff 30 -reg: fop 31 -*/ - case 32: case 33: case 34: case 35: - case 36: case 37: case 38: case 39: - reg = CV_REG_XMM0 + regno - 32; break; - case 40: reg = CV_REG_MXCSR; break; - default: - FIXME("Don't know how to map register %d\n", regno); + FIXME("What the heck map reg 0x%x\n",regno); return 0; } - return reg; + return dbghelp_current_cpu->map_dwarf_register(regno); } static enum location_error @@ -724,7 +690,6 @@ compute_location(dwarf2_traverse_context_t* ctx, struct location* loc, } stack[++stk] = dwarf2_leb128_as_signed(ctx); loc->kind = loc_regrel; - break; } else switch (op) { @@ -770,18 +735,22 @@ compute_location(dwarf2_traverse_context_t* ctx, struct location* loc, case DW_OP_skip: tmp = dwarf2_parse_u2(ctx); ctx->data += tmp; break; case DW_OP_bra: tmp = dwarf2_parse_u2(ctx); if (!stack[stk--]) ctx->data += tmp; break; case DW_OP_regx: - if (loc->reg != Wine_DW_no_register) - FIXME("Only supporting one regx\n"); - loc->reg = dwarf2_map_register(dwarf2_leb128_as_unsigned(ctx)); + tmp = dwarf2_leb128_as_unsigned(ctx); + if (!piece_found) + { + if (loc->reg != Wine_DW_no_register) + FIXME("Only supporting one reg\n"); + loc->reg = dwarf2_map_register(tmp); + } loc->kind = loc_register; break; case DW_OP_bregx: tmp = dwarf2_leb128_as_unsigned(ctx); - ctx->data++; if (loc->reg != Wine_DW_no_register) FIXME("Only supporting one regx\n"); - loc->reg = dwarf2_map_register(tmp) + dwarf2_leb128_as_signed(ctx); - loc->kind = loc_register; + loc->reg = dwarf2_map_register(tmp); + stack[++stk] = dwarf2_leb128_as_signed(ctx); + loc->kind = loc_regrel; break; case DW_OP_fbreg: if (loc->reg != Wine_DW_no_register) @@ -878,6 +847,10 @@ compute_location(dwarf2_traverse_context_t* ctx, struct location* loc, loc->kind = loc_dwarf2_block; } break; + case DW_OP_stack_value: + /* Expected behaviour is that this is the last instruction of this + * expression and just the "top of stack" value should be put to loc->offset. */ + break; default: if (op < DW_OP_lo_user) /* as DW_OP_hi_user is 0xFF, we don't need to test against it */ FIXME("Unhandled attr op: %x\n", op); @@ -912,6 +885,13 @@ static BOOL dwarf2_compute_location_attr(dwarf2_parse_context_t* ctx, loc->reg = Wine_DW_no_register; loc->offset = xloc.u.uvalue; return TRUE; + case DW_FORM_block: + case DW_FORM_block1: + case DW_FORM_block2: + case DW_FORM_block4: + break; + default: FIXME("Unsupported yet form %lx\n", xloc.form); + return FALSE; } /* assume we have a block form */ @@ -923,7 +903,7 @@ static BOOL dwarf2_compute_location_attr(dwarf2_parse_context_t* ctx, lctx.data = xloc.u.block.ptr; lctx.end_data = xloc.u.block.ptr + xloc.u.block.size; - lctx.word_size = ctx->word_size; + lctx.word_size = ctx->module->format_info[DFI_DWARF]->u.dwarf2_info->word_size; err = compute_location(&lctx, loc, NULL, frame); if (err < 0) @@ -1142,14 +1122,17 @@ static struct symt* dwarf2_parse_array_type(dwarf2_parse_context_t* ctx, TRACE("%s, for %s\n", dwarf2_debug_ctx(ctx), dwarf2_debug_di(di)); - if (!di->abbrev->have_child) - { - FIXME("array without range information\n"); - return NULL; - } ref_type = dwarf2_lookup_type(ctx, di); - for (i=0; ichildren); i++) + if (!di->abbrev->have_child) + { + /* fake an array with unknown size */ + /* FIXME: int4 even on 64bit machines??? */ + idx_type = ctx->symt_cache[sc_int4]; + min.u.uvalue = 0; + max.u.uvalue = -1; + } + else for (i = 0; i < vector_length(&di->children); i++) { child = *(dwarf2_debug_info_t**)vector_at(&di->children, i); switch (child->abbrev->tag) @@ -1957,12 +1940,11 @@ static BOOL dwarf2_parse_line_numbers(const dwarf2_section_t* sections, return FALSE; traverse.data = sections[section_line].address + offset; - traverse.start_data = traverse.data; traverse.end_data = traverse.data + 4; - traverse.word_size = ctx->word_size; + traverse.word_size = ctx->module->format_info[DFI_DWARF]->u.dwarf2_info->word_size; length = dwarf2_parse_u4(&traverse); - traverse.end_data = traverse.start_data + length; + traverse.end_data = sections[section_line].address + offset + length; version = dwarf2_parse_u2(&traverse); header_len = dwarf2_parse_u4(&traverse); @@ -2028,7 +2010,7 @@ static BOOL dwarf2_parse_line_numbers(const dwarf2_section_t* sections, unsigned file = 1; unsigned line = 1; unsigned is_stmt = default_stmt; - BOOL basic_block = FALSE, end_sequence = FALSE; + BOOL end_sequence = FALSE; unsigned opcode, extopcode, i; while (!end_sequence) @@ -2042,7 +2024,6 @@ static BOOL dwarf2_parse_line_numbers(const dwarf2_section_t* sections, address += (delta / line_range) * insn_size; line += line_base + (delta % line_range); - basic_block = TRUE; dwarf2_set_line_number(ctx->module, address, &files, file, line); } else @@ -2050,7 +2031,6 @@ static BOOL dwarf2_parse_line_numbers(const dwarf2_section_t* sections, switch (opcode) { case DW_LNS_copy: - basic_block = FALSE; dwarf2_set_line_number(ctx->module, address, &files, file, line); break; case DW_LNS_advance_pc: @@ -2069,7 +2049,6 @@ static BOOL dwarf2_parse_line_numbers(const dwarf2_section_t* sections, is_stmt = !is_stmt; break; case DW_LNS_set_basic_block: - basic_block = 1; break; case DW_LNS_const_add_pc: address += ((255 - opcode_base) / line_range) * insn_size; @@ -2096,6 +2075,10 @@ static BOOL dwarf2_parse_line_numbers(const dwarf2_section_t* sections, dwarf2_leb128_as_unsigned(&traverse); dwarf2_leb128_as_unsigned(&traverse); break; + case DW_LNE_set_discriminator: + WARN("not handled %s\n", traverse.data); + dwarf2_leb128_as_unsigned(&traverse); + break; default: FIXME("Unsupported extended opcode %x\n", extopcode); break; @@ -2130,7 +2113,7 @@ static BOOL dwarf2_parse_compilation_unit(const dwarf2_section_t* sections, BOOL ret = FALSE; cu_length = dwarf2_parse_u4(mod_ctx); - cu_ctx.data = cu_ctx.start_data = mod_ctx->data; + cu_ctx.data = mod_ctx->data; cu_ctx.end_data = mod_ctx->data + cu_length; mod_ctx->data += cu_length; cu_version = dwarf2_parse_u2(&cu_ctx); @@ -2151,19 +2134,20 @@ static BOOL dwarf2_parse_compilation_unit(const dwarf2_section_t* sections, return FALSE; } + module->format_info[DFI_DWARF]->u.dwarf2_info->word_size = cu_ctx.word_size; + mod_ctx->word_size = cu_ctx.word_size; + pool_init(&ctx.pool, 65536); ctx.sections = sections; ctx.section = section_debug; ctx.module = module; - ctx.word_size = cu_ctx.word_size; ctx.thunks = thunks; ctx.load_offset = load_offset; ctx.ref_offset = comp_unit_start - sections[section_debug].address; memset(ctx.symt_cache, 0, sizeof(ctx.symt_cache)); ctx.symt_cache[sc_void] = &symt_new_basic(module, btVoid, "void", 0)->symt; - abbrev_ctx.start_data = sections[section_abbrev].address + cu_abbrev_offset; - abbrev_ctx.data = abbrev_ctx.start_data; + abbrev_ctx.data = sections[section_abbrev].address + cu_abbrev_offset; abbrev_ctx.end_data = sections[section_abbrev].address + sections[section_abbrev].size; abbrev_ctx.word_size = cu_ctx.word_size; dwarf2_parse_abbrev_set(&abbrev_ctx, &ctx.abbrev_table, &ctx.pool); @@ -2213,17 +2197,16 @@ static BOOL dwarf2_parse_compilation_unit(const dwarf2_section_t* sections, } static BOOL dwarf2_lookup_loclist(const struct module_format* modfmt, const BYTE* start, - unsigned long ip, - dwarf2_traverse_context_t* lctx) + unsigned long ip, dwarf2_traverse_context_t* lctx) { - DWORD beg, end; + DWORD_PTR beg, end; const BYTE* ptr = start; DWORD len; while (ptr < modfmt->u.dwarf2_info->debug_loc.address + modfmt->u.dwarf2_info->debug_loc.size) { - beg = dwarf2_get_u4(ptr); ptr += 4; - end = dwarf2_get_u4(ptr); ptr += 4; + beg = dwarf2_get_addr(ptr, modfmt->u.dwarf2_info->word_size); ptr += modfmt->u.dwarf2_info->word_size; + end = dwarf2_get_addr(ptr, modfmt->u.dwarf2_info->word_size); ptr += modfmt->u.dwarf2_info->word_size; if (!beg && !end) break; len = dwarf2_get_u2(ptr); ptr += 2; @@ -2231,7 +2214,7 @@ static BOOL dwarf2_lookup_loclist(const struct module_format* modfmt, const BYTE { lctx->data = ptr; lctx->end_data = ptr + len; - lctx->word_size = 4; /* FIXME word size !!! */ + lctx->word_size = modfmt->u.dwarf2_info->word_size; return TRUE; } ptr += len; @@ -2243,7 +2226,7 @@ static BOOL dwarf2_lookup_loclist(const struct module_format* modfmt, const BYTE static enum location_error loc_compute_frame(struct process* pcs, const struct module_format* modfmt, const struct symt_function* func, - DWORD ip, struct location* frame) + DWORD_PTR ip, struct location* frame) { struct symt** psym = NULL; struct location* pframe; @@ -2289,13 +2272,746 @@ static enum location_error loc_compute_frame(struct process* pcs, return loc_err_internal; } +enum reg_rule +{ + RULE_UNSET, /* not set at all */ + RULE_UNDEFINED, /* undefined value */ + RULE_SAME, /* same value as previous frame */ + RULE_CFA_OFFSET, /* stored at cfa offset */ + RULE_OTHER_REG, /* stored in other register */ + RULE_EXPRESSION, /* address specified by expression */ + RULE_VAL_EXPRESSION /* value specified by expression */ +}; + +/* make it large enough for all CPUs */ +#define NB_FRAME_REGS 64 +#define MAX_SAVED_STATES 16 + +struct frame_state +{ + ULONG_PTR cfa_offset; + unsigned char cfa_reg; + enum reg_rule cfa_rule; + enum reg_rule rules[NB_FRAME_REGS]; + ULONG_PTR regs[NB_FRAME_REGS]; +}; + +struct frame_info +{ + ULONG_PTR ip; + ULONG_PTR code_align; + LONG_PTR data_align; + unsigned char retaddr_reg; + unsigned char fde_encoding; + unsigned char lsda_encoding; + unsigned char signal_frame; + unsigned char aug_z_format; + unsigned char state_sp; + struct frame_state state; + struct frame_state state_stack[MAX_SAVED_STATES]; +}; + +static ULONG_PTR dwarf2_parse_augmentation_ptr(dwarf2_traverse_context_t* ctx, unsigned char encoding) +{ + ULONG_PTR base; + + if (encoding == DW_EH_PE_omit) return 0; + + switch (encoding & 0xf0) + { + case DW_EH_PE_abs: + base = 0; + break; + case DW_EH_PE_pcrel: + base = (ULONG_PTR)ctx->data; + break; + default: + FIXME("unsupported encoding %02x\n", encoding); + return 0; + } + + switch (encoding & 0x0f) + { + case DW_EH_PE_native: + return base + dwarf2_parse_addr(ctx); + case DW_EH_PE_leb128: + return base + dwarf2_leb128_as_unsigned(ctx); + case DW_EH_PE_data2: + return base + dwarf2_parse_u2(ctx); + case DW_EH_PE_data4: + return base + dwarf2_parse_u4(ctx); + case DW_EH_PE_data8: + return base + dwarf2_parse_u8(ctx); + case DW_EH_PE_signed|DW_EH_PE_leb128: + return base + dwarf2_leb128_as_signed(ctx); + case DW_EH_PE_signed|DW_EH_PE_data2: + return base + (signed short)dwarf2_parse_u2(ctx); + case DW_EH_PE_signed|DW_EH_PE_data4: + return base + (signed int)dwarf2_parse_u4(ctx); + case DW_EH_PE_signed|DW_EH_PE_data8: + return base + (LONG64)dwarf2_parse_u8(ctx); + default: + FIXME("unsupported encoding %02x\n", encoding); + return 0; + } +} + +static BOOL parse_cie_details(dwarf2_traverse_context_t* ctx, struct frame_info* info) +{ + unsigned char version; + const char* augmentation; + const unsigned char* end; + ULONG_PTR len; + + memset(info, 0, sizeof(*info)); + info->lsda_encoding = DW_EH_PE_omit; + info->aug_z_format = 0; + + /* parse the CIE first */ + version = dwarf2_parse_byte(ctx); + if (version != 1) + { + FIXME("unknown CIE version %u at %p\n", version, ctx->data - 1); + return FALSE; + } + augmentation = (const char*)ctx->data; + ctx->data += strlen(augmentation) + 1; + + info->code_align = dwarf2_leb128_as_unsigned(ctx); + info->data_align = dwarf2_leb128_as_signed(ctx); + info->retaddr_reg = dwarf2_parse_byte(ctx); + info->state.cfa_rule = RULE_CFA_OFFSET; + + end = NULL; + TRACE("\tparsing augmentation %s\n", augmentation); + if (*augmentation) do + { + switch (*augmentation) + { + case 'z': + len = dwarf2_leb128_as_unsigned(ctx); + end = ctx->data + len; + info->aug_z_format = 1; + continue; + case 'L': + info->lsda_encoding = dwarf2_parse_byte(ctx); + continue; + case 'P': + { + unsigned char encoding = dwarf2_parse_byte(ctx); + /* throw away the indirect bit, as we don't care for the result */ + encoding &= ~DW_EH_PE_indirect; + dwarf2_parse_augmentation_ptr(ctx, encoding); /* handler */ + continue; + } + case 'R': + info->fde_encoding = dwarf2_parse_byte(ctx); + continue; + case 'S': + info->signal_frame = 1; + continue; + } + FIXME("unknown augmentation '%c'\n", *augmentation); + if (!end) return FALSE; + break; + } while (*++augmentation); + if (end) ctx->data = end; + return TRUE; +} + +static BOOL dwarf2_get_cie(unsigned long addr, struct module* module, DWORD_PTR delta, + dwarf2_traverse_context_t* fde_ctx, dwarf2_traverse_context_t* cie_ctx, + struct frame_info* info, BOOL in_eh_frame) +{ + const unsigned char* ptr_blk; + const unsigned char* cie_ptr; + const unsigned char* last_cie_ptr = (const unsigned char*)~0; + unsigned len, id; + unsigned long start, range; + unsigned cie_id; + const BYTE* start_data = fde_ctx->data; + + cie_id = in_eh_frame ? 0 : DW_CIE_ID; + for (; fde_ctx->data + 2 * 4 < fde_ctx->end_data; fde_ctx->data = ptr_blk) + { + /* find the FDE for address addr (skip CIE) */ + len = dwarf2_parse_u4(fde_ctx); + if (len == 0xffffffff) FIXME("Unsupported yet 64-bit CIEs\n"); + ptr_blk = fde_ctx->data + len; + id = dwarf2_parse_u4(fde_ctx); + if (id == cie_id) + { + last_cie_ptr = fde_ctx->data - 8; + /* we need some bits out of the CIE in order to parse all contents */ + if (!parse_cie_details(fde_ctx, info)) return FALSE; + cie_ctx->data = fde_ctx->data; + cie_ctx->end_data = ptr_blk; + cie_ctx->word_size = fde_ctx->word_size; + continue; + } + cie_ptr = (in_eh_frame) ? fde_ctx->data - id - 4 : start_data + id; + if (cie_ptr != last_cie_ptr) + { + last_cie_ptr = cie_ptr; + cie_ctx->data = cie_ptr; + cie_ctx->word_size = fde_ctx->word_size; + cie_ctx->end_data = cie_ptr + 4; + cie_ctx->end_data = cie_ptr + 4 + dwarf2_parse_u4(cie_ctx); + if (dwarf2_parse_u4(cie_ctx) != cie_id) + { + FIXME("wrong CIE pointer\n"); + return FALSE; + } + if (!parse_cie_details(cie_ctx, info)) return FALSE; + } + start = delta + dwarf2_parse_augmentation_ptr(fde_ctx, info->fde_encoding); + range = dwarf2_parse_augmentation_ptr(fde_ctx, info->fde_encoding & 0x0F); + + if (addr >= start && addr < start + range) + { + /* reset the FDE context */ + fde_ctx->end_data = ptr_blk; + + info->ip = start; + return TRUE; + } + } + return FALSE; +} + +static int valid_reg(ULONG_PTR reg) +{ + if (reg >= NB_FRAME_REGS) FIXME("unsupported reg %lx\n", reg); + return (reg < NB_FRAME_REGS); +} + +static void execute_cfa_instructions(dwarf2_traverse_context_t* ctx, + ULONG_PTR last_ip, struct frame_info *info) +{ + while (ctx->data < ctx->end_data && info->ip < last_ip + info->signal_frame) + { + enum dwarf_call_frame_info op = dwarf2_parse_byte(ctx); + + if (op & 0xc0) + { + switch (op & 0xc0) + { + case DW_CFA_advance_loc: + { + ULONG_PTR offset = (op & 0x3f) * info->code_align; + TRACE("%lx: DW_CFA_advance_loc %lu\n", info->ip, offset); + info->ip += offset; + break; + } + case DW_CFA_offset: + { + ULONG_PTR reg = op & 0x3f; + LONG_PTR offset = dwarf2_leb128_as_unsigned(ctx) * info->data_align; + if (!valid_reg(reg)) break; + TRACE("%lx: DW_CFA_offset %s, %ld\n", + info->ip, + dbghelp_current_cpu->fetch_regname(dbghelp_current_cpu->map_dwarf_register(reg)), + offset); + info->state.regs[reg] = offset; + info->state.rules[reg] = RULE_CFA_OFFSET; + break; + } + case DW_CFA_restore: + { + ULONG_PTR reg = op & 0x3f; + if (!valid_reg(reg)) break; + TRACE("%lx: DW_CFA_restore %s\n", + info->ip, + dbghelp_current_cpu->fetch_regname(dbghelp_current_cpu->map_dwarf_register(reg))); + info->state.rules[reg] = RULE_UNSET; + break; + } + } + } + else switch (op) + { + case DW_CFA_nop: + break; + case DW_CFA_set_loc: + { + ULONG_PTR loc = dwarf2_parse_augmentation_ptr(ctx, info->fde_encoding); + TRACE("%lx: DW_CFA_set_loc %lx\n", info->ip, loc); + info->ip = loc; + break; + } + case DW_CFA_advance_loc1: + { + ULONG_PTR offset = dwarf2_parse_byte(ctx) * info->code_align; + TRACE("%lx: DW_CFA_advance_loc1 %lu\n", info->ip, offset); + info->ip += offset; + break; + } + case DW_CFA_advance_loc2: + { + ULONG_PTR offset = dwarf2_parse_u2(ctx) * info->code_align; + TRACE("%lx: DW_CFA_advance_loc2 %lu\n", info->ip, offset); + info->ip += offset; + break; + } + case DW_CFA_advance_loc4: + { + ULONG_PTR offset = dwarf2_parse_u4(ctx) * info->code_align; + TRACE("%lx: DW_CFA_advance_loc4 %lu\n", info->ip, offset); + info->ip += offset; + break; + } + case DW_CFA_offset_extended: + case DW_CFA_offset_extended_sf: + { + ULONG_PTR reg = dwarf2_leb128_as_unsigned(ctx); + LONG_PTR offset = (op == DW_CFA_offset_extended) ? dwarf2_leb128_as_unsigned(ctx) * info->data_align + : dwarf2_leb128_as_signed(ctx) * info->data_align; + if (!valid_reg(reg)) break; + TRACE("%lx: DW_CFA_offset_extended %s, %ld\n", + info->ip, + dbghelp_current_cpu->fetch_regname(dbghelp_current_cpu->map_dwarf_register(reg)), + offset); + info->state.regs[reg] = offset; + info->state.rules[reg] = RULE_CFA_OFFSET; + break; + } + case DW_CFA_restore_extended: + { + ULONG_PTR reg = dwarf2_leb128_as_unsigned(ctx); + if (!valid_reg(reg)) break; + TRACE("%lx: DW_CFA_restore_extended %s\n", + info->ip, + dbghelp_current_cpu->fetch_regname(dbghelp_current_cpu->map_dwarf_register(reg))); + info->state.rules[reg] = RULE_UNSET; + break; + } + case DW_CFA_undefined: + { + ULONG_PTR reg = dwarf2_leb128_as_unsigned(ctx); + if (!valid_reg(reg)) break; + TRACE("%lx: DW_CFA_undefined %s\n", + info->ip, + dbghelp_current_cpu->fetch_regname(dbghelp_current_cpu->map_dwarf_register(reg))); + info->state.rules[reg] = RULE_UNDEFINED; + break; + } + case DW_CFA_same_value: + { + ULONG_PTR reg = dwarf2_leb128_as_unsigned(ctx); + if (!valid_reg(reg)) break; + TRACE("%lx: DW_CFA_same_value %s\n", + info->ip, + dbghelp_current_cpu->fetch_regname(dbghelp_current_cpu->map_dwarf_register(reg))); + info->state.regs[reg] = reg; + info->state.rules[reg] = RULE_SAME; + break; + } + case DW_CFA_register: + { + ULONG_PTR reg = dwarf2_leb128_as_unsigned(ctx); + ULONG_PTR reg2 = dwarf2_leb128_as_unsigned(ctx); + if (!valid_reg(reg) || !valid_reg(reg2)) break; + TRACE("%lx: DW_CFA_register %s == %s\n", + info->ip, + dbghelp_current_cpu->fetch_regname(dbghelp_current_cpu->map_dwarf_register(reg)), + dbghelp_current_cpu->fetch_regname(dbghelp_current_cpu->map_dwarf_register(reg2))); + info->state.regs[reg] = reg2; + info->state.rules[reg] = RULE_OTHER_REG; + break; + } + case DW_CFA_remember_state: + TRACE("%lx: DW_CFA_remember_state\n", info->ip); + if (info->state_sp >= MAX_SAVED_STATES) + FIXME("%lx: DW_CFA_remember_state too many nested saves\n", info->ip); + else + info->state_stack[info->state_sp++] = info->state; + break; + case DW_CFA_restore_state: + TRACE("%lx: DW_CFA_restore_state\n", info->ip); + if (!info->state_sp) + FIXME("%lx: DW_CFA_restore_state without corresponding save\n", info->ip); + else + info->state = info->state_stack[--info->state_sp]; + break; + case DW_CFA_def_cfa: + case DW_CFA_def_cfa_sf: + { + ULONG_PTR reg = dwarf2_leb128_as_unsigned(ctx); + ULONG_PTR offset = (op == DW_CFA_def_cfa) ? dwarf2_leb128_as_unsigned(ctx) + : dwarf2_leb128_as_signed(ctx) * info->data_align; + if (!valid_reg(reg)) break; + TRACE("%lx: DW_CFA_def_cfa %s, %lu\n", + info->ip, + dbghelp_current_cpu->fetch_regname(dbghelp_current_cpu->map_dwarf_register(reg)), + offset); + info->state.cfa_reg = reg; + info->state.cfa_offset = offset; + info->state.cfa_rule = RULE_CFA_OFFSET; + break; + } + case DW_CFA_def_cfa_register: + { + ULONG_PTR reg = dwarf2_leb128_as_unsigned(ctx); + if (!valid_reg(reg)) break; + TRACE("%lx: DW_CFA_def_cfa_register %s\n", + info->ip, + dbghelp_current_cpu->fetch_regname(dbghelp_current_cpu->map_dwarf_register(reg))); + info->state.cfa_reg = reg; + info->state.cfa_rule = RULE_CFA_OFFSET; + break; + } + case DW_CFA_def_cfa_offset: + case DW_CFA_def_cfa_offset_sf: + { + ULONG_PTR offset = (op == DW_CFA_def_cfa_offset) ? dwarf2_leb128_as_unsigned(ctx) + : dwarf2_leb128_as_signed(ctx) * info->data_align; + TRACE("%lx: DW_CFA_def_cfa_offset %lu\n", info->ip, offset); + info->state.cfa_offset = offset; + info->state.cfa_rule = RULE_CFA_OFFSET; + break; + } + case DW_CFA_def_cfa_expression: + { + ULONG_PTR expr = (ULONG_PTR)ctx->data; + ULONG_PTR len = dwarf2_leb128_as_unsigned(ctx); + TRACE("%lx: DW_CFA_def_cfa_expression %lx-%lx\n", info->ip, expr, expr+len); + info->state.cfa_offset = expr; + info->state.cfa_rule = RULE_VAL_EXPRESSION; + ctx->data += len; + break; + } + case DW_CFA_expression: + case DW_CFA_val_expression: + { + ULONG_PTR reg = dwarf2_leb128_as_unsigned(ctx); + ULONG_PTR expr = (ULONG_PTR)ctx->data; + ULONG_PTR len = dwarf2_leb128_as_unsigned(ctx); + if (!valid_reg(reg)) break; + TRACE("%lx: DW_CFA_%sexpression %s %lx-%lx\n", + info->ip, (op == DW_CFA_expression) ? "" : "val_", + dbghelp_current_cpu->fetch_regname(dbghelp_current_cpu->map_dwarf_register(reg)), + expr, expr + len); + info->state.regs[reg] = expr; + info->state.rules[reg] = (op == DW_CFA_expression) ? RULE_EXPRESSION : RULE_VAL_EXPRESSION; + ctx->data += len; + break; + } + case DW_CFA_GNU_args_size: + /* FIXME: should check that GCC is the compiler for this CU */ + { + ULONG_PTR args = dwarf2_leb128_as_unsigned(ctx); + TRACE("%lx: DW_CFA_GNU_args_size %lu\n", info->ip, args); + /* ignored */ + break; + } + default: + FIXME("%lx: unknown CFA opcode %02x\n", info->ip, op); + break; + } + } +} + +/* retrieve a context register from its dwarf number */ +static ULONG_PTR get_context_reg(CONTEXT *context, ULONG_PTR dw_reg) +{ + unsigned regno = dbghelp_current_cpu->map_dwarf_register(dw_reg), sz; + ULONG_PTR* ptr = dbghelp_current_cpu->fetch_context_reg(context, regno, &sz); + + if (sz != sizeof(ULONG_PTR)) + { + FIXME("reading register %lu/%u of wrong size %u\n", dw_reg, regno, sz); + return 0; + } + return *ptr; +} + +/* set a context register from its dwarf number */ +static void set_context_reg(struct cpu_stack_walk* csw, CONTEXT *context, ULONG_PTR dw_reg, + ULONG_PTR val, BOOL isdebuggee) +{ + unsigned regno = dbghelp_current_cpu->map_dwarf_register(dw_reg), sz; + ULONG_PTR* ptr = dbghelp_current_cpu->fetch_context_reg(context, regno, &sz); + + if (isdebuggee) + { + char tmp[16]; + + if (sz > sizeof(tmp)) + { + FIXME("register %lu/%u size is too wide: %u\n", dw_reg, regno, sz); + return; + } + if (!sw_read_mem(csw, val, tmp, sz)) + { + WARN("Couldn't read memory at %p\n", (void*)val); + return; + } + memcpy(ptr, tmp, sz); + } + else + { + if (sz != sizeof(ULONG_PTR)) + { + FIXME("assigning to register %lu/%u of wrong size %u\n", dw_reg, regno, sz); + return; + } + *ptr = val; + } +} + +/* copy a register from one context to another using dwarf number */ +static void copy_context_reg(CONTEXT *dstcontext, ULONG_PTR dwregdst, CONTEXT* srccontext, ULONG_PTR dwregsrc) +{ + unsigned regdstno = dbghelp_current_cpu->map_dwarf_register(dwregdst), szdst; + unsigned regsrcno = dbghelp_current_cpu->map_dwarf_register(dwregsrc), szsrc; + ULONG_PTR* ptrdst = dbghelp_current_cpu->fetch_context_reg(dstcontext, regdstno, &szdst); + ULONG_PTR* ptrsrc = dbghelp_current_cpu->fetch_context_reg(srccontext, regsrcno, &szsrc); + + if (szdst != szsrc) + { + FIXME("Cannot copy register %lu/%u => %lu/%u because of size mismatch (%u => %u)\n", + dwregsrc, regsrcno, dwregdst, regdstno, szsrc, szdst); + return; + } + memcpy(ptrdst, ptrsrc, szdst); +} + +static ULONG_PTR eval_expression(struct module* module, struct cpu_stack_walk* csw, + const unsigned char* zp, CONTEXT *context) +{ + dwarf2_traverse_context_t ctx; + ULONG_PTR reg, sz, tmp, stack[64]; + int sp = -1; + ULONG_PTR len; + + ctx.data = zp; + ctx.end_data = zp + 4; + len = dwarf2_leb128_as_unsigned(&ctx); + ctx.end_data = ctx.data + len; + ctx.word_size = module->format_info[DFI_DWARF]->u.dwarf2_info->word_size; + + while (ctx.data < ctx.end_data) + { + unsigned char opcode = dwarf2_parse_byte(&ctx); + + if (opcode >= DW_OP_lit0 && opcode <= DW_OP_lit31) + stack[++sp] = opcode - DW_OP_lit0; + else if (opcode >= DW_OP_reg0 && opcode <= DW_OP_reg31) + stack[++sp] = get_context_reg(context, opcode - DW_OP_reg0); + else if (opcode >= DW_OP_breg0 && opcode <= DW_OP_breg31) + stack[++sp] = get_context_reg(context, opcode - DW_OP_breg0) + dwarf2_leb128_as_signed(&ctx); + else switch (opcode) + { + case DW_OP_nop: break; + case DW_OP_addr: stack[++sp] = dwarf2_parse_addr(&ctx); break; + case DW_OP_const1u: stack[++sp] = dwarf2_parse_byte(&ctx); break; + case DW_OP_const1s: stack[++sp] = (signed char)dwarf2_parse_byte(&ctx); break; + case DW_OP_const2u: stack[++sp] = dwarf2_parse_u2(&ctx); break; + case DW_OP_const2s: stack[++sp] = (short)dwarf2_parse_u2(&ctx); break; + case DW_OP_const4u: stack[++sp] = dwarf2_parse_u4(&ctx); break; + case DW_OP_const4s: stack[++sp] = (signed int)dwarf2_parse_u4(&ctx); break; + case DW_OP_const8u: stack[++sp] = dwarf2_parse_u8(&ctx); break; + case DW_OP_const8s: stack[++sp] = (LONG_PTR)dwarf2_parse_u8(&ctx); break; + case DW_OP_constu: stack[++sp] = dwarf2_leb128_as_unsigned(&ctx); break; + case DW_OP_consts: stack[++sp] = dwarf2_leb128_as_signed(&ctx); break; + case DW_OP_deref: + if (!sw_read_mem(csw, stack[sp], &tmp, sizeof(tmp))) + { + ERR("Couldn't read memory at %lx\n", stack[sp]); + tmp = 0; + } + stack[sp] = tmp; + break; + case DW_OP_dup: stack[sp + 1] = stack[sp]; sp++; break; + case DW_OP_drop: sp--; break; + case DW_OP_over: stack[sp + 1] = stack[sp - 1]; sp++; break; + case DW_OP_pick: stack[sp + 1] = stack[sp - dwarf2_parse_byte(&ctx)]; sp++; break; + case DW_OP_swap: tmp = stack[sp]; stack[sp] = stack[sp-1]; stack[sp-1] = tmp; break; + case DW_OP_rot: tmp = stack[sp]; stack[sp] = stack[sp-1]; stack[sp-1] = stack[sp-2]; stack[sp-2] = tmp; break; + case DW_OP_abs: stack[sp] = labs(stack[sp]); break; + case DW_OP_neg: stack[sp] = -stack[sp]; break; + case DW_OP_not: stack[sp] = ~stack[sp]; break; + case DW_OP_and: stack[sp-1] &= stack[sp]; sp--; break; + case DW_OP_or: stack[sp-1] |= stack[sp]; sp--; break; + case DW_OP_minus: stack[sp-1] -= stack[sp]; sp--; break; + case DW_OP_mul: stack[sp-1] *= stack[sp]; sp--; break; + case DW_OP_plus: stack[sp-1] += stack[sp]; sp--; break; + case DW_OP_xor: stack[sp-1] ^= stack[sp]; sp--; break; + case DW_OP_shl: stack[sp-1] <<= stack[sp]; sp--; break; + case DW_OP_shr: stack[sp-1] >>= stack[sp]; sp--; break; + case DW_OP_plus_uconst: stack[sp] += dwarf2_leb128_as_unsigned(&ctx); break; + case DW_OP_shra: stack[sp-1] = (LONG_PTR)stack[sp-1] / (1 << stack[sp]); sp--; break; + case DW_OP_div: stack[sp-1] = (LONG_PTR)stack[sp-1] / (LONG_PTR)stack[sp]; sp--; break; + case DW_OP_mod: stack[sp-1] = (LONG_PTR)stack[sp-1] % (LONG_PTR)stack[sp]; sp--; break; + case DW_OP_ge: stack[sp-1] = ((LONG_PTR)stack[sp-1] >= (LONG_PTR)stack[sp]); sp--; break; + case DW_OP_gt: stack[sp-1] = ((LONG_PTR)stack[sp-1] > (LONG_PTR)stack[sp]); sp--; break; + case DW_OP_le: stack[sp-1] = ((LONG_PTR)stack[sp-1] <= (LONG_PTR)stack[sp]); sp--; break; + case DW_OP_lt: stack[sp-1] = ((LONG_PTR)stack[sp-1] < (LONG_PTR)stack[sp]); sp--; break; + case DW_OP_eq: stack[sp-1] = (stack[sp-1] == stack[sp]); sp--; break; + case DW_OP_ne: stack[sp-1] = (stack[sp-1] != stack[sp]); sp--; break; + case DW_OP_skip: tmp = (short)dwarf2_parse_u2(&ctx); ctx.data += tmp; break; + case DW_OP_bra: tmp = (short)dwarf2_parse_u2(&ctx); if (!stack[sp--]) ctx.data += tmp; break; + case DW_OP_GNU_encoded_addr: + tmp = dwarf2_parse_byte(&ctx); + stack[++sp] = dwarf2_parse_augmentation_ptr(&ctx, tmp); + break; + case DW_OP_regx: + stack[++sp] = get_context_reg(context, dwarf2_leb128_as_unsigned(&ctx)); + break; + case DW_OP_bregx: + reg = dwarf2_leb128_as_unsigned(&ctx); + tmp = dwarf2_leb128_as_signed(&ctx); + stack[++sp] = get_context_reg(context, reg) + tmp; + break; + case DW_OP_deref_size: + sz = dwarf2_parse_byte(&ctx); + if (!sw_read_mem(csw, stack[sp], &tmp, sz)) + { + ERR("Couldn't read memory at %lx\n", stack[sp]); + tmp = 0; + } + /* do integral promotion */ + switch (sz) + { + case 1: stack[sp] = *(unsigned char*)&tmp; break; + case 2: stack[sp] = *(unsigned short*)&tmp; break; + case 4: stack[sp] = *(unsigned int*)&tmp; break; + case 8: stack[sp] = *(ULONG_PTR*)&tmp; break; /* FIXME: won't work on 32bit platform */ + default: FIXME("Unknown size for deref 0x%lx\n", sz); + } + break; + default: + FIXME("unhandled opcode %02x\n", opcode); + } + } + return stack[sp]; +} + +static void apply_frame_state(struct module* module, struct cpu_stack_walk* csw, + CONTEXT *context, struct frame_state *state, ULONG_PTR* cfa) +{ + unsigned int i; + ULONG_PTR value; + CONTEXT new_context = *context; + + switch (state->cfa_rule) + { + case RULE_EXPRESSION: + *cfa = eval_expression(module, csw, (const unsigned char*)state->cfa_offset, context); + if (!sw_read_mem(csw, *cfa, cfa, sizeof(*cfa))) + { + WARN("Couldn't read memory at %p\n", (void*)*cfa); + return; + } + break; + case RULE_VAL_EXPRESSION: + *cfa = eval_expression(module, csw, (const unsigned char*)state->cfa_offset, context); + break; + default: + *cfa = get_context_reg(context, state->cfa_reg) + state->cfa_offset; + break; + } + if (!*cfa) return; + + for (i = 0; i < NB_FRAME_REGS; i++) + { + switch (state->rules[i]) + { + case RULE_UNSET: + case RULE_UNDEFINED: + case RULE_SAME: + break; + case RULE_CFA_OFFSET: + set_context_reg(csw, &new_context, i, *cfa + state->regs[i], TRUE); + break; + case RULE_OTHER_REG: + copy_context_reg(&new_context, i, context, state->regs[i]); + break; + case RULE_EXPRESSION: + value = eval_expression(module, csw, (const unsigned char*)state->regs[i], context); + set_context_reg(csw, &new_context, i, value, TRUE); + break; + case RULE_VAL_EXPRESSION: + value = eval_expression(module, csw, (const unsigned char*)state->regs[i], context); + set_context_reg(csw, &new_context, i, value, FALSE); + break; + } + } + *context = new_context; +} + +/*********************************************************************** + * dwarf2_virtual_unwind + * + */ +BOOL dwarf2_virtual_unwind(struct cpu_stack_walk* csw, ULONG_PTR ip, CONTEXT* context, ULONG_PTR* cfa) +{ + struct module_pair pair; + struct frame_info info; + dwarf2_traverse_context_t cie_ctx, fde_ctx; + struct module_format* modfmt; + const unsigned char* end; + DWORD_PTR delta; + + if (!(pair.pcs = process_find_by_handle(csw->hProcess)) || + !(pair.requested = module_find_by_addr(pair.pcs, ip, DMT_UNKNOWN)) || + !module_get_debug(&pair)) + return FALSE; + modfmt = pair.effective->format_info[DFI_DWARF]; + if (!modfmt) return FALSE; + memset(&info, 0, sizeof(info)); + fde_ctx.data = modfmt->u.dwarf2_info->eh_frame.address; + fde_ctx.end_data = fde_ctx.data + modfmt->u.dwarf2_info->eh_frame.size; + fde_ctx.word_size = modfmt->u.dwarf2_info->word_size; + /* let offsets relative to the eh_frame sections be correctly computed, as we'll map + * in this process the IMAGE section at a different address as the one expected by + * the image + */ + delta = pair.effective->module.BaseOfImage + modfmt->u.dwarf2_info->eh_frame.rva - + (DWORD_PTR)modfmt->u.dwarf2_info->eh_frame.address; + if (!dwarf2_get_cie(ip, pair.effective, delta, &fde_ctx, &cie_ctx, &info, TRUE)) + { + fde_ctx.data = modfmt->u.dwarf2_info->debug_frame.address; + fde_ctx.end_data = fde_ctx.data + modfmt->u.dwarf2_info->debug_frame.size; + fde_ctx.word_size = modfmt->u.dwarf2_info->word_size; + delta = pair.effective->reloc_delta; + if (!dwarf2_get_cie(ip, pair.effective, delta, &fde_ctx, &cie_ctx, &info, FALSE)) + { + TRACE("Couldn't find information for %lx\n", ip); + return FALSE; + } + } + + TRACE("function %lx/%lx code_align %lu data_align %ld retaddr %s\n", + ip, info.ip, info.code_align, info.data_align, + dbghelp_current_cpu->fetch_regname(dbghelp_current_cpu->map_dwarf_register(info.retaddr_reg))); + + /* if at very beginning of function, return and use default unwinder */ + if (ip == info.ip) return FALSE; + execute_cfa_instructions(&cie_ctx, ip, &info); + + if (info.aug_z_format) /* get length of augmentation data */ + { + ULONG_PTR len = dwarf2_leb128_as_unsigned(&fde_ctx); + end = fde_ctx.data + len; + } + else end = NULL; + dwarf2_parse_augmentation_ptr(&fde_ctx, info.lsda_encoding); /* handler_data */ + if (end) fde_ctx.data = end; + + execute_cfa_instructions(&fde_ctx, ip, &info); + apply_frame_state(pair.effective, csw, context, &info.state, cfa); + + return TRUE; +} + static void dwarf2_location_compute(struct process* pcs, const struct module_format* modfmt, const struct symt_function* func, struct location* loc) { struct location frame; - DWORD ip; + DWORD_PTR ip; int err; dwarf2_traverse_context_t lctx; @@ -2328,7 +3044,7 @@ static void dwarf2_location_compute(struct process* pcs, lctx.data = (const BYTE*)(ptr + 1); lctx.end_data = lctx.data + *ptr; - lctx.word_size = 4; /* FIXME !! */ + lctx.word_size = modfmt->u.dwarf2_info->word_size; } do_compute: /* now get the variable */ @@ -2353,7 +3069,6 @@ static void dwarf2_location_compute(struct process* pcs, static void dwarf2_module_remove(struct process* pcs, struct module_format* modfmt) { - HeapFree(GetProcessHeap(), 0, modfmt->u.dwarf2_info); HeapFree(GetProcessHeap(), 0, modfmt); } @@ -2384,15 +3099,14 @@ BOOL dwarf2_parse(struct module* module, unsigned long load_offset, dwarf2_section_t section[section_max]; dwarf2_traverse_context_t mod_ctx; struct image_section_map debug_sect, debug_str_sect, debug_abbrev_sect, - debug_line_sect, debug_loclist_sect; + debug_line_sect; BOOL ret = TRUE; struct module_format* dwarf2_modfmt; if (!dwarf2_init_section(§ion[section_debug], fmap, ".debug_info", &debug_sect)) - { - /* no Dwarf debug info here, so there's no error */ - return TRUE; - } + /* no Dwarf debug info here */ + return FALSE; + dwarf2_init_section(§ion[section_abbrev], fmap, ".debug_abbrev", &debug_abbrev_sect); dwarf2_init_section(§ion[section_string], fmap, ".debug_str", &debug_str_sect); dwarf2_init_section(§ion[section_line], fmap, ".debug_line", &debug_line_sect); @@ -2416,32 +3130,30 @@ BOOL dwarf2_parse(struct module* module, unsigned long load_offset, TRACE("Loading Dwarf2 information for %s\n", debugstr_w(module->module.ModuleName)); - mod_ctx.start_data = mod_ctx.data = section[section_debug].address; + mod_ctx.data = section[section_debug].address; mod_ctx.end_data = mod_ctx.data + section[section_debug].size; + mod_ctx.word_size = 0; /* will be correctly set later on */ - - dwarf2_modfmt = HeapAlloc(GetProcessHeap(), 0, sizeof(*dwarf2_modfmt)); - if (!dwarf2_modfmt) return FALSE; + dwarf2_modfmt = HeapAlloc(GetProcessHeap(), 0, + sizeof(*dwarf2_modfmt) + sizeof(*dwarf2_modfmt->u.dwarf2_info)); + if (!dwarf2_modfmt) + { + ret = FALSE; + goto leave; + } dwarf2_modfmt->module = module; dwarf2_modfmt->remove = dwarf2_module_remove; dwarf2_modfmt->loc_compute = dwarf2_location_compute; - dwarf2_modfmt->u.dwarf2_info = NULL; + dwarf2_modfmt->u.dwarf2_info = (struct dwarf2_module_info_s*)(dwarf2_modfmt + 1); + dwarf2_modfmt->u.dwarf2_info->word_size = 0; /* will be correctly set later on */ dwarf2_modfmt->module->format_info[DFI_DWARF] = dwarf2_modfmt; - image_find_section(fmap, ".debug_loc", &debug_loclist_sect); - if (image_get_map_size(&debug_loclist_sect)) - { - /* initialize the dwarf2 specific info block for this module. - * As we'll need later the .debug_loc section content, we won't unmap this - * section upon existing this function - */ - dwarf2_modfmt->u.dwarf2_info = HeapAlloc(GetProcessHeap(), 0, - sizeof(*dwarf2_modfmt->u.dwarf2_info)); - if (!dwarf2_modfmt->u.dwarf2_info) goto leave; - dwarf2_modfmt->u.dwarf2_info->debug_loc.address = (const BYTE*)image_map_section(&debug_loclist_sect); - dwarf2_modfmt->u.dwarf2_info->debug_loc.size = image_get_map_size(&debug_loclist_sect); - } - else image_unmap_section(&debug_loclist_sect); + /* As we'll need later some sections' content, we won't unmap these + * sections upon existing this function + */ + dwarf2_init_section(&dwarf2_modfmt->u.dwarf2_info->debug_loc, fmap, ".debug_loc", NULL); + dwarf2_init_section(&dwarf2_modfmt->u.dwarf2_info->debug_frame, fmap, ".debug_frame", NULL); + dwarf2_init_section(&dwarf2_modfmt->u.dwarf2_info->eh_frame, fmap, ".eh_frame", NULL); while (mod_ctx.data < mod_ctx.end_data) { diff --git a/dll/win32/dbghelp/dwarf.h b/dll/win32/dbghelp/dwarf.h index a590df2c9f0..9864eccdfc8 100644 --- a/dll/win32/dbghelp/dwarf.h +++ b/dll/win32/dbghelp/dwarf.h @@ -379,6 +379,9 @@ typedef enum dwarf_operation_e DW_OP_form_tls_address = 0x9b, DW_OP_call_frame_cfa = 0x9c, DW_OP_bit_piece = 0x9d, + /** Dwarf4 new values */ + DW_OP_implicit_value = 0x9e, + DW_OP_stack_value = 0x9f, /* Implementation defined extensions */ DW_OP_lo_user = 0xe0, @@ -418,3 +421,57 @@ enum dwarf_calling_convention #define DW_LNE_end_sequence 0x01 #define DW_LNE_set_address 0x02 #define DW_LNE_define_file 0x03 +/* Dwarf4 new values */ +#define DW_LNE_set_discriminator 0x04 + +#define DW_CIE_ID ~(0x0) + +enum dwarf_call_frame_info +{ + DW_CFA_advance_loc = 0x40, + DW_CFA_offset = 0x80, + DW_CFA_restore = 0xc0, + DW_CFA_nop = 0x00, + DW_CFA_set_loc = 0x01, + DW_CFA_advance_loc1 = 0x02, + DW_CFA_advance_loc2 = 0x03, + DW_CFA_advance_loc4 = 0x04, + DW_CFA_offset_extended = 0x05, + DW_CFA_restore_extended = 0x06, + DW_CFA_undefined = 0x07, + DW_CFA_same_value = 0x08, + DW_CFA_register = 0x09, + DW_CFA_remember_state = 0x0a, + DW_CFA_restore_state = 0x0b, + DW_CFA_def_cfa = 0x0c, + DW_CFA_def_cfa_register = 0x0d, + DW_CFA_def_cfa_offset = 0x0e, + DW_CFA_def_cfa_expression = 0x0f, + DW_CFA_expression = 0x10, + DW_CFA_offset_extended_sf = 0x11, + DW_CFA_def_cfa_sf = 0x12, + DW_CFA_def_cfa_offset_sf = 0x13, + DW_CFA_val_offset = 0x14, + DW_CFA_val_offset_sf = 0x15, + DW_CFA_val_expression = 0x16, + /* GNU extensions */ + DW_CFA_GNU_window_save = 0x2d, + DW_CFA_GNU_args_size = 0x2e, + DW_CFA_GNU_negative_offset_extended = 0x2f, + +}; + +#define DW_EH_PE_native 0x00 +#define DW_EH_PE_leb128 0x01 +#define DW_EH_PE_data2 0x02 +#define DW_EH_PE_data4 0x03 +#define DW_EH_PE_data8 0x04 +#define DW_EH_PE_signed 0x08 +#define DW_EH_PE_abs 0x00 +#define DW_EH_PE_pcrel 0x10 +#define DW_EH_PE_textrel 0x20 +#define DW_EH_PE_datarel 0x30 +#define DW_EH_PE_funcrel 0x40 +#define DW_EH_PE_aligned 0x50 +#define DW_EH_PE_indirect 0x80 +#define DW_EH_PE_omit 0xff diff --git a/dll/win32/dbghelp/elf_module.c b/dll/win32/dbghelp/elf_module.c index 573a04065c3..132e40c8aef 100644 --- a/dll/win32/dbghelp/elf_module.c +++ b/dll/win32/dbghelp/elf_module.c @@ -272,7 +272,12 @@ static BOOL elf_map_file(const WCHAR* filenameW, struct image_file_map* fmap) lseek(fmap->u.elf.fd, fmap->u.elf.elfhdr.e_shoff, SEEK_SET); for (i = 0; i < fmap->u.elf.elfhdr.e_shnum; i++) { - read(fmap->u.elf.fd, &fmap->u.elf.sect[i].shdr, sizeof(fmap->u.elf.sect[i].shdr)); + if (read(fmap->u.elf.fd, &fmap->u.elf.sect[i].shdr, sizeof(fmap->u.elf.sect[i].shdr)) != sizeof(fmap->u.elf.sect[i].shdr)) + { + HeapFree(GetProcessHeap, 0, fmap->u.elf.sect); + fmap->u.elf.sect = NULL; + goto done; + } fmap->u.elf.sect[i].mapped = IMAGE_NO_MAP; } @@ -1075,6 +1080,7 @@ static BOOL elf_load_file(struct process* pcs, const WCHAR* filename, HeapFree(GetProcessHeap(), 0, modfmt); goto leave; } + elf_info->module->reloc_delta = elf_info->module->module.BaseOfImage - fmap.u.elf.elf_start; elf_module_info = (void*)(modfmt + 1); elf_info->module->format_info[DFI_ELF] = modfmt; modfmt->module = elf_info->module; diff --git a/dll/win32/dbghelp/memory.c b/dll/win32/dbghelp/memory.c deleted file mode 100644 index 6f64016dabe..00000000000 --- a/dll/win32/dbghelp/memory.c +++ /dev/null @@ -1,61 +0,0 @@ -/* - * File memory.c - managing memory - * - * Copyright (C) 2004, Eric Pouech - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#include "config.h" - -#include -#include "dbghelp_private.h" -#include "wine/debug.h" - -WINE_DEFAULT_DEBUG_CHANNEL(dbghelp); - -/****************************************************************** - * addr_to_linear - * - * converts an address into its linear value - */ -DWORD WINAPI addr_to_linear(HANDLE hProcess, HANDLE hThread, ADDRESS* addr) -{ - LDT_ENTRY le; - - switch (addr->Mode) - { - case AddrMode1616: - if (GetThreadSelectorEntry(hThread, addr->Segment, &le)) - return (le.HighWord.Bits.BaseHi << 24) + - (le.HighWord.Bits.BaseMid << 16) + le.BaseLow + LOWORD(addr->Offset); - break; - case AddrMode1632: - if (GetThreadSelectorEntry(hThread, addr->Segment, &le)) - return (le.HighWord.Bits.BaseHi << 24) + - (le.HighWord.Bits.BaseMid << 16) + le.BaseLow + addr->Offset; - break; - case AddrModeReal: - return (DWORD)(LOWORD(addr->Segment) << 4) + addr->Offset; - case AddrModeFlat: - return addr->Offset; - default: - FIXME("Unsupported (yet) mode (%x)\n", addr->Mode); - return 0; - } - FIXME("Failed to linearize address %04x:%08x (mode %x)\n", - addr->Segment, addr->Offset, addr->Mode); - return 0; -} diff --git a/dll/win32/dbghelp/module.c b/dll/win32/dbghelp/module.c index 250c5a5854a..89422a9fc09 100644 --- a/dll/win32/dbghelp/module.c +++ b/dll/win32/dbghelp/module.c @@ -142,6 +142,7 @@ struct module* module_new(struct process* pcs, const WCHAR* name, pool_init(&module->pool, 65536); + module->process = pcs; module->module.SizeOfStruct = sizeof(module->module); module->module.BaseOfImage = mod_addr; module->module.ImageSize = size; @@ -167,6 +168,7 @@ struct module* module_new(struct process* pcs, const WCHAR* name, module->module.SourceIndexed = FALSE; module->module.Publics = FALSE; + module->reloc_delta = 0; module->type = type; module->is_virtual = virtual ? TRUE : FALSE; for (i = 0; i < DFI_LAST; i++) module->format_info[i] = NULL; @@ -1034,13 +1036,10 @@ BOOL WINAPI SymGetModuleInfoW64(HANDLE hProcess, DWORD64 dwAddr, */ DWORD WINAPI SymGetModuleBase(HANDLE hProcess, DWORD dwAddr) { - struct process* pcs = process_find_by_handle(hProcess); - struct module* module; + DWORD64 ret; - if (!pcs) return 0; - module = module_find_by_addr(pcs, dwAddr, DMT_UNKNOWN); - if (!module) return 0; - return module->module.BaseOfImage; + ret = SymGetModuleBase64(hProcess, dwAddr); + return validate_addr64(ret) ? ret : 0; } /*********************************************************************** @@ -1048,8 +1047,13 @@ DWORD WINAPI SymGetModuleBase(HANDLE hProcess, DWORD dwAddr) */ DWORD64 WINAPI SymGetModuleBase64(HANDLE hProcess, DWORD64 dwAddr) { - if (!validate_addr64(dwAddr)) return 0; - return SymGetModuleBase(hProcess, (DWORD)dwAddr); + struct process* pcs = process_find_by_handle(hProcess); + struct module* module; + + if (!pcs) return 0; + module = module_find_by_addr(pcs, dwAddr, DMT_UNKNOWN); + if (!module) return 0; + return module->module.BaseOfImage; } /****************************************************************** @@ -1087,3 +1091,26 @@ BOOL WINAPI SymRefreshModuleList(HANDLE hProcess) return refresh_module_list(pcs); } + +/*********************************************************************** + * SymFunctionTableAccess (DBGHELP.@) + */ +PVOID WINAPI SymFunctionTableAccess(HANDLE hProcess, DWORD AddrBase) +{ + return SymFunctionTableAccess64(hProcess, AddrBase); +} + +/*********************************************************************** + * SymFunctionTableAccess64 (DBGHELP.@) + */ +PVOID WINAPI SymFunctionTableAccess64(HANDLE hProcess, DWORD64 AddrBase) +{ + struct process* pcs = process_find_by_handle(hProcess); + struct module* module; + + if (!pcs || !dbghelp_current_cpu->find_runtime_function) return NULL; + module = module_find_by_addr(pcs, AddrBase, DMT_UNKNOWN); + if (!module) return NULL; + + return dbghelp_current_cpu->find_runtime_function(module, AddrBase); +} diff --git a/dll/win32/dbghelp/pe_module.c b/dll/win32/dbghelp/pe_module.c index 63a2b9a9e4e..18cec9a8369 100644 --- a/dll/win32/dbghelp/pe_module.c +++ b/dll/win32/dbghelp/pe_module.c @@ -171,6 +171,25 @@ unsigned pe_get_map_size(const struct image_section_map* ism) return ism->fmap->u.pe.sect[ism->sidx].shdr.SizeOfRawData; } +/****************************************************************** + * pe_is_valid_pointer_table + * + * Checks whether the PointerToSymbolTable and NumberOfSymbols in file_header contain + * valid information. + */ +static BOOL pe_is_valid_pointer_table(const IMAGE_NT_HEADERS* nthdr, const void* mapping, DWORD64 sz) +{ + DWORD64 offset; + + /* is the iSym table inside file size ? (including first DWORD of string table, which is its size) */ + offset = (DWORD64)nthdr->FileHeader.PointerToSymbolTable; + offset += (DWORD64)nthdr->FileHeader.NumberOfSymbols * sizeof(IMAGE_SYMBOL); + if (offset + sizeof(DWORD) > sz) return FALSE; + /* is string table (following iSym table) inside file size ? */ + offset += *(DWORD*)((const char*)mapping + offset); + return offset <= sz; +} + /****************************************************************** * pe_map_file * @@ -209,16 +228,29 @@ static BOOL pe_map_file(HANDLE file, struct image_file_map* fmap, enum module_ty } if (nthdr->FileHeader.PointerToSymbolTable && nthdr->FileHeader.NumberOfSymbols) { - /* FIXME ugly: should rather map the relevant content instead of copying it */ - const char* src = (const char*)mapping + - nthdr->FileHeader.PointerToSymbolTable + - nthdr->FileHeader.NumberOfSymbols * sizeof(IMAGE_SYMBOL); - char* dst; - DWORD sz = *(DWORD*)src; + LARGE_INTEGER li; - if ((dst = HeapAlloc(GetProcessHeap(), 0, sz))) - memcpy(dst, src, sz); - fmap->u.pe.strtable = dst; + if (GetFileSizeEx(file, &li) && pe_is_valid_pointer_table(nthdr, mapping, li.QuadPart)) + { + /* FIXME ugly: should rather map the relevant content instead of copying it */ + const char* src = (const char*)mapping + + nthdr->FileHeader.PointerToSymbolTable + + nthdr->FileHeader.NumberOfSymbols * sizeof(IMAGE_SYMBOL); + char* dst; + DWORD sz = *(DWORD*)src; + + if ((dst = HeapAlloc(GetProcessHeap(), 0, sz))) + memcpy(dst, src, sz); + fmap->u.pe.strtable = dst; + } + else + { + WARN("Bad coff table... wipping out\n"); + /* we have bad information here, wipe it out */ + fmap->u.pe.ntheader.FileHeader.PointerToSymbolTable = 0; + fmap->u.pe.ntheader.FileHeader.NumberOfSymbols = 0; + fmap->u.pe.strtable = NULL; + } } else fmap->u.pe.strtable = NULL; } @@ -257,6 +289,35 @@ static void pe_unmap_file(struct image_file_map* fmap) } } +/****************************************************************** + * pe_map_directory + * + * Maps a directory content out of a PE file + */ +const char* pe_map_directory(struct module* module, int dirno, DWORD* size) +{ + IMAGE_NT_HEADERS* nth; + void* mapping; + + if (module->type != DMT_PE || !module->format_info[DFI_PE]) return NULL; + if (dirno >= IMAGE_NUMBEROF_DIRECTORY_ENTRIES || + !(mapping = pe_map_full(&module->format_info[DFI_PE]->u.pe_info->fmap, &nth))) + return NULL; + if (size) *size = nth->OptionalHeader.DataDirectory[dirno].Size; + return RtlImageRvaToVa(nth, mapping, + nth->OptionalHeader.DataDirectory[dirno].VirtualAddress, NULL); +} + +/****************************************************************** + * pe_unmap_directory + * + * Unmaps a directory content + */ +void pe_unmap_directory(struct image_file_map* fmap, int dirno) +{ + pe_unmap_full(fmap); +} + static void pe_module_remove(struct process* pcs, struct module_format* modfmt) { pe_unmap_file(&modfmt->u.pe_info->fmap); @@ -348,10 +409,10 @@ static BOOL pe_load_coff_symbol_table(struct module* module) if (!fmap->u.pe.ntheader.FileHeader.PointerToSymbolTable || !numsym) return TRUE; if (!(mapping = pe_map_full(fmap, NULL))) return FALSE; - isym = (const IMAGE_SYMBOL*)((char*)mapping + fmap->u.pe.ntheader.FileHeader.PointerToSymbolTable); + isym = (const IMAGE_SYMBOL*)((const char*)mapping + fmap->u.pe.ntheader.FileHeader.PointerToSymbolTable); /* FIXME: no way to get strtable size */ strtable = (const char*)&isym[numsym]; - sect = IMAGE_FIRST_SECTION(&fmap->u.pe.ntheader); + sect = IMAGE_FIRST_SECTION(RtlImageNtHeader((HMODULE)mapping)); for (i = 0; i < numsym; i+= naux, isym += naux) { diff --git a/dll/win32/dbghelp/stack.c b/dll/win32/dbghelp/stack.c index d53629e80b4..3e1ff725470 100644 --- a/dll/win32/dbghelp/stack.c +++ b/dll/win32/dbghelp/stack.c @@ -95,10 +95,11 @@ static inline void addr_64to32(const ADDRESS64* addr64, ADDRESS* addr32) BOOL sw_read_mem(struct cpu_stack_walk* csw, DWORD64 addr, void* ptr, DWORD sz) { + DWORD bytes_read = 0; if (csw->is32) - return csw->u.s32.f_read_mem(csw->hProcess, addr, ptr, sz, NULL); + return csw->u.s32.f_read_mem(csw->hProcess, addr, ptr, sz, &bytes_read); else - return csw->u.s64.f_read_mem(csw->hProcess, addr, ptr, sz, NULL); + return csw->u.s64.f_read_mem(csw->hProcess, addr, ptr, sz, &bytes_read); } DWORD64 sw_xlat_addr(struct cpu_stack_walk* csw, ADDRESS64* addr) @@ -180,7 +181,7 @@ BOOL WINAPI StackWalk(DWORD MachineType, HANDLE hProcess, HANDLE hThread, csw.u.s32.f_tabl_acs = (FunctionTableAccessRoutine) ? FunctionTableAccessRoutine : SymFunctionTableAccess; csw.u.s32.f_modl_bas = (GetModuleBaseRoutine) ? GetModuleBaseRoutine : SymGetModuleBase; - if ((ret = cpu->stack_walk(&csw, &frame64))) + if ((ret = cpu->stack_walk(&csw, &frame64, ctx))) { addr_64to32(&frame64.AddrPC, &frame32->AddrPC); addr_64to32(&frame64.AddrReturn, &frame32->AddrReturn); @@ -236,7 +237,7 @@ BOOL WINAPI StackWalk64(DWORD MachineType, HANDLE hProcess, HANDLE hThread, csw.u.s64.f_tabl_acs = (FunctionTableAccessRoutine) ? FunctionTableAccessRoutine : SymFunctionTableAccess64; csw.u.s64.f_modl_bas = (GetModuleBaseRoutine) ? GetModuleBaseRoutine : SymGetModuleBase64; - if (!cpu->stack_walk(&csw, frame)) return FALSE; + if (!cpu->stack_walk(&csw, frame, ctx)) return FALSE; /* we don't handle KdHelp */ frame->KdHelp.Thread = 0xC000FADE; diff --git a/dll/win32/dbghelp/symbol.c b/dll/win32/dbghelp/symbol.c index 650f6a28086..b399b667c85 100644 --- a/dll/win32/dbghelp/symbol.c +++ b/dll/win32/dbghelp/symbol.c @@ -476,7 +476,7 @@ struct symt_data* symt_add_func_local(struct module* module, locsym->hash_elt.name = pool_strdup(&module->pool, name); locsym->hash_elt.next = NULL; locsym->kind = dt; - locsym->container = &block->symt; + locsym->container = block ? &block->symt : &func->symt; locsym->type = type; locsym->u.var = *loc; if (block) @@ -724,6 +724,10 @@ static void symt_fill_sym_info(struct module_pair* pair, sym_info->Register = loc.reg ? loc.reg : CV_REG_EBP; sym_info->Address = loc.offset; break; + case loc_absolute: + sym_info->Flags |= SYMFLAG_VALUEPRESENT; + sym_info->Value = loc.offset; + break; default: FIXME("Shouldn't happen (kind=%d), debug reader backend is broken\n", loc.kind); assert(0); @@ -1016,7 +1020,7 @@ static BOOL symt_enum_locals(struct process* pcs, const char* mask, { struct module_pair pair; struct symt_ht* sym; - DWORD pc = pcs->ctx_frame.InstructionOffset; + DWORD_PTR pc = pcs->ctx_frame.InstructionOffset; se->sym_info->SizeOfStruct = sizeof(*se->sym_info); se->sym_info->MaxNameLen = sizeof(se->buffer) - sizeof(SYMBOL_INFO); @@ -1037,9 +1041,8 @@ static BOOL symt_enum_locals(struct process* pcs, const char* mask, &((struct symt_function*)sym)->vchildren); regfree(&preg); return ret; - } - return send_symbol(se, &pair, NULL, &sym->symt); + return FALSE; } /****************************************************************** @@ -1793,24 +1796,6 @@ BOOL WINAPI SymGetLineNext(HANDLE hProcess, PIMAGEHLP_LINE Line) return TRUE; } -/*********************************************************************** - * SymFunctionTableAccess (DBGHELP.@) - */ -PVOID WINAPI SymFunctionTableAccess(HANDLE hProcess, DWORD AddrBase) -{ - WARN("(%p, 0x%08x): stub\n", hProcess, AddrBase); - return NULL; -} - -/*********************************************************************** - * SymFunctionTableAccess64 (DBGHELP.@) - */ -PVOID WINAPI SymFunctionTableAccess64(HANDLE hProcess, DWORD64 AddrBase) -{ - WARN("(%p, %s): stub\n", hProcess, wine_dbgstr_longlong(AddrBase)); - return NULL; -} - /*********************************************************************** * SymUnDName (DBGHELP.@) */ diff --git a/dll/win32/dbghelp/type.c b/dll/win32/dbghelp/type.c index 2ef4bb45095..e933e19c9b2 100644 --- a/dll/win32/dbghelp/type.c +++ b/dll/win32/dbghelp/type.c @@ -803,9 +803,35 @@ BOOL symt_get_info(struct module* module, const struct symt* type, break; case TI_GET_VALUE: - if (type->tag != SymTagData || ((const struct symt_data*)type)->kind != DataIsConstant) - return FALSE; - X(VARIANT) = ((const struct symt_data*)type)->u.value; + if (type->tag != SymTagData) return FALSE; + switch (((const struct symt_data*)type)->kind) + { + case DataIsConstant: X(VARIANT) = ((const struct symt_data*)type)->u.value; break; + case DataIsLocal: + case DataIsParam: + { + struct location loc = ((const struct symt_data*)type)->u.var; + unsigned i; + struct module_format* modfmt; + + if (loc.kind < loc_user) return FALSE; + for (i = 0; i < DFI_LAST; i++) + { + modfmt = module->format_info[i]; + if (modfmt && modfmt->loc_compute) + { + modfmt->loc_compute(module->process, modfmt, + (const struct symt_function*)((const struct symt_data*)type)->container, &loc); + break; + } + } + if (loc.kind != loc_absolute) return FALSE; + X(VARIANT).n1.n2.vt = VT_UI4; /* FIXME */ + X(VARIANT).n1.n2.n3.uiVal = loc.offset; + } + break; + default: return FALSE; + } break; case TI_GET_CALLING_CONVENTION: diff --git a/dll/win32/dhcpcsvc/dhcp/adapter.c b/dll/win32/dhcpcsvc/dhcp/adapter.c index ffa176fc1ab..890972f945f 100644 --- a/dll/win32/dhcpcsvc/dhcp/adapter.c +++ b/dll/win32/dhcpcsvc/dhcp/adapter.c @@ -102,8 +102,7 @@ HKEY FindAdapterKey( PDHCP_ADAPTER Adapter ) { "SYSTEM\\CurrentControlSet\\Control\\Class\\" "{4D36E972-E325-11CE-BFC1-08002BE10318}"; PCHAR TargetKeyNameStart = - "SYSTEM\\CurrentControlSet\\Services\\"; - PCHAR TargetKeyNameEnd = "\\Parameters\\Tcpip"; + "SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\"; PCHAR TargetKeyName = NULL; PCHAR *EnumKeysLinkage = GetSubkeyNames( EnumKeyName, "\\Linkage" ); PCHAR *EnumKeysTop = GetSubkeyNames( EnumKeyName, "" ); @@ -125,10 +124,10 @@ HKEY FindAdapterKey( PDHCP_ADAPTER Adapter ) { !strcmp( RootDevice, Adapter->DhclientInfo.name ) ) { TargetKeyName = (CHAR*) malloc( strlen( TargetKeyNameStart ) + - strlen( RootDevice ) + strlen( TargetKeyNameEnd ) + 1); + strlen( RootDevice ) + 1); if( !TargetKeyName ) goto cleanup; - sprintf( TargetKeyName, "%s%s%s", - TargetKeyNameStart, RootDevice, TargetKeyNameEnd ); + sprintf( TargetKeyName, "%s%s", + TargetKeyNameStart, RootDevice ); Error = RegCreateKeyExA( HKEY_LOCAL_MACHINE, TargetKeyName, 0, NULL, 0, KEY_READ, NULL, &OutKey, NULL ); break; } else { @@ -210,7 +209,7 @@ DWORD WINAPI AdapterDiscoveryThread(LPVOID Context) { PDHCP_ADAPTER Adapter = NULL; HANDLE AdapterStateChangedEvent = (HANDLE)Context; struct interface_info *ifi = NULL; - int i, AdapterCount = 0; + int i, AdapterCount = 0, Broadcast; /* FIXME: Kill this thread when the service is stopped */ @@ -286,6 +285,15 @@ DWORD WINAPI AdapterDiscoveryThread(LPVOID Context) { socket( AF_INET, SOCK_DGRAM, IPPROTO_UDP ); if (DhcpSocket != INVALID_SOCKET) { + + /* Allow broadcast on this socket */ + Broadcast = 1; + setsockopt(DhcpSocket, + SOL_SOCKET, + SO_BROADCAST, + (const char *)&Broadcast, + sizeof(Broadcast)); + Adapter->ListenAddr.sin_family = AF_INET; Adapter->ListenAddr.sin_port = htons(LOCAL_PORT); Adapter->BindStatus = diff --git a/dll/win32/dwmapi/dwmapi.spec b/dll/win32/dwmapi/dwmapi.spec index 7c613d0ad46..ea41e0cfeb8 100644 --- a/dll/win32/dwmapi/dwmapi.spec +++ b/dll/win32/dwmapi/dwmapi.spec @@ -23,7 +23,7 @@ @ stub DwmAttachMilContent @ stub DwmDefWindowProc @ stub DwmDetachMilContent -@ stub DwmEnableBlurBehindWindow +@ stdcall DwmEnableBlurBehindWindow(ptr ptr) @ stdcall DwmEnableMMCSS(long) @ stdcall DwmExtendFrameIntoClientArea(long ptr) @ stdcall DwmFlush() diff --git a/dll/win32/dwmapi/dwmapi_main.c b/dll/win32/dwmapi/dwmapi_main.c index ee866912a35..fcc52c38264 100644 --- a/dll/win32/dwmapi/dwmapi_main.c +++ b/dll/win32/dwmapi/dwmapi_main.c @@ -166,3 +166,13 @@ HRESULT WINAPI DwmGetGraphicsStreamTransformHint(UINT uIndex, MilMatrix3x2D *pTr return E_NOTIMPL; } + +/********************************************************************** + * DwmEnableBlurBehindWindow (DWMAPI.@) + */ +HRESULT WINAPI DwmEnableBlurBehindWindow(HWND hWnd, const DWM_BLURBEHIND *pBlurBuf) +{ + FIXME("%p %p\n", hWnd, pBlurBuf); + + return E_NOTIMPL; +} diff --git a/dll/win32/fusion/asmcache.c b/dll/win32/fusion/asmcache.c index f35de7f142a..7334e5d793e 100644 --- a/dll/win32/fusion/asmcache.c +++ b/dll/win32/fusion/asmcache.c @@ -91,15 +91,32 @@ static BOOL create_full_path(LPCWSTR path) return ret; } -static BOOL get_assembly_directory(LPWSTR dir, DWORD size) +static BOOL get_assembly_directory(LPWSTR dir, DWORD size, BYTE architecture) { - static const WCHAR gac[] = - {'\\','a','s','s','e','m','b','l','y','\\','G','A','C','_','M','S','I','L',0}; + static const WCHAR gac[] = {'\\','a','s','s','e','m','b','l','y','\\','G','A','C',0}; - FIXME("Ignoring assembly architecture\n"); + static const WCHAR msil[] = {'_','M','S','I','L',0}; + static const WCHAR x86[] = {'_','3','2',0}; + static const WCHAR amd64[] = {'_','6','4',0}; GetWindowsDirectoryW(dir, size); strcatW(dir, gac); + + switch (architecture) + { + case peMSIL: + strcatW(dir, msil); + break; + + case peI386: + strcatW(dir, x86); + break; + + case peAMD64: + strcatW(dir, amd64); + break; + } + return TRUE; } @@ -291,7 +308,7 @@ static HRESULT WINAPI IAssemblyCacheImpl_InstallAssembly(IAssemblyCache *iface, if (FAILED(hr)) goto done; - get_assembly_directory(asmdir, MAX_PATH); + get_assembly_directory(asmdir, MAX_PATH, assembly_get_architecture(assembly)); sprintfW(path, format, asmdir, name, version, token); diff --git a/dll/win32/fusion/asmname.c b/dll/win32/fusion/asmname.c index 3c014ea3244..bcf49a7f214 100644 --- a/dll/win32/fusion/asmname.c +++ b/dll/win32/fusion/asmname.c @@ -43,6 +43,7 @@ typedef struct { LPWSTR displayname; LPWSTR name; LPWSTR culture; + LPWSTR procarch; WORD version[4]; DWORD versize; @@ -53,6 +54,16 @@ typedef struct { LONG ref; } IAssemblyNameImpl; +static const WCHAR separator[] = {',',' ',0}; +static const WCHAR version[] = {'V','e','r','s','i','o','n',0}; +static const WCHAR culture[] = {'C','u','l','t','u','r','e',0}; +static const WCHAR pubkey[] = + {'P','u','b','l','i','c','K','e','y','T','o','k','e','n',0}; +static const WCHAR procarch[] = {'p','r','o','c','e','s','s','o','r', + 'A','r','c','h','i','t','e','c','t','u','r','e',0}; + +#define CHARS_PER_PUBKEY 16 + static HRESULT WINAPI IAssemblyNameImpl_QueryInterface(IAssemblyName *iface, REFIID riid, LPVOID *ppobj) { @@ -208,16 +219,120 @@ static HRESULT WINAPI IAssemblyNameImpl_GetDisplayName(IAssemblyName *iface, DWORD dwDisplayFlags) { IAssemblyNameImpl *name = (IAssemblyNameImpl *)iface; + WCHAR verstr[30]; + DWORD size; + LPWSTR cultureval = 0; + + static const WCHAR equals[] = {'=',0}; TRACE("(%p, %p, %p, %d)\n", iface, szDisplayName, pccDisplayName, dwDisplayFlags); - if (!name->displayname || !*name->displayname) + if (dwDisplayFlags == 0) + { + if (!name->displayname || !*name->displayname) + return FUSION_E_INVALID_NAME; + + size = min(*pccDisplayName, lstrlenW(name->displayname) + 1); + + lstrcpynW(szDisplayName, name->displayname, size); + *pccDisplayName = size; + + return S_OK; + } + + if (!name->name || !*name->name) return FUSION_E_INVALID_NAME; - lstrcpyW(szDisplayName, name->displayname); - *pccDisplayName = lstrlenW(szDisplayName) + 1; + /* Verify buffer size is sufficient */ + size = lstrlenW(name->name) + 1; + if ((dwDisplayFlags & ASM_DISPLAYF_VERSION) && (name->versize > 0)) + { + static const WCHAR spec[] = {'%','d',0}; + static const WCHAR period[] = {'.',0}; + int i; + + wsprintfW(verstr, spec, name->version[0]); + + for (i = 1; i < name->versize; i++) + { + WCHAR value[6]; + wsprintfW(value, spec, name->version[i]); + + lstrcatW(verstr, period); + lstrcatW(verstr, value); + } + + size += lstrlenW(separator) + lstrlenW(version) + lstrlenW(equals) + lstrlenW(verstr); + } + + if ((dwDisplayFlags & ASM_DISPLAYF_CULTURE) && (name->culture)) + { + static const WCHAR neutral[] = {'n','e','u','t','r','a','l', 0}; + + cultureval = (lstrlenW(name->culture) == 2) ? name->culture : (LPWSTR) neutral; + size += lstrlenW(separator) + lstrlenW(culture) + lstrlenW(equals) + lstrlenW(cultureval); + } + + if ((dwDisplayFlags & ASM_DISPLAYF_PUBLIC_KEY_TOKEN) && (name->haspubkey)) + size += lstrlenW(separator) + lstrlenW(pubkey) + lstrlenW(equals) + CHARS_PER_PUBKEY; + + if ((dwDisplayFlags & ASM_DISPLAYF_PROCESSORARCHITECTURE) && (name->procarch)) + size += lstrlenW(separator) + lstrlenW(procarch) + lstrlenW(equals) + lstrlenW(name->procarch); + + if (size > *pccDisplayName) + return S_FALSE; + + /* Construct the string */ + lstrcpyW(szDisplayName, name->name); + + if ((dwDisplayFlags & ASM_DISPLAYF_VERSION) && (name->versize > 0)) + { + lstrcatW(szDisplayName, separator); + + lstrcatW(szDisplayName, version); + lstrcatW(szDisplayName, equals); + lstrcatW(szDisplayName, verstr); + } + + if ((dwDisplayFlags & ASM_DISPLAYF_CULTURE) && (name->culture)) + { + lstrcatW(szDisplayName, separator); + + lstrcatW(szDisplayName, culture); + lstrcatW(szDisplayName, equals); + lstrcatW(szDisplayName, cultureval); + } + + if ((dwDisplayFlags & ASM_DISPLAYF_PUBLIC_KEY_TOKEN) && (name->haspubkey)) + { + WCHAR pkt[CHARS_PER_PUBKEY + 1]; + static const WCHAR spec[] = {'%','0','x','%','0','x','%','0','x', + '%','0','x','%','0','x','%','0','x','%','0','x','%','0','x',0}; + + lstrcatW(szDisplayName, separator); + + lstrcatW(szDisplayName, pubkey); + lstrcatW(szDisplayName, equals); + + wsprintfW(pkt, spec, name->pubkey[0], name->pubkey[1], name->pubkey[2], + name->pubkey[3], name->pubkey[4], name->pubkey[5], name->pubkey[6], + name->pubkey[7]); + + lstrcatW(szDisplayName, pkt); + } + + if ((dwDisplayFlags & ASM_DISPLAYF_PROCESSORARCHITECTURE) && (name->procarch)) + { + lstrcatW(szDisplayName, separator); + + lstrcatW(szDisplayName, procarch); + lstrcatW(szDisplayName, equals); + lstrcatW(szDisplayName, name->procarch); + } + + *pccDisplayName = size; return S_OK; } @@ -347,8 +462,6 @@ static HRESULT parse_culture(IAssemblyNameImpl *name, LPWSTR culture) return S_OK; } -#define CHARS_PER_PUBKEY 16 - static BOOL is_hex(WCHAR c) { return ((c >= 'a' && c <= 'f') || @@ -397,12 +510,6 @@ static HRESULT parse_display_name(IAssemblyNameImpl *name, LPCWSTR szAssemblyNam HRESULT hr = S_OK; BOOL done = FALSE; - static const WCHAR separator[] = {',',' ',0}; - static const WCHAR version[] = {'V','e','r','s','i','o','n',0}; - static const WCHAR culture[] = {'C','u','l','t','u','r','e',0}; - static const WCHAR pubkey[] = - {'P','u','b','l','i','c','K','e','y','T','o','k','e','n',0}; - if (!szAssemblyName) return S_OK; @@ -462,6 +569,11 @@ static HRESULT parse_display_name(IAssemblyNameImpl *name, LPCWSTR szAssemblyNam hr = parse_culture(name, ptr); else if (!lstrcmpW(str, pubkey)) hr = parse_pubkey(name, ptr); + else if (!lstrcmpW(str, procarch)) + { + name->procarch = strdupW(ptr); + hr = S_OK; + } if (FAILED(hr)) goto done; diff --git a/dll/win32/fusion/assembly.c b/dll/win32/fusion/assembly.c index bc187ac91cd..328b2792c9c 100644 --- a/dll/win32/fusion/assembly.c +++ b/dll/win32/fusion/assembly.c @@ -811,6 +811,20 @@ HRESULT assembly_get_version(ASSEMBLY *assembly, LPWSTR *version) return S_OK; } +BYTE assembly_get_architecture(ASSEMBLY *assembly) +{ + if ((assembly->corhdr->MajorRuntimeVersion == 2) && (assembly->corhdr->MinorRuntimeVersion == 0)) + return 0; /* .NET 1.x assembly */ + + if (assembly->nthdr->OptionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR64_MAGIC) + return peAMD64; /* AMD64/IA64 assembly */ + + if ((assembly->corhdr->Flags & COMIMAGE_FLAGS_ILONLY) && !(assembly->corhdr->Flags & COMIMAGE_FLAGS_32BITREQUIRED)) + return peMSIL; /* MSIL assembly */ + + return peI386; /* x86 assembly */ +} + static BYTE *assembly_get_blob(ASSEMBLY *assembly, WORD index, ULONG *size) { return GetData(&assembly->blobs[index], size); diff --git a/dll/win32/fusion/fusionpriv.h b/dll/win32/fusion/fusionpriv.h index 4b9bd576d5b..6f4b28dc793 100644 --- a/dll/win32/fusion/fusionpriv.h +++ b/dll/win32/fusion/fusionpriv.h @@ -433,6 +433,7 @@ HRESULT assembly_release(ASSEMBLY *assembly); HRESULT assembly_get_name(ASSEMBLY *assembly, LPWSTR *name); HRESULT assembly_get_path(ASSEMBLY *assembly, LPWSTR *path); HRESULT assembly_get_version(ASSEMBLY *assembly, LPWSTR *version); +BYTE assembly_get_architecture(ASSEMBLY *assembly); HRESULT assembly_get_pubkey_token(ASSEMBLY *assembly, LPWSTR *token); static inline LPWSTR strdupW(LPCWSTR src) diff --git a/dll/win32/gdi32/objects/palette.c b/dll/win32/gdi32/objects/palette.c index 3f446576052..4301ac605ea 100644 --- a/dll/win32/gdi32/objects/palette.c +++ b/dll/win32/gdi32/objects/palette.c @@ -86,34 +86,36 @@ GetSystemPaletteEntries(HDC hDC, UINT cEntries, LPPALETTEENTRY ppe) { - PALETTEENTRY ippe[256]; - // Make this work! - if ((INT)cEntries < 0 ) return 0; + PALETTEENTRY ippe[256]; - if ( GetDeviceCaps(hDC, RASTERCAPS) & RC_PALETTE ) - return NtGdiDoPalette(hDC, iStartIndex, cEntries, ppe, GdiPalGetSystemEntries, FALSE); - else - { - if (ppe) + if ((INT)cEntries >= 0) + { + if (GetDeviceCaps(hDC, RASTERCAPS) & RC_PALETTE) { - RtlZeroMemory( &ippe, sizeof(ippe) ); - RtlCopyMemory( &ippe, &sys_pal_template, 10 * sizeof(PALETTEENTRY) ); - RtlCopyMemory( &ippe + 246 , &sys_pal_template + 10 , 10 * sizeof(PALETTEENTRY) ); - - if (iStartIndex < 256) - { - UINT Index = 256 - iStartIndex; - - if ( Index > cEntries ) Index = cEntries; - - RtlCopyMemory( ppe, - &ippe[iStartIndex], - Index*sizeof(PALETTEENTRY)); - } + return NtGdiDoPalette(hDC, + iStartIndex, + cEntries, + ppe, + GdiPalGetSystemEntries, + FALSE); } - } + else if (ppe) + { + RtlCopyMemory(ippe, sys_pal_template, 10 * sizeof(PALETTEENTRY)); + RtlCopyMemory(&ippe[246], &sys_pal_template[10], 10 * sizeof(PALETTEENTRY)); + RtlZeroMemory(&ippe[10], sizeof(ippe) - 20 * sizeof(PALETTEENTRY)); + + if (iStartIndex < 256) + { + RtlCopyMemory(ppe, + &ippe[iStartIndex], + min(256 - iStartIndex, cEntries) * + sizeof(PALETTEENTRY)); + } + } + } - return 0; + return 0; } UINT diff --git a/dll/win32/gdi32/objects/text.c b/dll/win32/gdi32/objects/text.c index e5245716fcf..b84e948abad 100644 --- a/dll/win32/gdi32/objects/text.c +++ b/dll/win32/gdi32/objects/text.c @@ -173,7 +173,7 @@ GetTextExtentPointW( LPSIZE lpSize ) { - return NtGdiGetTextExtent(hdc, (LPWSTR)lpString, cchString, lpSize, 1); + return NtGdiGetTextExtent(hdc, (LPWSTR)lpString, cchString, lpSize, 0); } @@ -192,6 +192,13 @@ GetTextExtentExPointW( LPSIZE lpSize ) { + + if(nMaxExtent < -1) + { + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + return NtGdiGetTextExtentExW ( hdc, (LPWSTR)lpszStr, cchString, nMaxExtent, (PULONG)lpnFit, (PULONG)alpDx, lpSize, 0 ); } @@ -216,6 +223,12 @@ GetTextExtentExPointA( LPWSTR lpszStrW; BOOL rc = 0; + if(nMaxExtent < -1) + { + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + Status = HEAP_strdupA2W ( &lpszStrW, lpszStr ); if (!NT_SUCCESS (Status)) SetLastError (RtlNtStatusToDosError(Status)); @@ -286,7 +299,7 @@ GetTextExtentExPointI(HDC hdc, LPINT alpDx, LPSIZE lpSize) { - return NtGdiGetTextExtentExW(hdc,pgiIn,cgi,nMaxExtent,(ULONG *)lpnFit, (PULONG) alpDx,lpSize,1); + return NtGdiGetTextExtentExW(hdc,pgiIn,cgi,nMaxExtent,(ULONG *)lpnFit, (PULONG) alpDx,lpSize,GTEF_INDICES); } /* @@ -299,7 +312,7 @@ GetTextExtentPointI(HDC hdc, int cgi, LPSIZE lpSize) { - return NtGdiGetTextExtent(hdc,pgiIn,cgi,lpSize,2); + return NtGdiGetTextExtent(hdc,pgiIn,cgi,lpSize,GTEF_INDICES); } /* diff --git a/dll/win32/gdiplus/brush.c b/dll/win32/gdiplus/brush.c index 9dad679e622..b46bdc559b8 100644 --- a/dll/win32/gdiplus/brush.c +++ b/dll/win32/gdiplus/brush.c @@ -606,6 +606,7 @@ GpStatus WINGDIPAPI GdipCreatePathGradient(GDIPCONST GpPointF* points, GdipFree((*grad)->blendfac); GdipFree((*grad)->blendpos); GdipFree(*grad); + *grad = NULL; return OutOfMemory; } (*grad)->blendfac[0] = 1.0; @@ -699,6 +700,7 @@ GpStatus WINGDIPAPI GdipCreatePathGradientFromPath(GDIPCONST GpPath* path, GdipFree((*grad)->blendfac); GdipFree((*grad)->blendpos); GdipFree(*grad); + *grad = NULL; return OutOfMemory; } (*grad)->blendfac[0] = 1.0; diff --git a/dll/win32/gdiplus/font.c b/dll/win32/gdiplus/font.c index f198863da99..2670e8175dc 100644 --- a/dll/win32/gdiplus/font.c +++ b/dll/win32/gdiplus/font.c @@ -963,18 +963,33 @@ GpStatus WINGDIPAPI GdipGetFontCollectionFamilyList( GpFontFamily* gpfamilies[], INT* numFound) { INT i; + GpStatus stat=Ok; TRACE("%p, %d, %p, %p\n", fontCollection, numSought, gpfamilies, numFound); if (!(fontCollection && gpfamilies && numFound)) return InvalidParameter; - for (i = 0; i < numSought && i < fontCollection->count; i++) + memset(gpfamilies, 0, sizeof(*gpfamilies) * numSought); + + for (i = 0; i < numSought && i < fontCollection->count && stat == Ok; i++) { - gpfamilies[i] = fontCollection->FontFamilies[i]; + stat = GdipCloneFontFamily(fontCollection->FontFamilies[i], &gpfamilies[i]); } - *numFound = i; - return Ok; + + if (stat == Ok) + *numFound = i; + else + { + int numToFree=i; + for (i=0; ibrush), argb); } +GpStatus WINGDIPAPI GdipGetPenCompoundCount(GpPen *pen, INT *count) +{ + FIXME("(%p, %p): stub\n", pen, count); + + if (!pen || !count) + return InvalidParameter; + + return NotImplemented; +} + GpStatus WINGDIPAPI GdipSetPenCompoundArray(GpPen *pen, GDIPCONST REAL *dash, INT count) { diff --git a/dll/win32/iccvid/iccvid_Cy.rc b/dll/win32/iccvid/iccvid_Cy.rc new file mode 100644 index 00000000000..bf262595f23 --- /dev/null +++ b/dll/win32/iccvid/iccvid_Cy.rc @@ -0,0 +1,30 @@ +/* + * Cefnogaeth iaith Cymraeg + * Welsh language support + * + * Copyright 2010 Ken Sharp + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include "iccvid_private.h" + +LANGUAGE LANG_WELSH, SUBLANG_DEFAULT + +STRINGTABLE +{ + IDS_NAME "'N Fideo Cinepak codec" + IDS_DESCRIPTION "'N Fideo Cinepak codec" +} diff --git a/dll/win32/iccvid/iccvid_Da.rc b/dll/win32/iccvid/iccvid_Da.rc index bbdc03ed4f2..6933ba5a49a 100644 --- a/dll/win32/iccvid/iccvid_Da.rc +++ b/dll/win32/iccvid/iccvid_Da.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_DANISH, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "Cinepak videokodeks" IDS_DESCRIPTION "Cinepak videokodeks" diff --git a/dll/win32/iccvid/iccvid_De.rc b/dll/win32/iccvid/iccvid_De.rc index d1a3cef3131..075d5618961 100644 --- a/dll/win32/iccvid/iccvid_De.rc +++ b/dll/win32/iccvid/iccvid_De.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "Cinepak Video Codec" IDS_DESCRIPTION "Cinepak Video Codec" diff --git a/dll/win32/iccvid/iccvid_En.rc b/dll/win32/iccvid/iccvid_En.rc index 91d848a0841..6c239f7e046 100644 --- a/dll/win32/iccvid/iccvid_En.rc +++ b/dll/win32/iccvid/iccvid_En.rc @@ -20,7 +20,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "Cinepak Video codec" IDS_DESCRIPTION "Cinepak Video codec" diff --git a/dll/win32/iccvid/iccvid_Es.rc b/dll/win32/iccvid/iccvid_Es.rc index e86d5250a01..c87378e23e4 100644 --- a/dll/win32/iccvid/iccvid_Es.rc +++ b/dll/win32/iccvid/iccvid_Es.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "Códec de vídeo Cinepak" IDS_DESCRIPTION "Códec de vídeo Cinepak" diff --git a/dll/win32/iccvid/iccvid_Fr.rc b/dll/win32/iccvid/iccvid_Fr.rc index 79d9cfd23ce..6c813639942 100644 --- a/dll/win32/iccvid/iccvid_Fr.rc +++ b/dll/win32/iccvid/iccvid_Fr.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "Codec vidéo Cinepak" IDS_DESCRIPTION "Codec vidéo Cinepak" diff --git a/dll/win32/iccvid/iccvid_Hu.rc b/dll/win32/iccvid/iccvid_Hu.rc index 69faccd6a0d..69f335929af 100644 --- a/dll/win32/iccvid/iccvid_Hu.rc +++ b/dll/win32/iccvid/iccvid_Hu.rc @@ -20,7 +20,7 @@ LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "Cinepak Video kodek" IDS_DESCRIPTION "Cinepak Video kodek" diff --git a/dll/win32/iccvid/iccvid_It.rc b/dll/win32/iccvid/iccvid_It.rc index fae63873a3e..acc06e5dbc3 100644 --- a/dll/win32/iccvid/iccvid_It.rc +++ b/dll/win32/iccvid/iccvid_It.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "Cinepak Video codec" IDS_DESCRIPTION "Cinepak Video codec" diff --git a/dll/win32/iccvid/iccvid_Ja.rc b/dll/win32/iccvid/iccvid_Ja.rc index b845af4a1c3..8330a35dab4 100644 --- a/dll/win32/iccvid/iccvid_Ja.rc +++ b/dll/win32/iccvid/iccvid_Ja.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "Cinepak ビデオコーデック" IDS_DESCRIPTION "Cinepak ビデオコーデック" diff --git a/dll/win32/iccvid/iccvid_Ko.rc b/dll/win32/iccvid/iccvid_Ko.rc index f47eb8ca89a..1d1ba8687c4 100644 --- a/dll/win32/iccvid/iccvid_Ko.rc +++ b/dll/win32/iccvid/iccvid_Ko.rc @@ -21,7 +21,7 @@ LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "ó ڵ" IDS_DESCRIPTION "ó ڵ" diff --git a/dll/win32/iccvid/iccvid_Lt.rc b/dll/win32/iccvid/iccvid_Lt.rc index 2e31cd398ed..02b5991ac85 100644 --- a/dll/win32/iccvid/iccvid_Lt.rc +++ b/dll/win32/iccvid/iccvid_Lt.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "Cinepak vaizdo kodekas" IDS_DESCRIPTION "Cinepak vaizdo kodekas" diff --git a/dll/win32/iccvid/iccvid_Nl.rc b/dll/win32/iccvid/iccvid_Nl.rc index fbc4024bf22..399b0b8a638 100644 --- a/dll/win32/iccvid/iccvid_Nl.rc +++ b/dll/win32/iccvid/iccvid_Nl.rc @@ -20,7 +20,7 @@ LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "Cinepak Video codec" IDS_DESCRIPTION "Cinepak Video codec" diff --git a/dll/win32/iccvid/iccvid_No.rc b/dll/win32/iccvid/iccvid_No.rc index 4cefc0013fd..fcdad02a76c 100644 --- a/dll/win32/iccvid/iccvid_No.rc +++ b/dll/win32/iccvid/iccvid_No.rc @@ -20,7 +20,7 @@ LANGUAGE LANG_NORWEGIAN, SUBLANG_NORWEGIAN_BOKMAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "Cinepak-videokodek" IDS_DESCRIPTION "Cinepak-videokodek" diff --git a/dll/win32/iccvid/iccvid_Pl.rc b/dll/win32/iccvid/iccvid_Pl.rc index 0a4c0f51678..81258e27571 100644 --- a/dll/win32/iccvid/iccvid_Pl.rc +++ b/dll/win32/iccvid/iccvid_Pl.rc @@ -21,7 +21,7 @@ LANGUAGE LANG_POLISH, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "Kodek Cinepak Video" IDS_DESCRIPTION "Kodek Cinepak Video" diff --git a/dll/win32/iccvid/iccvid_Pt.rc b/dll/win32/iccvid/iccvid_Pt.rc index 659224f8966..5c59cd5bac3 100644 --- a/dll/win32/iccvid/iccvid_Pt.rc +++ b/dll/win32/iccvid/iccvid_Pt.rc @@ -20,7 +20,7 @@ LANGUAGE LANG_PORTUGUESE, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "Codec Video Cinepak" IDS_DESCRIPTION "Codec Video Cinepak" diff --git a/dll/win32/iccvid/iccvid_Ro.rc b/dll/win32/iccvid/iccvid_Ro.rc index d99a0b2d36b..3f20704a515 100644 --- a/dll/win32/iccvid/iccvid_Ro.rc +++ b/dll/win32/iccvid/iccvid_Ro.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "Codecul Cinepak Video" IDS_DESCRIPTION "Codecul Cinepak Video" diff --git a/dll/win32/iccvid/iccvid_Ru.rc b/dll/win32/iccvid/iccvid_Ru.rc index 7a77b349eaf..47094041ddc 100644 --- a/dll/win32/iccvid/iccvid_Ru.rc +++ b/dll/win32/iccvid/iccvid_Ru.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "Видео кодер-декодер Cinepak" IDS_DESCRIPTION "Видео кодер-декодер Cinepak" diff --git a/dll/win32/iccvid/iccvid_Si.rc b/dll/win32/iccvid/iccvid_Si.rc index 9635480e091..9e53c0a72f5 100644 --- a/dll/win32/iccvid/iccvid_Si.rc +++ b/dll/win32/iccvid/iccvid_Si.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "Cinepak Video kodek" IDS_DESCRIPTION "Cinepak Video kodek" diff --git a/dll/win32/iccvid/iccvid_Sv.rc b/dll/win32/iccvid/iccvid_Sv.rc index 34762d69071..2c68b717454 100644 --- a/dll/win32/iccvid/iccvid_Sv.rc +++ b/dll/win32/iccvid/iccvid_Sv.rc @@ -20,7 +20,7 @@ LANGUAGE LANG_SWEDISH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "Cinepak videokodek" IDS_DESCRIPTION "Cinepak videokodek" diff --git a/dll/win32/iccvid/iccvid_Tr.rc b/dll/win32/iccvid/iccvid_Tr.rc index 8eabf9f6909..eec2b7ec5fd 100644 --- a/dll/win32/iccvid/iccvid_Tr.rc +++ b/dll/win32/iccvid/iccvid_Tr.rc @@ -20,7 +20,7 @@ LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "Cinepak Vidyo zc" IDS_DESCRIPTION "Cinepak Vidyo zc" diff --git a/dll/win32/iccvid/iccvid_Uk.rc b/dll/win32/iccvid/iccvid_Uk.rc index 3bf3fbf3db8..c9c43b849d1 100644 --- a/dll/win32/iccvid/iccvid_Uk.rc +++ b/dll/win32/iccvid/iccvid_Uk.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "Відео кодек Cinepak" IDS_DESCRIPTION "Відео кодек Cinepak" diff --git a/dll/win32/imagehlp/access.c b/dll/win32/imagehlp/access.c index c6505c26f70..5d86ac25741 100644 --- a/dll/win32/imagehlp/access.c +++ b/dll/win32/imagehlp/access.c @@ -18,10 +18,15 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "precomp.h" - -#define _WINNT_H +#include +#include +#include "windef.h" +#include "winbase.h" +#include "winnt.h" +#include "winternl.h" +#include "winerror.h" #include "wine/debug.h" +#include "imagehlp.h" WINE_DEFAULT_DEBUG_CHANNEL(imagehlp); @@ -29,13 +34,32 @@ WINE_DEFAULT_DEBUG_CHANNEL(imagehlp); * Data */ -BOOLEAN DllListInitialized; -LIST_ENTRY ImageLoadListHead; +static PLOADED_IMAGE IMAGEHLP_pFirstLoadedImage=NULL; +static PLOADED_IMAGE IMAGEHLP_pLastLoadedImage=NULL; + +static LOADED_IMAGE IMAGEHLP_EmptyLoadedImage = { + NULL, /* ModuleName */ + 0, /* hFile */ + NULL, /* MappedAddress */ + NULL, /* FileHeader */ + NULL, /* LastRvaSection */ + 0, /* NumberOfSections */ + NULL, /* Sections */ + 1, /* Characteristics */ + FALSE, /* fSystemImage */ + FALSE, /* fDOSImage */ + FALSE, /* fReadOnly */ + 0, /* Version */ + { &IMAGEHLP_EmptyLoadedImage.Links, &IMAGEHLP_EmptyLoadedImage.Links }, /* Links */ + 148, /* SizeOfImage; */ +}; + +extern HANDLE IMAGEHLP_hHeap; /*********************************************************************** * GetImageConfigInformation (IMAGEHLP.@) */ -BOOL IMAGEAPI GetImageConfigInformation( +BOOL WINAPI GetImageConfigInformation( PLOADED_IMAGE LoadedImage, PIMAGE_LOAD_CONFIG_DIRECTORY ImageConfigInformation) { @@ -49,54 +73,15 @@ BOOL IMAGEAPI GetImageConfigInformation( /*********************************************************************** * GetImageUnusedHeaderBytes (IMAGEHLP.@) */ -DWORD IMAGEAPI GetImageUnusedHeaderBytes( +DWORD WINAPI GetImageUnusedHeaderBytes( PLOADED_IMAGE LoadedImage, LPDWORD SizeUnusedHeaderBytes) { - SIZE_T FirstFreeByte; - PIMAGE_OPTIONAL_HEADER OptionalHeader = NULL; - PIMAGE_NT_HEADERS NtHeaders; - ULONG i; - - /* Read the NT Headers */ - NtHeaders = LoadedImage->FileHeader; - - /* Find the first free byte, which is after all the headers and sections */ - FirstFreeByte = (ULONG_PTR)NtHeaders - - (ULONG_PTR)LoadedImage->MappedAddress + - FIELD_OFFSET(IMAGE_NT_HEADERS, OptionalHeader) + - NtHeaders->FileHeader.SizeOfOptionalHeader + - NtHeaders->FileHeader.NumberOfSections * sizeof(IMAGE_SECTION_HEADER); - - /* Get the Optional Header */ - OptionalHeader = &LoadedImage->FileHeader->OptionalHeader; - - /* - * There is the possibilty that one of the Data Directories is in the PE Header - * itself, so we'll need to find such a case and add it to our PE used space - */ - for (i = 0; i < OptionalHeader->NumberOfRvaAndSizes; i++) - { - /* If the VA is less then the size of headers, then the data is inside the PE header */ - if (OptionalHeader->DataDirectory[i].VirtualAddress < - OptionalHeader->SizeOfHeaders) - { - /* However, make sure it's not 0, which means it doesnt actually exist */ - if (OptionalHeader->DataDirectory[i].VirtualAddress >= - FirstFreeByte) - { - /* Our first empty byte is after this Directory Data then */ - FirstFreeByte = OptionalHeader->DataDirectory[i].VirtualAddress + - OptionalHeader->DataDirectory[i].Size; - } - } - } - - /* Return the unused Header Bytes */ - *SizeUnusedHeaderBytes = OptionalHeader->SizeOfHeaders - (DWORD)FirstFreeByte; - - /* And return the first free byte*/ - return (DWORD)FirstFreeByte; + FIXME("(%p, %p): stub\n", + LoadedImage, SizeUnusedHeaderBytes + ); + SetLastError(ERROR_CALL_NOT_IMPLEMENTED); + return 0; } /*********************************************************************** @@ -104,250 +89,147 @@ DWORD IMAGEAPI GetImageUnusedHeaderBytes( */ PLOADED_IMAGE IMAGEAPI ImageLoad(LPSTR DllName, LPSTR DllPath) { - PLIST_ENTRY Head, Next; - PLOADED_IMAGE LoadedImage; - CHAR Drive[_MAX_DRIVE], Dir[_MAX_DIR], Filename[_MAX_FNAME], Ext[_MAX_EXT]; - BOOL CompleteName = TRUE; - CHAR FullName[MAX_PATH]; + PLOADED_IMAGE pLoadedImage; - /* Initialize the List Head */ - if (!DllListInitialized) - { - InitializeListHead(&ImageLoadListHead); - DllListInitialized = TRUE; - } - - /* Move to the Next DLL */ - Head = &ImageLoadListHead; - Next = Head->Flink; - TRACE("Trying to find library: %s in current ListHead \n", DllName); - - /* Split the path */ - _splitpath(DllName, Drive, Dir, Filename, Ext); - - /* Check if we only got a name */ - if (!strlen(Drive) && !strlen(Dir)) CompleteName = FALSE; - - /* Check if we already Loaded it */ - while (Next != Head) - { - /* Get the Loaded Image Structure */ - LoadedImage = CONTAINING_RECORD(Next, LOADED_IMAGE, Links); - TRACE("Found: %s in current ListHead \n", LoadedImage->ModuleName); - - /* Check if we didn't have a complete name */ - if (!CompleteName) - { - /* Split this module's name */ - _splitpath(LoadedImage->ModuleName, NULL, NULL, Filename, Ext); - - /* Use only the name and extension */ - strcpy(FullName, Filename); - strcat(FullName, Ext); - } - else - { - /* Use the full untouched name */ - strcpy(FullName, LoadedImage->ModuleName); - } - - /* Check if the Names Match */ - if (!_stricmp(DllName, FullName)) - { - TRACE("Found it, returning it\n"); - return LoadedImage; - } - - /* Move to next Entry */ - Next = Next->Flink; - } - - /* Allocate memory for the Structure, and write the Module Name under */ - TRACE("Didn't find it...allocating it for you now\n"); - LoadedImage = HeapAlloc(IMAGEHLP_hHeap, - 0, - sizeof(*LoadedImage) + strlen(DllName) + 1); - if (LoadedImage) - { - /* Module Name will be after structure */ - LoadedImage->ModuleName = (LPSTR)(LoadedImage + 1); - - /* Copy the Module Name */ - strcpy(LoadedImage->ModuleName, DllName); - - /* Now Load it */ - if (MapAndLoad(DllName, DllPath, LoadedImage, TRUE, TRUE)) - { - /* Add it to our list and return it */ - InsertTailList(&ImageLoadListHead, &LoadedImage->Links); - return LoadedImage; - } - - /* If we're here...there's been a failure */ - HeapFree(IMAGEHLP_hHeap, 0, LoadedImage); - LoadedImage = NULL; - } - return LoadedImage; + FIXME("(%s, %s): stub\n", DllName, DllPath); + + pLoadedImage = HeapAlloc(IMAGEHLP_hHeap, 0, sizeof(LOADED_IMAGE)); + if (pLoadedImage) + pLoadedImage->FileHeader = HeapAlloc(IMAGEHLP_hHeap, 0, sizeof(IMAGE_NT_HEADERS)); + + return pLoadedImage; } /*********************************************************************** * ImageUnload (IMAGEHLP.@) */ -BOOL IMAGEAPI ImageUnload(PLOADED_IMAGE pLoadedImage) +BOOL WINAPI ImageUnload(PLOADED_IMAGE pLoadedImage) { - /* If the image list isn't empty, remove this entry */ - if (!IsListEmpty(&pLoadedImage->Links)) RemoveEntryList(&pLoadedImage->Links); + LIST_ENTRY *pCurrent, *pFind; - /* Unmap and unload it */ - UnMapAndLoad(pLoadedImage); + TRACE("(%p)\n", pLoadedImage); + + if(!IMAGEHLP_pFirstLoadedImage || !pLoadedImage) + { + /* No image loaded or null pointer */ + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } - /* Free the structure */ - HeapFree(IMAGEHLP_hHeap, 0, pLoadedImage); + pFind=&pLoadedImage->Links; + pCurrent=&IMAGEHLP_pFirstLoadedImage->Links; + while((pCurrent != pFind) && + (pCurrent != NULL)) + pCurrent = pCurrent->Flink; + if(!pCurrent) + { + /* Not found */ + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } - /* Return success */ - return TRUE; + if(pCurrent->Blink) + pCurrent->Blink->Flink = pCurrent->Flink; + else + IMAGEHLP_pFirstLoadedImage = pCurrent->Flink?CONTAINING_RECORD( + pCurrent->Flink, LOADED_IMAGE, Links):NULL; + + if(pCurrent->Flink) + pCurrent->Flink->Blink = pCurrent->Blink; + else + IMAGEHLP_pLastLoadedImage = pCurrent->Blink?CONTAINING_RECORD( + pCurrent->Blink, LOADED_IMAGE, Links):NULL; + + return FALSE; } /*********************************************************************** * MapAndLoad (IMAGEHLP.@) */ -BOOL IMAGEAPI MapAndLoad( - LPSTR ImageName, LPSTR DllPath, PLOADED_IMAGE pLoadedImage, - BOOL DotDll, BOOL ReadOnly) +BOOL IMAGEAPI MapAndLoad(LPSTR pszImageName, LPSTR pszDllPath, PLOADED_IMAGE pLoadedImage, + BOOL bDotDll, BOOL bReadOnly) { - HANDLE hFile; - HANDLE hFileMapping; - ULONG Tried = 0; - UCHAR Buffer[MAX_PATH]; - LPSTR FilePart; - LPSTR FileToOpen; - PIMAGE_NT_HEADERS NtHeader; + CHAR szFileName[MAX_PATH]; + HANDLE hFile = INVALID_HANDLE_VALUE; + HANDLE hFileMapping = NULL; + PVOID mapping = NULL; + PIMAGE_NT_HEADERS pNtHeader = NULL; - /* So we can add the DLL Path later */ - FileToOpen = ImageName; + TRACE("(%s, %s, %p, %d, %d)\n", + pszImageName, pszDllPath, pLoadedImage, bDotDll, bReadOnly); - /* Assume failure */ - pLoadedImage->hFile = INVALID_HANDLE_VALUE; - - /* Start open loop */ - while (TRUE) + if (!SearchPathA(pszDllPath, pszImageName, bDotDll ? ".DLL" : ".EXE", + sizeof(szFileName), szFileName, NULL)) { - /* Get a handle to the file */ - hFile = CreateFileA(FileToOpen, - ReadOnly ? GENERIC_READ : - GENERIC_READ | GENERIC_WRITE, - ReadOnly ? FILE_SHARE_READ : - FILE_SHARE_READ | FILE_SHARE_WRITE, - NULL, - OPEN_EXISTING, - 0, - NULL); - - if (hFile == INVALID_HANDLE_VALUE) - { - /* Check if we already tried this once */ - if (!Tried) - { - /* We didn't do do a path search now */ - Tried = SearchPath(DllPath, - ImageName, - DotDll ? ".dll" : ".exe", - MAX_PATH, - (PSTR)Buffer, - &FilePart); - - /* Check if it was successful */ - if (Tried && (Tried < MAX_PATH)) - { - /* Change the filename to use, and try again */ - FileToOpen = (PSTR)Buffer; - continue; - } - } - - /* Fail */ - return FALSE; - } - - /* Success, break out */ - break; + SetLastError(ERROR_FILE_NOT_FOUND); + goto Error; } - /* Create the File Mapping */ - hFileMapping = CreateFileMappingA(hFile, - NULL, - ReadOnly ? PAGE_READONLY : - PAGE_READWRITE, - 0, - 0, - NULL); + hFile = CreateFileA(szFileName, + GENERIC_READ | (bReadOnly ? 0 : GENERIC_WRITE), + FILE_SHARE_READ, + NULL, OPEN_EXISTING, 0, NULL); + if (hFile == INVALID_HANDLE_VALUE) + { + WARN("CreateFile: Error = %d\n", GetLastError()); + goto Error; + } + + hFileMapping = CreateFileMappingA(hFile, NULL, + (bReadOnly ? PAGE_READONLY : PAGE_READWRITE) | SEC_COMMIT, + 0, 0, NULL); if (!hFileMapping) { - /* Fail */ - SetLastError(GetLastError()); - CloseHandle(hFile); - return FALSE; + WARN("CreateFileMapping: Error = %d\n", GetLastError()); + goto Error; } - /* Get a pointer to the file */ - pLoadedImage->MappedAddress = MapViewOfFile(hFileMapping, - ReadOnly ? FILE_MAP_READ : - FILE_MAP_WRITE, - 0, - 0, - 0); - - /* Close the handle to the map, we don't need it anymore */ + mapping = MapViewOfFile(hFileMapping, bReadOnly ? FILE_MAP_READ : FILE_MAP_WRITE, 0, 0, 0); CloseHandle(hFileMapping); - - /* Write the image size */ - pLoadedImage->SizeOfImage = GetFileSize(hFile, NULL); - - /* Get the Nt Header */ - NtHeader = ImageNtHeader(pLoadedImage->MappedAddress); - - /* Allocate memory for the name and save it */ - pLoadedImage->ModuleName = HeapAlloc(IMAGEHLP_hHeap, - 0, - strlen(FileToOpen) + 16); - strcpy(pLoadedImage->ModuleName, FileToOpen); - - /* Save the NT Header */ - pLoadedImage->FileHeader = NtHeader; - - /* Save the section data */ - pLoadedImage->Sections = IMAGE_FIRST_SECTION(NtHeader); - pLoadedImage->NumberOfSections = NtHeader->FileHeader.NumberOfSections; - - /* Setup other data */ - pLoadedImage->SizeOfImage = NtHeader->OptionalHeader.SizeOfImage; - pLoadedImage->Characteristics = NtHeader->FileHeader.Characteristics; - pLoadedImage->LastRvaSection = pLoadedImage->Sections; - pLoadedImage->fSystemImage = FALSE; /* FIXME */ - pLoadedImage->fDOSImage = FALSE; /* FIXME */ - InitializeListHead(&pLoadedImage->Links); - - /* Check if it was read-only */ - if (ReadOnly) + if (!mapping) { - /* It was, so close our handle and write it as invalid */ - CloseHandle(hFile); - pLoadedImage->hFile = INVALID_HANDLE_VALUE; - } - else - { - /* Write our file handle */ - pLoadedImage->hFile = hFile; + WARN("MapViewOfFile: Error = %d\n", GetLastError()); + goto Error; } - /* Return Success */ + if (!(pNtHeader = RtlImageNtHeader(mapping))) + { + WARN("Not an NT header\n"); + UnmapViewOfFile(mapping); + goto Error; + } + + pLoadedImage->ModuleName = HeapAlloc(GetProcessHeap(), 0, + strlen(szFileName) + 1); + if (pLoadedImage->ModuleName) strcpy(pLoadedImage->ModuleName, szFileName); + pLoadedImage->hFile = hFile; + pLoadedImage->MappedAddress = mapping; + pLoadedImage->FileHeader = pNtHeader; + pLoadedImage->Sections = (PIMAGE_SECTION_HEADER) + ((LPBYTE) &pNtHeader->OptionalHeader + + pNtHeader->FileHeader.SizeOfOptionalHeader); + pLoadedImage->NumberOfSections = pNtHeader->FileHeader.NumberOfSections; + pLoadedImage->SizeOfImage = GetFileSize(hFile, NULL); + pLoadedImage->Characteristics = pNtHeader->FileHeader.Characteristics; + pLoadedImage->LastRvaSection = pLoadedImage->Sections; + + pLoadedImage->fSystemImage = FALSE; /* FIXME */ + pLoadedImage->fDOSImage = FALSE; /* FIXME */ + + pLoadedImage->Links.Flink = &pLoadedImage->Links; + pLoadedImage->Links.Blink = &pLoadedImage->Links; + return TRUE; + +Error: + if (hFile != INVALID_HANDLE_VALUE) CloseHandle(hFile); + return FALSE; } /*********************************************************************** * SetImageConfigInformation (IMAGEHLP.@) */ -BOOL IMAGEAPI SetImageConfigInformation( +BOOL WINAPI SetImageConfigInformation( PLOADED_IMAGE LoadedImage, PIMAGE_LOAD_CONFIG_DIRECTORY ImageConfigInformation) { @@ -361,276 +243,11 @@ BOOL IMAGEAPI SetImageConfigInformation( /*********************************************************************** * UnMapAndLoad (IMAGEHLP.@) */ -BOOL IMAGEAPI UnMapAndLoad(PLOADED_IMAGE Image) +BOOL WINAPI UnMapAndLoad(PLOADED_IMAGE pLoadedImage) { - PIMAGE_NT_HEADERS NtHeader; - DWORD HeaderCheckSum, CheckSum; - - /* Check if the image was read-only */ - if (Image->hFile == INVALID_HANDLE_VALUE) - { - /* We'll only unmap the view */ - UnmapViewOfFile(Image->MappedAddress); - } - else - { - /* Calculate the checksum */ - CheckSumMappedFile(Image->MappedAddress, - Image->SizeOfImage, - &HeaderCheckSum, - &CheckSum); - - /* Get the NT Header */ - NtHeader = Image->FileHeader; - - /* Write the new checksum to it */ - NtHeader->OptionalHeader.CheckSum = CheckSum; - - /* Now flush and unmap the image */ - FlushViewOfFile(Image->MappedAddress, Image->SizeOfImage); - UnmapViewOfFile(Image->MappedAddress); - - /* Check if the size changed */ - if (Image->SizeOfImage != GetFileSize(Image->hFile, NULL)) - { - /* Update the file pointer */ - SetFilePointer(Image->hFile, Image->SizeOfImage, NULL, FILE_BEGIN); - SetEndOfFile(Image->hFile); - } - } - - /* Check if the image had a valid handle, and close it */ - if (Image->hFile != INVALID_HANDLE_VALUE) CloseHandle(Image->hFile); - - /* Return success */ - return TRUE; -} - -PVOID -IMAGEAPI -ImageDirectoryEntryToData32(PVOID Base, - BOOLEAN MappedAsImage, - USHORT DirectoryEntry, - PULONG Size, - PIMAGE_SECTION_HEADER *FoundHeader OPTIONAL, - PIMAGE_FILE_HEADER FileHeader, - PIMAGE_OPTIONAL_HEADER OptionalHeader) -{ - ULONG i; - PIMAGE_SECTION_HEADER CurrentSection; - ULONG DirectoryEntryVA; - - /* Check if this entry is invalid */ - if (DirectoryEntry >= OptionalHeader->NumberOfRvaAndSizes) - { - /* Nothing found */ - *Size = 0; - return NULL; - } - - /* Get the VA of the Directory Requested */ - DirectoryEntryVA = OptionalHeader->DataDirectory[DirectoryEntry].VirtualAddress; - if (!DirectoryEntryVA) - { - /* It doesn't exist */ - *Size = 0; - return NULL; - } - - /* Get the size of the Directory Requested */ - *Size = OptionalHeader->DataDirectory[DirectoryEntry].Size; - - /* Check if it was mapped as an image or if the entry is within the headers */ - if ((MappedAsImage) || (DirectoryEntryVA < OptionalHeader->SizeOfHeaders)) - { - /* No header found */ - if (FoundHeader) *FoundHeader = NULL; - - /* And simply return the VA */ - return (PVOID)((ULONG_PTR)Base + DirectoryEntryVA); - } - - /* Read the first Section */ - CurrentSection = (PIMAGE_SECTION_HEADER)((ULONG_PTR)OptionalHeader + - FileHeader->SizeOfOptionalHeader); - - /* Loop through every section*/ - for (i = 0; i < FileHeader->NumberOfSections; i++) - { - /* If the Directory VA is located inside this section's VA, then this section belongs to this Directory */ - if ((DirectoryEntryVA >= CurrentSection->VirtualAddress) && - (DirectoryEntryVA < (CurrentSection->VirtualAddress + - CurrentSection->SizeOfRawData))) - { - /* Return the section header */ - if (FoundHeader) *FoundHeader = CurrentSection; - return ((PVOID)((ULONG_PTR)Base + - (DirectoryEntryVA - CurrentSection->VirtualAddress) + - CurrentSection->PointerToRawData)); - } - - /* Move to the next section */ - CurrentSection++; - } - - /* If we got here, then we didn't find anything */ - return NULL; -} - -/* - * @unimplemented - */ -DWORD -IMAGEAPI -GetTimestampForLoadedLibrary(HMODULE Module) -{ - UNIMPLEMENTED; - SetLastError(ERROR_CALL_NOT_IMPLEMENTED); - return 0; -} - -/* - * @implemented - */ -PVOID -IMAGEAPI -ImageDirectoryEntryToData(PVOID Base, - BOOLEAN MappedAsImage, - USHORT DirectoryEntry, - PULONG Size) -{ - /* Let the extended function handle it */ - return ImageDirectoryEntryToDataEx(Base, - MappedAsImage, - DirectoryEntry, - Size, - NULL); -} - -/* - * @implemented - */ -PVOID -IMAGEAPI -ImageDirectoryEntryToDataEx(IN PVOID Base, - IN BOOLEAN MappedAsImage, - IN USHORT DirectoryEntry, - OUT PULONG Size, - OUT PIMAGE_SECTION_HEADER *FoundSection OPTIONAL) -{ - PIMAGE_NT_HEADERS NtHeader; - PIMAGE_FILE_HEADER FileHeader; - PIMAGE_OPTIONAL_HEADER OptionalHeader; - - /* Get the optional header ourselves */ - NtHeader = ImageNtHeader(Base); - FileHeader = &NtHeader->FileHeader; - OptionalHeader = &NtHeader->OptionalHeader; - - /* FIXME: Read image type and call appropriate function (32, 64, ROM) */ - return ImageDirectoryEntryToData32(Base, - MappedAsImage, - DirectoryEntry, - Size, - FoundSection, - FileHeader, - OptionalHeader); -} - -/* - * @implemented - */ -PIMAGE_SECTION_HEADER -IMAGEAPI -ImageRvaToSection(IN PIMAGE_NT_HEADERS NtHeaders, - IN PVOID Base, - IN ULONG Rva) -{ - PIMAGE_SECTION_HEADER Section; - ULONG i; - - /* Get the First Section */ - Section = IMAGE_FIRST_SECTION(NtHeaders); - - /* Look through each section */ - for (i = 0; i < NtHeaders->FileHeader.NumberOfSections; i++) - { - /* Check if the RVA is in between */ - if ((Rva >= Section->VirtualAddress) && - (Rva < (Section->VirtualAddress + Section->SizeOfRawData))) - { - /* Return this section */ - return Section; - } - - /* Move to the next section */ - Section++; - } - - /* Not Found */ - return NULL; -} - -/* - * @implemented - */ -PIMAGE_NT_HEADERS -IMAGEAPI -ImageNtHeader(PVOID Base) -{ - /* Let RTL do it */ - return RtlImageNtHeader(Base); -} - -/* - * @implemented - */ -PVOID -IMAGEAPI -ImageRvaToVa(IN PIMAGE_NT_HEADERS NtHeaders, - IN PVOID Base, - IN ULONG Rva, - IN OUT PIMAGE_SECTION_HEADER *LastRvaSection OPTIONAL) -{ - PIMAGE_SECTION_HEADER Section; - - /* Get the Section Associated */ - Section = ImageRvaToSection(NtHeaders, Base, Rva); - - /* Return it, if specified */ - if (LastRvaSection) *LastRvaSection = Section; - - /* Return the VA */ - return (PVOID)((ULONG_PTR)Base + (Rva - Section->VirtualAddress) + - Section->PointerToRawData); -} - -BOOL -IMAGEAPI -UnloadAllImages(VOID) -{ - PLIST_ENTRY Head, Entry; - PLOADED_IMAGE CurrentImage; - - /* Make sure we're initialized */ - if (!DllListInitialized) return TRUE; - - /* Get the list pointers and loop */ - Head = &ImageLoadListHead; - Entry = Head->Flink; - while (Entry != Head) - { - /* Get this image */ - CurrentImage = CONTAINING_RECORD(Entry, LOADED_IMAGE, Links); - - /* Move to the next entry */ - Entry = Entry->Flink; - - /* Unload it */ - ImageUnload(CurrentImage); - } - - /* We are not initialized anymore */ - DllListInitialized = FALSE; + HeapFree(GetProcessHeap(), 0, pLoadedImage->ModuleName); + /* FIXME: MSDN states that a new checksum is computed and stored into the file */ + if (pLoadedImage->MappedAddress) UnmapViewOfFile(pLoadedImage->MappedAddress); + if (pLoadedImage->hFile != INVALID_HANDLE_VALUE) CloseHandle(pLoadedImage->hFile); return TRUE; } diff --git a/dll/win32/imagehlp/imagehlp.spec b/dll/win32/imagehlp/imagehlp.spec index 605c5d787b2..ddecb41eba3 100644 --- a/dll/win32/imagehlp/imagehlp.spec +++ b/dll/win32/imagehlp/imagehlp.spec @@ -1,8 +1,8 @@ @ stdcall BindImage(str str str) @ stdcall BindImageEx(long str str str ptr) @ stdcall CheckSumMappedFile(ptr long ptr ptr) -@ stdcall EnumerateLoadedModules(long ptr ptr) dbghelp.EnumerateLoadedModules @ stdcall EnumerateLoadedModules64(long ptr ptr) dbghelp.EnumerateLoadedModules64 +@ stdcall EnumerateLoadedModules(long ptr ptr) dbghelp.EnumerateLoadedModules @ stdcall FindDebugInfoFile(str str str) dbghelp.FindDebugInfoFile @ stdcall FindDebugInfoFileEx(str str ptr ptr ptr) dbghelp.FindDebugInfoFileEx @ stdcall FindExecutableImage(str str str) dbghelp.FindExecutableImage @@ -13,96 +13,97 @@ @ stdcall GetImageUnusedHeaderBytes(ptr ptr) @ stdcall GetTimestampForLoadedLibrary(long) dbghelp.GetTimestampForLoadedLibrary @ stdcall ImageAddCertificate(long ptr ptr) -@ stdcall ImageDirectoryEntryToData(ptr long long ptr) -@ stdcall ImageDirectoryEntryToDataEx(ptr long long ptr ptr) +@ stdcall ImageDirectoryEntryToData(ptr long long ptr) dbghelp.ImageDirectoryEntryToData +@ stdcall ImageDirectoryEntryToDataEx(ptr long long ptr ptr) dbghelp.ImageDirectoryEntryToDataEx @ stdcall ImageEnumerateCertificates(long long ptr ptr long) @ stdcall ImageGetCertificateData(long long ptr ptr) @ stdcall ImageGetCertificateHeader(long long ptr) @ stdcall ImageGetDigestStream(long long ptr long) -@ stdcall ImagehlpApiVersion() dbghelp.ImagehlpApiVersion -@ stdcall ImagehlpApiVersionEx(ptr) dbghelp.ImagehlpApiVersionEx @ stdcall ImageLoad(str str) @ stdcall ImageNtHeader(ptr) ntdll.RtlImageNtHeader @ stdcall ImageRemoveCertificate(long long) @ stdcall ImageRvaToSection(ptr ptr long) ntdll.RtlImageRvaToSection @ stdcall ImageRvaToVa(ptr ptr long ptr) ntdll.RtlImageRvaToVa @ stdcall ImageUnload(ptr) +@ stdcall ImagehlpApiVersion() dbghelp.ImagehlpApiVersion +@ stdcall ImagehlpApiVersionEx(ptr) dbghelp.ImagehlpApiVersionEx @ stdcall MakeSureDirectoryPathExists(str) dbghelp.MakeSureDirectoryPathExists @ stdcall MapAndLoad(str str ptr long long) @ stdcall MapDebugInformation(long str str long) dbghelp.MapDebugInformation @ stdcall MapFileAndCheckSumA(str ptr ptr) @ stdcall MapFileAndCheckSumW(wstr ptr ptr) -@ stdcall ReBaseImage(str str long long long long ptr ptr ptr ptr long) +@ stub MarkImageAsRunFromSwap @ stub ReBaseImage64 +@ stdcall ReBaseImage(str str long long long long ptr ptr ptr ptr long) @ stdcall RemovePrivateCvSymbolic(ptr ptr ptr) @ stub RemovePrivateCvSymbolicEx @ stdcall RemoveRelocations(ptr) @ stdcall SearchTreeForFile(str str str) dbghelp.SearchTreeForFile @ stdcall SetImageConfigInformation(ptr ptr) @ stdcall SplitSymbols(str str str long) -@ stdcall StackWalk(long long long ptr ptr ptr ptr ptr ptr) dbghelp.StackWalk @ stdcall StackWalk64(long long long ptr ptr ptr ptr ptr ptr) dbghelp.StackWalk64 +@ stdcall StackWalk(long long long ptr ptr ptr ptr ptr ptr) dbghelp.StackWalk @ stdcall SymCleanup(long) dbghelp.SymCleanup -@ stdcall SymEnumerateModules(long ptr ptr) dbghelp.SymEnumerateModules -@ stdcall SymEnumerateModules64(long ptr ptr) dbghelp.SymEnumerateModules64 -@ stdcall SymEnumerateSymbols(long long ptr ptr) dbghelp.SymEnumerateSymbols -@ stub SymEnumerateSymbols64 -@ stdcall SymEnumerateSymbolsW(long long ptr ptr) dbghelp.SymEnumerateSymbolsW -@ stub SymEnumerateSymbolsW64 @ stdcall SymEnumSourceFiles(long long str ptr ptr) dbghelp.SymEnumSourceFiles @ stub SymEnumSym -@ stdcall SymEnumSymbols(long double str ptr ptr) dbghelp.SymEnumSymbols +@ stdcall SymEnumSymbols(long long str ptr ptr) dbghelp.SymEnumSymbols @ stdcall SymEnumTypes(long long ptr ptr) dbghelp.SymEnumTypes +@ stdcall SymEnumerateModules64(long ptr ptr) dbghelp.SymEnumerateModules64 +@ stdcall SymEnumerateModules(long ptr ptr) dbghelp.SymEnumerateModules +@ stdcall SymEnumerateSymbols64(long double ptr ptr) dbghelp.SymEnumerateSymbols64 +@ stdcall SymEnumerateSymbols(long long ptr ptr) dbghelp.SymEnumerateSymbols +@ stub SymEnumerateSymbolsW64 +@ stub SymEnumerateSymbolsW @ stdcall SymFindFileInPath(long str str ptr long long long ptr ptr ptr) dbghelp.SymFindFileInPath @ stdcall SymFromAddr(long long ptr ptr) dbghelp.SymFromAddr @ stdcall SymFromName(long str ptr) dbghelp.SymFromName -@ stdcall SymFunctionTableAccess(long long) dbghelp.SymFunctionTableAccess @ stdcall SymFunctionTableAccess64(long double) dbghelp.SymFunctionTableAccess64 -@ stdcall SymGetLineFromAddr(long long ptr ptr) dbghelp.SymGetLineFromAddr +@ stdcall SymFunctionTableAccess(long long) dbghelp.SymFunctionTableAccess @ stdcall SymGetLineFromAddr64(long double ptr ptr) dbghelp.SymGetLineFromAddr64 -@ stdcall SymGetLineFromName(long str str long ptr ptr) dbghelp.SymGetLineFromName -@ stdcall SymGetLineFromName64(long str str long ptr ptr) dbghelp.SymGetLineFromName -@ stdcall SymGetLineNext(long ptr) dbghelp.SymGetLineNext +@ stdcall SymGetLineFromAddr(long long ptr ptr) dbghelp.SymGetLineFromAddr +@ stub SymGetLineFromName64 +@ stub SymGetLineFromName @ stdcall SymGetLineNext64(long ptr) dbghelp.SymGetLineNext64 -@ stdcall SymGetLinePrev(long ptr) dbghelp.SymGetLinePrev +@ stdcall SymGetLineNext(long ptr) dbghelp.SymGetLineNext @ stdcall SymGetLinePrev64(long ptr) dbghelp.SymGetLinePrev64 -@ stdcall SymGetModuleBase(long long) dbghelp.SymGetModuleBase +@ stdcall SymGetLinePrev(long ptr) dbghelp.SymGetLinePrev @ stdcall SymGetModuleBase64(long double) dbghelp.SymGetModuleBase64 -@ stdcall SymGetModuleInfo(long long ptr) dbghelp.SymGetModuleInfo +@ stdcall SymGetModuleBase(long long) dbghelp.SymGetModuleBase @ stdcall SymGetModuleInfo64(long double ptr) dbghelp.SymGetModuleInfo64 -@ stdcall SymGetModuleInfoW(long long ptr) dbghelp.SymGetModuleInfoW +@ stdcall SymGetModuleInfo(long long ptr) dbghelp.SymGetModuleInfo @ stdcall SymGetModuleInfoW64(long double ptr) dbghelp.SymGetModuleInfoW64 +@ stdcall SymGetModuleInfoW(long long ptr) dbghelp.SymGetModuleInfoW @ stdcall SymGetOptions() dbghelp.SymGetOptions @ stdcall SymGetSearchPath(long str long) dbghelp.SymGetSearchPath -@ stdcall SymGetSymFromAddr(long long ptr ptr) dbghelp.SymGetSymFromAddr @ stdcall SymGetSymFromAddr64(long double ptr ptr) dbghelp.SymGetSymFromAddr64 +@ stdcall SymGetSymFromAddr(long long ptr ptr) dbghelp.SymGetSymFromAddr +@ stdcall SymGetSymFromName64(long str ptr) dbghelp.SymGetSymFromName64 @ stdcall SymGetSymFromName(long str ptr) dbghelp.SymGetSymFromName -@ stub SymGetSymFromName64 +@ stdcall SymGetSymNext64(long ptr) dbghelp.SymGetSymNext64 @ stdcall SymGetSymNext(long ptr) dbghelp.SymGetSymNext -@ stub SymGetSymNext64 +@ stdcall SymGetSymPrev64(long ptr) dbghelp.SymGetSymPrev64 @ stdcall SymGetSymPrev(long ptr) dbghelp.SymGetSymPrev -@ stub SymGetSymPrev64 @ stdcall SymGetTypeFromName(long long str ptr) dbghelp.SymGetTypeFromName @ stdcall SymGetTypeInfo(long long long long ptr) dbghelp.SymGetTypeInfo @ stdcall SymInitialize(long str long) dbghelp.SymInitialize -@ stdcall SymLoadModule(long long str str long long) dbghelp.SymLoadModule @ stdcall SymLoadModule64(long long str str double long) dbghelp.SymLoadModule64 +@ stdcall SymLoadModule(long long str str long long) dbghelp.SymLoadModule @ stdcall SymMatchFileName(str str ptr ptr) dbghelp.SymMatchFileName @ stdcall SymMatchString(str str long) dbghelp.SymMatchString -@ stdcall SymRegisterCallback(long ptr ptr) dbghelp.SymRegisterCallback @ stdcall SymRegisterCallback64(long ptr double) dbghelp.SymRegisterCallback64 -@ stdcall SymRegisterFunctionEntryCallback(ptr ptr ptr) dbghelp.SymRegisterFunctionEntryCallback +@ stdcall SymRegisterCallback(long ptr ptr) dbghelp.SymRegisterCallback @ stdcall SymRegisterFunctionEntryCallback64(ptr ptr double) dbghelp.SymRegisterFunctionEntryCallback64 +@ stdcall SymRegisterFunctionEntryCallback(ptr ptr ptr) dbghelp.SymRegisterFunctionEntryCallback @ stdcall SymSetContext(long ptr ptr) dbghelp.SymSetContext @ stdcall SymSetOptions(long) dbghelp.SymSetOptions @ stdcall SymSetSearchPath(long str) dbghelp.SymSetSearchPath +@ stdcall SymUnDName64(ptr str long) dbghelp.SymUnDName64 @ stdcall SymUnDName(ptr str long) dbghelp.SymUnDName -@ stub SymUnDName64 -@ stdcall SymUnloadModule(long long) dbghelp.SymUnloadModule @ stdcall SymUnloadModule64(long double) dbghelp.SymUnloadModule64 +@ stdcall SymUnloadModule(long long) dbghelp.SymUnloadModule @ stdcall TouchFileTimes(long ptr) @ stdcall UnDecorateSymbolName(str str long long) dbghelp.UnDecorateSymbolName @ stdcall UnMapAndLoad(ptr) @ stdcall UnmapDebugInformation(ptr) dbghelp.UnmapDebugInformation @ stdcall UpdateDebugInfoFile(str str str ptr) -@ stdcall UpdateDebugInfoFileEx(str str str ptr long) \ No newline at end of file +@ stdcall UpdateDebugInfoFileEx(str str str ptr long) diff --git a/dll/win32/imagehlp/imagehlp_main.c b/dll/win32/imagehlp/imagehlp_main.c index 687a94c2ad8..91c76bdb7d4 100644 --- a/dll/win32/imagehlp/imagehlp_main.c +++ b/dll/win32/imagehlp/imagehlp_main.c @@ -18,24 +18,20 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ +#include - -/* INCLUDES ******************************************************************/ - -#include "precomp.h" - -#define _WINNT_H +#include "windef.h" +#include "winbase.h" +#include "imagehlp.h" #include "wine/debug.h" -WINE_DEFAULT_DEBUG_CHANNEL(imagehlp); - /**********************************************************************/ HANDLE IMAGEHLP_hHeap = NULL; /*********************************************************************** * DllMain (IMAGEHLP.init) */ -BOOL IMAGEAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) +BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) { switch(fdwReason) { @@ -52,3 +48,27 @@ BOOL IMAGEAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) } return TRUE; } + +/*********************************************************************** + * MarkImageAsRunFromSwap (IMAGEHLP.@) + * FIXME + * No documentation available. + */ + +/*********************************************************************** + * TouchFileTimes (IMAGEHLP.@) + */ +BOOL WINAPI TouchFileTimes(HANDLE FileHandle, LPSYSTEMTIME lpSystemTime) +{ + FILETIME FileTime; + SYSTEMTIME SystemTime; + + if(lpSystemTime == NULL) + { + GetSystemTime(&SystemTime); + lpSystemTime = &SystemTime; + } + + return (SystemTimeToFileTime(lpSystemTime, &FileTime) && + SetFileTime(FileHandle, NULL, NULL, &FileTime)); +} diff --git a/dll/win32/imagehlp/integrity.c b/dll/win32/imagehlp/integrity.c index c5ce9bf8a5c..72bf1552eff 100644 --- a/dll/win32/imagehlp/integrity.c +++ b/dll/win32/imagehlp/integrity.c @@ -3,6 +3,7 @@ * * Copyright 1998 Patrik Stridvall * Copyright 2003 Mike McCormack + * Copyright 2009 Owen Rudge for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -19,72 +20,217 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ +#include + +#include "windef.h" +#include "winbase.h" +#include "winerror.h" +#include "winternl.h" +#include "winnt.h" +#include "imagehlp.h" +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(imagehlp); + /* * These functions are partially documented at: * http://www.cs.auckland.ac.nz/~pgut001/pubs/authenticode.txt */ -/* INCLUDES ******************************************************************/ +#define HDR_FAIL -1 +#define HDR_NT32 0 +#define HDR_NT64 1 -#include "precomp.h" - -#define _WINNT_H -#include "wine/debug.h" - -WINE_DEFAULT_DEBUG_CHANNEL(imagehlp); - -/* FUNCTIONS *****************************************************************/ - -static -BOOL -IMAGEHLP_GetSecurityDirOffset(HANDLE handle, - DWORD *pdwOfs, - DWORD *pdwSize) +/*********************************************************************** + * IMAGEHLP_GetNTHeaders (INTERNAL) + * + * Return the IMAGE_NT_HEADERS for a PE file, after validating magic + * numbers and distinguishing between 32-bit and 64-bit files. + */ +static int IMAGEHLP_GetNTHeaders(HANDLE handle, DWORD *pe_offset, IMAGE_NT_HEADERS32 *nt32, IMAGE_NT_HEADERS64 *nt64) { IMAGE_DOS_HEADER dos_hdr; - IMAGE_NT_HEADERS nt_hdr; DWORD count; BOOL r; - IMAGE_DATA_DIRECTORY *sd; - TRACE("handle %p\n", handle ); + TRACE("handle %p\n", handle); + + if ((!nt32) || (!nt64)) + return HDR_FAIL; /* read the DOS header */ - count = SetFilePointer( handle, 0, NULL, FILE_BEGIN ); - if( count == INVALID_SET_FILE_POINTER ) - return FALSE; + count = SetFilePointer(handle, 0, NULL, FILE_BEGIN); + + if (count == INVALID_SET_FILE_POINTER) + return HDR_FAIL; + count = 0; - r = ReadFile( handle, &dos_hdr, sizeof dos_hdr, &count, NULL ); - if( !r ) - return FALSE; - if( count != sizeof dos_hdr ) - return FALSE; + + r = ReadFile(handle, &dos_hdr, sizeof dos_hdr, &count, NULL); + + if (!r) + return HDR_FAIL; + + if (count != sizeof dos_hdr) + return HDR_FAIL; + + /* verify magic number of 'MZ' */ + if (dos_hdr.e_magic != 0x5A4D) + return HDR_FAIL; + + if (pe_offset != NULL) + *pe_offset = dos_hdr.e_lfanew; /* read the PE header */ - count = SetFilePointer( handle, dos_hdr.e_lfanew, NULL, FILE_BEGIN ); - if( count == INVALID_SET_FILE_POINTER ) - return FALSE; + count = SetFilePointer(handle, dos_hdr.e_lfanew, NULL, FILE_BEGIN); + + if (count == INVALID_SET_FILE_POINTER) + return HDR_FAIL; + count = 0; - r = ReadFile( handle, &nt_hdr, sizeof nt_hdr, &count, NULL ); - if( !r ) - return FALSE; - if( count != sizeof nt_hdr ) + + r = ReadFile(handle, nt32, sizeof(IMAGE_NT_HEADERS32), &count, NULL); + + if (!r) + return HDR_FAIL; + + if (count != sizeof(IMAGE_NT_HEADERS32)) + return HDR_FAIL; + + /* verify NT signature */ + if (nt32->Signature != IMAGE_NT_SIGNATURE) + return HDR_FAIL; + + /* check if we have a 32-bit or 64-bit executable */ + switch (nt32->OptionalHeader.Magic) + { + case IMAGE_NT_OPTIONAL_HDR32_MAGIC: + return HDR_NT32; + + case IMAGE_NT_OPTIONAL_HDR64_MAGIC: + /* Re-read as 64-bit */ + + count = SetFilePointer(handle, dos_hdr.e_lfanew, NULL, FILE_BEGIN); + + if (count == INVALID_SET_FILE_POINTER) + return HDR_FAIL; + + count = 0; + + r = ReadFile(handle, nt64, sizeof(IMAGE_NT_HEADERS64), &count, NULL); + + if (!r) + return HDR_FAIL; + + if (count != sizeof(IMAGE_NT_HEADERS64)) + return HDR_FAIL; + + /* verify NT signature */ + if (nt64->Signature != IMAGE_NT_SIGNATURE) + return HDR_FAIL; + + return HDR_NT64; + } + + return HDR_FAIL; +} + +/*********************************************************************** + * IMAGEHLP_GetSecurityDirOffset (INTERNAL) + * + * Read a file's PE header, and return the offset and size of the + * security directory. + */ +static BOOL IMAGEHLP_GetSecurityDirOffset( HANDLE handle, + DWORD *pdwOfs, DWORD *pdwSize ) +{ + IMAGE_NT_HEADERS32 nt_hdr32; + IMAGE_NT_HEADERS64 nt_hdr64; + IMAGE_DATA_DIRECTORY *sd; + int ret; + + ret = IMAGEHLP_GetNTHeaders(handle, NULL, &nt_hdr32, &nt_hdr64); + + if (ret == HDR_NT32) + sd = &nt_hdr32.OptionalHeader.DataDirectory[IMAGE_FILE_SECURITY_DIRECTORY]; + else if (ret == HDR_NT64) + sd = &nt_hdr64.OptionalHeader.DataDirectory[IMAGE_FILE_SECURITY_DIRECTORY]; + else return FALSE; - sd = &nt_hdr.OptionalHeader. - DataDirectory[IMAGE_DIRECTORY_ENTRY_SECURITY]; + TRACE("ret = %d size = %x addr = %x\n", ret, sd->Size, sd->VirtualAddress); - TRACE("size = %lx addr = %lx\n", sd->Size, sd->VirtualAddress); *pdwSize = sd->Size; *pdwOfs = sd->VirtualAddress; return TRUE; } +/*********************************************************************** + * IMAGEHLP_SetSecurityDirOffset (INTERNAL) + * + * Read a file's PE header, and update the offset and size of the + * security directory. + */ +static BOOL IMAGEHLP_SetSecurityDirOffset(HANDLE handle, + DWORD dwOfs, DWORD dwSize) +{ + IMAGE_NT_HEADERS32 nt_hdr32; + IMAGE_NT_HEADERS64 nt_hdr64; + IMAGE_DATA_DIRECTORY *sd; + int ret, nt_hdr_size = 0; + DWORD pe_offset; + void *nt_hdr; + DWORD count; + BOOL r; + + ret = IMAGEHLP_GetNTHeaders(handle, &pe_offset, &nt_hdr32, &nt_hdr64); + + if (ret == HDR_NT32) + { + sd = &nt_hdr32.OptionalHeader.DataDirectory[IMAGE_FILE_SECURITY_DIRECTORY]; + + nt_hdr = &nt_hdr32; + nt_hdr_size = sizeof(IMAGE_NT_HEADERS32); + } + else if (ret == HDR_NT64) + { + sd = &nt_hdr64.OptionalHeader.DataDirectory[IMAGE_FILE_SECURITY_DIRECTORY]; + + nt_hdr = &nt_hdr64; + nt_hdr_size = sizeof(IMAGE_NT_HEADERS64); + } + else + return FALSE; + + sd->Size = dwSize; + sd->VirtualAddress = dwOfs; + + TRACE("size = %x addr = %x\n", sd->Size, sd->VirtualAddress); + + /* write the header back again */ + count = SetFilePointer(handle, pe_offset, NULL, FILE_BEGIN); + + if (count == INVALID_SET_FILE_POINTER) + return FALSE; + + count = 0; + + r = WriteFile(handle, nt_hdr, nt_hdr_size, &count, NULL); + + if (!r) + return FALSE; + + if (count != nt_hdr_size) + return FALSE; + + return TRUE; +} + /*********************************************************************** * IMAGEHLP_GetCertificateOffset (INTERNAL) * - * Read a file's PE header, and return the offset and size of the + * Read a file's PE header, and return the offset and size of the * security directory. */ static BOOL IMAGEHLP_GetCertificateOffset( HANDLE handle, DWORD num, @@ -122,6 +268,11 @@ static BOOL IMAGEHLP_GetCertificateOffset( HANDLE handle, DWORD num, /* calculate the offset of the next certificate */ offset += len; + + /* padded out to the nearest 8-byte boundary */ + if( len % 8 ) + offset += 8 - (len % 8); + if( offset >= size ) return FALSE; } @@ -129,91 +280,242 @@ static BOOL IMAGEHLP_GetCertificateOffset( HANDLE handle, DWORD num, *pdwOfs = sd_VirtualAddr + offset; *pdwSize = len; - TRACE("len = %lx addr = %lx\n", len, sd_VirtualAddr + offset); + TRACE("len = %x addr = %x\n", len, sd_VirtualAddr + offset); return TRUE; } -static -WORD -CalcCheckSum(DWORD StartValue, - LPVOID BaseAddress, - DWORD WordCount) +/*********************************************************************** + * IMAGEHLP_RecalculateChecksum (INTERNAL) + * + * Update the NT header checksum for the specified file. + */ +static BOOL IMAGEHLP_RecalculateChecksum(HANDLE handle) { - LPWORD Ptr; - DWORD Sum; - DWORD i; + DWORD FileLength, count, HeaderSum, pe_offset, nt_hdr_size; + IMAGE_NT_HEADERS32 nt_hdr32; + IMAGE_NT_HEADERS64 nt_hdr64; + LPVOID BaseAddress; + HANDLE hMapping; + DWORD *CheckSum; + void *nt_hdr; + int ret; + BOOL r; - Sum = StartValue; - Ptr = (LPWORD)BaseAddress; - for (i = 0; i < WordCount; i++) - { - Sum += *Ptr; - if (HIWORD(Sum) != 0) - { - Sum = LOWORD(Sum) + HIWORD(Sum); - } - Ptr++; - } + TRACE("handle %p\n", handle); - return (WORD)(LOWORD(Sum) + HIWORD(Sum)); + ret = IMAGEHLP_GetNTHeaders(handle, &pe_offset, &nt_hdr32, &nt_hdr64); + + if (ret == HDR_NT32) + { + CheckSum = &nt_hdr32.OptionalHeader.CheckSum; + + nt_hdr = &nt_hdr32; + nt_hdr_size = sizeof(IMAGE_NT_HEADERS32); + } + else if (ret == HDR_NT64) + { + CheckSum = &nt_hdr64.OptionalHeader.CheckSum; + + nt_hdr = &nt_hdr64; + nt_hdr_size = sizeof(IMAGE_NT_HEADERS64); + } + else + return FALSE; + + hMapping = CreateFileMappingW(handle, NULL, PAGE_READONLY, 0, 0, NULL); + + if (!hMapping) + return FALSE; + + BaseAddress = MapViewOfFile(hMapping, FILE_MAP_READ, 0, 0, 0); + + if (!BaseAddress) + { + CloseHandle(hMapping); + return FALSE; + } + + FileLength = GetFileSize(handle, NULL); + + *CheckSum = 0; + CheckSumMappedFile(BaseAddress, FileLength, &HeaderSum, CheckSum); + + UnmapViewOfFile(BaseAddress); + CloseHandle(hMapping); + + if (*CheckSum) + { + /* write the header back again */ + count = SetFilePointer(handle, pe_offset, NULL, FILE_BEGIN); + + if (count == INVALID_SET_FILE_POINTER) + return FALSE; + + count = 0; + + r = WriteFile(handle, nt_hdr, nt_hdr_size, &count, NULL); + + if (!r) + return FALSE; + + if (count != nt_hdr_size) + return FALSE; + + return TRUE; + } + + return FALSE; } -/* - * @unimplemented +/*********************************************************************** + * ImageAddCertificate (IMAGEHLP.@) + * + * Adds the specified certificate to the security directory of + * open PE file. */ -BOOL -IMAGEAPI -ImageAddCertificate(HANDLE FileHandle, - LPWIN_CERTIFICATE Certificate, - PDWORD Index) + +BOOL WINAPI ImageAddCertificate( + HANDLE FileHandle, LPWIN_CERTIFICATE Certificate, PDWORD Index) { - UNIMPLEMENTED; - SetLastError(ERROR_CALL_NOT_IMPLEMENTED); - return FALSE; + DWORD size = 0, count = 0, offset = 0, sd_VirtualAddr = 0, index = 0; + WIN_CERTIFICATE hdr; + const size_t cert_hdr_size = sizeof hdr - sizeof hdr.bCertificate; + BOOL r; + + TRACE("(%p, %p, %p)\n", FileHandle, Certificate, Index); + + r = IMAGEHLP_GetSecurityDirOffset(FileHandle, &sd_VirtualAddr, &size); + + /* If we've already got a security directory, find the end of it */ + if ((r) && (sd_VirtualAddr != 0)) + { + offset = 0; + index = 0; + count = 0; + + /* Check if the security directory is at the end of the file. + If not, we should probably relocate it. */ + if (GetFileSize(FileHandle, NULL) != sd_VirtualAddr + size) + { + FIXME("Security directory already present but not located at EOF, not adding certificate\n"); + + SetLastError(ERROR_NOT_SUPPORTED); + return FALSE; + } + + while (offset < size) + { + /* read the length of the current certificate */ + count = SetFilePointer (FileHandle, sd_VirtualAddr + offset, + NULL, FILE_BEGIN); + + if (count == INVALID_SET_FILE_POINTER) + return FALSE; + + r = ReadFile(FileHandle, &hdr, cert_hdr_size, &count, NULL); + + if (!r) + return FALSE; + + if (count != cert_hdr_size) + return FALSE; + + /* check the certificate is not too big or too small */ + if (hdr.dwLength < cert_hdr_size) + return FALSE; + + if (hdr.dwLength > (size-offset)) + return FALSE; + + /* next certificate */ + offset += hdr.dwLength; + + /* padded out to the nearest 8-byte boundary */ + if (hdr.dwLength % 8) + offset += 8 - (hdr.dwLength % 8); + + index++; + } + + count = SetFilePointer (FileHandle, sd_VirtualAddr + offset, NULL, FILE_BEGIN); + + if (count == INVALID_SET_FILE_POINTER) + return FALSE; + } + else + { + sd_VirtualAddr = SetFilePointer(FileHandle, 0, NULL, FILE_END); + + if (sd_VirtualAddr == INVALID_SET_FILE_POINTER) + return FALSE; + } + + /* Write the certificate to the file */ + r = WriteFile(FileHandle, Certificate, Certificate->dwLength, &count, NULL); + + if (!r) + return FALSE; + + /* Pad out if necessary */ + if (Certificate->dwLength % 8) + { + char null[8]; + + ZeroMemory(null, 8); + WriteFile(FileHandle, null, 8 - (Certificate->dwLength % 8), NULL, NULL); + + size += 8 - (Certificate->dwLength % 8); + } + + size += Certificate->dwLength; + + /* Update the security directory offset and size */ + if (!IMAGEHLP_SetSecurityDirOffset(FileHandle, sd_VirtualAddr, size)) + return FALSE; + + if (!IMAGEHLP_RecalculateChecksum(FileHandle)) + return FALSE; + + return TRUE; } /*********************************************************************** * ImageEnumerateCertificates (IMAGEHLP.@) */ -BOOL IMAGEAPI ImageEnumerateCertificates( - HANDLE FileHandle, WORD TypeFilter, PDWORD CertificateCount, +BOOL WINAPI ImageEnumerateCertificates( + HANDLE handle, WORD TypeFilter, PDWORD CertificateCount, PDWORD Indices, DWORD IndexCount) { - DWORD size, count, offset, sd_VirtualAddr; + DWORD size, count, offset, sd_VirtualAddr, index; WIN_CERTIFICATE hdr; const size_t cert_hdr_size = sizeof hdr - sizeof hdr.bCertificate; BOOL r; - TRACE("%p %hd %p %p %ld\n", - FileHandle, TypeFilter, CertificateCount, Indices, IndexCount); + TRACE("%p %hd %p %p %d\n", + handle, TypeFilter, CertificateCount, Indices, IndexCount); - if( Indices ) - { - FIXME("Indicies not handled!\n"); - return FALSE; - } - - r = IMAGEHLP_GetSecurityDirOffset( FileHandle, &sd_VirtualAddr, &size ); + r = IMAGEHLP_GetSecurityDirOffset( handle, &sd_VirtualAddr, &size ); if( !r ) return FALSE; offset = 0; + index = 0; *CertificateCount = 0; while( offset < size ) { /* read the length of the current certificate */ - count = SetFilePointer( FileHandle, sd_VirtualAddr + offset, + count = SetFilePointer( handle, sd_VirtualAddr + offset, NULL, FILE_BEGIN ); if( count == INVALID_SET_FILE_POINTER ) return FALSE; - r = ReadFile( FileHandle, &hdr, (DWORD)cert_hdr_size, &count, NULL ); + r = ReadFile( handle, &hdr, cert_hdr_size, &count, NULL ); if( !r ) return FALSE; if( count != cert_hdr_size ) return FALSE; - TRACE("Size = %08lx id = %08hx\n", + TRACE("Size = %08x id = %08hx\n", hdr.dwLength, hdr.wCertificateType ); /* check the certificate is not too big or too small */ @@ -221,15 +523,23 @@ BOOL IMAGEAPI ImageEnumerateCertificates( return FALSE; if( hdr.dwLength > (size-offset) ) return FALSE; - + if( (TypeFilter == CERT_SECTION_TYPE_ANY) || (TypeFilter == hdr.wCertificateType) ) { (*CertificateCount)++; + if(Indices && *CertificateCount <= IndexCount) + *Indices++ = index; } /* next certificate */ offset += hdr.dwLength; + + /* padded out to the nearest 8-byte boundary */ + if (hdr.dwLength % 8) + offset += 8 - (hdr.dwLength % 8); + + index++; } return TRUE; @@ -240,23 +550,23 @@ BOOL IMAGEAPI ImageEnumerateCertificates( * * FIXME: not sure that I'm dealing with the Index the right way */ -BOOL IMAGEAPI ImageGetCertificateData( +BOOL WINAPI ImageGetCertificateData( HANDLE handle, DWORD Index, LPWIN_CERTIFICATE Certificate, PDWORD RequiredLength) { DWORD r, offset, ofs, size, count; - TRACE("%p %ld %p %p\n", handle, Index, Certificate, RequiredLength); + TRACE("%p %d %p %p\n", handle, Index, Certificate, RequiredLength); + + if( !RequiredLength) + { + SetLastError( ERROR_INVALID_PARAMETER ); + return FALSE; + } if( !IMAGEHLP_GetCertificateOffset( handle, Index, &ofs, &size ) ) return FALSE; - if( !Certificate ) - { - *RequiredLength = size; - return TRUE; - } - if( *RequiredLength < size ) { *RequiredLength = size; @@ -264,6 +574,12 @@ BOOL IMAGEAPI ImageGetCertificateData( return FALSE; } + if( !Certificate ) + { + SetLastError( ERROR_INVALID_PARAMETER ); + return FALSE; + } + *RequiredLength = size; offset = SetFilePointer( handle, ofs, NULL, FILE_BEGIN ); @@ -277,6 +593,7 @@ BOOL IMAGEAPI ImageGetCertificateData( return FALSE; TRACE("OK\n"); + SetLastError( NO_ERROR ); return TRUE; } @@ -284,26 +601,25 @@ BOOL IMAGEAPI ImageGetCertificateData( /*********************************************************************** * ImageGetCertificateHeader (IMAGEHLP.@) */ -BOOL IMAGEAPI ImageGetCertificateHeader( - HANDLE FileHandle, DWORD CertificateIndex, LPWIN_CERTIFICATE Certificateheader) +BOOL WINAPI ImageGetCertificateHeader( + HANDLE handle, DWORD index, LPWIN_CERTIFICATE pCert) { DWORD r, offset, ofs, size, count; - const size_t cert_hdr_size = sizeof *Certificateheader - - sizeof Certificateheader->bCertificate; + const size_t cert_hdr_size = sizeof *pCert - sizeof pCert->bCertificate; - TRACE("%p %ld %p\n", FileHandle, CertificateIndex, Certificateheader); + TRACE("%p %d %p\n", handle, index, pCert); - if( !IMAGEHLP_GetCertificateOffset( FileHandle, CertificateIndex, &ofs, &size ) ) + if( !IMAGEHLP_GetCertificateOffset( handle, index, &ofs, &size ) ) return FALSE; if( size < cert_hdr_size ) return FALSE; - offset = SetFilePointer( FileHandle, ofs, NULL, FILE_BEGIN ); + offset = SetFilePointer( handle, ofs, NULL, FILE_BEGIN ); if( offset == INVALID_SET_FILE_POINTER ) return FALSE; - r = ReadFile( FileHandle, Certificateheader, (DWORD)cert_hdr_size, &count, NULL ); + r = ReadFile( handle, pCert, cert_hdr_size, &count, NULL ); if( !r ) return FALSE; if( count != cert_hdr_size ) @@ -317,11 +633,11 @@ BOOL IMAGEAPI ImageGetCertificateHeader( /*********************************************************************** * ImageGetDigestStream (IMAGEHLP.@) */ -BOOL IMAGEAPI ImageGetDigestStream( +BOOL WINAPI ImageGetDigestStream( HANDLE FileHandle, DWORD DigestLevel, DIGEST_FUNCTION DigestFunction, DIGEST_HANDLE DigestHandle) { - FIXME("(%p, %ld, %p, %p): stub\n", + FIXME("(%p, %d, %p, %p): stub\n", FileHandle, DigestLevel, DigestFunction, DigestHandle ); SetLastError(ERROR_CALL_NOT_IMPLEMENTED); @@ -331,62 +647,86 @@ BOOL IMAGEAPI ImageGetDigestStream( /*********************************************************************** * ImageRemoveCertificate (IMAGEHLP.@) */ -BOOL IMAGEAPI ImageRemoveCertificate(HANDLE FileHandle, DWORD Index) +BOOL WINAPI ImageRemoveCertificate(HANDLE FileHandle, DWORD Index) { - FIXME("(%p, %ld): stub\n", FileHandle, Index); - SetLastError(ERROR_CALL_NOT_IMPLEMENTED); - return FALSE; -} - - -/* - * @implemented - */ -PIMAGE_NT_HEADERS -IMAGEAPI -CheckSumMappedFile(LPVOID BaseAddress, - DWORD FileLength, - LPDWORD HeaderSum, - LPDWORD CheckSum) -{ - PIMAGE_NT_HEADERS Header; - DWORD CalcSum; - DWORD HdrSum; - TRACE("stub\n"); - - CalcSum = (DWORD)CalcCheckSum(0, - BaseAddress, - (FileLength + 1) / sizeof(WORD)); - - Header = ImageNtHeader(BaseAddress); - HdrSum = Header->OptionalHeader.CheckSum; - - /* Subtract image checksum from calculated checksum. */ - /* fix low word of checksum */ - if (LOWORD(CalcSum) >= LOWORD(HdrSum)) - { - CalcSum -= LOWORD(HdrSum); - } - else - { - CalcSum = ((LOWORD(CalcSum) - LOWORD(HdrSum)) & 0xFFFF) - 1; - } - - /* fix high word of checksum */ - if (LOWORD(CalcSum) >= HIWORD(HdrSum)) - { - CalcSum -= HIWORD(HdrSum); - } - else - { - CalcSum = ((LOWORD(CalcSum) - HIWORD(HdrSum)) & 0xFFFF) - 1; - } - - /* add file length */ - CalcSum += FileLength; - - *CheckSum = CalcSum; - *HeaderSum = Header->OptionalHeader.CheckSum; - - return Header; + DWORD size = 0, count = 0, sd_VirtualAddr = 0, offset = 0; + DWORD data_size = 0, cert_size = 0, cert_size_padded = 0, ret = 0; + LPVOID cert_data; + BOOL r; + + TRACE("(%p, %d)\n", FileHandle, Index); + + r = ImageEnumerateCertificates(FileHandle, CERT_SECTION_TYPE_ANY, &count, NULL, 0); + + if ((!r) || (count == 0)) + return FALSE; + + if ((!IMAGEHLP_GetSecurityDirOffset(FileHandle, &sd_VirtualAddr, &size)) || + (!IMAGEHLP_GetCertificateOffset(FileHandle, Index, &offset, &cert_size))) + return FALSE; + + /* Ignore any padding we have, too */ + if (cert_size % 8) + cert_size_padded = cert_size + (8 - (cert_size % 8)); + else + cert_size_padded = cert_size; + + data_size = size - (offset - sd_VirtualAddr) - cert_size_padded; + + if (data_size == 0) + { + ret = SetFilePointer(FileHandle, sd_VirtualAddr, NULL, FILE_BEGIN); + + if (ret == INVALID_SET_FILE_POINTER) + return FALSE; + } + else + { + cert_data = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, data_size); + + if (!cert_data) + return FALSE; + + ret = SetFilePointer(FileHandle, offset + cert_size_padded, NULL, FILE_BEGIN); + + if (ret == INVALID_SET_FILE_POINTER) + goto error; + + /* Read any subsequent certificates */ + r = ReadFile(FileHandle, cert_data, data_size, &count, NULL); + + if ((!r) || (count != data_size)) + goto error; + + SetFilePointer(FileHandle, offset, NULL, FILE_BEGIN); + + /* Write them one index back */ + r = WriteFile(FileHandle, cert_data, data_size, &count, NULL); + + if ((!r) || (count != data_size)) + goto error; + + HeapFree(GetProcessHeap(), 0, cert_data); + } + + /* If security directory is at end of file, trim the file */ + if (GetFileSize(FileHandle, NULL) == sd_VirtualAddr + size) + SetEndOfFile(FileHandle); + + if (count == 1) + r = IMAGEHLP_SetSecurityDirOffset(FileHandle, 0, 0); + else + r = IMAGEHLP_SetSecurityDirOffset(FileHandle, sd_VirtualAddr, size - cert_size_padded); + + if (!r) + return FALSE; + + if (!IMAGEHLP_RecalculateChecksum(FileHandle)) + return FALSE; + + return TRUE; + +error: + HeapFree(GetProcessHeap(), 0, cert_data); + return FALSE; } diff --git a/dll/win32/imagehlp/modify.c b/dll/win32/imagehlp/modify.c index c0612e57801..a443b66c541 100644 --- a/dll/win32/imagehlp/modify.c +++ b/dll/win32/imagehlp/modify.c @@ -2,7 +2,6 @@ * IMAGEHLP library * * Copyright 1998 Patrik Stridvall - * Copyright 2005 Alex Ionescu * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -19,859 +18,29 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "precomp.h" +#include -#define _WINNT_H +#include "windef.h" +#include "winbase.h" +#include "winternl.h" +#include "winerror.h" #include "wine/debug.h" +#include "imagehlp.h" WINE_DEFAULT_DEBUG_CHANNEL(imagehlp); -/* DATA **********************************************************************/ +static WORD CalcCheckSum(DWORD StartValue, LPVOID BaseAddress, DWORD WordCount); -CHAR BoundLibraries[4096]; -LPSTR BoundLibrariesPointer; /*********************************************************************** * BindImage (IMAGEHLP.@) */ -BOOL WINAPI BindImage( +BOOL IMAGEAPI BindImage( LPSTR ImageName, LPSTR DllPath, LPSTR SymbolPath) { return BindImageEx(0, ImageName, DllPath, SymbolPath, NULL); } -static LPSTR -IMAGEAPI -BindpCaptureImportModuleName(LPSTR ModuleName) -{ - LPSTR Name = BoundLibraries; - - /* Check if it hasn't been initialized yet */ - if (!BoundLibrariesPointer) - { - /* Start with a null char and set the pointer */ - *Name = ANSI_NULL; - BoundLibrariesPointer = Name; - } - - /* Loop the current buffer */ - while (*Name) - { - /* Try to match this DLL's name and return it */ - if (!_stricmp(Name, ModuleName)) return Name; - - /* Move on to the next DLL Name */ - Name += strlen(Name) + sizeof(CHAR); - } - - /* If we got here, we didn't find one, so add this one to our buffer */ - strcpy(Name, ModuleName); - - /* Set the new position of the buffer, and null-terminate it */ - BoundLibrariesPointer = Name + strlen(Name) + sizeof(CHAR); - *BoundLibrariesPointer = ANSI_NULL; - - /* Return the pointer to the name */ - return Name; -} - - -static PIMPORT_DESCRIPTOR -IMAGEAPI -BindpAddImportDescriptor(PIMPORT_DESCRIPTOR *BoundImportDescriptor, - PIMAGE_IMPORT_DESCRIPTOR ImportDescriptor, - LPSTR DllName, - PLOADED_IMAGE Image) -{ - PIMPORT_DESCRIPTOR Descriptor, *NextDescriptor; - - /* Loop descriptors and check if this library has already been bound */ - NextDescriptor = BoundImportDescriptor; - while ((Descriptor = *NextDescriptor)) - { - /* Compare the names and return the descriptor if found */ - if (!_stricmp(Descriptor->ModuleName, DllName)) return Descriptor; - - /* Move to the next one */ - NextDescriptor = &Descriptor->Next; - } - - /* Allocate a new descriptor */ - Descriptor = HeapAlloc(IMAGEHLP_hHeap, - HEAP_ZERO_MEMORY, - sizeof(IMPORT_DESCRIPTOR)); - - /* Set its Data and check if we have a valid loaded image */ - Descriptor->ModuleName = BindpCaptureImportModuleName(DllName); - *NextDescriptor = Descriptor; - if (Image) - { - /* Save the time stamp */ - Descriptor->TimeDateStamp = Image->FileHeader->FileHeader.TimeDateStamp; - } - - /* Return the descriptor */ - return Descriptor; -} - -static PCHAR -IMAGEAPI -BindpAddForwarderReference(LPSTR ModuleName, - LPSTR ImportName, - PIMPORT_DESCRIPTOR BoundImportDescriptor, - LPSTR DllPath, - PCHAR ForwarderString, - PBOOL ForwarderBound) -{ - CHAR DllName[256]; - PCHAR TempDllName, FunctionName; - PLOADED_IMAGE Library; - SIZE_T DllNameSize; - USHORT OrdinalNumber; - USHORT HintIndex; - ULONG ExportSize; - PIMAGE_EXPORT_DIRECTORY Exports; - ULONG_PTR ExportsBase; - PULONG AddressOfNames; - PUSHORT AddressOfOrdinals; - PULONG AddressOfPointers; - LPSTR ExportName; - ULONG_PTR ForwardedAddress; - PBOUND_FORWARDER_REFS Forwarder, *NextForwarder; - PIMAGE_OPTIONAL_HEADER OptionalHeader = NULL; - -NextForwarder: - - /* Get the DLL Name */ - TempDllName = ForwarderString; - while (*TempDllName && *TempDllName != '.') TempDllName++; - if (*TempDllName != '.') return ForwarderString; - - /* Get the size */ - DllNameSize = (SIZE_T)(TempDllName - ForwarderString); - if (DllNameSize >= MAX_PATH) return ForwarderString; - - /* Now copy the name and append the extension */ - strncpy(DllName, ForwarderString, DllNameSize); - DllName[DllNameSize] = ANSI_NULL; - strcat(DllName, ".DLL"); - - /* Load it */ - TRACE("Loading the Thunk Library: %s \n", DllName); - Library = ImageLoad(DllName, DllPath); - if (!Library) return ForwarderString; - - /* Move past the name */ - TRACE("It Loaded at: %p \n", Library->MappedAddress); - FunctionName = TempDllName += 1; - - /* Load Exports */ - Exports = ImageDirectoryEntryToData(Library->MappedAddress, - FALSE, - IMAGE_DIRECTORY_ENTRY_EXPORT, - &ExportSize); - if (!Exports) return ForwarderString; - - /* Get the Optional Header */ - OptionalHeader = &Library->FileHeader->OptionalHeader; - - /* Check if we're binding by ordinal */ - if (*FunctionName == '#') - { - /* We are, get the number and validate it */ - OrdinalNumber = atoi(FunctionName + 1) - (USHORT)Exports->Base; - if (OrdinalNumber >= Exports->NumberOfFunctions) return ForwarderString; - } - else - { - /* Binding by name... */ - OrdinalNumber = -1; - } - - /* Get the Pointers to the Tables */ - AddressOfNames = ImageRvaToVa(Library->FileHeader, - Library->MappedAddress, - Exports->AddressOfNames, - &Library->LastRvaSection); - AddressOfOrdinals = ImageRvaToVa(Library->FileHeader, - Library->MappedAddress, - Exports->AddressOfNameOrdinals, - &Library->LastRvaSection); - AddressOfPointers = ImageRvaToVa(Library->FileHeader, - Library->MappedAddress, - Exports->AddressOfFunctions, - &Library->LastRvaSection); - - /* Check if we're binding by name... */ - if (OrdinalNumber == 0xffff) - { - /* Do a full search for the ordinal */ - for (HintIndex = 0; HintIndex < Exports->NumberOfNames; HintIndex++) - { - /* Get the Export Name */ - ExportName = ImageRvaToVa(Library->FileHeader, - Library->MappedAddress, - (ULONG)AddressOfNames[HintIndex], - &Library->LastRvaSection); - - /* Check if it's the one we want */ - if (!strcmp(FunctionName, ExportName)) - { - OrdinalNumber = AddressOfOrdinals[HintIndex]; - break; - } - } - - /* Make sure it's valid */ - if (HintIndex >= Exports->NumberOfNames) return ForwarderString; - } - - /* Get the Forwarded Address */ - ForwardedAddress = AddressOfPointers[OrdinalNumber] + - OptionalHeader->ImageBase; - - /* Loop the forwarders to see if this DLL was already processed */ - NextForwarder = &BoundImportDescriptor->Forwarders; - while ((Forwarder = *NextForwarder)) - { - /* Check for a name match */ - if (!_stricmp(DllName, Forwarder->ModuleName)) break; - - /* Move to the next one */ - NextForwarder = &Forwarder->Next; - } - - /* Check if we've went through them all without luck */ - if (!Forwarder) - { - /* Allocate a forwarder structure */ - Forwarder = HeapAlloc(IMAGEHLP_hHeap, - HEAP_ZERO_MEMORY, - sizeof(BOUND_FORWARDER_REFS)); - - /* Set the name */ - Forwarder->ModuleName = BindpCaptureImportModuleName(DllName); - - /* Increase the number of forwarders */ - BoundImportDescriptor->ForwaderReferences++; - - /* Link it */ - *NextForwarder = Forwarder; - } - - /* Set the timestamp */ - Forwarder->TimeDateStamp = Library->FileHeader->FileHeader.TimeDateStamp; - - /* Load DLL's Exports */ - ExportsBase = (ULONG_PTR)ImageDirectoryEntryToData(Library->MappedAddress, - TRUE, - IMAGE_DIRECTORY_ENTRY_EXPORT, - &ExportSize) - - (ULONG_PTR)Library->MappedAddress; - - /* Convert to VA */ - ExportsBase += OptionalHeader->ImageBase; - - /* Is this yet another Forward? */ - TRACE("I've thunked it\n"); - if ((ForwardedAddress > ExportsBase) && - (ForwardedAddress < (ExportsBase + ExportSize))) - { - /* Update the string pointer */ - ForwarderString = ImageRvaToVa(Library->FileHeader, - Library->MappedAddress, - AddressOfPointers[OrdinalNumber], - &Library->LastRvaSection); - goto NextForwarder; - } - else - { - /* Update the pointer and return success */ - ForwarderString = (PCHAR)ForwardedAddress; - *ForwarderBound = TRUE; - } - - /* Return the pointer */ - return ForwarderString; -} - -static BOOL -IMAGEAPI -BindpLookupThunk(PIMAGE_THUNK_DATA Thunk, - PLOADED_IMAGE Image, - PIMAGE_THUNK_DATA BoundThunk, - PIMAGE_THUNK_DATA ThunkFunction, - PLOADED_IMAGE Library, - PIMAGE_EXPORT_DIRECTORY Exports, - PIMPORT_DESCRIPTOR BoundImportDescriptor, - LPSTR DllPath, - PULONG *Forwarders) -{ - PULONG AddressOfNames; - PUSHORT AddressOfOrdinals; - PULONG AddressOfPointers; - PIMAGE_IMPORT_BY_NAME ImportName; - ULONG OrdinalNumber = 0; - USHORT HintIndex; - LPSTR ExportName; - ULONG_PTR ExportsBase; - ULONG ExportSize; - UCHAR NameBuffer[32]; - PIMAGE_OPTIONAL_HEADER OptionalHeader = NULL; - PIMAGE_OPTIONAL_HEADER LibraryOptionalHeader = NULL; - BOOL ForwarderBound = FALSE; - PUCHAR ForwarderName; - TRACE("Binding a Thunk\n"); - - /* Get the Pointers to the Tables */ - AddressOfNames = ImageRvaToVa(Library->FileHeader, - Library->MappedAddress, - Exports->AddressOfNames, - &Library->LastRvaSection); - AddressOfOrdinals = ImageRvaToVa(Library->FileHeader, - Library->MappedAddress, - Exports->AddressOfNameOrdinals, - &Library->LastRvaSection); - AddressOfPointers = ImageRvaToVa(Library->FileHeader, - Library->MappedAddress, - Exports->AddressOfFunctions, - &Library->LastRvaSection); - - /* Get the Optional Headers */ - OptionalHeader = &Image->FileHeader->OptionalHeader; - LibraryOptionalHeader = &Library->FileHeader->OptionalHeader; - - /* Import by Ordinal */ - if (IMAGE_SNAP_BY_ORDINAL(Thunk->u1.Ordinal) == TRUE) - { - /* Get the ordinal number and pointer to the name */ - OrdinalNumber = (IMAGE_ORDINAL(Thunk->u1.Ordinal) - Exports->Base); - ImportName = (PIMAGE_IMPORT_BY_NAME)NameBuffer; - - /* Setup the name for this ordinal */ - sprintf((PCHAR)ImportName->Name, "Ordinal%lx\n", OrdinalNumber); - } - else - { - /* Import by Name, get the data */ - ImportName = ImageRvaToVa(Image->FileHeader, - Image->MappedAddress, - (ULONG)Thunk->u1.AddressOfData, - &Image->LastRvaSection); - - /* Get the hint and see if we can use it */ - OrdinalNumber = (USHORT)(Exports->NumberOfFunctions + 1); - HintIndex = ImportName->Hint; - if (HintIndex < Exports->NumberOfNames) - { - /* Hint seems valid, get the export name */ - ExportName = ImageRvaToVa(Library->FileHeader, - Library->MappedAddress, - (ULONG)AddressOfNames[HintIndex], - &Library->LastRvaSection); - /* Check if it's the one we want */ - if (!strcmp((PCHAR)ImportName->Name, ExportName)) - { - OrdinalNumber = AddressOfOrdinals[HintIndex]; - } - } - - /* If the ordinal isn't valid, we'll have to do a long loop */ - if (OrdinalNumber >= Exports->NumberOfFunctions) - { - for (HintIndex = 0; HintIndex < Exports->NumberOfNames; HintIndex++) - { - /* Get the Export Name */ - ExportName = ImageRvaToVa(Library->FileHeader, - Library->MappedAddress, - (ULONG)AddressOfNames[HintIndex], - &Library->LastRvaSection); - - /* Check if it's the one we want */ - if (!strcmp((PCHAR)ImportName->Name, ExportName)) - { - OrdinalNumber = AddressOfOrdinals[HintIndex]; - break; - } - } - - /* Make sure it's valid now */ - if (OrdinalNumber >= Exports->NumberOfFunctions) return FALSE; - } - } - - /* Write the Pointer */ - ThunkFunction->u1.Function = AddressOfPointers[OrdinalNumber] + - LibraryOptionalHeader->ImageBase; - - /* Load DLL's Exports */ - ExportsBase = (ULONG_PTR)ImageDirectoryEntryToData(Library->MappedAddress, - TRUE, - IMAGE_DIRECTORY_ENTRY_EXPORT, - &ExportSize) - - (ULONG_PTR)Library->MappedAddress; - - /* RVA to VA */ - ExportsBase += LibraryOptionalHeader->ImageBase; - - /* Check if the Export is forwarded (meaning that it's pointer is inside the Export Table) */ - if ((ThunkFunction->u1.Function > ExportsBase) && - (ThunkFunction->u1.Function < ExportsBase + ExportSize)) - { - /* Make sure we have a descriptor */ - if (BoundImportDescriptor) - { - TRACE("This Thunk is a forward...calling forward thunk bounder\n"); - - /* Get the VA of the pointer containg the name */ - ForwarderName = ImageRvaToVa(Library->FileHeader, - Library->MappedAddress, - AddressOfPointers[OrdinalNumber], - &Library->LastRvaSection); - - /* Replace the Forwarder String by the actual name */ - ThunkFunction->u1.ForwarderString = - PtrToUlong(BindpAddForwarderReference(Image->ModuleName, - (PCHAR)ImportName->Name, - BoundImportDescriptor, - DllPath, - (PCHAR)ForwarderName, - &ForwarderBound)); - } - - /* Check if it wasn't bound */ - if (!ForwarderBound) - { - /* Set the chain to the ordinal to reflect this */ - **Forwarders = (ULONG)(ThunkFunction - BoundThunk); - *Forwarders = (PULONG)&ThunkFunction->u1.Ordinal; - } - } - - /* Return Success */ - return TRUE; -} - -static PIMAGE_BOUND_IMPORT_DESCRIPTOR -IMAGEAPI -BindpCreateNewImportSection(PIMPORT_DESCRIPTOR *BoundImportDescriptor, - PULONG BoundImportsSize) -{ - ULONG BoundLibraryNamesSize = 0, BoundImportTableSize = 0; - PBOUND_FORWARDER_REFS Forwarder, *NextForwarder; - PIMPORT_DESCRIPTOR Descriptor, *NextDescriptor; - LPSTR BoundLibraryNames; - PIMAGE_BOUND_IMPORT_DESCRIPTOR BoundTableEntry, BoundTable; - PIMAGE_BOUND_FORWARDER_REF BoundForwarder; - - /* Zero the outoging size */ - *BoundImportsSize = 0; - - /* Loop the descriptors and forwarders to get the size */ - NextDescriptor = BoundImportDescriptor; - while ((Descriptor = *NextDescriptor)) - { - /* Add to the size of the Bound Import Table */ - BoundImportTableSize += sizeof(IMAGE_BOUND_IMPORT_DESCRIPTOR); - - /* Check Forwarders */ - NextForwarder = &Descriptor->Forwarders; - while ((Forwarder = *NextForwarder)) - { - /* Add to size of Bound Import Table */ - BoundImportTableSize += sizeof(IMAGE_BOUND_FORWARDER_REF); - - /* Next Forwarder */ - NextForwarder = &Forwarder->Next; - } - - /* Read Next Internal Descriptor */ - NextDescriptor = &Descriptor->Next; - } - - /* Add Terminator for PE Loader*/ - BoundImportTableSize += sizeof(IMAGE_BOUND_IMPORT_DESCRIPTOR); - TRACE("Table size: %lx\n", BoundImportTableSize); - - /* Name of Libraries Bound in Bound Import Table */ - BoundLibraryNamesSize = (ULONG)((ULONG_PTR)BoundLibrariesPointer - - (ULONG_PTR)BoundLibraries); - BoundLibrariesPointer = NULL; - - /* Size of the whole table, dword aligned */ - *BoundImportsSize = BoundImportTableSize + - ((BoundLibraryNamesSize + sizeof(ULONG) - 1) & - ~(sizeof(ULONG) - 1)); - - /* Allocate it */ - BoundTable = HeapAlloc(IMAGEHLP_hHeap, HEAP_ZERO_MEMORY, *BoundImportsSize); - - /* Pointer Library Names inside the Bound Import Table */ - BoundLibraryNames = (LPSTR)BoundTable + BoundImportTableSize; - - /* Copy the Library Names */ - RtlCopyMemory(BoundLibraryNames, BoundLibraries, BoundLibraryNamesSize); - - /* Now loop both tables */ - BoundTableEntry = BoundTable; - NextDescriptor = BoundImportDescriptor; - while ((Descriptor = *NextDescriptor)) - { - /* Copy the data */ - BoundTableEntry->TimeDateStamp = Descriptor->TimeDateStamp; - BoundTableEntry->OffsetModuleName = (USHORT)(ULONG_PTR)(BoundImportTableSize + - (Descriptor->ModuleName - - (ULONG_PTR)BoundLibraries)); - BoundTableEntry->NumberOfModuleForwarderRefs = Descriptor->ForwaderReferences; - - /* Now loop the forwarders */ - BoundForwarder = (PIMAGE_BOUND_FORWARDER_REF)BoundTableEntry + 1; - NextForwarder = &Descriptor->Forwarders; - while ((Forwarder = *NextForwarder)) - { - /* Copy the data */ - BoundForwarder->TimeDateStamp = Forwarder->TimeDateStamp; - BoundForwarder->OffsetModuleName = (USHORT)(ULONG_PTR)(BoundImportTableSize + - (Forwarder->ModuleName - - (ULONG_PTR)BoundLibraries)); - - /* Move to the next new forwarder, and move to the next entry */ - BoundForwarder++; - NextForwarder = &Forwarder->Next; - } - - /* Move to next Bound Import Table Entry */ - BoundTableEntry = (PIMAGE_BOUND_IMPORT_DESCRIPTOR)BoundForwarder; - - /* Move to the next descriptor */ - NextDescriptor = &Descriptor->Next; - } - - /* Loop the descriptors and forwarders to free them */ - NextDescriptor = BoundImportDescriptor; - while ((Descriptor = *NextDescriptor)) - { - /* Read next internal descriptor */ - *NextDescriptor = Descriptor->Next; - - /* Loop its forwarders */ - NextForwarder = &Descriptor->Forwarders; - while ((Forwarder = *NextForwarder)) - { - /* Next Forwarder */ - *NextForwarder = Forwarder->Next; - - /* Free it */ - HeapFree(IMAGEHLP_hHeap, 0, Forwarder); - } - - /* Free it */ - HeapFree(IMAGEHLP_hHeap, 0, Descriptor); - } - - /* Return the Bound Import Table */ - return BoundTable; -} - -static VOID -IMAGEAPI -BindpWalkAndProcessImports(PLOADED_IMAGE File, - LPSTR DllPath, - PBOOLEAN UpdateImage) -{ - PIMAGE_IMPORT_DESCRIPTOR Imports; - PIMAGE_EXPORT_DIRECTORY Exports; - ULONG SizeOfImports; - ULONG SizeOfExports; - ULONG SizeOfThunks; - PIMAGE_OPTIONAL_HEADER OptionalHeader; - PIMAGE_FILE_HEADER FileHeader; - LPSTR ImportedLibrary; - PLOADED_IMAGE LoadedLibrary; - ULONG TopForwarderChain; - PULONG ForwarderChain; - PIMPORT_DESCRIPTOR TopBoundDescriptor = NULL, BoundImportDescriptor; - PIMAGE_BOUND_IMPORT_DESCRIPTOR BoundImportTable, OldBoundImportTable; - PIMAGE_THUNK_DATA Thunks, TempThunk; - PIMAGE_THUNK_DATA BoundThunks, TempBoundThunk; - ULONG ThunkCount = 0; - ULONG Thunk; - ULONG BoundImportTableSize, OldBoundImportTableSize; - ULONG VirtBytesFree, HeaderBytesFree, FirstFreeByte, PhysBytesFree; - BOOL ThunkStatus; - TRACE("BindpWalkAndBindImports Called\n"); - - /* Assume untouched image */ - *UpdateImage = FALSE; - - /* Load the Import Descriptor */ - Imports = ImageDirectoryEntryToData(File->MappedAddress, - FALSE, - IMAGE_DIRECTORY_ENTRY_IMPORT, - &SizeOfImports); - if (!Imports) return; - - /* Read the File Header */ - FileHeader = &File->FileHeader->FileHeader; - OptionalHeader = &File->FileHeader->OptionalHeader; - - /* Get the old Bound Import Table, if any */ - OldBoundImportTable = ImageDirectoryEntryToData(File->MappedAddress, - FALSE, - IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT, - &OldBoundImportTableSize); - - /* For each Import */ - while(Imports) - { - /* Make sure we have a name */ - if (!Imports->Name) break; - - /* Which DLL is being Imported */ - ImportedLibrary = ImageRvaToVa(File->FileHeader, - File->MappedAddress, - Imports->Name, - &File->LastRvaSection); - if (ImportedLibrary) - { - TRACE("Loading Imported DLL: %s \n", ImportedLibrary); - - /* Load the DLL */ - LoadedLibrary = ImageLoad(ImportedLibrary, DllPath); - if (!LoadedLibrary) - { - /* Create the descriptor, even if we failed */ - BindpAddImportDescriptor(&TopBoundDescriptor, - Imports, - ImportedLibrary, - LoadedLibrary); - - /* Move on the next file */ - Imports++; - continue; - } - - /* Now load the Exports */ - TRACE("DLL Loaded at: %p \n", LoadedLibrary->MappedAddress); - Exports = ImageDirectoryEntryToData(LoadedLibrary->MappedAddress, - FALSE, - IMAGE_DIRECTORY_ENTRY_EXPORT, - &SizeOfExports); - - /* Move on, if we don't have exports */ - if (!Exports) continue; - - /* And load the Thunks */ - Thunks = ImageRvaToVa(File->FileHeader, - File->MappedAddress, - (ULONG)Imports->OriginalFirstThunk, - &File->LastRvaSection); - - /* No actual Exports (UPX Packer can do this */ - if (!(Thunks) || !(Thunks->u1.Function)) continue; - - /* Create Bound Import Descriptor */ - TRACE("Creating Bound Descriptor for this DLL\n"); - BoundImportDescriptor = BindpAddImportDescriptor(&TopBoundDescriptor, - Imports, - ImportedLibrary, - LoadedLibrary); - - /* Count how many Thunks we have */ - ThunkCount = 0; - TempThunk = Thunks; - while (TempThunk->u1.AddressOfData) - { - ThunkCount++; - TempThunk++; - } - - /* Allocate Memory for the Thunks we will Bind */ - SizeOfThunks = ThunkCount * sizeof(*TempBoundThunk); - BoundThunks = HeapAlloc(IMAGEHLP_hHeap, - HEAP_ZERO_MEMORY, - SizeOfThunks); - - /* Setup the initial data pointers */ - TRACE("Binding Thunks\n"); - TempThunk = Thunks; - TempBoundThunk = BoundThunks; - TopForwarderChain = -1; - ForwarderChain = &TopForwarderChain; - - /* Loop for every thunk */ - for (Thunk = 0; Thunk < ThunkCount; Thunk++) - { - /* Bind it */ - ThunkStatus = BindpLookupThunk(TempThunk, - File, - BoundThunks, - TempBoundThunk, - LoadedLibrary, - Exports, - BoundImportDescriptor, - DllPath, - &ForwarderChain); - /* Check if binding failed */ - if (!ThunkStatus) - { - /* If we have a descriptor */ - if (BoundImportDescriptor) - { - /* Zero the timestamp */ - BoundImportDescriptor->TimeDateStamp = 0; - } - - /* Quit the loop */ - break; - } - - /* Move on */ - TempThunk++; - TempBoundThunk++; - } - - /* Load the Second Thunk Array */ - TempThunk = ImageRvaToVa(File->FileHeader, - File->MappedAddress, - (ULONG)Imports->FirstThunk, - &File->LastRvaSection); - if (TempThunk) - { - /* Check if the forwarder chain changed */ - if (TopForwarderChain != -1) - { - /* It did. Update the chain and let caller know */ - *ForwarderChain = -1; - *UpdateImage = TRUE; - } - - /* Check if we're not pointing at the new top chain */ - if (Imports->ForwarderChain != TopForwarderChain) - { - /* Update it, and let the caller know */ - Imports->ForwarderChain = TopForwarderChain; - *UpdateImage = TRUE; - } - - /* Check if thunks have changed */ - if (memcmp(TempThunk, BoundThunks, SizeOfThunks)) - { - /* Copy the Pointers and let caller know */ - TRACE("Copying Bound Thunks\n"); - RtlCopyMemory(TempThunk, BoundThunks, SizeOfThunks); - *UpdateImage = TRUE; - } - - /* Check if we have no bound entries */ - if (!TopBoundDescriptor) - { - /* Check if the timestamp is different */ - if (Imports->TimeDateStamp != FileHeader->TimeDateStamp) - { - /* Update it, and let the caller knmow */ - Imports->TimeDateStamp = FileHeader->TimeDateStamp; - *UpdateImage = TRUE; - } - } - else if ((Imports->TimeDateStamp != 0xFFFFFFFF)) - { - /* Invalidate the timedate stamp */ - Imports->TimeDateStamp = 0xFFFFFFFF; - } - } - - /* Free the Allocated Memory */ - HeapFree(IMAGEHLP_hHeap, 0, BoundThunks); - - TRACE("Moving to next File\n"); - Imports++; - } - } - - /* Create the Bound Import Table */ - TRACE("Creating Bound Import Section\n"); - BoundImportTable = BindpCreateNewImportSection(&TopBoundDescriptor, - &BoundImportTableSize); - - /* Check if the import table changed */ - if (OldBoundImportTableSize != BoundImportTableSize) - { - /* Let the caller know */ - *UpdateImage = TRUE; - } - - /* - * At this point, check if anything that we've done until now has resulted - * in the image being touched. If not, then we'll simply return to caller. - */ - if (!(*UpdateImage)) return; - - /* Check if we have a new table */ - if (BoundImportTable) - { - /* Zero it out */ - OptionalHeader->DataDirectory[IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT].VirtualAddress = 0; - OptionalHeader->DataDirectory[IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT].Size = 0; - - /* Check if we have enough space */ - TRACE("Calculating Space\n"); - FirstFreeByte = GetImageUnusedHeaderBytes(File, &VirtBytesFree); - HeaderBytesFree = File->Sections->VirtualAddress - - OptionalHeader->SizeOfHeaders + VirtBytesFree; - PhysBytesFree = File->Sections->PointerToRawData - - OptionalHeader->SizeOfHeaders + VirtBytesFree; - - /* Check if we overflowed */ - if (BoundImportTableSize > VirtBytesFree) - { - /* Check if we have no space a tall */ - if (BoundImportTableSize > HeaderBytesFree) - { - ERR("Not enough Space\n"); - return; /* Fail...not enough space */ - } - - /* Check if we have space on disk to enlarge it */ - if (BoundImportTableSize <= PhysBytesFree) - { - /* We have enough NULLs to add it, simply enlarge header data */ - TRACE("Header Recalculation\n"); - OptionalHeader->SizeOfHeaders = OptionalHeader->SizeOfHeaders - - VirtBytesFree + - BoundImportTableSize + - ((OptionalHeader->FileAlignment - 1) & - ~(OptionalHeader->FileAlignment - 1)); - } - else - { - /* Resize the Headers */ - FIXME("UNIMPLEMENTED: Header Resizing\n"); - - /* Recalculate Headers */ - FileHeader = &File->FileHeader->FileHeader; - OptionalHeader = &File->FileHeader->OptionalHeader; - } - } - - /* Set Bound Import Table Data */ - OptionalHeader->DataDirectory - [IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT].VirtualAddress = FirstFreeByte; - OptionalHeader->DataDirectory - [IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT].Size = BoundImportTableSize; - - /* Copy the Bound Import Table */ - TRACE("Copying Bound Import Table\n"); - RtlCopyMemory(File->MappedAddress + FirstFreeByte, - BoundImportTable, - BoundImportTableSize); - - /* Free the data */ - HeapFree(IMAGEHLP_hHeap, 0, BoundImportTable); - } - -} - /*********************************************************************** * BindImageEx (IMAGEHLP.@) */ @@ -879,132 +48,117 @@ BOOL IMAGEAPI BindImageEx( DWORD Flags, LPSTR ImageName, LPSTR DllPath, LPSTR SymbolPath, PIMAGEHLP_STATUS_ROUTINE StatusRoutine) { - LOADED_IMAGE FileData; - PLOADED_IMAGE File; - PIMAGE_FILE_HEADER FileHeader; - PIMAGE_OPTIONAL_HEADER OptionalHeader; - ULONG CheckSum, HeaderCheckSum, OldChecksum; - SYSTEMTIME SystemTime; - FILETIME LastWriteTime; - BOOLEAN UpdateImage; - DWORD DataSize; - TRACE("BindImageEx Called for: %s \n", ImageName); - - /* Set and Clear Buffer */ - File = &FileData; - RtlZeroMemory(File, sizeof(*File)); - - /* Request Image Data */ - if (MapAndLoad(ImageName, DllPath, File, TRUE, FALSE)) - { - /* Write the image's name */ - TRACE("Image Mapped and Loaded\n"); - File->ModuleName = ImageName; - - /* Check if the image is valid and if it should be bound */ - if ((File->FileHeader) && - ((Flags & BIND_ALL_IMAGES) || (!File->fSystemImage))) - { - /* Get the optional header */ - FileHeader = &File->FileHeader->FileHeader; - OptionalHeader = &File->FileHeader->OptionalHeader; - - /* Check if this image should be bound */ - if (OptionalHeader->DllCharacteristics & - IMAGE_DLLCHARACTERISTICS_NO_BIND) - { - /* Don't bind it */ - goto Skip; - } - - /* Check if the image has security data */ - if ((ImageDirectoryEntryToData(File->MappedAddress, - FALSE, - IMAGE_DIRECTORY_ENTRY_SECURITY, - &DataSize)) || DataSize) - { - /* It does, skip it */ - goto Skip; - } - - /* Read Import Table */ - BindpWalkAndProcessImports(File, DllPath, &UpdateImage); - - /* Check if we need to update the image */ - if ((UpdateImage) && (File->hFile != INVALID_HANDLE_VALUE)) - { - /* FIXME: Update symbols */ - - /* Update Checksum */ - TRACE("Binding Completed, getting Checksum\n"); - OldChecksum = File->FileHeader->OptionalHeader.CheckSum; - CheckSumMappedFile(File->MappedAddress, - GetFileSize(File->hFile, NULL), - &HeaderCheckSum, - &CheckSum); - File->FileHeader->OptionalHeader.CheckSum = CheckSum; - - /* Save Changes */ - TRACE("Saving Changes to file\n"); - FlushViewOfFile(File->MappedAddress, File->SizeOfImage); - - /* Save new Modified Time */ - TRACE("Setting time\n"); - GetSystemTime(&SystemTime); - SystemTimeToFileTime(&SystemTime, &LastWriteTime); - SetFileTime(File->hFile, NULL, NULL, &LastWriteTime); - } - } - } - -Skip: - - /* Unmap the image */ - UnmapViewOfFile(File->MappedAddress); - - /* Close the handle if it's valid */ - if (File->hFile != INVALID_HANDLE_VALUE) CloseHandle(File->hFile); - - /* Unload all the images if we're not supposed to cache them */ - if (!(Flags & BIND_CACHE_IMPORT_DLLS)) UnloadAllImages(); - - /* Return success */ - TRACE("Done\n"); - return TRUE; + FIXME("(%d, %s, %s, %s, %p): stub\n", + Flags, debugstr_a(ImageName), debugstr_a(DllPath), + debugstr_a(SymbolPath), StatusRoutine + ); + return TRUE; } -/* FUNCTIONS *****************************************************************/ -/* - * @implemented +/*********************************************************************** + * CheckSum (internal) */ -BOOL -IMAGEAPI -TouchFileTimes(HANDLE FileHandle, - LPSYSTEMTIME lpSystemTime) +static WORD CalcCheckSum( + DWORD StartValue, LPVOID BaseAddress, DWORD WordCount) { - FILETIME FileTime; - SYSTEMTIME SystemTime; - - if(lpSystemTime == NULL) - { - GetSystemTime(&SystemTime); - lpSystemTime = &SystemTime; - } + LPWORD Ptr; + DWORD Sum; + DWORD i; - return (SystemTimeToFileTime(lpSystemTime, - &FileTime) && - SetFileTime(FileHandle, - NULL, - NULL, - &FileTime)); + Sum = StartValue; + Ptr = (LPWORD)BaseAddress; + for (i = 0; i < WordCount; i++) + { + Sum += *Ptr; + if (HIWORD(Sum) != 0) + { + Sum = LOWORD(Sum) + HIWORD(Sum); + } + Ptr++; + } + + return (WORD)(LOWORD(Sum) + HIWORD(Sum)); +} + + +/*********************************************************************** + * CheckSumMappedFile (IMAGEHLP.@) + */ +PIMAGE_NT_HEADERS WINAPI CheckSumMappedFile( + LPVOID BaseAddress, DWORD FileLength, + LPDWORD HeaderSum, LPDWORD CheckSum) +{ + IMAGE_DOS_HEADER *dos = (IMAGE_DOS_HEADER *) BaseAddress; + PIMAGE_NT_HEADERS32 Header32; + PIMAGE_NT_HEADERS64 Header64; + DWORD *ChecksumFile; + DWORD CalcSum; + DWORD HdrSum; + + TRACE("(%p, %d, %p, %p)\n", + BaseAddress, FileLength, HeaderSum, CheckSum + ); + + CalcSum = (DWORD)CalcCheckSum(0, + BaseAddress, + (FileLength + 1) / sizeof(WORD)); + + if (dos->e_magic != IMAGE_DOS_SIGNATURE) + return NULL; + + Header32 = (IMAGE_NT_HEADERS32 *)((char *)dos + dos->e_lfanew); + + if (Header32->Signature != IMAGE_NT_SIGNATURE) + return NULL; + + if (Header32->OptionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR32_MAGIC) + ChecksumFile = &Header32->OptionalHeader.CheckSum; + else if (Header32->OptionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR64_MAGIC) + { + Header64 = (IMAGE_NT_HEADERS64 *)Header32; + ChecksumFile = &Header64->OptionalHeader.CheckSum; + } + else + return NULL; + + HdrSum = *ChecksumFile; + + /* Subtract image checksum from calculated checksum. */ + /* fix low word of checksum */ + if (LOWORD(CalcSum) >= LOWORD(HdrSum)) + { + CalcSum -= LOWORD(HdrSum); + } + else + { + CalcSum = ((LOWORD(CalcSum) - LOWORD(HdrSum)) & 0xFFFF) - 1; + } + + /* fix high word of checksum */ + if (LOWORD(CalcSum) >= HIWORD(HdrSum)) + { + CalcSum -= HIWORD(HdrSum); + } + else + { + CalcSum = ((LOWORD(CalcSum) - HIWORD(HdrSum)) & 0xFFFF) - 1; + } + + /* add file length */ + CalcSum += FileLength; + + *CheckSum = CalcSum; + *HeaderSum = *ChecksumFile; + + return (PIMAGE_NT_HEADERS) Header32; } /*********************************************************************** * MapFileAndCheckSumA (IMAGEHLP.@) */ DWORD IMAGEAPI MapFileAndCheckSumA( - LPSTR Filename, LPDWORD HeaderSum, LPDWORD CheckSum) + LPSTR Filename, PDWORD HeaderSum, PDWORD CheckSum) { HANDLE hFile; HANDLE hMapping; @@ -1044,7 +198,7 @@ DWORD IMAGEAPI MapFileAndCheckSumA( 0, 0, 0); - if (BaseAddress == NULL) + if (BaseAddress == 0) { CloseHandle(hMapping); CloseHandle(hFile); @@ -1070,7 +224,7 @@ DWORD IMAGEAPI MapFileAndCheckSumA( * MapFileAndCheckSumW (IMAGEHLP.@) */ DWORD IMAGEAPI MapFileAndCheckSumW( - LPWSTR Filename, LPDWORD HeaderSum, LPDWORD CheckSum) + PWSTR Filename, LPDWORD HeaderSum, LPDWORD CheckSum) { HANDLE hFile; HANDLE hMapping; @@ -1110,7 +264,7 @@ DWORD IMAGEAPI MapFileAndCheckSumW( 0, 0, 0); - if (BaseAddress == NULL) + if (BaseAddress == 0) { CloseHandle(hMapping); CloseHandle(hFile); @@ -1138,11 +292,11 @@ DWORD IMAGEAPI MapFileAndCheckSumW( BOOL IMAGEAPI ReBaseImage( LPSTR CurrentImageName, LPSTR SymbolPath, BOOL fReBase, BOOL fRebaseSysfileOk, BOOL fGoingDown, ULONG CheckImageSize, - ULONG *OldImageSize, ULONG *OldImageBase, ULONG *NewImageSize, - ULONG *NewImageBase, ULONG TimeStamp) + ULONG *OldImageSize, ULONG_PTR *OldImageBase, ULONG *NewImageSize, + ULONG_PTR *NewImageBase, ULONG TimeStamp) { FIXME( - "(%s, %s, %d, %d, %d, %ld, %p, %p, %p, %p, %ld): stub\n", + "(%s, %s, %d, %d, %d, %d, %p, %p, %p, %p, %d): stub\n", debugstr_a(CurrentImageName),debugstr_a(SymbolPath), fReBase, fRebaseSysfileOk, fGoingDown, CheckImageSize, OldImageSize, OldImageBase, NewImageSize, NewImageBase, TimeStamp @@ -1154,7 +308,7 @@ BOOL IMAGEAPI ReBaseImage( /*********************************************************************** * RemovePrivateCvSymbolic (IMAGEHLP.@) */ -BOOL IMAGEAPI RemovePrivateCvSymbolic( +BOOL WINAPI RemovePrivateCvSymbolic( PCHAR DebugData, PCHAR *NewDebugData, ULONG *NewDebugSize) { FIXME("(%p, %p, %p): stub\n", @@ -1167,7 +321,7 @@ BOOL IMAGEAPI RemovePrivateCvSymbolic( /*********************************************************************** * RemoveRelocations (IMAGEHLP.@) */ -VOID IMAGEAPI RemoveRelocations(PCHAR ImageName) +VOID WINAPI RemoveRelocations(PCHAR ImageName) { FIXME("(%p): stub\n", ImageName); SetLastError(ERROR_CALL_NOT_IMPLEMENTED); @@ -1178,9 +332,9 @@ VOID IMAGEAPI RemoveRelocations(PCHAR ImageName) */ BOOL IMAGEAPI SplitSymbols( LPSTR ImageName, LPSTR SymbolsPath, - LPSTR SymbolFilePath, DWORD Flags) + LPSTR SymbolFilePath, ULONG Flags) { - FIXME("(%s, %s, %s, %ld): stub\n", + FIXME("(%s, %s, %s, %d): stub\n", debugstr_a(ImageName), debugstr_a(SymbolsPath), debugstr_a(SymbolFilePath), Flags ); @@ -1193,7 +347,7 @@ BOOL IMAGEAPI SplitSymbols( */ BOOL IMAGEAPI UpdateDebugInfoFile( LPSTR ImageFileName, LPSTR SymbolPath, - LPSTR DebugFilePath, PIMAGE_NT_HEADERS NtHeaders) + LPSTR DebugFilePath, PIMAGE_NT_HEADERS32 NtHeaders) { FIXME("(%s, %s, %s, %p): stub\n", debugstr_a(ImageFileName), debugstr_a(SymbolPath), @@ -1208,9 +362,9 @@ BOOL IMAGEAPI UpdateDebugInfoFile( */ BOOL IMAGEAPI UpdateDebugInfoFileEx( LPSTR ImageFileName, LPSTR SymbolPath, LPSTR DebugFilePath, - PIMAGE_NT_HEADERS NtHeaders, DWORD OldChecksum) + PIMAGE_NT_HEADERS32 NtHeaders, DWORD OldChecksum) { - FIXME("(%s, %s, %s, %p, %ld): stub\n", + FIXME("(%s, %s, %s, %p, %d): stub\n", debugstr_a(ImageFileName), debugstr_a(SymbolPath), debugstr_a(DebugFilePath), NtHeaders, OldChecksum ); diff --git a/dll/win32/iphlpapi/iphlpapi_main.c b/dll/win32/iphlpapi/iphlpapi_main.c index 8508d2d416a..ebb73ad6017 100644 --- a/dll/win32/iphlpapi/iphlpapi_main.c +++ b/dll/win32/iphlpapi/iphlpapi_main.c @@ -1747,7 +1747,7 @@ static int TcpTableSorter(const void *a, const void *b) */ DWORD WINAPI GetTcpTable(PMIB_TCPTABLE pTcpTable, PDWORD pdwSize, BOOL bOrder) { - DWORD ret = NO_ERROR; + DWORD ret = ERROR_NO_DATA; TRACE("pTcpTable %p, pdwSize %p, bOrder %d\n", pTcpTable, pdwSize, (DWORD)bOrder); @@ -1764,18 +1764,31 @@ DWORD WINAPI GetTcpTable(PMIB_TCPTABLE pTcpTable, PDWORD pdwSize, BOOL bOrder) ret = ERROR_INSUFFICIENT_BUFFER; } else { - PMIB_TCPTABLE pTcpTable = getTcpTable(); - if (pTcpTable) + PMIB_TCPTABLE pOurTcpTable = getTcpTable(); + if (pOurTcpTable) { size = sizeof(MIB_TCPTABLE); - if (pTcpTable->dwNumEntries > 1) - size += (pTcpTable->dwNumEntries - 1) * sizeof(MIB_TCPROW); - *pdwSize = size; + if (pOurTcpTable->dwNumEntries > 1) + size += (pOurTcpTable->dwNumEntries - 1) * sizeof(MIB_TCPROW); + + if (*pdwSize < size) + { + *pdwSize = size; - if (bOrder) - qsort(pTcpTable->table, pTcpTable->dwNumEntries, - sizeof(MIB_TCPROW), TcpTableSorter); - ret = NO_ERROR; + ret = ERROR_INSUFFICIENT_BUFFER; + } + else + { + memcpy(pTcpTable, pOurTcpTable, size); + + if (bOrder) + qsort(pTcpTable->table, pTcpTable->dwNumEntries, + sizeof(MIB_TCPROW), TcpTableSorter); + + ret = NO_ERROR; + } + + free(pOurTcpTable); } } } @@ -2291,6 +2304,7 @@ PIP_ADAPTER_ORDER_MAP WINAPI GetAdapterOrderMap(VOID) */ DWORD WINAPI GetAdaptersAddresses(ULONG Family,ULONG Flags,PVOID Reserved,PIP_ADAPTER_ADDRESSES pAdapterAddresses,PULONG pOutBufLen) { +#if 0 InterfaceIndexTable *indexTable; IFInfo ifInfo; int i; @@ -2477,6 +2491,15 @@ DWORD WINAPI GetAdaptersAddresses(ULONG Family,ULONG Flags,PVOID Reserved,PIP_AD free(indexTable); return NO_ERROR; +#else + if (!pOutBufLen) return ERROR_INVALID_PARAMETER; + if (!pAdapterAddresses || *pOutBufLen == 0) + return ERROR_BUFFER_OVERFLOW; + if (Reserved) return ERROR_INVALID_PARAMETER; + + FIXME(":stub\n"); + return ERROR_NO_DATA; +#endif } /* diff --git a/dll/win32/iphlpapi/iphlpapi_private.h b/dll/win32/iphlpapi/iphlpapi_private.h index fa6c1c151cd..6ba198a301c 100644 --- a/dll/win32/iphlpapi/iphlpapi_private.h +++ b/dll/win32/iphlpapi/iphlpapi_private.h @@ -32,7 +32,7 @@ #include "wine/debug.h" //#include "ntddndis.h" -#include "ddk/tdiinfo.h" +#include "tdiinfo.h" #include "tcpioctl.h" #include "tdilib.h" @@ -139,6 +139,7 @@ LONG OpenChildKeyRead( HANDLE RegHandle, PWCHAR GetNthChildKeyName( HANDLE RegHandle, DWORD n ); void ConsumeChildKeyName( PWCHAR Name ); PWCHAR QueryRegistryValueString( HANDLE RegHandle, PWCHAR ValueName ); +PWCHAR *QueryRegistryValueStringMulti( HANDLE RegHandle, PWCHAR ValueName ); void ConsumeRegValueString( PWCHAR NameServer ); BOOL isInterface( TDIEntityID *if_maybe ); BOOL hasArp( HANDLE tcpFile, TDIEntityID *arp_maybe ); diff --git a/dll/win32/iphlpapi/registry.c b/dll/win32/iphlpapi/registry.c index 64b0f1f98bb..e83fde95281 100644 --- a/dll/win32/iphlpapi/registry.c +++ b/dll/win32/iphlpapi/registry.c @@ -66,25 +66,123 @@ void ConsumeChildKeyName( PWCHAR Name ) { if (Name) HeapFree( GetProcessHeap(), 0, Name ); } -PWCHAR QueryRegistryValueString( HANDLE RegHandle, PWCHAR ValueName ) { - PWCHAR Name; - DWORD ReturnedSize = 0; +PVOID QueryRegistryValue(HANDLE RegHandle, PWCHAR ValueName, LPDWORD RegistryType, LPDWORD Length) +{ + PVOID ReadValue = NULL; + DWORD Error; - if (RegQueryValueExW( RegHandle, ValueName, NULL, NULL, NULL, - &ReturnedSize ) != 0) { - return 0; - } else { - Name = malloc( ReturnedSize); - RegQueryValueExW( RegHandle, ValueName, NULL, NULL, (PVOID)Name, - &ReturnedSize ); - return Name; - } + *Length = 0; + *RegistryType = REG_NONE; + + while (TRUE) + { + Error = RegQueryValueExW(RegHandle, ValueName, NULL, RegistryType, ReadValue, Length); + if (Error == ERROR_SUCCESS) + { + if (ReadValue) break; + } + else if (Error == ERROR_MORE_DATA) + { + HeapFree(GetProcessHeap(), 0, ReadValue); + } + else break; + + ReadValue = HeapAlloc(GetProcessHeap(), 0, *Length); + if (!ReadValue) return NULL; + } + + if (Error != ERROR_SUCCESS) + { + if (ReadValue) HeapFree(GetProcessHeap(), 0, ReadValue); + + *Length = 0; + *RegistryType = REG_NONE; + ReadValue = NULL; + } + + return ReadValue; +} + +PWCHAR TerminateReadString(PWCHAR String, DWORD Length) +{ + PWCHAR TerminatedString; + + TerminatedString = HeapAlloc(GetProcessHeap(), 0, Length + sizeof(WCHAR)); + if (TerminatedString == NULL) + return NULL; + + memcpy(TerminatedString, String, Length); + + TerminatedString[Length / sizeof(WCHAR)] = UNICODE_NULL; + + return TerminatedString; +} + +PWCHAR QueryRegistryValueString( HANDLE RegHandle, PWCHAR ValueName ) +{ + PWCHAR String, TerminatedString; + DWORD Type, Length; + + String = QueryRegistryValue(RegHandle, ValueName, &Type, &Length); + if (!String) return NULL; + if (Type != REG_SZ) + { + DbgPrint("Type mismatch for %S (%d != %d)\n", ValueName, Type, REG_SZ); + //HeapFree(GetProcessHeap(), 0, String); + //return NULL; + } + + TerminatedString = TerminateReadString(String, Length); + HeapFree(GetProcessHeap(), 0, String); + if (!TerminatedString) return NULL; + + return TerminatedString; } void ConsumeRegValueString( PWCHAR Value ) { - if (Value) free(Value); + if (Value) HeapFree(GetProcessHeap(), 0, Value); } PWCHAR *QueryRegistryValueStringMulti( HANDLE RegHandle, PWCHAR ValueName ) { - return 0; /* FIXME if needed */ + PWCHAR String, TerminatedString, Tmp; + PWCHAR *Table; + DWORD Type, Length, i, j; + + String = QueryRegistryValue(RegHandle, ValueName, &Type, &Length); + if (!String) return NULL; + if (Type != REG_MULTI_SZ) + { + DbgPrint("Type mismatch for %S (%d != %d)\n", ValueName, Type, REG_MULTI_SZ); + //HeapFree(GetProcessHeap(), 0, String); + //return NULL; + } + + TerminatedString = TerminateReadString(String, Length); + HeapFree(GetProcessHeap(), 0, String); + if (!TerminatedString) return NULL; + + for (Tmp = TerminatedString, i = 0; *Tmp; Tmp++, i++) while (*Tmp) Tmp++; + + Table = HeapAlloc(GetProcessHeap(), 0, (i + 1) * sizeof(PWCHAR)); + if (!Table) + { + HeapFree(GetProcessHeap(), 0, TerminatedString); + return NULL; + } + + for (Tmp = TerminatedString, j = 0; *Tmp; Tmp++, j++) + { + PWCHAR Orig = Tmp; + + for (i = 0; *Tmp; i++, Tmp++); + + Table[j] = HeapAlloc(GetProcessHeap(), 0, i * sizeof(WCHAR)); + memcpy(Table[j], Orig, i * sizeof(WCHAR)); + } + + Table[j] = NULL; + + HeapFree(GetProcessHeap(), 0, TerminatedString); + + return Table; } diff --git a/dll/win32/jscript/array.c b/dll/win32/jscript/array.c index 1268d59638b..5c1bf120899 100644 --- a/dll/win32/jscript/array.c +++ b/dll/win32/jscript/array.c @@ -677,29 +677,31 @@ static HRESULT sort_cmp(script_ctx_t *ctx, DispatchEx *cmp_func, VARIANT *v1, VA *cmp = V_I4(&tmp); else *cmp = V_R8(&tmp) > 0.0 ? 1 : -1; - }else if(is_num_vt(V_VT(v1))) { - if(is_num_vt(V_VT(v2))) { - DOUBLE d = num_val(v1)-num_val(v2); - if(d > 0.0) - *cmp = 1; - else if(d < -0.0) - *cmp = -1; - else - *cmp = 0; - }else { - *cmp = -1; - } - }else if(is_num_vt(V_VT(v2))) { - *cmp = 1; - }else if(V_VT(v1) == VT_BSTR) { - if(V_VT(v2) == VT_BSTR) - *cmp = strcmpW(V_BSTR(v1), V_BSTR(v2)); + }else if(V_VT(v1) == VT_EMPTY) { + *cmp = V_VT(v2) == VT_EMPTY ? 0 : 1; + }else if(V_VT(v2) == VT_EMPTY) { + *cmp = -1; + }else if(is_num_vt(V_VT(v1)) && is_num_vt(V_VT(v2))) { + DOUBLE d = num_val(v1)-num_val(v2); + if(d > 0.0) + *cmp = 1; else - *cmp = -1; - }else if(V_VT(v2) == VT_BSTR) { - *cmp = 1; + *cmp = d < -0.0 ? -1 : 0; }else { - *cmp = 0; + BSTR x, y; + + hres = to_string(ctx, v1, ei, &x); + if(FAILED(hres)) + return hres; + + hres = to_string(ctx, v2, ei, &y); + if(SUCCEEDED(hres)) { + *cmp = strcmpW(x, y); + SysFreeString(y); + } + SysFreeString(x); + if(FAILED(hres)) + return hres; } return S_OK; diff --git a/dll/win32/jscript/jscript_Da.rc b/dll/win32/jscript/jscript_Da.rc index 07e2292ee1a..133c09527b4 100644 --- a/dll/win32/jscript/jscript_Da.rc +++ b/dll/win32/jscript/jscript_Da.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_DANISH, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TO_PRIMITIVE "Fejl ved konvertering af objekt til primitiv type" IDS_INVALID_CALL_ARG "Ugyldig procedure kald eller argument" diff --git a/dll/win32/jscript/jscript_De.rc b/dll/win32/jscript/jscript_De.rc index 7e4e9a13050..82628c9b7c3 100644 --- a/dll/win32/jscript/jscript_De.rc +++ b/dll/win32/jscript/jscript_De.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TO_PRIMITIVE "Fehler beim umwandeln des Objektes in einen Grundtyp" IDS_INVALID_CALL_ARG "Ungültiger Funktionsaufruf oder Argument" diff --git a/dll/win32/jscript/jscript_En.rc b/dll/win32/jscript/jscript_En.rc index bd3c09d2a5d..d98b0b691d0 100644 --- a/dll/win32/jscript/jscript_En.rc +++ b/dll/win32/jscript/jscript_En.rc @@ -20,7 +20,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TO_PRIMITIVE "Error converting object to primitive type" IDS_INVALID_CALL_ARG "Invalid procedure call or argument" diff --git a/dll/win32/jscript/jscript_Es.rc b/dll/win32/jscript/jscript_Es.rc index 48081090455..a953d61f170 100644 --- a/dll/win32/jscript/jscript_Es.rc +++ b/dll/win32/jscript/jscript_Es.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TO_PRIMITIVE "Error al convertir objeto a tipo primitivo" IDS_INVALID_CALL_ARG "Llamada a procedimiento no válido o argumento" diff --git a/dll/win32/jscript/jscript_Fr.rc b/dll/win32/jscript/jscript_Fr.rc index f70029db13f..a5247a80dd1 100644 --- a/dll/win32/jscript/jscript_Fr.rc +++ b/dll/win32/jscript/jscript_Fr.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TO_PRIMITIVE "Erreur lors de la conversion de l'objet vers un type primitif" IDS_INVALID_CALL_ARG "Appel de procédure ou argument invalide" diff --git a/dll/win32/jscript/jscript_Hu.rc b/dll/win32/jscript/jscript_Hu.rc index 133119e318b..b6ee1a3a77b 100644 --- a/dll/win32/jscript/jscript_Hu.rc +++ b/dll/win32/jscript/jscript_Hu.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TO_PRIMITIVE "Hiba az objektum primitív típusra való konvertálásánál" IDS_INVALID_CALL_ARG "Érvénytelen eljáráshívás vagy argmentum" diff --git a/dll/win32/jscript/jscript_It.rc b/dll/win32/jscript/jscript_It.rc index 1d843bebf18..3bfea6395cc 100644 --- a/dll/win32/jscript/jscript_It.rc +++ b/dll/win32/jscript/jscript_It.rc @@ -24,7 +24,7 @@ LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TO_PRIMITIVE "Errore nel convertire un oggetto ad un tipo primitivo" IDS_INVALID_CALL_ARG "Chiamata o argomento di procedura non valido" diff --git a/dll/win32/jscript/jscript_Ja.rc b/dll/win32/jscript/jscript_Ja.rc index 97517518c74..b95e4aab190 100644 --- a/dll/win32/jscript/jscript_Ja.rc +++ b/dll/win32/jscript/jscript_Ja.rc @@ -24,7 +24,7 @@ LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TO_PRIMITIVE "オブジェクトを基本型に変換できません" IDS_INVALID_CALL_ARG "手続き呼び出しまたは引数が無効です" diff --git a/dll/win32/jscript/jscript_Ko.rc b/dll/win32/jscript/jscript_Ko.rc index 164d6beb128..d45094e6bd8 100644 --- a/dll/win32/jscript/jscript_Ko.rc +++ b/dll/win32/jscript/jscript_Ko.rc @@ -24,7 +24,7 @@ LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TO_PRIMITIVE "객페를 기본 형식으로 변환하는 중에 에러 발생" IDS_INVALID_CALL_ARG "올바르지 않은 프로시져 호출이나 인수" diff --git a/dll/win32/jscript/jscript_Lt.rc b/dll/win32/jscript/jscript_Lt.rc index a7b451eb8c9..70e0d9670a8 100644 --- a/dll/win32/jscript/jscript_Lt.rc +++ b/dll/win32/jscript/jscript_Lt.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TO_PRIMITIVE "Klaida keičiant objektą į primityvų tipą" IDS_INVALID_CALL_ARG "Netinkamas kreipinys į procedūrą ar argumentas" diff --git a/dll/win32/jscript/jscript_Nl.rc b/dll/win32/jscript/jscript_Nl.rc index fec11a08000..e140b319a07 100644 --- a/dll/win32/jscript/jscript_Nl.rc +++ b/dll/win32/jscript/jscript_Nl.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL #pragma code_page(65001) -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TO_PRIMITIVE "Fout bij het omzetten van het object naar een primitief type" IDS_INVALID_CALL_ARG "Ongeldige procedure-aanroep of argument" diff --git a/dll/win32/jscript/jscript_No.rc b/dll/win32/jscript/jscript_No.rc index 8fa790ff6ca..9b9d9bbec82 100644 --- a/dll/win32/jscript/jscript_No.rc +++ b/dll/win32/jscript/jscript_No.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_NORWEGIAN, SUBLANG_NORWEGIAN_BOKMAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TO_PRIMITIVE "Klarte ikke konvertere objekt til primitiv type" IDS_INVALID_CALL_ARG "Ugyldig funksjonskall eller argument" diff --git a/dll/win32/jscript/jscript_Pl.rc b/dll/win32/jscript/jscript_Pl.rc index 8bbbe7332a4..ff924a3f924 100644 --- a/dll/win32/jscript/jscript_Pl.rc +++ b/dll/win32/jscript/jscript_Pl.rc @@ -20,7 +20,7 @@ LANGUAGE LANG_POLISH, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TO_PRIMITIVE "Bd przy przeksztacaniu obiektu do typu podstawowego" IDS_INVALID_CALL_ARG "Niewaciwe wywoanie procedury lub argument" diff --git a/dll/win32/jscript/jscript_Pt.rc b/dll/win32/jscript/jscript_Pt.rc index a907b1063be..1ead171548b 100644 --- a/dll/win32/jscript/jscript_Pt.rc +++ b/dll/win32/jscript/jscript_Pt.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TO_PRIMITIVE "Erro ao converter objeto em tipo primitivo" IDS_INVALID_CALL_ARG "Argumento ou chamada de procedimento inválida" @@ -51,7 +51,7 @@ STRINGTABLE DISCARDABLE LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TO_PRIMITIVE "Erro ao converter objecto em tipo primitivo" IDS_INVALID_CALL_ARG "Argumento ou chamada de procedimento inválida" diff --git a/dll/win32/jscript/jscript_Ro.rc b/dll/win32/jscript/jscript_Ro.rc index 481e62975d6..ec35c37b539 100644 --- a/dll/win32/jscript/jscript_Ro.rc +++ b/dll/win32/jscript/jscript_Ro.rc @@ -24,7 +24,7 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL #pragma code_page(65001) -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TO_PRIMITIVE "Eroare la convertirea obiectului la un tip primitiv" IDS_INVALID_CALL_ARG "Apel de procedură sau argument nevalid" diff --git a/dll/win32/jscript/jscript_Ru.rc b/dll/win32/jscript/jscript_Ru.rc index 9632d3f3693..ce58b44261c 100644 --- a/dll/win32/jscript/jscript_Ru.rc +++ b/dll/win32/jscript/jscript_Ru.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TO_PRIMITIVE "Ошибка конвертирования объекта в примитивный тип" IDS_INVALID_CALL_ARG "Неверный вызов процедуры или аргумент" diff --git a/dll/win32/jscript/jscript_Si.rc b/dll/win32/jscript/jscript_Si.rc index 0ddeab117e6..1f282dd26b4 100644 --- a/dll/win32/jscript/jscript_Si.rc +++ b/dll/win32/jscript/jscript_Si.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TO_PRIMITIVE "Napaka med spreminjanjem v primitivni tip" IDS_INVALID_CALL_ARG "Napačen klic postopka ali argument" diff --git a/dll/win32/jscript/jscript_Uk.rc b/dll/win32/jscript/jscript_Uk.rc new file mode 100644 index 00000000000..6f0913ac677 --- /dev/null +++ b/dll/win32/jscript/jscript_Uk.rc @@ -0,0 +1,51 @@ +/* + * Copyright 2009 Piotr Caban + * 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 "resource.h" + +/* UTF-8 */ +#pragma code_page(65001) + +LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT + +STRINGTABLE +{ + IDS_TO_PRIMITIVE "Помилка конвертування об'єкту в примітивний тип" + IDS_INVALID_CALL_ARG "Невірний виклик процедури або аргумент" + IDS_CREATE_OBJ_ERROR "Сервер автоматизації не може створити об'єкт" + IDS_NO_PROPERTY "Об'єкт не підтримує цю властивість чи метод" + IDS_ARG_NOT_OPT "Відсутній обов'язковий аргумент" + IDS_SYNTAX_ERROR "Синтаксична помилка" + IDS_SEMICOLON "Очікується ';'" + IDS_LBRACKET "Очікується '('" + IDS_RBRACKET "Очікується ')'" + IDS_UNTERMINATED_STR "Незавершена рядкова константа" + IDS_NOT_FUNC "Очікується функція" + IDS_NOT_DATE "'[object]' не об'єкт типу date" + IDS_NOT_NUM "Очікується число" + IDS_OBJECT_EXPECTED "Очікується об'єкт" + IDS_ILLEGAL_ASSIGN "Невірне присвоєння" + IDS_UNDEFINED "'|' не визначено" + IDS_NOT_BOOL "Очікується об'єкт Boolean" + IDS_JSCRIPT_EXPECTED "Очікується об'єкт JScript" + IDS_REGEXP_SYNTAX_ERROR "Синтаксична помилка в регулярному виразі" + IDS_URI_INVALID_CHAR "URI, що буде закодований, містить неприпустимі символи" + IDS_INVALID_LENGTH "Довжиною масиву повинне бути скінченне додатнє ціле число" + IDS_ARRAY_EXPECTED "Очікується об'єкт Array" +} diff --git a/dll/win32/jscript/rsrc.rc b/dll/win32/jscript/rsrc.rc index b13edcc4ddf..0e3b2e7002a 100644 --- a/dll/win32/jscript/rsrc.rc +++ b/dll/win32/jscript/rsrc.rc @@ -20,7 +20,7 @@ REGINST REGINST jscript.inf /* @makedep: jsglobal.tlb */ -1 TYPELIB LOADONCALL DISCARDABLE jsglobal.tlb +1 TYPELIB jsglobal.tlb #include "jscript_En.rc" #include "jscript_Pl.rc" @@ -41,3 +41,5 @@ REGINST REGINST jscript.inf #include "jscript_Ro.rc" #include "jscript_Ru.rc" #include "jscript_Si.rc" +#include "jscript_Uk.rc" + diff --git a/dll/win32/kernel32/file/bintype.c b/dll/win32/kernel32/file/bintype.c index 2722ba54134..bc8f2ed35d4 100644 --- a/dll/win32/kernel32/file/bintype.c +++ b/dll/win32/kernel32/file/bintype.c @@ -16,7 +16,9 @@ #define NDEBUG #include +#if DBG static ULONG gDebugChannel = kernel32file; +#endif /* FUNCTIONS ****************************************************************/ diff --git a/dll/win32/kernel32/file/copy.c b/dll/win32/kernel32/file/copy.c index 4055f876342..786c8f79b0c 100644 --- a/dll/win32/kernel32/file/copy.c +++ b/dll/win32/kernel32/file/copy.c @@ -15,7 +15,10 @@ #include #define NDEBUG #include + +#if DBG static ULONG gDebugChannel = kernel32file; +#endif /* FUNCTIONS ****************************************************************/ diff --git a/dll/win32/kernel32/file/create.c b/dll/win32/kernel32/file/create.c index 894970a4c2e..8b487c3de92 100644 --- a/dll/win32/kernel32/file/create.c +++ b/dll/win32/kernel32/file/create.c @@ -17,7 +17,10 @@ #include #define NDEBUG #include + +#if DBG static ULONG gDebugChannel = kernel32file; +#endif #define SYMLINK_FLAG_RELATIVE 1 diff --git a/dll/win32/kernel32/file/curdir.c b/dll/win32/kernel32/file/curdir.c index ee6d8553128..d58059d9539 100644 --- a/dll/win32/kernel32/file/curdir.c +++ b/dll/win32/kernel32/file/curdir.c @@ -19,7 +19,10 @@ #include #define NDEBUG #include + +#if DBG static ULONG gDebugChannel = kernel32file; +#endif /* GLOBAL VARIABLES **********************************************************/ diff --git a/dll/win32/kernel32/kernel32.pspec b/dll/win32/kernel32/kernel32.pspec index f0130a96267..dad314bc74d 100644 --- a/dll/win32/kernel32/kernel32.pspec +++ b/dll/win32/kernel32/kernel32.pspec @@ -578,16 +578,16 @@ @ stdcall GetNativeSystemInfo(ptr) ;@ stdcall -arch=x86_64 GetNextUmsListItem @ stdcall GetNextVDMCommand(long) -@ stdcall GetNlsSectionName(long long double str str double) ; missing in Win 7 -@ stdcall GetNumaAvailableMemory(ptr double ptr) ; missing in Win 7 -@ stdcall GetNumaAvailableMemoryNode(double ptr) +@ stdcall GetNlsSectionName(long long long str str long) ; missing in Win 7 +@ stdcall GetNumaAvailableMemory(ptr long ptr) ; missing in Win 7 +@ stdcall GetNumaAvailableMemoryNode(long ptr) ;@ stdcall GetNumaAvailableMemoryNodeEx ; Win 7 @ stdcall GetNumaHighestNodeNumber(ptr) ;@ stdcall GetNumaNodeNumberFromHandle ; Win 7 -@ stdcall GetNumaNodeProcessorMask(double ptr) +@ stdcall GetNumaNodeProcessorMask(long ptr) ;@ stdcall GetNumaNodeProcessorMaskEx ; Win 7 -@ stdcall GetNumaProcessorMap(ptr double ptr) ; missing in Win 7 -@ stdcall GetNumaProcessorNode(double ptr) +@ stdcall GetNumaProcessorMap(ptr long ptr) ; missing in Win 7 +@ stdcall GetNumaProcessorNode(long ptr) ;@ stdcall GetNumaProcessorNodeEx ; Win 7 ;@ stdcall GetNumaProximityNode ; Win 7 ;@ stdcall GetNumaProximityNodeEx ; Win 7 @@ -613,7 +613,7 @@ @ stdcall GetPrivateProfileStructW(wstr wstr ptr long wstr) @ stdcall GetProcAddress(long str) @ stdcall GetProcessAffinityMask(long ptr ptr) -@ stdcall GetProcessFlags(long) +//@ stdcall GetProcessFlags(long) ;@ stdcall GetProcessDEPPolicy ; Win 7 ;@ stdcall GetProcessGroupAffinity ; Win 7 @ stdcall GetProcessHandleCount(long ptr) @@ -630,7 +630,7 @@ @ stdcall GetProcessWorkingSetSize(long ptr ptr) ;@ stdcall GetProcessWorkingSetSizeEx ; Win 7 ;@ stdcall GetProcessorSystemCycleTime ; Win 7 -@ stdcall GetProductInfo(long long long long ptr) +;@ stdcall GetProductInfo(long long long long ptr) ; Win 7 @ stub GetProductName @ stdcall GetProfileIntA(str str long) @ stdcall GetProfileIntW(wstr wstr long) @@ -681,7 +681,7 @@ @ stdcall GetTempPathA(long ptr) @ stdcall GetTempPathW(long ptr) @ stdcall GetThreadContext(long ptr) -@ stdcall GetThreadErrorMode() +;@ stdcall GetThreadErrorMode() ; Win 7 ;@ stdcall GetThreadGroupAffinity ; Win 7 @ stdcall GetThreadIOPendingFlag(long ptr) @ stdcall GetThreadId(ptr) @@ -896,8 +896,7 @@ @ stdcall LockFile(long long long long long) @ stdcall LockFileEx(long long long long long ptr) @ stdcall LockResource(long) -@ stdcall MakeCriticalSectionGlobal(ptr) - +;@ stdcall MakeCriticalSectionGlobal(ptr) // ??? @ stdcall MapUserPhysicalPages(ptr long ptr) @ stdcall MapUserPhysicalPagesScatter(ptr long ptr) @ stdcall MapViewOfFile(long long long long long) @@ -920,7 +919,7 @@ @ stdcall NeedCurrentDirectoryForExePathA(str) @ stdcall NeedCurrentDirectoryForExePathW(wstr) ;@ stdcall NlsCheckPolicy ; Win 7 -@ stdcall NlsConvertIntegerToString(double double double wstr double) ; missing in Win 7 +@ stdcall NlsConvertIntegerToString(long long long wstr long) ; missing in Win 7 ;@ stdcall NlsEventDataDescCreate ; Win 7 @ stdcall NlsGetCacheUpdateCount() @ stub NlsResetProcessLocale ; missing in XP SP3 and Win 7 @@ -1074,7 +1073,7 @@ @ stdcall RegisterWaitForSingleObjectEx(long ptr ptr long long) @ stdcall RegisterWowBaseHandlers(long) @ stdcall RegisterWowExec(long) -@ stdcall ReinitializeCriticalSection(ptr) +;@ stdcall ReinitializeCriticalSection(ptr) ; ??? @ stdcall ReleaseActCtx(ptr) @ stdcall ReleaseMutex(long) ;@ stdcall ReleaseMutexWhenCallbackReturns ntdll.TpCallbackReleaseMutexOnCompletion ; Win 7 @@ -1218,7 +1217,7 @@ @ stdcall SetLocaleInfoA(long long str) @ stdcall SetLocaleInfoW(long long wstr) @ stdcall SetMailslotInfo(long long) -@ stdcall SetMessageWaitingIndicator(long double) +@ stdcall SetMessageWaitingIndicator(ptr long) ;@ stdcall SetNamedPipeAttribute ; Win 7 @ stdcall SetNamedPipeHandleState(long ptr ptr ptr) @ stdcall SetPriorityClass(long long) @@ -1242,7 +1241,7 @@ @ stdcall SetTermsrvAppInstallMode(long) @ stdcall SetThreadAffinityMask(long long) @ stdcall SetThreadContext(long ptr) -@ stdcall SetThreadErrorMode(long ptr) +;@ stdcall SetThreadErrorMode(long ptr) ; Win 7 @ stdcall SetThreadExecutionState(long) ;@ stdcall SetThreadGroupAffinity ; Win 7 @ stdcall SetThreadIdealProcessor(long long) @@ -1313,7 +1312,7 @@ @ stdcall UTUnRegister(long) ;@ stdcall -arch=x86_64 UmsThreadYield @ stdcall UnhandledExceptionFilter(ptr) -@ stdcall UninitializeCriticalSection(ptr) +;@ stdcall UninitializeCriticalSection(ptr) ; ??? @ stdcall UnlockFile(long long long long long) @ stdcall UnlockFileEx(long long long long ptr) @ stdcall UnmapViewOfFile(ptr) diff --git a/dll/win32/kernel32/misc/lcformat.c b/dll/win32/kernel32/misc/lcformat.c index 804a23bf212..fdfcf39bb40 100644 --- a/dll/win32/kernel32/misc/lcformat.c +++ b/dll/win32/kernel32/misc/lcformat.c @@ -1044,8 +1044,10 @@ INT WINAPI GetNumberFormatW(LCID lcid, DWORD dwFlags, TRACE("(0x%04x,0x%08x,%s,%p,%p,%d)\n", lcid, dwFlags, debugstr_w(lpszValue), lpFormat, lpNumberStr, cchOut); + lcid = ConvertDefaultLocale(lcid); + if (!lpszValue || cchOut < 0 || (cchOut > 0 && !lpNumberStr) || - !IsValidLocale(lcid, 0) || + !IsValidLocale(lcid, LCID_INSTALLED) || (lpFormat && (dwFlags || !lpFormat->lpDecimalSep || !lpFormat->lpThousandSep))) { goto error; @@ -1415,8 +1417,10 @@ INT WINAPI GetCurrencyFormatW(LCID lcid, DWORD dwFlags, TRACE("(0x%04x,0x%08x,%s,%p,%p,%d)\n", lcid, dwFlags, debugstr_w(lpszValue), lpFormat, lpCurrencyStr, cchOut); + lcid = ConvertDefaultLocale(lcid); + if (!lpszValue || cchOut < 0 || (cchOut > 0 && !lpCurrencyStr) || - !IsValidLocale(lcid, 0) || + !IsValidLocale(lcid, LCID_INSTALLED) || (lpFormat && (dwFlags || !lpFormat->lpDecimalSep || !lpFormat->lpThousandSep || !lpFormat->lpCurrencySymbol || lpFormat->NegativeOrder > 15 || lpFormat->PositiveOrder > 3))) diff --git a/dll/win32/kernel32/nls/cht.nls b/dll/win32/kernel32/nls/cht.nls index b99fe42c388..56ac5a1abea 100644 Binary files a/dll/win32/kernel32/nls/cht.nls and b/dll/win32/kernel32/nls/cht.nls differ diff --git a/dll/win32/kernel32/nls/zhm.nls b/dll/win32/kernel32/nls/zhm.nls index 8893ab2e3ad..8e666d04c06 100644 Binary files a/dll/win32/kernel32/nls/zhm.nls and b/dll/win32/kernel32/nls/zhm.nls differ diff --git a/dll/win32/ole32/version.rc b/dll/win32/localspl/spl_Cy.rc similarity index 76% rename from dll/win32/ole32/version.rc rename to dll/win32/localspl/spl_Cy.rc index fb85adeba05..cbbe9446b0a 100644 --- a/dll/win32/ole32/version.rc +++ b/dll/win32/localspl/spl_Cy.rc @@ -1,7 +1,8 @@ /* - * version information for ole32.dll + * Cefnogaeth iaith Cymraeg + * Welsh language support * - * Copyright (C) 2003 John K. Hohm + * Copyright 2010 Ken Sharp * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -18,7 +19,12 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#define WINE_OLESELFREGISTER -#define WINE_FILENAME_STR "ole32.dll" +#include "localspl_private.h" -#include +LANGUAGE LANG_WELSH, SUBLANG_DEFAULT + +STRINGTABLE +{ + IDS_LOCALPORT "Port Lleol" + IDS_LOCALMONITOR "Monitor Lleol" +} diff --git a/dll/win32/localspl/spl_Da.rc b/dll/win32/localspl/spl_Da.rc index cf1f3189904..b28fa089325 100644 --- a/dll/win32/localspl/spl_Da.rc +++ b/dll/win32/localspl/spl_Da.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_DANISH, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_LOCALPORT "Lokal port" IDS_LOCALMONITOR "Lokal overvger" diff --git a/dll/win32/localspl/spl_De.rc b/dll/win32/localspl/spl_De.rc index b30e13c903b..b0328f362d9 100644 --- a/dll/win32/localspl/spl_De.rc +++ b/dll/win32/localspl/spl_De.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_LOCALPORT "Lokaler Anschluss" IDS_LOCALMONITOR "Lokaler Monitor" diff --git a/dll/win32/localspl/spl_En.rc b/dll/win32/localspl/spl_En.rc index d189c26a132..13b8bf0d2cb 100644 --- a/dll/win32/localspl/spl_En.rc +++ b/dll/win32/localspl/spl_En.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_LOCALPORT "Local Port" IDS_LOCALMONITOR "Local Monitor" diff --git a/dll/win32/localspl/spl_Es.rc b/dll/win32/localspl/spl_Es.rc index 9b9a5580d64..18d93b6c2c7 100644 --- a/dll/win32/localspl/spl_Es.rc +++ b/dll/win32/localspl/spl_Es.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_LOCALPORT "Puerto local" IDS_LOCALMONITOR "Monitor local" diff --git a/dll/win32/localspl/spl_Fr.rc b/dll/win32/localspl/spl_Fr.rc index 0e93dc8b72b..efc5ed1d1fd 100644 --- a/dll/win32/localspl/spl_Fr.rc +++ b/dll/win32/localspl/spl_Fr.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_LOCALPORT "Port local" IDS_LOCALMONITOR "Moniteur local" diff --git a/dll/win32/localspl/spl_Hu.rc b/dll/win32/localspl/spl_Hu.rc index 912b3f6ddb8..5dcf04c0f6a 100644 --- a/dll/win32/localspl/spl_Hu.rc +++ b/dll/win32/localspl/spl_Hu.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_LOCALPORT "Helyi Port" IDS_LOCALMONITOR "Helyi figyelő" diff --git a/dll/win32/localspl/spl_It.rc b/dll/win32/localspl/spl_It.rc index 6d5b75eef6c..64221268a75 100644 --- a/dll/win32/localspl/spl_It.rc +++ b/dll/win32/localspl/spl_It.rc @@ -26,7 +26,7 @@ LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_LOCALPORT "Porta locale" IDS_LOCALMONITOR "Schermo locale" diff --git a/dll/win32/localspl/spl_Ja.rc b/dll/win32/localspl/spl_Ja.rc index d7fa86b11cc..660d03a1adb 100644 --- a/dll/win32/localspl/spl_Ja.rc +++ b/dll/win32/localspl/spl_Ja.rc @@ -26,7 +26,7 @@ LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_LOCALPORT "ローカル ポート" IDS_LOCALMONITOR "ローカル モニタ" diff --git a/dll/win32/localspl/spl_Ko.rc b/dll/win32/localspl/spl_Ko.rc index 86db86797f6..89c46c35026 100644 --- a/dll/win32/localspl/spl_Ko.rc +++ b/dll/win32/localspl/spl_Ko.rc @@ -24,7 +24,7 @@ LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_LOCALPORT " Ʈ" IDS_LOCALMONITOR " " diff --git a/dll/win32/localspl/spl_Lt.rc b/dll/win32/localspl/spl_Lt.rc index 4c72767105d..692e47bd192 100644 --- a/dll/win32/localspl/spl_Lt.rc +++ b/dll/win32/localspl/spl_Lt.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_LOCALPORT "Vietinis prievadas" IDS_LOCALMONITOR "Vietinis monitorius" diff --git a/dll/win32/localspl/spl_Nl.rc b/dll/win32/localspl/spl_Nl.rc index bd024469e80..ac1cdf02b55 100644 --- a/dll/win32/localspl/spl_Nl.rc +++ b/dll/win32/localspl/spl_Nl.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_LOCALPORT "Lokale Poort" IDS_LOCALMONITOR "Lokale Monitor" diff --git a/dll/win32/localspl/spl_No.rc b/dll/win32/localspl/spl_No.rc index b81a7b7d1ce..aefb4238c01 100644 --- a/dll/win32/localspl/spl_No.rc +++ b/dll/win32/localspl/spl_No.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_NORWEGIAN, SUBLANG_NORWEGIAN_BOKMAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_LOCALPORT "Lokal port" IDS_LOCALMONITOR "Lokal overvker" diff --git a/dll/win32/localspl/spl_Pl.rc b/dll/win32/localspl/spl_Pl.rc index cdbb4226771..243d2c0e84f 100644 --- a/dll/win32/localspl/spl_Pl.rc +++ b/dll/win32/localspl/spl_Pl.rc @@ -24,7 +24,7 @@ LANGUAGE LANG_POLISH, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_LOCALPORT "Port lokalny" IDS_LOCALMONITOR "Monitor lokalny" diff --git a/dll/win32/localspl/spl_Pt.rc b/dll/win32/localspl/spl_Pt.rc index 79506c34dc2..0bf08a31d45 100644 --- a/dll/win32/localspl/spl_Pt.rc +++ b/dll/win32/localspl/spl_Pt.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_PORTUGUESE, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_LOCALPORT "Porta local" IDS_LOCALMONITOR "Monitor Local" diff --git a/dll/win32/localspl/spl_Ro.rc b/dll/win32/localspl/spl_Ro.rc index 7f988001687..364f0284617 100644 --- a/dll/win32/localspl/spl_Ro.rc +++ b/dll/win32/localspl/spl_Ro.rc @@ -24,7 +24,7 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_LOCALPORT "Port local" IDS_LOCALMONITOR "Monitor local" diff --git a/dll/win32/localspl/spl_Ru.rc b/dll/win32/localspl/spl_Ru.rc index 085488d460d..bd97f113d9c 100644 --- a/dll/win32/localspl/spl_Ru.rc +++ b/dll/win32/localspl/spl_Ru.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_LOCALPORT "Локальный порт" IDS_LOCALMONITOR "Локальный монитор" diff --git a/dll/win32/localspl/spl_Si.rc b/dll/win32/localspl/spl_Si.rc index 11928abfa37..5c0d25d728b 100644 --- a/dll/win32/localspl/spl_Si.rc +++ b/dll/win32/localspl/spl_Si.rc @@ -24,7 +24,7 @@ LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_LOCALPORT "Lokalna vrata" IDS_LOCALMONITOR "Lokalen monitor" diff --git a/dll/win32/localspl/spl_Sv.rc b/dll/win32/localspl/spl_Sv.rc index 8839f347ab5..bb32b6c241e 100644 --- a/dll/win32/localspl/spl_Sv.rc +++ b/dll/win32/localspl/spl_Sv.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_SWEDISH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_LOCALPORT "Lokal port" IDS_LOCALMONITOR "Lokal skrm" diff --git a/dll/win32/localspl/spl_Uk.rc b/dll/win32/localspl/spl_Uk.rc index 50232bb2723..c1ea3cfd254 100644 --- a/dll/win32/localspl/spl_Uk.rc +++ b/dll/win32/localspl/spl_Uk.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_LOCALPORT "Локальний порт" IDS_LOCALMONITOR "Локальний монітор" diff --git a/dll/win32/localspl/spl_Zh.rc b/dll/win32/localspl/spl_Zh.rc index 108cb50ee96..faaa4541f27 100644 --- a/dll/win32/localspl/spl_Zh.rc +++ b/dll/win32/localspl/spl_Zh.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_LOCALPORT "本地端口" IDS_LOCALMONITOR "本地监视器" @@ -33,7 +33,7 @@ STRINGTABLE DISCARDABLE LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_LOCALPORT "本地端口" IDS_LOCALMONITOR "本地監視器" diff --git a/dll/win32/localui/ui_Da.rc b/dll/win32/localui/ui_Da.rc index 861ba8f2ddf..b30c9c7e43e 100644 --- a/dll/win32/localui/ui_Da.rc +++ b/dll/win32/localui/ui_Da.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_DANISH, SUBLANG_DEFAULT -ADDPORT_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 6, 18, 245, 47 +ADDPORT_DIALOG DIALOG 6, 18, 245, 47 STYLE DS_CONTEXTHELP | DS_MODALFRAME | DS_SETFONT | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Opret en lokal port" FONT 8, "MS Shell Dlg" @@ -34,7 +34,7 @@ BEGIN END -LPTCONFIG_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 6, 18, 220, 47 +LPTCONFIG_DIALOG DIALOG 6, 18, 220, 47 STYLE DS_CONTEXTHELP | DS_MODALFRAME | DS_SETFONT | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Opst LPT port" FONT 8, "MS Shell Dlg" @@ -47,7 +47,7 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_LOCALPORT "Lokal port" IDS_INVALIDNAME "'%s' er ikke et gyldigt port navn" diff --git a/dll/win32/localui/ui_De.rc b/dll/win32/localui/ui_De.rc index 74148c3441b..9a22d931635 100644 --- a/dll/win32/localui/ui_De.rc +++ b/dll/win32/localui/ui_De.rc @@ -24,7 +24,7 @@ LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL -ADDPORT_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 6, 18, 245, 47 +ADDPORT_DIALOG DIALOG 6, 18, 245, 47 STYLE DS_CONTEXTHELP | DS_MODALFRAME | DS_SETFONT | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Lokalen Anschluss hinzufügen" FONT 8, "MS Shell Dlg" @@ -36,7 +36,7 @@ BEGIN END -LPTCONFIG_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 6, 18, 220, 47 +LPTCONFIG_DIALOG DIALOG 6, 18, 220, 47 STYLE DS_CONTEXTHELP | DS_MODALFRAME | DS_SETFONT | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "LPT-Anschluss konfigurieren" FONT 8, "MS Shell Dlg" @@ -49,7 +49,7 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_LOCALPORT "Lokaler Anschluss" IDS_INVALIDNAME "'%s' ist kein gültiger Anschlussname" diff --git a/dll/win32/localui/ui_En.rc b/dll/win32/localui/ui_En.rc index 5a218680472..8a78fc80e70 100644 --- a/dll/win32/localui/ui_En.rc +++ b/dll/win32/localui/ui_En.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT -ADDPORT_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 6, 18, 245, 47 +ADDPORT_DIALOG DIALOG 6, 18, 245, 47 STYLE DS_CONTEXTHELP | DS_MODALFRAME | DS_SETFONT | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Add a Local Port" FONT 8, "MS Shell Dlg" @@ -34,7 +34,7 @@ BEGIN END -LPTCONFIG_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 6, 18, 220, 47 +LPTCONFIG_DIALOG DIALOG 6, 18, 220, 47 STYLE DS_CONTEXTHELP | DS_MODALFRAME | DS_SETFONT | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Configure LPT Port" FONT 8, "MS Shell Dlg" @@ -47,7 +47,7 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_LOCALPORT "Local Port" IDS_INVALIDNAME "'%s' is not a valid port name" diff --git a/dll/win32/localui/ui_Es.rc b/dll/win32/localui/ui_Es.rc index f3f1bcee6ac..2ca3f9cd124 100644 --- a/dll/win32/localui/ui_Es.rc +++ b/dll/win32/localui/ui_Es.rc @@ -24,7 +24,7 @@ LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL -ADDPORT_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 6, 18, 245, 47 +ADDPORT_DIALOG DIALOG 6, 18, 245, 47 STYLE DS_CONTEXTHELP | DS_MODALFRAME | DS_SETFONT | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Agregar un puerto local" FONT 8, "MS Shell Dlg" @@ -36,7 +36,7 @@ BEGIN END -LPTCONFIG_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 6, 18, 220, 47 +LPTCONFIG_DIALOG DIALOG 6, 18, 220, 47 STYLE DS_CONTEXTHELP | DS_MODALFRAME | DS_SETFONT | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Configurar puerto LPT" FONT 8, "MS Shell Dlg" @@ -49,7 +49,7 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_LOCALPORT "Puerto local" IDS_INVALIDNAME "'%s' no es un nombre de puerto válido" diff --git a/dll/win32/localui/ui_Fr.rc b/dll/win32/localui/ui_Fr.rc index 70e4baf06ee..575c688acd3 100644 --- a/dll/win32/localui/ui_Fr.rc +++ b/dll/win32/localui/ui_Fr.rc @@ -24,7 +24,7 @@ LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL -ADDPORT_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 6, 18, 245, 47 +ADDPORT_DIALOG DIALOG 6, 18, 245, 47 STYLE DS_CONTEXTHELP | DS_MODALFRAME | DS_SETFONT | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Ajouter un port local" FONT 8, "MS Shell Dlg" @@ -36,7 +36,7 @@ BEGIN END -LPTCONFIG_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 6, 18, 220, 47 +LPTCONFIG_DIALOG DIALOG 6, 18, 220, 47 STYLE DS_CONTEXTHELP | DS_MODALFRAME | DS_SETFONT | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Configurer un port LPT" FONT 8, "MS Shell Dlg" @@ -49,7 +49,7 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_LOCALPORT "Port local" IDS_INVALIDNAME "« %s » n'est pas un nom de port valide" diff --git a/dll/win32/localui/ui_Hu.rc b/dll/win32/localui/ui_Hu.rc index f471dfcfd7e..f012cac7672 100644 --- a/dll/win32/localui/ui_Hu.rc +++ b/dll/win32/localui/ui_Hu.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT -ADDPORT_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 6, 18, 245, 47 +ADDPORT_DIALOG DIALOG 6, 18, 245, 47 STYLE DS_CONTEXTHELP | DS_MODALFRAME | DS_SETFONT | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Helyi port hozzáadása" FONT 8, "MS Shell Dlg" @@ -37,7 +37,7 @@ BEGIN END -LPTCONFIG_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 6, 18, 220, 47 +LPTCONFIG_DIALOG DIALOG 6, 18, 220, 47 STYLE DS_CONTEXTHELP | DS_MODALFRAME | DS_SETFONT | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "LPT port beállítása" FONT 8, "MS Shell Dlg" @@ -50,7 +50,7 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_LOCALPORT "Helyi port" IDS_INVALIDNAME "A(z) '%s' nem egy érvényes portnév" diff --git a/dll/win32/localui/ui_It.rc b/dll/win32/localui/ui_It.rc index 822acbeef27..916b5f16d74 100644 --- a/dll/win32/localui/ui_It.rc +++ b/dll/win32/localui/ui_It.rc @@ -26,7 +26,7 @@ LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL -ADDPORT_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 6, 18, 245, 47 +ADDPORT_DIALOG DIALOG 6, 18, 245, 47 STYLE DS_CONTEXTHELP | DS_MODALFRAME | DS_SETFONT | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Aggiungi una porta locale" FONT 8, "MS Shell Dlg" @@ -38,7 +38,7 @@ BEGIN END -LPTCONFIG_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 6, 18, 220, 47 +LPTCONFIG_DIALOG DIALOG 6, 18, 220, 47 STYLE DS_CONTEXTHELP | DS_MODALFRAME | DS_SETFONT | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Configura la porta LPT" FONT 8, "MS Shell Dlg" @@ -51,7 +51,7 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_LOCALPORT "Porta locale" IDS_INVALIDNAME "'%s' non è un nome di porta valido" diff --git a/dll/win32/localui/ui_Ja.rc b/dll/win32/localui/ui_Ja.rc index 757eef8acd6..ef151c3d282 100644 --- a/dll/win32/localui/ui_Ja.rc +++ b/dll/win32/localui/ui_Ja.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT -ADDPORT_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 6, 18, 245, 47 +ADDPORT_DIALOG DIALOG 6, 18, 245, 47 STYLE DS_CONTEXTHELP | DS_MODALFRAME | DS_SETFONT | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "ローカル ポートの追加" FONT 8, "MS Shell Dlg" @@ -37,7 +37,7 @@ BEGIN END -LPTCONFIG_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 6, 18, 220, 47 +LPTCONFIG_DIALOG DIALOG 6, 18, 220, 47 STYLE DS_CONTEXTHELP | DS_MODALFRAME | DS_SETFONT | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "プリンタ ポートの設定" FONT 8, "MS Shell Dlg" @@ -50,7 +50,7 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_LOCALPORT "ローカル ポート" IDS_INVALIDNAME "'%s' はポート名として正しくありません" diff --git a/dll/win32/localui/ui_Ko.rc b/dll/win32/localui/ui_Ko.rc index d86b7ef58a5..718dca9f03c 100644 --- a/dll/win32/localui/ui_Ko.rc +++ b/dll/win32/localui/ui_Ko.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT -ADDPORT_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 6, 18, 245, 47 +ADDPORT_DIALOG DIALOG 6, 18, 245, 47 STYLE DS_CONTEXTHELP | DS_MODALFRAME | DS_SETFONT | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION " Ʈ ϱ" FONT 9, "MS Shell Dlg" @@ -35,7 +35,7 @@ BEGIN END -LPTCONFIG_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 6, 18, 220, 47 +LPTCONFIG_DIALOG DIALOG 6, 18, 220, 47 STYLE DS_CONTEXTHELP | DS_MODALFRAME | DS_SETFONT | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "LPT Ʈ " FONT 9, "MS Shell Dlg" @@ -48,7 +48,7 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_LOCALPORT " Ʈ" IDS_INVALIDNAME "'%s' ùٸ Ʈ ̸ ƴմϴ" diff --git a/dll/win32/localui/ui_Lt.rc b/dll/win32/localui/ui_Lt.rc index ff789e17fba..43854283587 100644 --- a/dll/win32/localui/ui_Lt.rc +++ b/dll/win32/localui/ui_Lt.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL -ADDPORT_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 6, 18, 245, 47 +ADDPORT_DIALOG DIALOG 6, 18, 245, 47 STYLE DS_CONTEXTHELP | DS_MODALFRAME | DS_SETFONT | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Pridėti vietinį prievadą" FONT 8, "MS Shell Dlg" @@ -37,7 +37,7 @@ BEGIN END -LPTCONFIG_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 6, 18, 220, 47 +LPTCONFIG_DIALOG DIALOG 6, 18, 220, 47 STYLE DS_CONTEXTHELP | DS_MODALFRAME | DS_SETFONT | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Konfigūruoti LPT prievadą" FONT 8, "MS Shell Dlg" @@ -50,7 +50,7 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_LOCALPORT "Vietinis prievadas" IDS_INVALIDNAME "„%s“ yra netinkamas prievado vardas" diff --git a/dll/win32/localui/ui_Nl.rc b/dll/win32/localui/ui_Nl.rc index 21d7cc84fae..7f10a815ba5 100644 --- a/dll/win32/localui/ui_Nl.rc +++ b/dll/win32/localui/ui_Nl.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL -ADDPORT_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 6, 18, 245, 47 +ADDPORT_DIALOG DIALOG 6, 18, 245, 47 STYLE DS_CONTEXTHELP | DS_MODALFRAME | DS_SETFONT | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Voeg een Lokale Poort toe" FONT 8, "MS Shell Dlg" @@ -34,7 +34,7 @@ BEGIN END -LPTCONFIG_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 6, 18, 220, 47 +LPTCONFIG_DIALOG DIALOG 6, 18, 220, 47 STYLE DS_CONTEXTHELP | DS_MODALFRAME | DS_SETFONT | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Configureer LPT Poort" FONT 8, "MS Shell Dlg" @@ -47,7 +47,7 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_LOCALPORT "Lokale Poort" IDS_INVALIDNAME "'%s' is geen valide poort naam" diff --git a/dll/win32/localui/ui_No.rc b/dll/win32/localui/ui_No.rc index 8ed9e00c8aa..997b08ad91a 100644 --- a/dll/win32/localui/ui_No.rc +++ b/dll/win32/localui/ui_No.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_NORWEGIAN, SUBLANG_NORWEGIAN_BOKMAL -ADDPORT_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 6, 18, 245, 47 +ADDPORT_DIALOG DIALOG 6, 18, 245, 47 STYLE DS_CONTEXTHELP | DS_MODALFRAME | DS_SETFONT | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Legg til en lokal port" FONT 8, "MS Shell Dlg" @@ -34,7 +34,7 @@ BEGIN END -LPTCONFIG_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 6, 18, 220, 47 +LPTCONFIG_DIALOG DIALOG 6, 18, 220, 47 STYLE DS_CONTEXTHELP | DS_MODALFRAME | DS_SETFONT | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Oppsett av LPT-port" FONT 8, "MS Shell Dlg" @@ -47,7 +47,7 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_LOCALPORT "Lokal port" IDS_INVALIDNAME "%s er ikke et gyldig portnavn" diff --git a/dll/win32/localui/ui_Pl.rc b/dll/win32/localui/ui_Pl.rc index 822763d7dae..90966d76df4 100644 --- a/dll/win32/localui/ui_Pl.rc +++ b/dll/win32/localui/ui_Pl.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_POLISH, SUBLANG_DEFAULT -ADDPORT_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 6, 18, 245, 47 +ADDPORT_DIALOG DIALOG 6, 18, 245, 47 STYLE DS_CONTEXTHELP | DS_MODALFRAME | DS_SETFONT | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Dodaj port lokalny" FONT 8, "MS Shell Dlg" @@ -35,7 +35,7 @@ BEGIN END -LPTCONFIG_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 6, 18, 220, 47 +LPTCONFIG_DIALOG DIALOG 6, 18, 220, 47 STYLE DS_CONTEXTHELP | DS_MODALFRAME | DS_SETFONT | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Konfiguracja portu LPT" FONT 8, "MS Shell Dlg" @@ -48,7 +48,7 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_LOCALPORT "Port lokalny" IDS_INVALIDNAME "'%s' nie jest poprawn nazw portu" diff --git a/dll/win32/localui/ui_Pt.rc b/dll/win32/localui/ui_Pt.rc index 7f1684820f7..b0997abebcb 100644 --- a/dll/win32/localui/ui_Pt.rc +++ b/dll/win32/localui/ui_Pt.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_PORTUGUESE, SUBLANG_NEUTRAL -ADDPORT_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 6, 18, 245, 47 +ADDPORT_DIALOG DIALOG 6, 18, 245, 47 STYLE DS_CONTEXTHELP | DS_MODALFRAME | DS_SETFONT | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Adicionar uma porta local" FONT 8, "MS Shell Dlg" @@ -34,7 +34,7 @@ BEGIN END -LPTCONFIG_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 6, 18, 220, 47 +LPTCONFIG_DIALOG DIALOG 6, 18, 220, 47 STYLE DS_CONTEXTHELP | DS_MODALFRAME | DS_SETFONT | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Configurar porta LPT" FONT 8, "MS Shell Dlg" @@ -47,7 +47,7 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_LOCALPORT "Porta Local" IDS_INVALIDNAME "'%s' no um nome de porta vlido" diff --git a/dll/win32/localui/ui_Ro.rc b/dll/win32/localui/ui_Ro.rc index a1b1c771fa1..e79ac56dfe5 100644 --- a/dll/win32/localui/ui_Ro.rc +++ b/dll/win32/localui/ui_Ro.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL #pragma code_page(65001) -ADDPORT_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 6, 18, 245, 47 +ADDPORT_DIALOG DIALOG 6, 18, 245, 47 STYLE DS_CONTEXTHELP | DS_MODALFRAME | DS_SETFONT | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Adaugă un port local" FONT 8, "MS Shell Dlg" @@ -35,7 +35,7 @@ BEGIN END -LPTCONFIG_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 6, 18, 220, 47 +LPTCONFIG_DIALOG DIALOG 6, 18, 220, 47 STYLE DS_CONTEXTHELP | DS_MODALFRAME | DS_SETFONT | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Configurare port LPT" FONT 8, "MS Shell Dlg" @@ -48,7 +48,7 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_LOCALPORT "Port local" IDS_INVALIDNAME "'%s' nu este un nume valid de port" diff --git a/dll/win32/localui/ui_Ru.rc b/dll/win32/localui/ui_Ru.rc index ea1b9d718ad..5c8243efc07 100644 --- a/dll/win32/localui/ui_Ru.rc +++ b/dll/win32/localui/ui_Ru.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT -ADDPORT_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 6, 18, 245, 47 +ADDPORT_DIALOG DIALOG 6, 18, 245, 47 STYLE DS_CONTEXTHELP | DS_MODALFRAME | DS_SETFONT | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Добавить локальный порт" FONT 8, "MS Shell Dlg" @@ -37,7 +37,7 @@ BEGIN END -LPTCONFIG_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 6, 18, 220, 47 +LPTCONFIG_DIALOG DIALOG 6, 18, 220, 47 STYLE DS_CONTEXTHELP | DS_MODALFRAME | DS_SETFONT | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Установки параллельного порта" FONT 8, "MS Shell Dlg" @@ -50,7 +50,7 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_LOCALPORT "Локальный порт" IDS_INVALIDNAME "Неправильное название порта '%s'" diff --git a/dll/win32/localui/ui_Si.rc b/dll/win32/localui/ui_Si.rc index 6810c7ce733..cb6b6740ad6 100644 --- a/dll/win32/localui/ui_Si.rc +++ b/dll/win32/localui/ui_Si.rc @@ -24,7 +24,7 @@ LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT -ADDPORT_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 6, 18, 245, 47 +ADDPORT_DIALOG DIALOG 6, 18, 245, 47 STYLE DS_CONTEXTHELP | DS_MODALFRAME | DS_SETFONT | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Dodaj lokalna vrata" FONT 8, "MS Shell Dlg" @@ -36,7 +36,7 @@ BEGIN END -LPTCONFIG_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 6, 18, 220, 47 +LPTCONFIG_DIALOG DIALOG 6, 18, 220, 47 STYLE DS_CONTEXTHELP | DS_MODALFRAME | DS_SETFONT | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Nastavitev LPT vrat" FONT 8, "MS Shell Dlg" @@ -49,7 +49,7 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_LOCALPORT "Lokalna vrata" IDS_INVALIDNAME "'%s' ni veljavno ime vrat" diff --git a/dll/win32/localui/ui_Sv.rc b/dll/win32/localui/ui_Sv.rc index e137079ffe4..a62d009a033 100644 --- a/dll/win32/localui/ui_Sv.rc +++ b/dll/win32/localui/ui_Sv.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_SWEDISH, SUBLANG_NEUTRAL -ADDPORT_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 6, 18, 245, 47 +ADDPORT_DIALOG DIALOG 6, 18, 245, 47 STYLE DS_CONTEXTHELP | DS_MODALFRAME | DS_SETFONT | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Lgg till en lokal port" FONT 8, "MS Shell Dlg" @@ -34,7 +34,7 @@ BEGIN END -LPTCONFIG_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 6, 18, 220, 47 +LPTCONFIG_DIALOG DIALOG 6, 18, 220, 47 STYLE DS_CONTEXTHELP | DS_MODALFRAME | DS_SETFONT | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Konfigurera LPT-port" FONT 8, "MS Shell Dlg" @@ -47,7 +47,7 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_LOCALPORT "Lokal port" IDS_INVALIDNAME "'%s' r inte ett giltigt portnamn" diff --git a/dll/win32/localui/ui_Uk.rc b/dll/win32/localui/ui_Uk.rc index 9deda651955..3386eaf0c8d 100644 --- a/dll/win32/localui/ui_Uk.rc +++ b/dll/win32/localui/ui_Uk.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT -ADDPORT_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 6, 18, 245, 47 +ADDPORT_DIALOG DIALOG 6, 18, 245, 47 STYLE DS_CONTEXTHELP | DS_MODALFRAME | DS_SETFONT | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Додати локальний порт" FONT 8, "MS Shell Dlg" @@ -37,7 +37,7 @@ BEGIN END -LPTCONFIG_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 6, 18, 220, 47 +LPTCONFIG_DIALOG DIALOG 6, 18, 220, 47 STYLE DS_CONTEXTHELP | DS_MODALFRAME | DS_SETFONT | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Налаштування LPT порта" FONT 8, "MS Shell Dlg" @@ -50,7 +50,7 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_LOCALPORT "Локальний порт" IDS_INVALIDNAME "'%s' не дійсна назва порту" diff --git a/dll/win32/localui/ui_Zh.rc b/dll/win32/localui/ui_Zh.rc index f43dde9afbd..7fb12b83da6 100644 --- a/dll/win32/localui/ui_Zh.rc +++ b/dll/win32/localui/ui_Zh.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED -ADDPORT_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 6, 18, 245, 47 +ADDPORT_DIALOG DIALOG 6, 18, 245, 47 STYLE DS_CONTEXTHELP | DS_MODALFRAME | DS_SETFONT | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "添加本地端口" FONT 9, "MS Shell Dlg" @@ -37,7 +37,7 @@ BEGIN END -LPTCONFIG_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 6, 18, 220, 47 +LPTCONFIG_DIALOG DIALOG 6, 18, 220, 47 STYLE DS_CONTEXTHELP | DS_MODALFRAME | DS_SETFONT | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "设置打印端口" FONT 9, "MS Shell Dlg" @@ -50,7 +50,7 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_LOCALPORT "本地端口" IDS_INVALIDNAME "'%s' 不是有效的端口名称" @@ -60,7 +60,7 @@ STRINGTABLE DISCARDABLE LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL -ADDPORT_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 6, 18, 245, 47 +ADDPORT_DIALOG DIALOG 6, 18, 245, 47 STYLE DS_CONTEXTHELP | DS_MODALFRAME | DS_SETFONT | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "添加本地端口" FONT 9, "MS Shell Dlg" @@ -72,7 +72,7 @@ BEGIN END -LPTCONFIG_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 6, 18, 220, 47 +LPTCONFIG_DIALOG DIALOG 6, 18, 220, 47 STYLE DS_CONTEXTHELP | DS_MODALFRAME | DS_SETFONT | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "設定列印端口" FONT 9, "MS Shell Dlg" @@ -85,7 +85,7 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_LOCALPORT "本地端口" IDS_INVALIDNAME "'%s' 不是有效的端口名稱" diff --git a/dll/win32/lsasrv/authport.c b/dll/win32/lsasrv/authport.c index dd5a69dbbb7..769fd1922dc 100644 --- a/dll/win32/lsasrv/authport.c +++ b/dll/win32/lsasrv/authport.c @@ -8,16 +8,9 @@ /* INCLUDES ****************************************************************/ -#define WIN32_NO_STATUS -#include -#define NTOS_MODE_USER -#include -#include "lsass.h" #include "lsasrv.h" -#include "wine/debug.h" - WINE_DEFAULT_DEBUG_CHANNEL(lsasrv); diff --git a/dll/win32/lsasrv/lsarpc.c b/dll/win32/lsasrv/lsarpc.c index 1a83d007f00..6100e0748e3 100644 --- a/dll/win32/lsasrv/lsarpc.c +++ b/dll/win32/lsasrv/lsarpc.c @@ -1,17 +1,15 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: Local Security Authority (LSA) Server + * FILE: reactos/dll/win32/lsasrv/lsarpc.h + * PURPOSE: RPC interface functions + * + * PROGRAMMERS: Eric Kohl + */ + /* INCLUDES ****************************************************************/ -#define WIN32_NO_STATUS -#include -#include -#define NTOS_MODE_USER -#include - -#include - #include "lsasrv.h" -#include "lsa_s.h" - -#include typedef enum _LSA_DB_HANDLE_TYPE { @@ -432,7 +430,6 @@ NTSTATUS LsarLookupSids( { SID_IDENTIFIER_AUTHORITY IdentifierAuthority = {SECURITY_NT_AUTHORITY}; static const UNICODE_STRING DomainName = RTL_CONSTANT_STRING(L"DOMAIN"); - static const UNICODE_STRING UserName = RTL_CONSTANT_STRING(L"Administrator"); PLSAPR_REFERENCED_DOMAIN_LIST OutputDomains = NULL; PLSAPR_TRANSLATED_NAME OutputNames = NULL; ULONG OutputNamesLength; @@ -501,16 +498,8 @@ NTSTATUS LsarLookupSids( RtlCopyMemory(OutputDomains->Domains[i].Name.Buffer, DomainName.Buffer, DomainName.MaximumLength); } - - for (i = 0; i < SidEnumBuffer->Entries; i++) - { - OutputNames[i].Use = SidTypeWellKnownGroup; - OutputNames[i].DomainIndex = i; - OutputNames[i].Name.Buffer = MIDL_user_allocate(UserName.MaximumLength); - OutputNames[i].Name.Length = UserName.Length; - OutputNames[i].Name.MaximumLength = UserName.MaximumLength; - RtlCopyMemory(OutputNames[i].Name.Buffer, UserName.Buffer, UserName.MaximumLength); - } + Status = LsapLookupSids(SidEnumBuffer, + OutputNames); *ReferencedDomains = OutputDomains; @@ -519,7 +508,7 @@ NTSTATUS LsarLookupSids( TranslatedNames->Entries = SidEnumBuffer->Entries; TranslatedNames->Names = OutputNames; - return STATUS_SUCCESS; + return Status; } diff --git a/dll/win32/lsasrv/lsasrv.c b/dll/win32/lsasrv/lsasrv.c index 2b791088d46..c6468a47e03 100644 --- a/dll/win32/lsasrv/lsasrv.c +++ b/dll/win32/lsasrv/lsasrv.c @@ -8,15 +8,8 @@ /* INCLUDES ****************************************************************/ -#define WIN32_NO_STATUS -#include -#define NTOS_MODE_USER -#include - #include "lsasrv.h" -#include "wine/debug.h" - WINE_DEFAULT_DEBUG_CHANNEL(lsasrv); @@ -30,6 +23,9 @@ LsapInitLsa(VOID) TRACE("LsapInitLsa() called\n"); + /* Initialize the well known SIDs */ + LsapInitSids(); + /* Start the RPC server */ LsarStartRpcServer(); @@ -49,9 +45,10 @@ LsapInitLsa(VOID) hEvent = OpenEventW(GENERIC_WRITE, FALSE, L"LSA_RPC_SERVER_ACTIVE"); - if (hEvent != NULL) + if (hEvent == NULL) { - ERR("Could not open the notification event!"); + ERR("Could not open the notification event (Error %lu)\n", GetLastError()); + return STATUS_UNSUCCESSFUL; } } } diff --git a/dll/win32/lsasrv/lsasrv.h b/dll/win32/lsasrv/lsasrv.h index 00b1a77f1ed..45fc4f96409 100644 --- a/dll/win32/lsasrv/lsasrv.h +++ b/dll/win32/lsasrv/lsasrv.h @@ -7,6 +7,20 @@ * PROGRAMMERS: Eric Kohl */ +#define WIN32_NO_STATUS +#include +#include +#define NTOS_MODE_USER +#include + +#include + +#include "lsass.h" +#include "lsa_s.h" + +#include + + /* authport.c */ NTSTATUS StartAuthenticationPort(VOID); @@ -20,4 +34,13 @@ LsarpLookupPrivilegeName(PLUID Value, NTSTATUS LsarpLookupPrivilegeValue(PUNICODE_STRING Name, - PLUID Value); \ No newline at end of file + PLUID Value); + +/* sids.h */ +NTSTATUS +LsapInitSids(VOID); + +NTSTATUS +LsapLookupSids(PLSAPR_SID_ENUM_BUFFER SidEnumBuffer, + PLSAPR_TRANSLATED_NAME OutputNames); + diff --git a/dll/win32/lsasrv/privileges.c b/dll/win32/lsasrv/privileges.c index 4401ed1f14e..2c988501cfe 100644 --- a/dll/win32/lsasrv/privileges.c +++ b/dll/win32/lsasrv/privileges.c @@ -1,14 +1,13 @@ -#define WIN32_NO_STATUS -#include -#include -#define NTOS_MODE_USER -#include +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: Local Security Authority (LSA) Server + * FILE: reactos/dll/win32/lsasrv/privileges.c + * PURPOSE: Privilege lookup functions + * + * PROGRAMMERS: Eric Kohl + */ -#include -#include - - -#include +#include "lsasrv.h" typedef struct @@ -20,35 +19,35 @@ typedef struct static const PRIVILEGE_DATA WellKnownPrivileges[] = { - {{SE_CREATE_TOKEN_PRIVILEGE, 0}, L"SeCreateTokenPrivilege"}, - {{SE_ASSIGNPRIMARYTOKEN_PRIVILEGE, 0}, L"SeAssignPrimaryTokenPrivilege"}, - {{SE_LOCK_MEMORY_PRIVILEGE, 0}, L"SeLockMemoryPrivilege"}, - {{SE_INCREASE_QUOTA_PRIVILEGE, 0}, L"SeIncreaseQuotaPrivilege"}, - {{SE_MACHINE_ACCOUNT_PRIVILEGE, 0}, L"SeMachineAccountPrivilege"}, - {{SE_TCB_PRIVILEGE, 0}, L"SeTcbPrivilege"}, - {{SE_SECURITY_PRIVILEGE, 0}, L"SeSecurityPrivilege"}, - {{SE_TAKE_OWNERSHIP_PRIVILEGE, 0}, L"SeTakeOwnershipPrivilege"}, - {{SE_LOAD_DRIVER_PRIVILEGE, 0}, L"SeLoadDriverPrivilege"}, - {{SE_SYSTEM_PROFILE_PRIVILEGE, 0}, L"SeSystemProfilePrivilege"}, - {{SE_SYSTEMTIME_PRIVILEGE, 0}, L"SeSystemtimePrivilege"}, - {{SE_PROF_SINGLE_PROCESS_PRIVILEGE, 0}, L"SeProfileSingleProcessPrivilege"}, - {{SE_INC_BASE_PRIORITY_PRIVILEGE, 0}, L"SeIncreaseBasePriorityPrivilege"}, - {{SE_CREATE_PAGEFILE_PRIVILEGE, 0}, L"SeCreatePagefilePrivilege"}, - {{SE_CREATE_PERMANENT_PRIVILEGE, 0}, L"SeCreatePermanentPrivilege"}, - {{SE_BACKUP_PRIVILEGE, 0}, L"SeBackupPrivilege"}, - {{SE_RESTORE_PRIVILEGE, 0}, L"SeRestorePrivilege"}, - {{SE_SHUTDOWN_PRIVILEGE, 0}, L"SeShutdownPrivilege"}, - {{SE_DEBUG_PRIVILEGE, 0}, L"SeDebugPrivilege"}, - {{SE_AUDIT_PRIVILEGE, 0}, L"SeAuditPrivilege"}, - {{SE_SYSTEM_ENVIRONMENT_PRIVILEGE, 0}, L"SeSystemEnvironmentPrivilege"}, - {{SE_CHANGE_NOTIFY_PRIVILEGE, 0}, L"SeChangeNotifyPrivilege"}, - {{SE_REMOTE_SHUTDOWN_PRIVILEGE, 0}, L"SeRemoteShutdownPrivilege"}, - {{SE_UNDOCK_PRIVILEGE, 0}, L"SeUndockPrivilege"}, - {{SE_SYNC_AGENT_PRIVILEGE, 0}, L"SeSyncAgentPrivilege"}, - {{SE_ENABLE_DELEGATION_PRIVILEGE, 0}, L"SeEnableDelegationPrivilege"}, - {{SE_MANAGE_VOLUME_PRIVILEGE, 0}, L"SeManageVolumePrivilege"}, - {{SE_IMPERSONATE_PRIVILEGE, 0}, L"SeImpersonatePrivilege"}, - {{SE_CREATE_GLOBAL_PRIVILEGE, 0}, L"SeCreateGlobalPrivilege"} + {{SE_CREATE_TOKEN_PRIVILEGE, 0}, SE_CREATE_TOKEN_NAME}, + {{SE_ASSIGNPRIMARYTOKEN_PRIVILEGE, 0}, SE_ASSIGNPRIMARYTOKEN_NAME}, + {{SE_LOCK_MEMORY_PRIVILEGE, 0}, SE_LOCK_MEMORY_NAME}, + {{SE_INCREASE_QUOTA_PRIVILEGE, 0}, SE_INCREASE_QUOTA_NAME}, + {{SE_MACHINE_ACCOUNT_PRIVILEGE, 0}, SE_MACHINE_ACCOUNT_NAME}, + {{SE_TCB_PRIVILEGE, 0}, SE_TCB_NAME}, + {{SE_SECURITY_PRIVILEGE, 0}, SE_SECURITY_NAME}, + {{SE_TAKE_OWNERSHIP_PRIVILEGE, 0}, SE_TAKE_OWNERSHIP_NAME}, + {{SE_LOAD_DRIVER_PRIVILEGE, 0}, SE_LOAD_DRIVER_NAME}, + {{SE_SYSTEM_PROFILE_PRIVILEGE, 0}, SE_SYSTEM_PROFILE_NAME}, + {{SE_SYSTEMTIME_PRIVILEGE, 0}, SE_SYSTEMTIME_NAME}, + {{SE_PROF_SINGLE_PROCESS_PRIVILEGE, 0}, SE_PROF_SINGLE_PROCESS_NAME}, + {{SE_INC_BASE_PRIORITY_PRIVILEGE, 0}, SE_INC_BASE_PRIORITY_NAME}, + {{SE_CREATE_PAGEFILE_PRIVILEGE, 0}, SE_CREATE_PAGEFILE_NAME}, + {{SE_CREATE_PERMANENT_PRIVILEGE, 0}, SE_CREATE_PERMANENT_NAME}, + {{SE_BACKUP_PRIVILEGE, 0}, SE_BACKUP_NAME}, + {{SE_RESTORE_PRIVILEGE, 0}, SE_RESTORE_NAME}, + {{SE_SHUTDOWN_PRIVILEGE, 0}, SE_SHUTDOWN_NAME}, + {{SE_DEBUG_PRIVILEGE, 0}, SE_DEBUG_NAME}, + {{SE_AUDIT_PRIVILEGE, 0}, SE_AUDIT_NAME}, + {{SE_SYSTEM_ENVIRONMENT_PRIVILEGE, 0}, SE_SYSTEM_ENVIRONMENT_NAME}, + {{SE_CHANGE_NOTIFY_PRIVILEGE, 0}, SE_CHANGE_NOTIFY_NAME}, + {{SE_REMOTE_SHUTDOWN_PRIVILEGE, 0}, SE_REMOTE_SHUTDOWN_NAME}, + {{SE_UNDOCK_PRIVILEGE, 0}, SE_UNDOCK_NAME}, + {{SE_SYNC_AGENT_PRIVILEGE, 0}, SE_SYNC_AGENT_NAME}, + {{SE_ENABLE_DELEGATION_PRIVILEGE, 0}, SE_ENABLE_DELEGATION_NAME}, + {{SE_MANAGE_VOLUME_PRIVILEGE, 0}, SE_MANAGE_VOLUME_NAME}, + {{SE_IMPERSONATE_PRIVILEGE, 0}, SE_IMPERSONATE_NAME}, + {{SE_CREATE_GLOBAL_PRIVILEGE, 0}, SE_CREATE_GLOBAL_NAME} }; diff --git a/dll/win32/lsasrv/sids.c b/dll/win32/lsasrv/sids.c new file mode 100644 index 00000000000..a1a0e0bc57b --- /dev/null +++ b/dll/win32/lsasrv/sids.c @@ -0,0 +1,662 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: Local Security Authority (LSA) Server + * FILE: reactos/dll/win32/lsasrv/sids.c + * PURPOSE: Sid / Name lookup functions + * + * PROGRAMMERS: Eric Kohl + */ +#include "lsasrv.h" + +WINE_DEFAULT_DEBUG_CHANNEL(lsasrv); + + +typedef struct _WELL_KNOWN_SID +{ + LIST_ENTRY ListEntry; + PSID Sid; + UNICODE_STRING Name; + UNICODE_STRING Domain; + SID_NAME_USE NameUse; +} WELL_KNOWN_SID, *PWELL_KNOWN_SID; + + +static SID_IDENTIFIER_AUTHORITY NullSidAuthority = {SECURITY_NULL_SID_AUTHORITY}; +static SID_IDENTIFIER_AUTHORITY WorldSidAuthority = {SECURITY_WORLD_SID_AUTHORITY}; +static SID_IDENTIFIER_AUTHORITY LocalSidAuthority = {SECURITY_LOCAL_SID_AUTHORITY}; +static SID_IDENTIFIER_AUTHORITY CreatorSidAuthority = {SECURITY_CREATOR_SID_AUTHORITY}; +static SID_IDENTIFIER_AUTHORITY NtAuthority = {SECURITY_NT_AUTHORITY}; + +LIST_ENTRY WellKnownSidListHead; + + + +#if 0 +typedef struct _AccountSid +{ + WELL_KNOWN_SID_TYPE type; + LPCWSTR account; + LPCWSTR domain; + SID_NAME_USE name_use; +} AccountSid; + +static const WCHAR Account_Operators[] = { 'A','c','c','o','u','n','t',' ','O','p','e','r','a','t','o','r','s',0 }; +static const WCHAR Administrator[] = {'A','d','m','i','n','i','s','t','r','a','t','o','r',0 }; +static const WCHAR Administrators[] = { 'A','d','m','i','n','i','s','t','r','a','t','o','r','s',0 }; +static const WCHAR ANONYMOUS_LOGON[] = { 'A','N','O','N','Y','M','O','U','S',' ','L','O','G','O','N',0 }; +static const WCHAR Authenticated_Users[] = { 'A','u','t','h','e','n','t','i','c','a','t','e','d',' ','U','s','e','r','s',0 }; +static const WCHAR Backup_Operators[] = { 'B','a','c','k','u','p',' ','O','p','e','r','a','t','o','r','s',0 }; +static const WCHAR BATCH[] = { 'B','A','T','C','H',0 }; +static const WCHAR Blank[] = { 0 }; +static const WCHAR BUILTIN[] = { 'B','U','I','L','T','I','N',0 }; +static const WCHAR Cert_Publishers[] = { 'C','e','r','t',' ','P','u','b','l','i','s','h','e','r','s',0 }; +static const WCHAR CREATOR_GROUP[] = { 'C','R','E','A','T','O','R',' ','G','R','O','U','P',0 }; +static const WCHAR CREATOR_GROUP_SERVER[] = { 'C','R','E','A','T','O','R',' ','G','R','O','U','P',' ','S','E','R','V','E','R',0 }; +static const WCHAR CREATOR_OWNER[] = { 'C','R','E','A','T','O','R',' ','O','W','N','E','R',0 }; +static const WCHAR CREATOR_OWNER_SERVER[] = { 'C','R','E','A','T','O','R',' ','O','W','N','E','R',' ','S','E','R','V','E','R',0 }; +static const WCHAR DIALUP[] = { 'D','I','A','L','U','P',0 }; +static const WCHAR Digest_Authentication[] = { 'D','i','g','e','s','t',' ','A','u','t','h','e','n','t','i','c','a','t','i','o','n',0 }; +static const WCHAR DOMAIN[] = {'D','O','M','A','I','N',0}; +static const WCHAR Domain_Admins[] = { 'D','o','m','a','i','n',' ','A','d','m','i','n','s',0 }; +static const WCHAR Domain_Computers[] = { 'D','o','m','a','i','n',' ','C','o','m','p','u','t','e','r','s',0 }; +static const WCHAR Domain_Controllers[] = { 'D','o','m','a','i','n',' ','C','o','n','t','r','o','l','l','e','r','s',0 }; +static const WCHAR Domain_Guests[] = { 'D','o','m','a','i','n',' ','G','u','e','s','t','s',0 }; +static const WCHAR Domain_Users[] = { 'D','o','m','a','i','n',' ','U','s','e','r','s',0 }; +static const WCHAR Enterprise_Admins[] = { 'E','n','t','e','r','p','r','i','s','e',' ','A','d','m','i','n','s',0 }; +static const WCHAR ENTERPRISE_DOMAIN_CONTROLLERS[] = { 'E','N','T','E','R','P','R','I','S','E',' ','D','O','M','A','I','N',' ','C','O','N','T','R','O','L','L','E','R','S',0 }; +static const WCHAR Everyone[] = { 'E','v','e','r','y','o','n','e',0 }; +static const WCHAR Group_Policy_Creator_Owners[] = { 'G','r','o','u','p',' ','P','o','l','i','c','y',' ','C','r','e','a','t','o','r',' ','O','w','n','e','r','s',0 }; +static const WCHAR Guest[] = { 'G','u','e','s','t',0 }; +static const WCHAR Guests[] = { 'G','u','e','s','t','s',0 }; +static const WCHAR INTERACTIVE[] = { 'I','N','T','E','R','A','C','T','I','V','E',0 }; +static const WCHAR LOCAL[] = { 'L','O','C','A','L',0 }; +static const WCHAR LOCAL_SERVICE[] = { 'L','O','C','A','L',' ','S','E','R','V','I','C','E',0 }; +static const WCHAR NETWORK[] = { 'N','E','T','W','O','R','K',0 }; +static const WCHAR Network_Configuration_Operators[] = { 'N','e','t','w','o','r','k',' ','C','o','n','f','i','g','u','r','a','t','i','o','n',' ','O','p','e','r','a','t','o','r','s',0 }; +static const WCHAR NETWORK_SERVICE[] = { 'N','E','T','W','O','R','K',' ','S','E','R','V','I','C','E',0 }; +static const WCHAR NT_AUTHORITY[] = { 'N','T',' ','A','U','T','H','O','R','I','T','Y',0 }; +static const WCHAR NT_Pseudo_Domain[] = { 'N','T',' ','P','s','e','u','d','o',' ','D','o','m','a','i','n',0 }; +static const WCHAR NTML_Authentication[] = { 'N','T','M','L',' ','A','u','t','h','e','n','t','i','c','a','t','i','o','n',0 }; +static const WCHAR NULL_SID[] = { 'N','U','L','L',' ','S','I','D',0 }; +static const WCHAR Other_Organization[] = { 'O','t','h','e','r',' ','O','r','g','a','n','i','z','a','t','i','o','n',0 }; +static const WCHAR Performance_Log_Users[] = { 'P','e','r','f','o','r','m','a','n','c','e',' ','L','o','g',' ','U','s','e','r','s',0 }; +static const WCHAR Performance_Monitor_Users[] = { 'P','e','r','f','o','r','m','a','n','c','e',' ','M','o','n','i','t','o','r',' ','U','s','e','r','s',0 }; +static const WCHAR Power_Users[] = { 'P','o','w','e','r',' ','U','s','e','r','s',0 }; +static const WCHAR Pre_Windows_2000_Compatible_Access[] = { 'P','r','e','-','W','i','n','d','o','w','s',' ','2','0','0','0',' ','C','o','m','p','a','t','i','b','l','e',' ','A','c','c','e','s','s',0 }; +static const WCHAR Print_Operators[] = { 'P','r','i','n','t',' ','O','p','e','r','a','t','o','r','s',0 }; +static const WCHAR PROXY[] = { 'P','R','O','X','Y',0 }; +static const WCHAR RAS_and_IAS_Servers[] = { 'R','A','S',' ','a','n','d',' ','I','A','S',' ','S','e','r','v','e','r','s',0 }; +static const WCHAR Remote_Desktop_Users[] = { 'R','e','m','o','t','e',' ','D','e','s','k','t','o','p',' ','U','s','e','r','s',0 }; +static const WCHAR REMOTE_INTERACTIVE_LOGON[] = { 'R','E','M','O','T','E',' ','I','N','T','E','R','A','C','T','I','V','E',' ','L','O','G','O','N',0 }; +static const WCHAR Replicators[] = { 'R','e','p','l','i','c','a','t','o','r','s',0 }; +static const WCHAR RESTRICTED[] = { 'R','E','S','T','R','I','C','T','E','D',0 }; +static const WCHAR SChannel_Authentication[] = { 'S','C','h','a','n','n','e','l',' ','A','u','t','h','e','n','t','i','c','a','t','i','o','n',0 }; +static const WCHAR Schema_Admins[] = { 'S','c','h','e','m','a',' ','A','d','m','i','n','s',0 }; +static const WCHAR SELF[] = { 'S','E','L','F',0 }; +static const WCHAR Server_Operators[] = { 'S','e','r','v','e','r',' ','O','p','e','r','a','t','o','r','s',0 }; +static const WCHAR SERVICE[] = { 'S','E','R','V','I','C','E',0 }; +static const WCHAR SYSTEM[] = { 'S','Y','S','T','E','M',0 }; +static const WCHAR TERMINAL_SERVER_USER[] = { 'T','E','R','M','I','N','A','L',' ','S','E','R','V','E','R',' ','U','S','E','R',0 }; +static const WCHAR This_Organization[] = { 'T','h','i','s',' ','O','r','g','a','n','i','z','a','t','i','o','n',0 }; +static const WCHAR Users[] = { 'U','s','e','r','s',0 }; + +static const AccountSid ACCOUNT_SIDS[] = { +// { WinNullSid, NULL_SID, Blank, SidTypeWellKnownGroup }, +// { WinWorldSid, Everyone, Blank, SidTypeWellKnownGroup }, +// { WinLocalSid, LOCAL, Blank, SidTypeWellKnownGroup }, +// { WinCreatorOwnerSid, CREATOR_OWNER, Blank, SidTypeWellKnownGroup }, +// { WinCreatorGroupSid, CREATOR_GROUP, Blank, SidTypeWellKnownGroup }, +// { WinCreatorOwnerServerSid, CREATOR_OWNER_SERVER, Blank, SidTypeWellKnownGroup }, +// { WinCreatorGroupServerSid, CREATOR_GROUP_SERVER, Blank, SidTypeWellKnownGroup }, +// { WinNtAuthoritySid, NT_Pseudo_Domain, NT_Pseudo_Domain, SidTypeDomain }, +// { WinDialupSid, DIALUP, NT_AUTHORITY, SidTypeWellKnownGroup }, +// { WinNetworkSid, NETWORK, NT_AUTHORITY, SidTypeWellKnownGroup }, +// { WinBatchSid, BATCH, NT_AUTHORITY, SidTypeWellKnownGroup }, +// { WinInteractiveSid, INTERACTIVE, NT_AUTHORITY, SidTypeWellKnownGroup }, +// { WinServiceSid, SERVICE, NT_AUTHORITY, SidTypeWellKnownGroup }, +// { WinAnonymousSid, ANONYMOUS_LOGON, NT_AUTHORITY, SidTypeWellKnownGroup }, +// { WinProxySid, PROXY, NT_AUTHORITY, SidTypeWellKnownGroup }, +// { WinEnterpriseControllersSid, ENTERPRISE_DOMAIN_CONTROLLERS, NT_AUTHORITY, SidTypeWellKnownGroup }, +// { WinSelfSid, SELF, NT_AUTHORITY, SidTypeWellKnownGroup }, +// { WinAuthenticatedUserSid, Authenticated_Users, NT_AUTHORITY, SidTypeWellKnownGroup }, +// { WinRestrictedCodeSid, RESTRICTED, NT_AUTHORITY, SidTypeWellKnownGroup }, +// { WinTerminalServerSid, TERMINAL_SERVER_USER, NT_AUTHORITY, SidTypeWellKnownGroup }, +// { WinRemoteLogonIdSid, REMOTE_INTERACTIVE_LOGON, NT_AUTHORITY, SidTypeWellKnownGroup }, +// { WinLocalSystemSid, SYSTEM, NT_AUTHORITY, SidTypeWellKnownGroup }, +// { WinLocalServiceSid, LOCAL_SERVICE, NT_AUTHORITY, SidTypeWellKnownGroup }, +// { WinNetworkServiceSid, NETWORK_SERVICE, NT_AUTHORITY, SidTypeWellKnownGroup }, +// { WinBuiltinDomainSid, BUILTIN, BUILTIN, SidTypeDomain }, +// { WinBuiltinAdministratorsSid, Administrators, BUILTIN, SidTypeAlias }, +// { WinBuiltinUsersSid, Users, BUILTIN, SidTypeAlias }, +// { WinBuiltinGuestsSid, Guests, BUILTIN, SidTypeAlias }, +// { WinBuiltinPowerUsersSid, Power_Users, BUILTIN, SidTypeAlias }, +// { WinBuiltinAccountOperatorsSid, Account_Operators, BUILTIN, SidTypeAlias }, +// { WinBuiltinSystemOperatorsSid, Server_Operators, BUILTIN, SidTypeAlias }, +// { WinBuiltinPrintOperatorsSid, Print_Operators, BUILTIN, SidTypeAlias }, +// { WinBuiltinBackupOperatorsSid, Backup_Operators, BUILTIN, SidTypeAlias }, +// { WinBuiltinReplicatorSid, Replicators, BUILTIN, SidTypeAlias }, +// { WinBuiltinPreWindows2000CompatibleAccessSid, Pre_Windows_2000_Compatible_Access, BUILTIN, SidTypeAlias }, +// { WinBuiltinRemoteDesktopUsersSid, Remote_Desktop_Users, BUILTIN, SidTypeAlias }, +// { WinBuiltinNetworkConfigurationOperatorsSid, Network_Configuration_Operators, BUILTIN, SidTypeAlias }, + { WinNTLMAuthenticationSid, NTML_Authentication, NT_AUTHORITY, SidTypeWellKnownGroup }, + { WinDigestAuthenticationSid, Digest_Authentication, NT_AUTHORITY, SidTypeWellKnownGroup }, + { WinSChannelAuthenticationSid, SChannel_Authentication, NT_AUTHORITY, SidTypeWellKnownGroup }, +// { WinThisOrganizationSid, This_Organization, NT_AUTHORITY, SidTypeWellKnownGroup }, + { WinOtherOrganizationSid, Other_Organization, NT_AUTHORITY, SidTypeWellKnownGroup }, + { WinBuiltinPerfMonitoringUsersSid, Performance_Monitor_Users, BUILTIN, SidTypeAlias }, + { WinBuiltinPerfLoggingUsersSid, Performance_Log_Users, BUILTIN, SidTypeAlias }, +}; +#endif + + +BOOLEAN +LsapCreateSid(PSID_IDENTIFIER_AUTHORITY IdentifierAuthority, + UCHAR SubAuthorityCount, + PULONG SubAuthorities, + PWSTR Name, + PWSTR Domain, + SID_NAME_USE NameUse) +{ + PWELL_KNOWN_SID SidEntry; + PULONG p; + ULONG i; + + SidEntry = RtlAllocateHeap(RtlGetProcessHeap(), 0, sizeof(WELL_KNOWN_SID)); + if (SidEntry == NULL) + return FALSE; + + InitializeListHead(&SidEntry->ListEntry); + + SidEntry->Sid = RtlAllocateHeap(RtlGetProcessHeap(), + 0, + RtlLengthRequiredSid(SubAuthorityCount)); + if (SidEntry->Sid == NULL) + { + RtlFreeHeap(RtlGetProcessHeap(), 0, SidEntry); + return FALSE; + } + + RtlInitializeSid(SidEntry->Sid, + IdentifierAuthority, + SubAuthorityCount); + + for (i = 0; i < (ULONG)SubAuthorityCount; i++) + { + p = RtlSubAuthoritySid(SidEntry->Sid, i); + *p = SubAuthorities[i]; + } + + RtlInitUnicodeString(&SidEntry->Name, + Name); + + RtlInitUnicodeString(&SidEntry->Domain, + Domain); + + SidEntry->NameUse = NameUse; + + InsertTailList(&WellKnownSidListHead, + &SidEntry->ListEntry); + + return TRUE; +} + + +NTSTATUS +LsapInitSids(VOID) +{ + ULONG SubAuthorities[5]; + + InitializeListHead(&WellKnownSidListHead); + + /* Null Sid */ + SubAuthorities[0] = SECURITY_NULL_RID; + LsapCreateSid(&NullSidAuthority, + 1, + SubAuthorities, + L"NULL SID", + L"", + SidTypeWellKnownGroup); + + /* World Sid */ + SubAuthorities[0] = SECURITY_WORLD_RID; + LsapCreateSid(&WorldSidAuthority, + 1, + SubAuthorities, + L"Everyone", + L"", + SidTypeWellKnownGroup); + + /* Local Sid */ + SubAuthorities[0] = SECURITY_LOCAL_RID; + LsapCreateSid(&LocalSidAuthority, + 1, + SubAuthorities, + L"LOCAL", + L"", + SidTypeWellKnownGroup); + + /* Creator Owner Sid */ + SubAuthorities[0] = SECURITY_CREATOR_OWNER_RID; + LsapCreateSid(&CreatorSidAuthority, + 1, + SubAuthorities, + L"CREATOR OWNER", + L"", + SidTypeWellKnownGroup); + + /* Creator Group Sid */ + SubAuthorities[0] = SECURITY_CREATOR_GROUP_RID; + LsapCreateSid(&CreatorSidAuthority, + 1, + SubAuthorities, + L"CREATOR GROUP", + L"", + SidTypeWellKnownGroup); + + /* Creator Owner Server Sid */ + SubAuthorities[0] = SECURITY_CREATOR_OWNER_SERVER_RID; + LsapCreateSid(&CreatorSidAuthority, + 1, + SubAuthorities, + L"CREATOR OWNER SERVER", + L"", + SidTypeWellKnownGroup); + + /* Creator Group Server Sid */ + SubAuthorities[0] = SECURITY_CREATOR_GROUP_SERVER_RID; + LsapCreateSid(&CreatorSidAuthority, + 1, + SubAuthorities, + L"CREATOR GROUP SERVER", + L"", + SidTypeWellKnownGroup); + + /* NT Domain Sid */ + LsapCreateSid(&NtAuthority, + 0, + NULL, + L"NT Pseudo Domain", + L"NT Pseudo Domain", + SidTypeDomain); + + /* Dialup Sid */ + SubAuthorities[0] = SECURITY_DIALUP_RID; + LsapCreateSid(&NtAuthority, + 1, + SubAuthorities, + L"DIALUP", + L"NT AUTHORITY", + SidTypeWellKnownGroup); + + /* Network Sid */ + SubAuthorities[0] = SECURITY_NETWORK_RID; + LsapCreateSid(&NtAuthority, + 1, + SubAuthorities, + L"NETWORK", + L"NT AUTHORITY", + SidTypeWellKnownGroup); + + /* Batch Sid*/ + SubAuthorities[0] = SECURITY_BATCH_RID; + LsapCreateSid(&NtAuthority, + 1, + SubAuthorities, + L"BATCH", + L"NT AUTHORITY", + SidTypeWellKnownGroup); + + /* Interactive Sid */ + SubAuthorities[0] = SECURITY_INTERACTIVE_RID; + LsapCreateSid(&NtAuthority, + 1, + SubAuthorities, + L"INTERACTIVE", + L"NT AUTHORITY", + SidTypeWellKnownGroup); + + /* Service Sid */ + SubAuthorities[0] = SECURITY_SERVICE_RID; + LsapCreateSid(&NtAuthority, + 1, + SubAuthorities, + L"SERVICE", + L"NT AUTHORITY", + SidTypeWellKnownGroup); + + /* Anonymous Logon Sid */ + SubAuthorities[0] = SECURITY_ANONYMOUS_LOGON_RID; + LsapCreateSid(&NtAuthority, + 1, + SubAuthorities, + L"ANONYMOUS LOGON", + L"NT AUTHORITY", + SidTypeWellKnownGroup); + + /* Proxy Sid */ + SubAuthorities[0] = SECURITY_PROXY_RID; + LsapCreateSid(&NtAuthority, + 1, + SubAuthorities, + L"PROXY", + L"NT AUTHORITY", + SidTypeWellKnownGroup); + + /* Enterprise Controllers Sid */ + SubAuthorities[0] = SECURITY_ENTERPRISE_CONTROLLERS_RID; + LsapCreateSid(&NtAuthority, + 1, + SubAuthorities, + L"ENTERPRISE DOMAIN CONTROLLERS", + L"NT AUTHORITY", + SidTypeWellKnownGroup); + + /* Principal Self Sid */ + SubAuthorities[0] = SECURITY_PRINCIPAL_SELF_RID; + LsapCreateSid(&NtAuthority, + 1, + SubAuthorities, + L"SELF", + L"NT AUTHORITY", + SidTypeWellKnownGroup); + + /* Authenticated Users Sid */ + SubAuthorities[0] = SECURITY_AUTHENTICATED_USER_RID; + LsapCreateSid(&NtAuthority, + 1, + SubAuthorities, + L"Authenticated Users", + L"NT AUTHORITY", + SidTypeWellKnownGroup); + + /* Restricted Code Sid */ + SubAuthorities[0] = SECURITY_RESTRICTED_CODE_RID; + LsapCreateSid(&NtAuthority, + 1, + SubAuthorities, + L"RESTRICTED", + L"NT AUTHORITY", + SidTypeWellKnownGroup); + + /* Terminal Server Sid */ + SubAuthorities[0] = SECURITY_TERMINAL_SERVER_RID; + LsapCreateSid(&NtAuthority, + 1, + SubAuthorities, + L"TERMINAL SERVER USER", + L"NT AUTHORITY", + SidTypeWellKnownGroup); + + /* Remote Logon Sid */ + SubAuthorities[0] = SECURITY_REMOTE_LOGON_RID; + LsapCreateSid(&NtAuthority, + 1, + SubAuthorities, + L"REMOTE INTERACTIVE LOGON", + L"NT AUTHORITY", + SidTypeWellKnownGroup); + + /* This Organization Sid */ + SubAuthorities[0] = SECURITY_THIS_ORGANIZATION_RID; + LsapCreateSid(&NtAuthority, + 1, + SubAuthorities, + L"This Organization", + L"NT AUTHORITY", + SidTypeWellKnownGroup); + + /* Local System Sid */ + SubAuthorities[0] = SECURITY_LOCAL_SYSTEM_RID; + LsapCreateSid(&NtAuthority, + 1, + SubAuthorities, + L"SYSTEM", + L"NT AUTHORITY", + SidTypeWellKnownGroup); + + /* Local Service Sid */ + SubAuthorities[0] = SECURITY_LOCAL_SERVICE_RID; + LsapCreateSid(&NtAuthority, + 1, + SubAuthorities, + L"LOCAL SERVICE", + L"NT AUTHORITY", + SidTypeWellKnownGroup); + + /* Network Service Sid */ + SubAuthorities[0] = SECURITY_NETWORK_SERVICE_RID; + LsapCreateSid(&NtAuthority, + 1, + SubAuthorities, + L"NETWORK SERVICE", + L"NT AUTHORITY", + SidTypeWellKnownGroup); + + /* Builtin Domain Sid */ + SubAuthorities[0] = SECURITY_BUILTIN_DOMAIN_RID; + LsapCreateSid(&NtAuthority, + 1, + SubAuthorities, + L"BUILTIN", + L"BUILTIN", + SidTypeDomain); + + /* Administrators Alias Sid */ + SubAuthorities[0] = SECURITY_BUILTIN_DOMAIN_RID; + SubAuthorities[1] = DOMAIN_ALIAS_RID_ADMINS; + LsapCreateSid(&NtAuthority, + 2, + SubAuthorities, + L"Administrators", + L"BUILTIN", + SidTypeAlias); + + /* Users Alias Sid */ + SubAuthorities[0] = SECURITY_BUILTIN_DOMAIN_RID; + SubAuthorities[1] = DOMAIN_ALIAS_RID_USERS; + LsapCreateSid(&NtAuthority, + 2, + SubAuthorities, + L"Users", + L"BUILTIN", + SidTypeAlias); + + /* Guests Alias Sid */ + SubAuthorities[0] = SECURITY_BUILTIN_DOMAIN_RID; + SubAuthorities[1] = DOMAIN_ALIAS_RID_GUESTS; + LsapCreateSid(&NtAuthority, + 2, + SubAuthorities, + L"Guests", + L"BUILTIN", + SidTypeAlias); + + /* Power User Alias Sid */ + SubAuthorities[0] = SECURITY_BUILTIN_DOMAIN_RID; + SubAuthorities[1] = DOMAIN_ALIAS_RID_POWER_USERS; + LsapCreateSid(&NtAuthority, + 2, + SubAuthorities, + L"Power User", + L"BUILTIN", + SidTypeAlias); + + /* Account Operators Alias Sid */ + SubAuthorities[0] = SECURITY_BUILTIN_DOMAIN_RID; + SubAuthorities[1] = DOMAIN_ALIAS_RID_ACCOUNT_OPS; + LsapCreateSid(&NtAuthority, + 2, + SubAuthorities, + L"Account Operators", + L"BUILTIN", + SidTypeAlias); + + /* System Operators Alias Sid */ + SubAuthorities[0] = SECURITY_BUILTIN_DOMAIN_RID; + SubAuthorities[1] = DOMAIN_ALIAS_RID_SYSTEM_OPS; + LsapCreateSid(&NtAuthority, + 2, + SubAuthorities, + L"Server Operators", + L"BUILTIN", + SidTypeAlias); + + /* Print Operators Alias Sid */ + SubAuthorities[0] = SECURITY_BUILTIN_DOMAIN_RID; + SubAuthorities[1] = DOMAIN_ALIAS_RID_PRINT_OPS; + LsapCreateSid(&NtAuthority, + 2, + SubAuthorities, + L"Print Operators", + L"BUILTIN", + SidTypeAlias); + + /* Backup Operators Alias Sid */ + SubAuthorities[0] = SECURITY_BUILTIN_DOMAIN_RID; + SubAuthorities[1] = DOMAIN_ALIAS_RID_BACKUP_OPS; + LsapCreateSid(&NtAuthority, + 2, + SubAuthorities, + L"Backup Operators", + L"BUILTIN", + SidTypeAlias); + + /* Replicators Alias Sid */ + SubAuthorities[0] = SECURITY_BUILTIN_DOMAIN_RID; + SubAuthorities[1] = DOMAIN_ALIAS_RID_REPLICATOR; + LsapCreateSid(&NtAuthority, + 2, + SubAuthorities, + L"Replicators", + L"BUILTIN", + SidTypeAlias); + +#if 0 + /* RAS Servers Alias Sid */ + SubAuthorities[0] = SECURITY_BUILTIN_DOMAIN_RID; + SubAuthorities[1] = DOMAIN_ALIAS_RID_RAS_SERVERS; + LsapCreateSid(&NtAuthority, + 2, + SubAuthorities, + L"Backup Operators", + L"BUILTIN", + SidTypeAlias); +#endif + + /* Pre-Windows 2000 Compatible Access Alias Sid */ + SubAuthorities[0] = SECURITY_BUILTIN_DOMAIN_RID; + SubAuthorities[1] = DOMAIN_ALIAS_RID_PREW2KCOMPACCESS; + LsapCreateSid(&NtAuthority, + 2, + SubAuthorities, + L"Pre-Windows 2000 Compatible Access", + L"BUILTIN", + SidTypeAlias); + + /* Remote Desktop Users Alias Sid */ + SubAuthorities[0] = SECURITY_BUILTIN_DOMAIN_RID; + SubAuthorities[1] = DOMAIN_ALIAS_RID_REMOTE_DESKTOP_USERS; + LsapCreateSid(&NtAuthority, + 2, + SubAuthorities, + L"Remote Desktop Users", + L"BUILTIN", + SidTypeAlias); + + /* Network Configuration Operators Alias Sid */ + SubAuthorities[0] = SECURITY_BUILTIN_DOMAIN_RID; + SubAuthorities[1] = DOMAIN_ALIAS_RID_NETWORK_CONFIGURATION_OPS; + LsapCreateSid(&NtAuthority, + 2, + SubAuthorities, + L"Network Configuration Operators", + L"BUILTIN", + SidTypeAlias); + + /* FIXME: Add more well known sids */ + + return STATUS_SUCCESS; +} + + +PWELL_KNOWN_SID +LsapLookupWellKnownSid(PSID Sid) +{ + PLIST_ENTRY ListEntry; + PWELL_KNOWN_SID Ptr; + + ListEntry = WellKnownSidListHead.Flink; + while (ListEntry != &WellKnownSidListHead) + { + Ptr = CONTAINING_RECORD(ListEntry, + WELL_KNOWN_SID, + ListEntry); + if (RtlEqualSid(Sid, Ptr->Sid)) + { + return Ptr; + } + + ListEntry = ListEntry->Flink; + } + + return NULL; +} + + +NTSTATUS +LsapLookupSids(PLSAPR_SID_ENUM_BUFFER SidEnumBuffer, + PLSAPR_TRANSLATED_NAME OutputNames) +{ + static const UNICODE_STRING UserName = RTL_CONSTANT_STRING(L"Administrator"); + PWELL_KNOWN_SID ptr; + ULONG Mapped = 0; + ULONG i; + NTSTATUS Status; + + PSID *Sids = (PSID *) SidEnumBuffer->SidInfo; + +TRACE("LsapLookupSids(%p, %p)\n", SidEnumBuffer, OutputNames); +TRACE("SidEnumBuffer->Entries: %lu\n", SidEnumBuffer->Entries); +TRACE("SidEnumBuffer->SidInfo: %p\n", SidEnumBuffer->SidInfo); + + for (i = 0; i < SidEnumBuffer->Entries; i++) + { +TRACE("i: %lu\n", i); + ptr = LsapLookupWellKnownSid(Sids[i]); + if (ptr != NULL) + { + OutputNames[i].Use = ptr->NameUse; + + OutputNames[i].DomainIndex = i; /* Fixme */ + + OutputNames[i].Name.Buffer = MIDL_user_allocate(ptr->Name.MaximumLength); + OutputNames[i].Name.Length = ptr->Name.Length; + OutputNames[i].Name.MaximumLength = ptr->Name.MaximumLength; + RtlCopyMemory(OutputNames[i].Name.Buffer, ptr->Name.Buffer, ptr->Name.MaximumLength); + + Mapped++; + } + else + { + OutputNames[i].Use = SidTypeWellKnownGroup; + OutputNames[i].DomainIndex = i; + OutputNames[i].Name.Buffer = MIDL_user_allocate(UserName.MaximumLength); + OutputNames[i].Name.Length = UserName.Length; + OutputNames[i].Name.MaximumLength = UserName.MaximumLength; + RtlCopyMemory(OutputNames[i].Name.Buffer, UserName.Buffer, UserName.MaximumLength); + + Mapped++; + } + } + + if (Mapped == 0) + Status = STATUS_NONE_MAPPED; + else if (Mapped < SidEnumBuffer->Entries) + Status = STATUS_SOME_NOT_MAPPED; + else + Status = STATUS_SUCCESS; + + return Status; +} + +/* EOF */ diff --git a/dll/win32/mapi32/Cy.rc b/dll/win32/mapi32/Cy.rc new file mode 100644 index 00000000000..1003a9ed35a --- /dev/null +++ b/dll/win32/mapi32/Cy.rc @@ -0,0 +1,31 @@ +/* + * Cefnogaeth iaith Cymraeg + * Welsh language support + * + * Copyright 2010 Ken Sharp +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU Lesser General Public +* License as published by the Free Software Foundation; either +* version 2.1 of the License, or (at your option) any later version. +* +* This library is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with this library; if not, write to the Free Software +* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA +* +*/ + +#include "res.h" + +LANGUAGE LANG_WELSH, SUBLANG_DEFAULT + +STRINGTABLE +{ + IDS_NO_MAPI_CLIENT, "Mail anfon methu fel nad oes gennych gleient mail MAPI gorseddedig." + IDS_SEND_MAIL, "Anfon Mail" +} diff --git a/dll/win32/mapi32/Ga.rc b/dll/win32/mapi32/Ga.rc new file mode 100644 index 00000000000..e8aa3c05558 --- /dev/null +++ b/dll/win32/mapi32/Ga.rc @@ -0,0 +1,31 @@ +/* + * Gaelic language support + * Tac le teanga na Gaeilge + * + * Copyright 2010 Ken Sharp + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + * +*/ + +#include "res.h" + +LANGUAGE LANG_GAELIC, SUBLANG_GAELIC + +STRINGTABLE +{ + IDS_NO_MAPI_CLIENT, "R-phost a sheoladh mar a theip n g duit a cliant romhphoist MAPI shuiteil." + IDS_SEND_MAIL, "Seol Romhphost" +} diff --git a/dll/win32/mapi32/Uk.rc b/dll/win32/mapi32/Uk.rc new file mode 100644 index 00000000000..f08b31df95d --- /dev/null +++ b/dll/win32/mapi32/Uk.rc @@ -0,0 +1,34 @@ +/* +* MAPI32 Ukrainian resources +* +* Copyright 2009 Owen Rudge for CodeWeavers +* 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 "res.h" + +/* UTF-8 */ +#pragma code_page(65001) + +LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT + +STRINGTABLE +{ + IDS_NO_MAPI_CLIENT, "Неможливо відіслати пошту: не встановлений поштовий клієнт MAPI." + IDS_SEND_MAIL, "Відсилання пошти" +} diff --git a/dll/win32/mapi32/version.rc b/dll/win32/mapi32/version.rc index d368373ed4c..b28f2353fa4 100644 --- a/dll/win32/mapi32/version.rc +++ b/dll/win32/mapi32/version.rc @@ -44,3 +44,4 @@ #include "Ro.rc" #include "Ru.rc" #include "Si.rc" +#include "Uk.rc" diff --git a/dll/win32/mpr/mpr_Bg.rc b/dll/win32/mpr/mpr_Bg.rc index 5f1e402ddaf..a3f15a6c87c 100644 --- a/dll/win32/mpr/mpr_Bg.rc +++ b/dll/win32/mpr/mpr_Bg.rc @@ -22,12 +22,12 @@ LANGUAGE LANG_BULGARIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_ENTIRENETWORK " " } -IDD_PROXYDLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 250, 154 +IDD_PROXYDLG DIALOG 36, 24, 250, 154 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION " " FONT 8, "MS Shell Dlg" diff --git a/dll/win32/mpr/mpr_Cs.rc b/dll/win32/mpr/mpr_Cs.rc index 024be05859d..2bbdf3b1804 100644 --- a/dll/win32/mpr/mpr_Cs.rc +++ b/dll/win32/mpr/mpr_Cs.rc @@ -25,12 +25,12 @@ LANGUAGE LANG_CZECH, SUBLANG_DEFAULT /* Czech strings in CP1250 */ -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_ENTIRENETWORK "Cel s" } -IDD_PROXYDLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 250, 154 +IDD_PROXYDLG DIALOG 36, 24, 250, 154 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Zadn sovho hesla" FONT 8, "MS Shell Dlg" diff --git a/dll/win32/mpr/mpr_Da.rc b/dll/win32/mpr/mpr_Da.rc index 29092017e3c..ae03903a2f4 100644 --- a/dll/win32/mpr/mpr_Da.rc +++ b/dll/win32/mpr/mpr_Da.rc @@ -22,12 +22,12 @@ LANGUAGE LANG_DANISH, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_ENTIRENETWORK "Hele netvrket" } -IDD_PROXYDLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 250, 154 +IDD_PROXYDLG DIALOG 36, 24, 250, 154 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Skriv netvrkskodeord" FONT 8, "MS Shell Dlg" diff --git a/dll/win32/mpr/mpr_De.rc b/dll/win32/mpr/mpr_De.rc index b9372d79089..566529f89fb 100644 --- a/dll/win32/mpr/mpr_De.rc +++ b/dll/win32/mpr/mpr_De.rc @@ -24,12 +24,12 @@ LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_ENTIRENETWORK "Gesamtes Netzwerk" } -IDD_PROXYDLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 250, 154 +IDD_PROXYDLG DIALOG 36, 24, 250, 154 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Netzwerkkennung eingeben" FONT 8, "MS Shell Dlg" diff --git a/dll/win32/mpr/mpr_En.rc b/dll/win32/mpr/mpr_En.rc index 916c0013afa..cf369c60f9e 100644 --- a/dll/win32/mpr/mpr_En.rc +++ b/dll/win32/mpr/mpr_En.rc @@ -22,12 +22,12 @@ LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_ENTIRENETWORK "Entire Network" } -IDD_PROXYDLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 250, 154 +IDD_PROXYDLG DIALOG 36, 24, 250, 154 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Enter Network Password" FONT 8, "MS Shell Dlg" diff --git a/dll/win32/mpr/mpr_Es.rc b/dll/win32/mpr/mpr_Es.rc index ae073259800..72951354830 100644 --- a/dll/win32/mpr/mpr_Es.rc +++ b/dll/win32/mpr/mpr_Es.rc @@ -22,12 +22,12 @@ LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_ENTIRENETWORK "Toda la red" } -IDD_PROXYDLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 250, 154 +IDD_PROXYDLG DIALOG 36, 24, 250, 154 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Introduzca contrasea de red" FONT 8, "MS Shell Dlg" diff --git a/dll/win32/mpr/mpr_Fr.rc b/dll/win32/mpr/mpr_Fr.rc index 497781a1a9f..700afc10c04 100644 --- a/dll/win32/mpr/mpr_Fr.rc +++ b/dll/win32/mpr/mpr_Fr.rc @@ -26,12 +26,12 @@ LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_ENTIRENETWORK "Le réseau entier" } -IDD_PROXYDLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 210, 146 +IDD_PROXYDLG DIALOG 36, 24, 210, 146 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Entrez le mot de passe réseau" FONT 8, "MS Shell Dlg" diff --git a/dll/win32/mpr/mpr_Hu.rc b/dll/win32/mpr/mpr_Hu.rc index 864b6514ba5..9870a6dd0d2 100644 --- a/dll/win32/mpr/mpr_Hu.rc +++ b/dll/win32/mpr/mpr_Hu.rc @@ -22,12 +22,12 @@ LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_ENTIRENETWORK "Teljes hlzat" } -IDD_PROXYDLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 250, 154 +IDD_PROXYDLG DIALOG 36, 24, 250, 154 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Hlzati jelsz megadsa" FONT 8, "MS Shell Dlg" diff --git a/dll/win32/mpr/mpr_It.rc b/dll/win32/mpr/mpr_It.rc index 148d2cf47cb..3a6a2f86661 100644 --- a/dll/win32/mpr/mpr_It.rc +++ b/dll/win32/mpr/mpr_It.rc @@ -23,12 +23,12 @@ LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_ENTIRENETWORK "Tutta la rete" } -IDD_PROXYDLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 250, 154 +IDD_PROXYDLG DIALOG 36, 24, 250, 154 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Inserisci la Password di Rete" FONT 8, "MS Shell Dlg" diff --git a/dll/win32/mpr/mpr_Ja.rc b/dll/win32/mpr/mpr_Ja.rc index 942eaa20306..0bd8ac57537 100644 --- a/dll/win32/mpr/mpr_Ja.rc +++ b/dll/win32/mpr/mpr_Ja.rc @@ -25,12 +25,12 @@ LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_ENTIRENETWORK "ネットワーク全体" } -IDD_PROXYDLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 250, 154 +IDD_PROXYDLG DIALOG 36, 24, 250, 154 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "ネットワーク用パスワードを入力" FONT 8, "MS Shell Dlg" diff --git a/dll/win32/mpr/mpr_Ko.rc b/dll/win32/mpr/mpr_Ko.rc index d3e308f4e62..13bc0b8c82a 100644 --- a/dll/win32/mpr/mpr_Ko.rc +++ b/dll/win32/mpr/mpr_Ko.rc @@ -23,12 +23,12 @@ LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_ENTIRENETWORK "ü Ʈũ" } -IDD_PROXYDLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 250, 154 +IDD_PROXYDLG DIALOG 36, 24, 250, 154 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Ʈũ ȣ Է" FONT 9, "MS Shell Dlg" diff --git a/dll/win32/mpr/mpr_Lt.rc b/dll/win32/mpr/mpr_Lt.rc index 9e09737c903..b72fe1d432a 100644 --- a/dll/win32/mpr/mpr_Lt.rc +++ b/dll/win32/mpr/mpr_Lt.rc @@ -25,12 +25,12 @@ LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_ENTIRENETWORK "Visas tinklas" } -IDD_PROXYDLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 250, 154 +IDD_PROXYDLG DIALOG 36, 24, 250, 154 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Įveskite tinklo slaptažodį" FONT 8, "MS Shell Dlg" diff --git a/dll/win32/mpr/mpr_Nl.rc b/dll/win32/mpr/mpr_Nl.rc index b0cd0f63144..611539fbf49 100644 --- a/dll/win32/mpr/mpr_Nl.rc +++ b/dll/win32/mpr/mpr_Nl.rc @@ -23,12 +23,12 @@ LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_ENTIRENETWORK "Gehele netwerk" } -IDD_PROXYDLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 250, 154 +IDD_PROXYDLG DIALOG 36, 24, 250, 154 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Voer het Netwerk Wachtwoord in" FONT 8, "MS Shell Dlg" diff --git a/dll/win32/mpr/mpr_No.rc b/dll/win32/mpr/mpr_No.rc index a66399dd157..3035508bf40 100644 --- a/dll/win32/mpr/mpr_No.rc +++ b/dll/win32/mpr/mpr_No.rc @@ -22,12 +22,12 @@ LANGUAGE LANG_NORWEGIAN, SUBLANG_NORWEGIAN_BOKMAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_ENTIRENETWORK "Hele nettverket" } -IDD_PROXYDLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 250, 154 +IDD_PROXYDLG DIALOG 36, 24, 250, 154 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Skriv inn nettverkspassord" FONT 8, "MS Shell Dlg" diff --git a/dll/win32/mpr/mpr_Pl.rc b/dll/win32/mpr/mpr_Pl.rc index c56faa7b12b..90a5fa1ee5e 100644 --- a/dll/win32/mpr/mpr_Pl.rc +++ b/dll/win32/mpr/mpr_Pl.rc @@ -23,12 +23,12 @@ LANGUAGE LANG_POLISH, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_ENTIRENETWORK "Caa sie" } -IDD_PROXYDLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 250, 154 +IDD_PROXYDLG DIALOG 36, 24, 250, 154 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Wpisz haso sieci" FONT 8, "MS Shell Dlg" diff --git a/dll/win32/mpr/mpr_Pt.rc b/dll/win32/mpr/mpr_Pt.rc index f5740cb35aa..27527a06985 100644 --- a/dll/win32/mpr/mpr_Pt.rc +++ b/dll/win32/mpr/mpr_Pt.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_PORTUGUESE, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_ENTIRENETWORK "Toda a rede" } @@ -33,7 +33,7 @@ STRINGTABLE DISCARDABLE LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN -IDD_PROXYDLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 250, 154 +IDD_PROXYDLG DIALOG 36, 24, 250, 154 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Entre a senha da rede" FONT 8, "MS Shell Dlg" @@ -55,7 +55,7 @@ FONT 8, "MS Shell Dlg" LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE -IDD_PROXYDLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 250, 154 +IDD_PROXYDLG DIALOG 36, 24, 250, 154 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Indique a senha da rede" FONT 8, "MS Shell Dlg" diff --git a/dll/win32/mpr/mpr_Ro.rc b/dll/win32/mpr/mpr_Ro.rc index fb1a974edd6..ead1d420933 100644 --- a/dll/win32/mpr/mpr_Ro.rc +++ b/dll/win32/mpr/mpr_Ro.rc @@ -23,12 +23,12 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL #pragma code_page(65001) -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_ENTIRENETWORK "Toată rețeaua" } -IDD_PROXYDLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 250, 154 +IDD_PROXYDLG DIALOG 36, 24, 250, 154 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Introducere parolă de rețea" FONT 8, "MS Shell Dlg" diff --git a/dll/win32/mpr/mpr_Ru.rc b/dll/win32/mpr/mpr_Ru.rc index 184e887b50e..1e1ffe76581 100644 --- a/dll/win32/mpr/mpr_Ru.rc +++ b/dll/win32/mpr/mpr_Ru.rc @@ -25,12 +25,12 @@ LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_ENTIRENETWORK "Вся сеть" } -IDD_PROXYDLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 250, 154 +IDD_PROXYDLG DIALOG 36, 24, 250, 154 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Введите сетевой пароль" FONT 8, "MS Shell Dlg" diff --git a/dll/win32/mpr/mpr_Si.rc b/dll/win32/mpr/mpr_Si.rc index f179078627c..c9098f2abd5 100644 --- a/dll/win32/mpr/mpr_Si.rc +++ b/dll/win32/mpr/mpr_Si.rc @@ -24,12 +24,12 @@ LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_ENTIRENETWORK "Celotno omrežje" } -IDD_PROXYDLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 250, 154 +IDD_PROXYDLG DIALOG 36, 24, 250, 154 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Vnesite omrežno geslo" FONT 8, "MS Shell Dlg" diff --git a/dll/win32/mpr/mpr_Sv.rc b/dll/win32/mpr/mpr_Sv.rc index 373046098b8..c1da38ca846 100644 --- a/dll/win32/mpr/mpr_Sv.rc +++ b/dll/win32/mpr/mpr_Sv.rc @@ -22,12 +22,12 @@ LANGUAGE LANG_SWEDISH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_ENTIRENETWORK "Hela ntverket" } -IDD_PROXYDLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 250, 154 +IDD_PROXYDLG DIALOG 36, 24, 250, 154 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Ange ntverkslsenord" FONT 8, "MS Shell Dlg" diff --git a/dll/win32/mpr/mpr_Tr.rc b/dll/win32/mpr/mpr_Tr.rc index 23881067033..5890e7bd5fb 100644 --- a/dll/win32/mpr/mpr_Tr.rc +++ b/dll/win32/mpr/mpr_Tr.rc @@ -22,12 +22,12 @@ LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_ENTIRENETWORK "Tm A" } -IDD_PROXYDLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 250, 154 +IDD_PROXYDLG DIALOG 36, 24, 250, 154 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "A Parolanz Girin" FONT 8, "MS Shell Dlg" diff --git a/dll/win32/mpr/mpr_Uk.rc b/dll/win32/mpr/mpr_Uk.rc index 3f60e713d67..35ddf3c48e0 100644 --- a/dll/win32/mpr/mpr_Uk.rc +++ b/dll/win32/mpr/mpr_Uk.rc @@ -26,12 +26,12 @@ LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_ENTIRENETWORK "Вся Мережа" } -IDD_PROXYDLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 250, 154 +IDD_PROXYDLG DIALOG 36, 24, 250, 154 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Введіть Мережний Пароль" FONT 8, "MS Shell Dlg" diff --git a/dll/win32/mpr/mpr_Zh.rc b/dll/win32/mpr/mpr_Zh.rc index e8824e0d0c2..bd82626cd9a 100644 --- a/dll/win32/mpr/mpr_Zh.rc +++ b/dll/win32/mpr/mpr_Zh.rc @@ -25,12 +25,12 @@ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_ENTIRENETWORK "整个网络" } -IDD_PROXYDLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 250, 154 +IDD_PROXYDLG DIALOG 36, 24, 250, 154 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "输入网络密码" FONT 9, "MS Shell Dlg" @@ -52,12 +52,12 @@ FONT 9, "MS Shell Dlg" LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_ENTIRENETWORK "整個網路" } -IDD_PROXYDLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 250, 154 +IDD_PROXYDLG DIALOG 36, 24, 250, 154 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "輸入網路密碼" FONT 9, "MS Shell Dlg" diff --git a/dll/win32/mpr/wnet.c b/dll/win32/mpr/wnet.c index f5b0bc940c8..66d165f8b8c 100644 --- a/dll/win32/mpr/wnet.c +++ b/dll/win32/mpr/wnet.c @@ -29,6 +29,8 @@ #include "npapi.h" #include "winreg.h" #include "winuser.h" +#define WINE_MOUNTMGR_EXTENSIONS +#include "ddk/mountmgr.h" #include "wine/debug.h" #include "wine/unicode.h" #include "mprres.h" @@ -1754,6 +1756,52 @@ DWORD WINAPI WNetGetConnectionA( LPCSTR lpLocalName, return ret; } +/* find the network connection for a given drive; helper for WNetGetConnection */ +static DWORD get_drive_connection( WCHAR letter, LPWSTR remote, LPDWORD size ) +{ + char buffer[1024]; + struct mountmgr_unix_drive *data = (struct mountmgr_unix_drive *)buffer; + HANDLE mgr; + DWORD ret = WN_NOT_CONNECTED; + + if ((mgr = CreateFileW( MOUNTMGR_DOS_DEVICE_NAME, GENERIC_READ|GENERIC_WRITE, + FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, + 0, 0 )) == INVALID_HANDLE_VALUE) + { + ERR( "failed to open mount manager err %u\n", GetLastError() ); + return ret; + } + memset( data, 0, sizeof(*data) ); + data->letter = letter; + if (DeviceIoControl( mgr, IOCTL_MOUNTMGR_QUERY_UNIX_DRIVE, data, sizeof(*data), + data, sizeof(buffer), NULL, NULL )) + { + char *p, *mount_point = buffer + data->mount_point_offset; + DWORD len; + + if (data->mount_point_offset && !strncmp( mount_point, "unc/", 4 )) + { + mount_point += 2; + mount_point[0] = '\\'; + for (p = mount_point; *p; p++) if (*p == '/') *p = '\\'; + + len = MultiByteToWideChar( CP_UNIXCP, 0, mount_point, -1, NULL, 0 ); + if (len > *size) + { + *size = len; + ret = WN_MORE_DATA; + } + else + { + *size = MultiByteToWideChar( CP_UNIXCP, 0, mount_point, -1, remote, *size); + ret = WN_SUCCESS; + } + } + } + CloseHandle( mgr ); + return ret; +} + /************************************************************************** * WNetGetConnectionW [MPR.@] * @@ -1782,31 +1830,8 @@ DWORD WINAPI WNetGetConnectionW( LPCWSTR lpLocalName, switch(GetDriveTypeW(lpLocalName)) { case DRIVE_REMOTE: - { - static const WCHAR unc[] = { 'u','n','c','\\' }; - WCHAR rremote[MAX_PATH], *remote = rremote; - if (!QueryDosDeviceW( lpLocalName, remote, MAX_PATH )) remote[0] = 0; - else if (!strncmpW(remote, unc, 4)) - { - remote += 2; - remote[0] = '\\'; - } - else if (remote[0] != '\\' || remote[1] != '\\') - FIXME("Don't know how to convert %s to an unc\n", debugstr_w(remote)); - - if (strlenW(remote) + 1 > *lpBufferSize) - { - *lpBufferSize = strlenW(remote) + 1; - ret = WN_MORE_DATA; - } - else - { - strcpyW( lpRemoteName, remote ); - *lpBufferSize = strlenW(lpRemoteName) + 1; - ret = WN_SUCCESS; - } + ret = get_drive_connection( lpLocalName[0], lpRemoteName, lpBufferSize ); break; - } case DRIVE_REMOVABLE: case DRIVE_FIXED: case DRIVE_CDROM: diff --git a/dll/win32/msacm32/msacm_Cs.rc b/dll/win32/msacm32/msacm_Cs.rc index 8e994514b28..6558b561643 100644 --- a/dll/win32/msacm32/msacm_Cs.rc +++ b/dll/win32/msacm32/msacm_Cs.rc @@ -26,7 +26,7 @@ LANGUAGE LANG_CZECH, SUBLANG_DEFAULT /* Czech strings in CP1250 */ -DLG_ACMFORMATCHOOSE_ID DIALOG DISCARDABLE 10, 20, 225, 100 +DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 100 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Vbr zvuku" FONT 8, "MS Shell Dlg" diff --git a/dll/win32/msacm32/msacm_Da.rc b/dll/win32/msacm32/msacm_Da.rc index a3f7b700175..21e457298c0 100644 --- a/dll/win32/msacm32/msacm_Da.rc +++ b/dll/win32/msacm32/msacm_Da.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_DANISH, SUBLANG_DEFAULT -DLG_ACMFORMATCHOOSE_ID DIALOG DISCARDABLE 10, 20, 225, 100 +DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 100 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Lyd valg" FONT 8, "MS Shell Dlg" diff --git a/dll/win32/msacm32/msacm_De.rc b/dll/win32/msacm32/msacm_De.rc index fe93b9b41b9..5eb13f54de2 100644 --- a/dll/win32/msacm32/msacm_De.rc +++ b/dll/win32/msacm32/msacm_De.rc @@ -24,7 +24,7 @@ LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL -DLG_ACMFORMATCHOOSE_ID DIALOG DISCARDABLE 10, 20, 225, 100 +DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 100 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Soundauswahl" FONT 8, "MS Shell Dlg" diff --git a/dll/win32/msacm32/msacm_En.rc b/dll/win32/msacm32/msacm_En.rc index 5c271766fde..861f12345bc 100644 --- a/dll/win32/msacm32/msacm_En.rc +++ b/dll/win32/msacm32/msacm_En.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT -DLG_ACMFORMATCHOOSE_ID DIALOG DISCARDABLE 10, 20, 225, 100 +DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 100 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Sound Selection" FONT 8, "MS Shell Dlg" diff --git a/dll/win32/msacm32/msacm_Es.rc b/dll/win32/msacm32/msacm_Es.rc index b9fc423ddef..06a3b9a7541 100644 --- a/dll/win32/msacm32/msacm_Es.rc +++ b/dll/win32/msacm32/msacm_Es.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL -DLG_ACMFORMATCHOOSE_ID DIALOG DISCARDABLE 10, 20, 225, 100 +DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 100 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Seleccin de sonido" FONT 8, "MS Shell Dlg" diff --git a/dll/win32/msacm32/msacm_Fr.rc b/dll/win32/msacm32/msacm_Fr.rc index 747a27921e5..e66dfb17431 100644 --- a/dll/win32/msacm32/msacm_Fr.rc +++ b/dll/win32/msacm32/msacm_Fr.rc @@ -27,7 +27,7 @@ LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL -DLG_ACMFORMATCHOOSE_ID DIALOG DISCARDABLE 10, 20, 250, 100 +DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 250, 100 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Sélection du son" FONT 8, "MS Shell Dlg" diff --git a/dll/win32/msacm32/msacm_Hu.rc b/dll/win32/msacm32/msacm_Hu.rc index 57a8ce7c5f5..2341adf42e4 100644 --- a/dll/win32/msacm32/msacm_Hu.rc +++ b/dll/win32/msacm32/msacm_Hu.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT -DLG_ACMFORMATCHOOSE_ID DIALOG DISCARDABLE 10, 20, 225, 100 +DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 100 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Hang kivlaszts" FONT 8, "MS Shell Dlg" diff --git a/dll/win32/msacm32/msacm_It.rc b/dll/win32/msacm32/msacm_It.rc index 074977a7b7a..bd0d58930ee 100644 --- a/dll/win32/msacm32/msacm_It.rc +++ b/dll/win32/msacm32/msacm_It.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL -DLG_ACMFORMATCHOOSE_ID DIALOG DISCARDABLE 10, 20, 225, 100 +DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 100 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Selezione dell'audio" FONT 8, "MS Shell Dlg" diff --git a/dll/win32/msacm32/msacm_Ja.rc b/dll/win32/msacm32/msacm_Ja.rc index 8136ea41288..e3ab062ed74 100644 --- a/dll/win32/msacm32/msacm_Ja.rc +++ b/dll/win32/msacm32/msacm_Ja.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT -DLG_ACMFORMATCHOOSE_ID DIALOG DISCARDABLE 10, 20, 225, 100 +DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 100 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "サウンドの選択" FONT 9, "MS Shell Dlg" diff --git a/dll/win32/msacm32/msacm_Ko.rc b/dll/win32/msacm32/msacm_Ko.rc index f10681fffda..dad8a47a42c 100644 --- a/dll/win32/msacm32/msacm_Ko.rc +++ b/dll/win32/msacm32/msacm_Ko.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT -DLG_ACMFORMATCHOOSE_ID DIALOG DISCARDABLE 10, 20, 225, 100 +DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 100 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION " " FONT 9, "MS Shell Dlg" diff --git a/dll/win32/msacm32/msacm_Lt.rc b/dll/win32/msacm32/msacm_Lt.rc index c3e62f65ace..d8af77903da 100644 --- a/dll/win32/msacm32/msacm_Lt.rc +++ b/dll/win32/msacm32/msacm_Lt.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL -DLG_ACMFORMATCHOOSE_ID DIALOG DISCARDABLE 10, 20, 225, 100 +DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 100 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Garso parinkimas" FONT 8, "MS Shell Dlg" diff --git a/dll/win32/msacm32/msacm_Nl.rc b/dll/win32/msacm32/msacm_Nl.rc index 2ac3afb974c..07605c2f254 100644 --- a/dll/win32/msacm32/msacm_Nl.rc +++ b/dll/win32/msacm32/msacm_Nl.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL -DLG_ACMFORMATCHOOSE_ID DIALOG DISCARDABLE 10, 20, 225, 100 +DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 100 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Geluidskeuze" FONT 8, "MS Shell Dlg" diff --git a/dll/win32/msacm32/msacm_No.rc b/dll/win32/msacm32/msacm_No.rc index e817585f799..06231a33a3f 100644 --- a/dll/win32/msacm32/msacm_No.rc +++ b/dll/win32/msacm32/msacm_No.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_NORWEGIAN, SUBLANG_NORWEGIAN_BOKMAL -DLG_ACMFORMATCHOOSE_ID DIALOG DISCARDABLE 10, 20, 225, 100 +DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 100 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Lydutvalg" FONT 8, "MS Shell Dlg" diff --git a/dll/win32/msacm32/msacm_Pl.rc b/dll/win32/msacm32/msacm_Pl.rc index d937bef4bd0..4f185b69852 100644 --- a/dll/win32/msacm32/msacm_Pl.rc +++ b/dll/win32/msacm32/msacm_Pl.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_POLISH, SUBLANG_DEFAULT -DLG_ACMFORMATCHOOSE_ID DIALOG DISCARDABLE 10, 20, 235, 100 +DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 235, 100 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Wybr dwiku" FONT 8, "MS Shell Dlg" diff --git a/dll/win32/msacm32/msacm_Pt.rc b/dll/win32/msacm32/msacm_Pt.rc index 440dc3edf8d..c1388a3e512 100644 --- a/dll/win32/msacm32/msacm_Pt.rc +++ b/dll/win32/msacm32/msacm_Pt.rc @@ -26,7 +26,7 @@ LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN -DLG_ACMFORMATCHOOSE_ID DIALOG DISCARDABLE 10, 20, 225, 100 +DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 100 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Seleção de som" FONT 8, "MS Shell Dlg" @@ -58,7 +58,7 @@ END LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE -DLG_ACMFORMATCHOOSE_ID DIALOG DISCARDABLE 10, 20, 225, 100 +DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 100 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Selecção de som" FONT 8, "MS Shell Dlg" diff --git a/dll/win32/msacm32/msacm_Ro.rc b/dll/win32/msacm32/msacm_Ro.rc index 412d5049ea7..0c6d6dd082d 100644 --- a/dll/win32/msacm32/msacm_Ro.rc +++ b/dll/win32/msacm32/msacm_Ro.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL #pragma code_page(65001) -DLG_ACMFORMATCHOOSE_ID DIALOG DISCARDABLE 10, 20, 225, 100 +DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 100 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Sound Selection" FONT 8, "MS Shell Dlg" diff --git a/dll/win32/msacm32/msacm_Ru.rc b/dll/win32/msacm32/msacm_Ru.rc index d27f2eb3a6f..edc717e54af 100644 --- a/dll/win32/msacm32/msacm_Ru.rc +++ b/dll/win32/msacm32/msacm_Ru.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT -DLG_ACMFORMATCHOOSE_ID DIALOG DISCARDABLE 10, 20, 225, 100 +DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 100 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Выбор звука" FONT 8, "MS Shell Dlg" diff --git a/dll/win32/msacm32/msacm_Si.rc b/dll/win32/msacm32/msacm_Si.rc index 57c1889d129..deac15cbde0 100644 --- a/dll/win32/msacm32/msacm_Si.rc +++ b/dll/win32/msacm32/msacm_Si.rc @@ -24,7 +24,7 @@ LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT -DLG_ACMFORMATCHOOSE_ID DIALOG DISCARDABLE 10, 20, 225, 100 +DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 100 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Izbira zvoka" FONT 8, "MS Shell Dlg" diff --git a/dll/win32/msacm32/msacm_Sv.rc b/dll/win32/msacm32/msacm_Sv.rc index 429060fe7bf..b096071290d 100644 --- a/dll/win32/msacm32/msacm_Sv.rc +++ b/dll/win32/msacm32/msacm_Sv.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_SWEDISH, SUBLANG_NEUTRAL -DLG_ACMFORMATCHOOSE_ID DIALOG DISCARDABLE 10, 20, 225, 100 +DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 100 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Ljudval" FONT 8, "MS Shell Dlg" diff --git a/dll/win32/msacm32/msacm_Tr.rc b/dll/win32/msacm32/msacm_Tr.rc index 03cfdf93cc5..3dd88343ca8 100644 --- a/dll/win32/msacm32/msacm_Tr.rc +++ b/dll/win32/msacm32/msacm_Tr.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT -DLG_ACMFORMATCHOOSE_ID DIALOG DISCARDABLE 10, 20, 225, 100 +DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 100 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Ses Seimi" FONT 8, "MS Shell Dlg" diff --git a/dll/win32/msacm32/msacm_Uk.rc b/dll/win32/msacm32/msacm_Uk.rc index bf755be3b75..c2d4a4cb190 100644 --- a/dll/win32/msacm32/msacm_Uk.rc +++ b/dll/win32/msacm32/msacm_Uk.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT -DLG_ACMFORMATCHOOSE_ID DIALOG DISCARDABLE 10, 20, 225, 100 +DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 100 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Sound Selection" FONT 8, "MS Shell Dlg" diff --git a/dll/win32/msacm32/msacm_Zh.rc b/dll/win32/msacm32/msacm_Zh.rc index b09cc8bb44c..1d871640526 100644 --- a/dll/win32/msacm32/msacm_Zh.rc +++ b/dll/win32/msacm32/msacm_Zh.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED -DLG_ACMFORMATCHOOSE_ID DIALOG DISCARDABLE 10, 20, 225, 100 +DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 100 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "声音选择" FONT 9, "MS Shell Dlg" @@ -57,7 +57,7 @@ END LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL -DLG_ACMFORMATCHOOSE_ID DIALOG DISCARDABLE 10, 20, 225, 100 +DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 100 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "聲音選擇" FONT 9, "MS Shell Dlg" diff --git a/dll/win32/msafd/misc/dllmain.c b/dll/win32/msafd/misc/dllmain.c index a5e33ae088d..5714213cd5a 100644 --- a/dll/win32/msafd/misc/dllmain.c +++ b/dll/win32/msafd/misc/dllmain.c @@ -1910,6 +1910,7 @@ WSPIoctl(IN SOCKET Handle, OUT LPINT lpErrno) { PSOCKET_INFORMATION Socket = NULL; + BOOLEAN NeedsCompletion; /* Get the Socket Structure associate to this Socket*/ Socket = GetSocketStructure(Handle); @@ -1918,6 +1919,8 @@ WSPIoctl(IN SOCKET Handle, *lpErrno = WSAENOTSOCK; return SOCKET_ERROR; } + + *lpcbBytesReturned = 0; switch( dwIoControlCode ) { @@ -1928,17 +1931,44 @@ WSPIoctl(IN SOCKET Handle, return SOCKET_ERROR; } Socket->SharedData.NonBlocking = *((PULONG)lpvInBuffer) ? 1 : 0; - return SetSocketInformation(Socket, AFD_INFO_BLOCKING_MODE, (PULONG)lpvInBuffer, NULL); + *lpErrno = SetSocketInformation(Socket, AFD_INFO_BLOCKING_MODE, (PULONG)lpvInBuffer, NULL); + if (*lpErrno != NO_ERROR) + return SOCKET_ERROR; + else + return NO_ERROR; case FIONREAD: if( cbOutBuffer < sizeof(INT) || IS_INTRESOURCE(lpvOutBuffer) ) { *lpErrno = WSAEFAULT; return SOCKET_ERROR; } - return GetSocketInformation(Socket, AFD_INFO_RECEIVE_CONTENT_SIZE, (PULONG)lpvOutBuffer, NULL); + *lpErrno = GetSocketInformation(Socket, AFD_INFO_RECEIVE_CONTENT_SIZE, (PULONG)lpvOutBuffer, NULL); + if (*lpErrno != NO_ERROR) + return SOCKET_ERROR; + else + { + *lpcbBytesReturned = sizeof(ULONG); + return NO_ERROR; + } default: - *lpErrno = WSAEINVAL; - return SOCKET_ERROR; + *lpErrno = Socket->HelperData->WSHIoctl(Socket->HelperContext, + Handle, + Socket->TdiAddressHandle, + Socket->TdiConnectionHandle, + dwIoControlCode, + lpvInBuffer, + cbInBuffer, + lpvOutBuffer, + cbOutBuffer, + lpcbBytesReturned, + lpOverlapped, + lpCompletionRoutine, + (LPBOOL)&NeedsCompletion); + + if (*lpErrno != NO_ERROR) + return SOCKET_ERROR; + else + return NO_ERROR; } } diff --git a/dll/win32/mshtml.tlb/rsrc.rc b/dll/win32/mshtml.tlb/rsrc.rc index 7ffae35b1f6..75c8549d5cc 100644 --- a/dll/win32/mshtml.tlb/rsrc.rc +++ b/dll/win32/mshtml.tlb/rsrc.rc @@ -21,4 +21,4 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL /* @makedep: mshtml_tlb.tlb */ -1 TYPELIB LOADONCALL DISCARDABLE mshtml_tlb.tlb +1 TYPELIB mshtml_tlb.tlb diff --git a/dll/win32/mshtml/Bg.rc b/dll/win32/mshtml/Bg.rc index 84d7e9ae235..03a466e1298 100644 --- a/dll/win32/mshtml/Bg.rc +++ b/dll/win32/mshtml/Bg.rc @@ -20,7 +20,7 @@ LANGUAGE LANG_BULGARIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_HTMLDISABLED "HTML ." IDS_HTMLDOCUMENT "HTML " @@ -28,7 +28,7 @@ STRINGTABLE DISCARDABLE IDS_INSTALLING "..." } -ID_DWL_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 260, 95 +ID_DWL_DIALOG DIALOG 0, 0, 260, 95 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Wine Gecko Installer" FONT 8, "MS Shell Dlg" diff --git a/dll/win32/mshtml/Da.rc b/dll/win32/mshtml/Da.rc index c211ff0dc36..13a0aa96f43 100644 --- a/dll/win32/mshtml/Da.rc +++ b/dll/win32/mshtml/Da.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_DANISH, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_HTMLDISABLED "HTML optegning er i øjeblikket deaktiveret." IDS_HTMLDOCUMENT "HTML dokument" @@ -33,7 +33,7 @@ STRINGTABLE DISCARDABLE IDS_INSTALLING "Installerer..." } -ID_DWL_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 260, 95 +ID_DWL_DIALOG DIALOG 0, 0, 260, 95 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Installere Wine Gecko" FONT 8, "MS Shell Dlg" @@ -47,7 +47,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON "&Annuller", IDCANCEL, 140, 70, 50, 15, WS_GROUP | WS_TABSTOP } -IDD_HYPERLINK DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 250, 65 +IDD_HYPERLINK DIALOG 0, 0, 250, 65 STYLE DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Hyperlink" FONT 8, "MS Shell Dlg" diff --git a/dll/win32/mshtml/De.rc b/dll/win32/mshtml/De.rc index 50d519d70a7..3929b953a6d 100644 --- a/dll/win32/mshtml/De.rc +++ b/dll/win32/mshtml/De.rc @@ -24,7 +24,7 @@ LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL #pragma code_page(65001) -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_HTMLDISABLED "Die HTML-Darstellung ist zur Zeit ausgeschaltet." IDS_HTMLDOCUMENT "HTML-Dokument" @@ -32,7 +32,7 @@ STRINGTABLE DISCARDABLE IDS_INSTALLING "Installiere..." } -ID_DWL_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 260, 95 +ID_DWL_DIALOG DIALOG 0, 0, 260, 95 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Wine-Gecko-Installation" FONT 8, "MS Shell Dlg" @@ -48,7 +48,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON "&Abbrechen", IDCANCEL, 140, 70, 50, 15, WS_GROUP | WS_TABSTOP } -IDD_HYPERLINK DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 250, 65 +IDD_HYPERLINK DIALOG 0, 0, 250, 65 STYLE DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Hyperlink" FONT 8, "MS Shell Dlg" diff --git a/dll/win32/mshtml/En.rc b/dll/win32/mshtml/En.rc index de9e99c1b54..e44b3731472 100644 --- a/dll/win32/mshtml/En.rc +++ b/dll/win32/mshtml/En.rc @@ -20,7 +20,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_HTMLDISABLED "HTML rendering is currently disabled." IDS_HTMLDOCUMENT "HTML Document" @@ -28,7 +28,7 @@ STRINGTABLE DISCARDABLE IDS_INSTALLING "Installing..." } -ID_DWL_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 260, 95 +ID_DWL_DIALOG DIALOG 0, 0, 260, 95 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Wine Gecko Installer" FONT 8, "MS Shell Dlg" @@ -42,7 +42,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON "&Cancel", IDCANCEL, 140, 70, 50, 15, WS_GROUP | WS_TABSTOP } -IDD_HYPERLINK DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 250, 65 +IDD_HYPERLINK DIALOG 0, 0, 250, 65 STYLE DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Hyperlink" FONT 8, "MS Shell Dlg" diff --git a/dll/win32/mshtml/Es.rc b/dll/win32/mshtml/Es.rc index 590cf6a3182..4dc560f6e5a 100644 --- a/dll/win32/mshtml/Es.rc +++ b/dll/win32/mshtml/Es.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_HTMLDISABLED "El renderizado HTML est actualmente deshabilitado." IDS_HTMLDOCUMENT "Documento HTML" @@ -30,7 +30,7 @@ STRINGTABLE DISCARDABLE IDS_INSTALLING "Instalando..." } -ID_DWL_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 260, 95 +ID_DWL_DIALOG DIALOG 0, 0, 260, 95 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Instalador de Gecko de Wine" FONT 8, "MS Shell Dlg" @@ -44,7 +44,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON "&Cancelar", IDCANCEL, 140, 70, 50, 15, WS_GROUP | WS_TABSTOP } -IDD_HYPERLINK DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 250, 65 +IDD_HYPERLINK DIALOG 0, 0, 250, 65 STYLE DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Enlace" FONT 8, "MS Shell Dlg" diff --git a/dll/win32/mshtml/Fi.rc b/dll/win32/mshtml/Fi.rc index 564345d6960..c329cfdaad7 100644 --- a/dll/win32/mshtml/Fi.rc +++ b/dll/win32/mshtml/Fi.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_FINNISH, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_HTMLDISABLED "HTML:n nyttminen on tllhetkell poistettu kytst." IDS_HTMLDOCUMENT "HTML Dokumentti" diff --git a/dll/win32/mshtml/Fr.rc b/dll/win32/mshtml/Fr.rc index 2575c7e6a6e..924e4b0bc78 100644 --- a/dll/win32/mshtml/Fr.rc +++ b/dll/win32/mshtml/Fr.rc @@ -27,7 +27,7 @@ LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_HTMLDISABLED "Le rendu HTML est actuellement désactivé." IDS_HTMLDOCUMENT "Document HTML" @@ -35,7 +35,7 @@ STRINGTABLE DISCARDABLE IDS_INSTALLING "Installation..." } -ID_DWL_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 260, 110 +ID_DWL_DIALOG DIALOG 0, 0, 260, 110 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Programme d'installation de Gecko pour Wine" FONT 8, "MS Shell Dlg" @@ -51,7 +51,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON "&Annuler", IDCANCEL, 140, 85, 50, 15, WS_GROUP | WS_TABSTOP } -IDD_HYPERLINK DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 250, 65 +IDD_HYPERLINK DIALOG 0, 0, 250, 65 STYLE DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Hyperlien" FONT 8, "MS Shell Dlg" diff --git a/dll/win32/mshtml/Hu.rc b/dll/win32/mshtml/Hu.rc index c402c208802..31f54d1f274 100644 --- a/dll/win32/mshtml/Hu.rc +++ b/dll/win32/mshtml/Hu.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_HTMLDISABLED "A HTML renderelés jelenleg le van tiltva." IDS_HTMLDOCUMENT "HTML dokumentum" @@ -31,7 +31,7 @@ STRINGTABLE DISCARDABLE IDS_INSTALLING "Telepítés..." } -ID_DWL_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 260, 95 +ID_DWL_DIALOG DIALOG 0, 0, 260, 95 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Wine Gecko Installer" FONT 8, "MS Shell Dlg" @@ -45,7 +45,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON "&Mégse", IDCANCEL, 140, 70, 50, 15, WS_GROUP | WS_TABSTOP } -IDD_HYPERLINK DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 250, 65 +IDD_HYPERLINK DIALOG 0, 0, 250, 65 STYLE DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Hiperhivatkozás" FONT 8, "MS Shell Dlg" diff --git a/dll/win32/mshtml/It.rc b/dll/win32/mshtml/It.rc index 36660cca6bf..c8c00c2c84e 100644 --- a/dll/win32/mshtml/It.rc +++ b/dll/win32/mshtml/It.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_HTMLDISABLED "Il rendering HTML è correntemente disattivato." IDS_HTMLDOCUMENT "Documento HTML" @@ -31,7 +31,7 @@ STRINGTABLE DISCARDABLE IDS_INSTALLING "Installando..." } -ID_DWL_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 260, 95 +ID_DWL_DIALOG DIALOG 0, 0, 260, 95 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Installer di Wine Gecko" FONT 8, "MS Shell Dlg" @@ -45,7 +45,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON "&Annulla", IDCANCEL, 140, 70, 50, 15, WS_GROUP | WS_TABSTOP } -IDD_HYPERLINK DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 250, 65 +IDD_HYPERLINK DIALOG 0, 0, 250, 65 STYLE DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Hyperlink" FONT 8, "MS Shell Dlg" diff --git a/dll/win32/mshtml/Ja.rc b/dll/win32/mshtml/Ja.rc index 04fc32e785b..f8c0e44040c 100644 --- a/dll/win32/mshtml/Ja.rc +++ b/dll/win32/mshtml/Ja.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_HTMLDISABLED "HTML レンダリングは現在、無効です。" IDS_HTMLDOCUMENT "HTML 文書" @@ -31,7 +31,7 @@ STRINGTABLE DISCARDABLE IDS_INSTALLING "インストールしています..." } -ID_DWL_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 260, 95 +ID_DWL_DIALOG DIALOG 0, 0, 260, 95 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Wine Gecko インストーラ" FONT 9, "MS Shell Dlg" @@ -45,7 +45,7 @@ FONT 9, "MS Shell Dlg" PUSHBUTTON "キャンセル(&C)", IDCANCEL, 140, 70, 50, 15, WS_GROUP | WS_TABSTOP } -IDD_HYPERLINK DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 250, 65 +IDD_HYPERLINK DIALOG 0, 0, 250, 65 STYLE DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "ハイパーリンク" FONT 9, "MS Shell Dlg" diff --git a/dll/win32/mshtml/Ko.rc b/dll/win32/mshtml/Ko.rc index 8a980609def..f54152632d3 100644 --- a/dll/win32/mshtml/Ko.rc +++ b/dll/win32/mshtml/Ko.rc @@ -21,7 +21,7 @@ LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_HTMLDISABLED "HTML ." IDS_HTMLDOCUMENT "HTML " @@ -29,7 +29,7 @@ STRINGTABLE DISCARDABLE IDS_INSTALLING "ġ ..." } -ID_DWL_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 260, 95 +ID_DWL_DIALOG DIALOG 0, 0, 260, 95 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Wine Gecko ġ Ǯ׸" FONT 9, "MS Shell Dlg" @@ -43,7 +43,7 @@ FONT 9, "MS Shell Dlg" PUSHBUTTON "(&C)", IDCANCEL, 140, 70, 50, 15, WS_GROUP | WS_TABSTOP } -IDD_HYPERLINK DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 250, 65 +IDD_HYPERLINK DIALOG 0, 0, 250, 65 STYLE DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "۸ũ" FONT 9, "MS Shell Dlg" diff --git a/dll/win32/mshtml/Lt.rc b/dll/win32/mshtml/Lt.rc index 8f7e772a3a7..5bfa31d574e 100644 --- a/dll/win32/mshtml/Lt.rc +++ b/dll/win32/mshtml/Lt.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_HTMLDISABLED "HTML atvaizdavimas yra išjungtas." IDS_HTMLDOCUMENT "HTML dokumentas" @@ -31,7 +31,7 @@ STRINGTABLE DISCARDABLE IDS_INSTALLING "Įdiegiama..." } -ID_DWL_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 260, 105 +ID_DWL_DIALOG DIALOG 0, 0, 260, 105 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Wine Gecko diegimo programa" FONT 8, "MS Shell Dlg" @@ -45,7 +45,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON "&Atsisakyti", IDCANCEL, 140, 80, 50, 15, WS_GROUP | WS_TABSTOP } -IDD_HYPERLINK DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 250, 65 +IDD_HYPERLINK DIALOG 0, 0, 250, 65 STYLE DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Saitas" FONT 8, "MS Shell Dlg" diff --git a/dll/win32/mshtml/Nl.rc b/dll/win32/mshtml/Nl.rc index d32980ba9fb..34019870029 100644 --- a/dll/win32/mshtml/Nl.rc +++ b/dll/win32/mshtml/Nl.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_HTMLDISABLED "De HTML weergave is op dit moment uitgeschakeld." IDS_HTMLDOCUMENT "HTML document" @@ -30,7 +30,7 @@ STRINGTABLE DISCARDABLE IDS_INSTALLING "Bezig met installeren..." } -ID_DWL_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 260, 95 +ID_DWL_DIALOG DIALOG 0, 0, 260, 95 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Wine-Gecko-Installatie" FONT 8, "MS Shell Dlg" @@ -44,7 +44,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON "&Afbreken", IDCANCEL, 140, 70, 50, 15, WS_GROUP | WS_TABSTOP } -IDD_HYPERLINK DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 250, 65 +IDD_HYPERLINK DIALOG 0, 0, 250, 65 STYLE DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Webverwijzing" FONT 8, "MS Shell Dlg" diff --git a/dll/win32/mshtml/No.rc b/dll/win32/mshtml/No.rc index 4592599edf3..89f87b9c47a 100644 --- a/dll/win32/mshtml/No.rc +++ b/dll/win32/mshtml/No.rc @@ -24,7 +24,7 @@ LANGUAGE LANG_NORWEGIAN, SUBLANG_NORWEGIAN_BOKMAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_HTMLDISABLED "HTML-tegning er for øyeblikket deaktivert." IDS_HTMLDOCUMENT "HTML-dokument" @@ -32,7 +32,7 @@ STRINGTABLE DISCARDABLE IDS_INSTALLING "Installerer..." } -ID_DWL_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 260, 95 +ID_DWL_DIALOG DIALOG 0, 0, 260, 95 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Installere Wine Gecko" FONT 8, "MS Shell Dlg" @@ -46,7 +46,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON "&Avbryt", IDCANCEL, 140, 70, 50, 15, WS_GROUP | WS_TABSTOP } -IDD_HYPERLINK DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 250, 65 +IDD_HYPERLINK DIALOG 0, 0, 250, 65 STYLE DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Hyperkobling" FONT 8, "MS Shell Dlg" diff --git a/dll/win32/mshtml/Pl.rc b/dll/win32/mshtml/Pl.rc index ed9cd80984a..9e0a63556eb 100644 --- a/dll/win32/mshtml/Pl.rc +++ b/dll/win32/mshtml/Pl.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_POLISH, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_HTMLDISABLED "Wywietlanie HTML jest aktualnie wyczone." IDS_HTMLDOCUMENT "Dokument HTML" @@ -30,7 +30,7 @@ STRINGTABLE DISCARDABLE IDS_INSTALLING "Instalacja..." } -ID_DWL_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 260, 95 +ID_DWL_DIALOG DIALOG 0, 0, 260, 95 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Instalator Wine Gecko" FONT 8, "MS Shell Dlg" @@ -44,7 +44,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON "&Anuluj", IDCANCEL, 140, 70, 50, 15, WS_GROUP | WS_TABSTOP } -IDD_HYPERLINK DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 250, 65 +IDD_HYPERLINK DIALOG 0, 0, 250, 65 STYLE DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Hipercze" FONT 8, "MS Shell Dlg" diff --git a/dll/win32/mshtml/Pt.rc b/dll/win32/mshtml/Pt.rc index 3c19ca50aad..49874523b17 100644 --- a/dll/win32/mshtml/Pt.rc +++ b/dll/win32/mshtml/Pt.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_HTMLDISABLED "A interpretação de HTML está desativada." IDS_HTMLDOCUMENT "Documento HTML" @@ -33,7 +33,7 @@ STRINGTABLE DISCARDABLE LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_HTMLDISABLED "A interpretação de HTML está desactivada." IDS_HTMLDOCUMENT "Documento HTML" @@ -44,7 +44,7 @@ STRINGTABLE DISCARDABLE LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN -ID_DWL_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 260, 95 +ID_DWL_DIALOG DIALOG 0, 0, 260, 95 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Instalador Wine Gecko" FONT 8, "MS Shell Dlg" @@ -61,7 +61,7 @@ Veja http://wiki.winehq.org/Gecko para mais detalhes.", LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE -ID_DWL_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 260, 95 +ID_DWL_DIALOG DIALOG 0, 0, 260, 95 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Instalador Wine Gecko" FONT 8, "MS Shell Dlg" @@ -79,7 +79,7 @@ Veja http://wiki.winehq.org/Gecko para mais detalhes.", LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN -IDD_HYPERLINK DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 250, 65 +IDD_HYPERLINK DIALOG 0, 0, 250, 65 STYLE DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Hiperlink" FONT 8, "MS Shell Dlg" @@ -95,7 +95,7 @@ FONT 8, "MS Shell Dlg" LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE -IDD_HYPERLINK DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 250, 65 +IDD_HYPERLINK DIALOG 0, 0, 250, 65 STYLE DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Hiperligação" FONT 8, "MS Shell Dlg" diff --git a/dll/win32/mshtml/Ro.rc b/dll/win32/mshtml/Ro.rc index 38cd580b94a..1c7a55851d9 100644 --- a/dll/win32/mshtml/Ro.rc +++ b/dll/win32/mshtml/Ro.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL #pragma code_page(65001) -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_HTMLDISABLED "Afișarea de pagini HTML este în prezent dezactivată." IDS_HTMLDOCUMENT "Document HTML" @@ -31,7 +31,7 @@ STRINGTABLE DISCARDABLE IDS_INSTALLING "Instalez..." } -ID_DWL_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 260, 95 +ID_DWL_DIALOG DIALOG 0, 0, 260, 95 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Instalator Wine Gecko" FONT 8, "MS Shell Dlg" @@ -45,7 +45,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON "&Renunță", IDCANCEL, 140, 70, 50, 15, WS_GROUP | WS_TABSTOP } -IDD_HYPERLINK DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 250, 65 +IDD_HYPERLINK DIALOG 0, 0, 250, 65 STYLE DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Hiperlegătură" FONT 8, "MS Shell Dlg" diff --git a/dll/win32/mshtml/Ru.rc b/dll/win32/mshtml/Ru.rc index cb3b168a8be..bd042725c67 100644 --- a/dll/win32/mshtml/Ru.rc +++ b/dll/win32/mshtml/Ru.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_HTMLDISABLED "В настоящее время отображение HTML выключено." IDS_HTMLDOCUMENT "Документ HTML" @@ -31,7 +31,7 @@ STRINGTABLE DISCARDABLE IDS_INSTALLING "Установка..." } -ID_DWL_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 261, 110 +ID_DWL_DIALOG DIALOG 0, 0, 261, 110 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Установка Wine Gecko" FONT 8, "MS Shell Dlg" @@ -47,7 +47,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON "&Отмена", IDCANCEL, 100, 85, 70, 15, WS_GROUP | WS_TABSTOP } -IDD_HYPERLINK DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 250, 65 +IDD_HYPERLINK DIALOG 0, 0, 250, 65 STYLE DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Ссылка" FONT 8, "MS Shell Dlg" diff --git a/dll/win32/mshtml/Si.rc b/dll/win32/mshtml/Si.rc index 6881addcd5b..0d6ee5f19ae 100644 --- a/dll/win32/mshtml/Si.rc +++ b/dll/win32/mshtml/Si.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_HTMLDISABLED "Prikazovanje HTML dokumentov je trenutno onemogočeno." IDS_HTMLDOCUMENT "HTML dokument" @@ -30,7 +30,7 @@ STRINGTABLE DISCARDABLE IDS_INSTALLING "Nameščam ..." } -ID_DWL_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 260, 95 +ID_DWL_DIALOG DIALOG 0, 0, 260, 95 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Namestitev Wine Gecko" FONT 8, "MS Shell Dlg" @@ -44,7 +44,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON "&Prekliči", IDCANCEL, 140, 70, 50, 15, WS_GROUP | WS_TABSTOP } -IDD_HYPERLINK DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 250, 65 +IDD_HYPERLINK DIALOG 0, 0, 250, 65 STYLE DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Hiperpovezava" FONT 8, "MS Shell Dlg" diff --git a/dll/win32/mshtml/Sv.rc b/dll/win32/mshtml/Sv.rc index c5a2cc8c383..290fa75e247 100644 --- a/dll/win32/mshtml/Sv.rc +++ b/dll/win32/mshtml/Sv.rc @@ -20,7 +20,7 @@ LANGUAGE LANG_SWEDISH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_HTMLDISABLED "HTML-visning r inte aktiverad." IDS_HTMLDOCUMENT "HTML-dokument" @@ -28,7 +28,7 @@ STRINGTABLE DISCARDABLE IDS_INSTALLING "Installerar..." } -ID_DWL_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 260, 95 +ID_DWL_DIALOG DIALOG 0, 0, 260, 95 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Wine Gecko Installationsprogram" FONT 8, "MS Shell Dlg" @@ -43,7 +43,7 @@ FONT 8, "MS Shell Dlg" } -IDD_HYPERLINK DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 250, 65 +IDD_HYPERLINK DIALOG 0, 0, 250, 65 STYLE DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Hyperlnk" FONT 8, "MS Shell Dlg" diff --git a/dll/win32/mshtml/Tr.rc b/dll/win32/mshtml/Tr.rc index 01a7931e8d4..efdc9d2e107 100644 --- a/dll/win32/mshtml/Tr.rc +++ b/dll/win32/mshtml/Tr.rc @@ -20,7 +20,7 @@ LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_HTMLDISABLED "HTML motoru u an devre d." IDS_HTMLDOCUMENT "HTML Belgesi" @@ -28,7 +28,7 @@ STRINGTABLE DISCARDABLE IDS_INSTALLING "Kuruluyor..." } -ID_DWL_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 260, 95 +ID_DWL_DIALOG DIALOG 0, 0, 260, 95 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Wine Gecko Kurucusu" FONT 8, "MS Shell Dlg" diff --git a/dll/win32/mshtml/Uk.rc b/dll/win32/mshtml/Uk.rc index ef3a8fb02cf..5d57e8ffc38 100644 --- a/dll/win32/mshtml/Uk.rc +++ b/dll/win32/mshtml/Uk.rc @@ -24,7 +24,7 @@ LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_HTMLDISABLED "В даний момент відображення HTML вимкнено." IDS_HTMLDOCUMENT "Документ HTML" @@ -32,7 +32,7 @@ STRINGTABLE DISCARDABLE IDS_INSTALLING "Встановлення..." } -ID_DWL_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 260, 95 +ID_DWL_DIALOG DIALOG 0, 0, 260, 95 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Встановлювач Wine Gecko" FONT 8, "MS Shell Dlg" @@ -46,7 +46,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON "&Скасувати", IDCANCEL, 140, 70, 50, 15, WS_GROUP | WS_TABSTOP } -IDD_HYPERLINK DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 250, 65 +IDD_HYPERLINK DIALOG 0, 0, 250, 65 STYLE DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Гіперпосилання" FONT 8, "MS Shell Dlg" diff --git a/dll/win32/mshtml/Zh.rc b/dll/win32/mshtml/Zh.rc index c904dbc06b3..9a1b24bbf37 100644 --- a/dll/win32/mshtml/Zh.rc +++ b/dll/win32/mshtml/Zh.rc @@ -2,6 +2,7 @@ * mshtml (Simplified and Traditional Chinese Resources) * * Copyright 2008 Hongbo Ni + * Copyright 2010 Cheer Xiao * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -25,7 +26,7 @@ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_HTMLDISABLED "HTML 功能目前已被停用." IDS_HTMLDOCUMENT "HTML 文件" @@ -33,21 +34,20 @@ STRINGTABLE DISCARDABLE IDS_INSTALLING "正在安装..." } -ID_DWL_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 260, 95 +ID_DWL_DIALOG DIALOG 0, 0, 260, 95 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Wine Gecko 安装" FONT 9, "MS Shell Dlg" { - LTEXT "Wine could not find a Gecko package which is needed for applications embedding HTML " \ - "to work correctly. Wine can automatically download and install it for you.\n\n" \ - "Note: it's recommended to use distro packages instead. See http://wiki.winehq.org/Gecko for details.", + LTEXT "Wine 未找到到用于支持嵌入 HTML 的 Gecko 引擎。Wine 可以自动并下载安装它。\n\n" \ + "注意: 推荐您安装为发行版定制的软件包。具体参看 http://wiki.winehq.org/Gecko。", ID_DWL_STATUS, 10, 10, 240, 50, SS_LEFT - CONTROL "Progress", ID_DWL_PROGRESS, PROGRESS_CLASSA, WS_BORDER|PBS_SMOOTH, 10, 40, 240, 12 + CONTROL "进度", ID_DWL_PROGRESS, PROGRESS_CLASSA, WS_BORDER|PBS_SMOOTH, 10, 40, 240, 12 DEFPUSHBUTTON "安装(&I)", ID_DWL_INSTALL, 200, 70, 50, 15, WS_GROUP | WS_TABSTOP PUSHBUTTON "取消(&C)", IDCANCEL, 140, 70, 50, 15, WS_GROUP | WS_TABSTOP } -IDD_HYPERLINK DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 250, 65 +IDD_HYPERLINK DIALOG 0, 0, 250, 65 STYLE DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "超链接" FONT 9, "MS Shell Dlg" @@ -61,9 +61,20 @@ FONT 9, "MS Shell Dlg" PUSHBUTTON "取消", IDCANCEL, 200, 28, 45, 14, WS_GROUP | WS_TABSTOP } +ID_PROMPT_DIALOG DIALOG 0, 0, 200, 90 +STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "" +FONT 8, "MS Shell Dlg" +{ + LTEXT "", ID_PROMPT_PROMPT, 10, 10, 180, 30 + EDITTEXT ID_PROMPT_EDIT, 10, 45, 180, 14, ES_AUTOHSCROLL | WS_BORDER | WS_GROUP | WS_TABSTOP + PUSHBUTTON "确定", IDOK, 40, 65, 45, 15, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "取消", IDCANCEL, 115, 65, 45, 15, WS_GROUP | WS_TABSTOP +} + LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_HTMLDISABLED "HTML 功能目前已被停用." IDS_HTMLDOCUMENT "HTML 檔案" @@ -71,7 +82,7 @@ STRINGTABLE DISCARDABLE IDS_INSTALLING "正在安裝..." } -ID_DWL_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 260, 85 +ID_DWL_DIALOG DIALOG 0, 0, 260, 85 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Wine Gecko 安裝" FONT 9, "MS Shell Dlg" @@ -84,7 +95,7 @@ FONT 9, "MS Shell Dlg" PUSHBUTTON "取消(&C)", IDCANCEL, 140, 60, 50, 15, WS_GROUP | WS_TABSTOP } -IDD_HYPERLINK DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 250, 65 +IDD_HYPERLINK DIALOG 0, 0, 250, 65 STYLE DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "超鏈接" FONT 9, "MS Shell Dlg" diff --git a/dll/win32/mshtml/dispex.c b/dll/win32/mshtml/dispex.c index de0c94871f6..64356f5fde0 100644 --- a/dll/win32/mshtml/dispex.c +++ b/dll/win32/mshtml/dispex.c @@ -146,6 +146,7 @@ static REFIID tid_ids[] = { &IID_IHTMLInputElement, &IID_IHTMLLocation, &IID_IHTMLOptionElement, + &IID_IHTMLRect, &IID_IHTMLScreen, &IID_IHTMLScriptElement, &IID_IHTMLSelectElement, diff --git a/dll/win32/mshtml/htmldoc3.c b/dll/win32/mshtml/htmldoc3.c index f4ea0962cee..8d135ff37d2 100644 --- a/dll/win32/mshtml/htmldoc3.c +++ b/dll/win32/mshtml/htmldoc3.c @@ -189,8 +189,10 @@ static HRESULT WINAPI HTMLDocument3_detachEvent(IHTMLDocument3 *iface, BSTR even IDispatch *pDisp) { HTMLDocument *This = HTMLDOC3_THIS(iface); - FIXME("(%p)->(%s %p)\n", This, debugstr_w(event), pDisp); - return E_NOTIMPL; + + TRACE("(%p)->(%s %p)\n", This, debugstr_w(event), pDisp); + + return detach_event(This->doc_node->node.event_target, This, event, pDisp); } static HRESULT WINAPI HTMLDocument3_put_onrowsdelete(IHTMLDocument3 *iface, VARIANT v) diff --git a/dll/win32/mshtml/htmlelem2.c b/dll/win32/mshtml/htmlelem2.c index 548bab8b2f5..0c2072361b0 100644 --- a/dll/win32/mshtml/htmlelem2.c +++ b/dll/win32/mshtml/htmlelem2.c @@ -1,5 +1,5 @@ /* - * Copyright 2006 Jacek Caban for CodeWeavers + * Copyright 2006-2010 Jacek Caban for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -17,6 +17,7 @@ */ #include +#include #define COBJMACROS @@ -33,6 +34,251 @@ WINE_DEFAULT_DEBUG_CHANNEL(mshtml); +typedef struct { + DispatchEx dispex; + const IHTMLRectVtbl *lpIHTMLRectVtbl; + + LONG ref; + + nsIDOMClientRect *nsrect; +} HTMLRect; + +#define HTMLRECT(x) ((IHTMLRect*) &(x)->lpIHTMLRectVtbl) + +#define HTMLRECT_THIS(iface) DEFINE_THIS(HTMLRect, IHTMLRect, iface) + +static HRESULT WINAPI HTMLRect_QueryInterface(IHTMLRect *iface, REFIID riid, void **ppv) +{ + HTMLRect *This = HTMLRECT_THIS(iface); + + if(IsEqualGUID(&IID_IUnknown, riid)) { + TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv); + *ppv = HTMLRECT(This); + }else if(IsEqualGUID(&IID_IHTMLRect, riid)) { + TRACE("(%p)->(IID_IHTMLRect %p)\n", This, ppv); + *ppv = HTMLRECT(This); + }else if(dispex_query_interface(&This->dispex, riid, ppv)) { + return *ppv ? S_OK : E_NOINTERFACE; + }else { + FIXME("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv); + *ppv = NULL; + return E_NOINTERFACE; + } + + IUnknown_AddRef((IUnknown*)*ppv); + return S_OK; +} + +static ULONG WINAPI HTMLRect_AddRef(IHTMLRect *iface) +{ + HTMLRect *This = HTMLRECT_THIS(iface); + LONG ref = InterlockedIncrement(&This->ref); + + TRACE("(%p) ref=%d\n", This, ref); + + return ref; +} + +static ULONG WINAPI HTMLRect_Release(IHTMLRect *iface) +{ + HTMLRect *This = HTMLRECT_THIS(iface); + LONG ref = InterlockedDecrement(&This->ref); + + TRACE("(%p) ref=%d\n", This, ref); + + if(!ref) { + if(This->nsrect) + nsIDOMClientRect_Release(This->nsrect); + heap_free(This); + } + + return ref; +} + +static HRESULT WINAPI HTMLRect_GetTypeInfoCount(IHTMLRect *iface, UINT *pctinfo) +{ + HTMLRect *This = HTMLRECT_THIS(iface); + FIXME("(%p)->(%p)\n", This, pctinfo); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLRect_GetTypeInfo(IHTMLRect *iface, UINT iTInfo, + LCID lcid, ITypeInfo **ppTInfo) +{ + HTMLRect *This = HTMLRECT_THIS(iface); + + return IDispatchEx_GetTypeInfo(DISPATCHEX(&This->dispex), iTInfo, lcid, ppTInfo); +} + +static HRESULT WINAPI HTMLRect_GetIDsOfNames(IHTMLRect *iface, REFIID riid, + LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId) +{ + HTMLRect *This = HTMLRECT_THIS(iface); + + return IDispatchEx_GetIDsOfNames(DISPATCHEX(&This->dispex), riid, rgszNames, cNames, lcid, rgDispId); +} + +static HRESULT WINAPI HTMLRect_Invoke(IHTMLRect *iface, DISPID dispIdMember, + REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, + VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) +{ + HTMLRect *This = HTMLRECT_THIS(iface); + + return IDispatchEx_Invoke(DISPATCHEX(&This->dispex), dispIdMember, riid, lcid, wFlags, pDispParams, + pVarResult, pExcepInfo, puArgErr); +} + +static HRESULT WINAPI HTMLRect_put_left(IHTMLRect *iface, LONG v) +{ + HTMLRect *This = HTMLRECT_THIS(iface); + FIXME("(%p)->(%d)\n", This, v); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLRect_get_left(IHTMLRect *iface, LONG *p) +{ + HTMLRect *This = HTMLRECT_THIS(iface); + float left; + nsresult nsres; + + TRACE("(%p)->(%p)\n", This, p); + + nsres = nsIDOMClientRect_GetLeft(This->nsrect, &left); + if(NS_FAILED(nsres)) { + ERR("GetLeft failed: %08x\n", nsres); + return E_FAIL; + } + + *p = floor(left+0.5); + return S_OK; +} + +static HRESULT WINAPI HTMLRect_put_top(IHTMLRect *iface, LONG v) +{ + HTMLRect *This = HTMLRECT_THIS(iface); + FIXME("(%p)->(%d)\n", This, v); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLRect_get_top(IHTMLRect *iface, LONG *p) +{ + HTMLRect *This = HTMLRECT_THIS(iface); + float top; + nsresult nsres; + + TRACE("(%p)->(%p)\n", This, p); + + nsres = nsIDOMClientRect_GetTop(This->nsrect, &top); + if(NS_FAILED(nsres)) { + ERR("GetTop failed: %08x\n", nsres); + return E_FAIL; + } + + *p = floor(top+0.5); + return S_OK; +} + +static HRESULT WINAPI HTMLRect_put_right(IHTMLRect *iface, LONG v) +{ + HTMLRect *This = HTMLRECT_THIS(iface); + FIXME("(%p)->(%d)\n", This, v); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLRect_get_right(IHTMLRect *iface, LONG *p) +{ + HTMLRect *This = HTMLRECT_THIS(iface); + float right; + nsresult nsres; + + TRACE("(%p)->(%p)\n", This, p); + + nsres = nsIDOMClientRect_GetRight(This->nsrect, &right); + if(NS_FAILED(nsres)) { + ERR("GetRight failed: %08x\n", nsres); + return E_FAIL; + } + + *p = floor(right+0.5); + return S_OK; +} + +static HRESULT WINAPI HTMLRect_put_bottom(IHTMLRect *iface, LONG v) +{ + HTMLRect *This = HTMLRECT_THIS(iface); + FIXME("(%p)->(%d)\n", This, v); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLRect_get_bottom(IHTMLRect *iface, LONG *p) +{ + HTMLRect *This = HTMLRECT_THIS(iface); + float bottom; + nsresult nsres; + + TRACE("(%p)->(%p)\n", This, p); + + nsres = nsIDOMClientRect_GetBottom(This->nsrect, &bottom); + if(NS_FAILED(nsres)) { + ERR("GetBottom failed: %08x\n", nsres); + return E_FAIL; + } + + *p = floor(bottom+0.5); + return S_OK; +} + +#undef HTMLRECT_THIS + +static const IHTMLRectVtbl HTMLRectVtbl = { + HTMLRect_QueryInterface, + HTMLRect_AddRef, + HTMLRect_Release, + HTMLRect_GetTypeInfoCount, + HTMLRect_GetTypeInfo, + HTMLRect_GetIDsOfNames, + HTMLRect_Invoke, + HTMLRect_put_left, + HTMLRect_get_left, + HTMLRect_put_top, + HTMLRect_get_top, + HTMLRect_put_right, + HTMLRect_get_right, + HTMLRect_put_bottom, + HTMLRect_get_bottom +}; + +static const tid_t HTMLRect_iface_tids[] = { + IHTMLRect_tid, + 0 +}; +static dispex_static_data_t HTMLRect_dispex = { + NULL, + IHTMLRect_tid, + NULL, + HTMLRect_iface_tids +}; + +static HRESULT create_html_rect(nsIDOMClientRect *nsrect, IHTMLRect **ret) +{ + HTMLRect *rect; + + rect = heap_alloc_zero(sizeof(HTMLRect)); + if(!rect) + return E_OUTOFMEMORY; + + rect->lpIHTMLRectVtbl = &HTMLRectVtbl; + rect->ref = 1; + + init_dispex(&rect->dispex, (IUnknown*)HTMLRECT(rect), &HTMLRect_dispex); + + nsIDOMClientRect_AddRef(nsrect); + rect->nsrect = nsrect; + + *ret = HTMLRECT(rect); + return S_OK; +} + #define HTMLELEM2_THIS(iface) DEFINE_THIS(HTMLElement, HTMLElement2, iface) static HRESULT WINAPI HTMLElement2_QueryInterface(IHTMLElement2 *iface, @@ -364,8 +610,31 @@ static HRESULT WINAPI HTMLElement2_getClientRects(IHTMLElement2 *iface, IHTMLRec static HRESULT WINAPI HTMLElement2_getBoundingClientRect(IHTMLElement2 *iface, IHTMLRect **pRect) { HTMLElement *This = HTMLELEM2_THIS(iface); - FIXME("(%p)->(%p)\n", This, pRect); - return E_NOTIMPL; + nsIDOMNSElement *nselem; + nsIDOMClientRect *nsrect; + nsresult nsres; + HRESULT hres; + + TRACE("(%p)->(%p)\n", This, pRect); + + nsres = nsIDOMHTMLElement_QueryInterface(This->node.nsnode, &IID_nsIDOMNSElement, + (void**)&nselem); + if(NS_FAILED(nsres)) { + ERR("Could not get nsIDOMNSElement iface: %08x\n", nsres); + return E_FAIL; + } + + nsres = nsIDOMNSElement_GetBoundingClientRect(nselem, &nsrect); + nsIDOMNSElement_Release(nselem); + if(NS_FAILED(nsres) || !nsrect) { + ERR("GetBoindingClientRect failed: %08x\n", nsres); + return E_FAIL; + } + + hres = create_html_rect(nsrect, pRect); + + nsIDOMClientRect_Release(nsrect); + return hres; } static HRESULT WINAPI HTMLElement2_setExpression(IHTMLElement2 *iface, BSTR propname, diff --git a/dll/win32/mshtml/mshtml_private.h b/dll/win32/mshtml/mshtml_private.h index 4deb4d6357d..46886d8b3b1 100644 --- a/dll/win32/mshtml/mshtml_private.h +++ b/dll/win32/mshtml/mshtml_private.h @@ -120,6 +120,7 @@ typedef enum { IHTMLInputElement_tid, IHTMLLocation_tid, IHTMLOptionElement_tid, + IHTMLRect_tid, IHTMLScreen_tid, IHTMLScriptElement_tid, IHTMLSelectElement_tid, diff --git a/dll/win32/mshtml/nsiface.idl b/dll/win32/mshtml/nsiface.idl index 4ccc64a7c02..b62c7b2d2e1 100644 --- a/dll/win32/mshtml/nsiface.idl +++ b/dll/win32/mshtml/nsiface.idl @@ -131,7 +131,6 @@ typedef nsISupports nsIDOMMediaList; typedef nsISupports nsIDOMHTMLTableCaptionElement; typedef nsISupports nsIDOMHTMLTableSectionElement; typedef nsISupports nsIDOMClientRectList; -typedef nsISupports nsIDOMClientRect; typedef nsISupports nsIDOMLocation; typedef nsISupports nsIDocument; typedef nsISupports nsIContent; @@ -732,6 +731,22 @@ interface nsIDOMElementCSSInlineStyle : nsISupports nsresult GetStyle(nsIDOMCSSStyleDeclaration **aStyle); } +[ + object, + uuid(b2f824c4-d9d3-499b-8d3b-45c8245497c6), + local + /* NOT_FROZEN */ +] +interface nsIDOMClientRect : nsISupports +{ + nsresult GetLeft(float *aLeft); + nsresult GetTop(float *aTop); + nsresult GetRight(float *aRight); + nsresult GetBottom(float *aBottom); + nsresult GetWidth(float *aWidth); + nsresult GetHeight(float *aHeight); +} + [ object, uuid(f0aef489-18c5-4de6-99d5-58b3758b098c), diff --git a/dll/win32/msi/action.c b/dll/win32/msi/action.c index b40c840f142..bb559c016af 100644 --- a/dll/win32/msi/action.c +++ b/dll/win32/msi/action.c @@ -567,6 +567,7 @@ UINT msi_apply_patch_db( MSIPACKAGE *package, MSIDATABASE *patch_db, MSIPATCHINF */ append_storage_to_db( package->db, patch_db->storage ); + patch->state = MSIPATCHSTATE_APPLIED; list_add_tail( &package->patches, &patch->entry ); return ERROR_SUCCESS; } @@ -711,7 +712,7 @@ static BOOL ui_sequence_exists( MSIPACKAGE *package ) return FALSE; } -static UINT msi_set_sourcedir_props(MSIPACKAGE *package, BOOL replace) +UINT msi_set_sourcedir_props(MSIPACKAGE *package, BOOL replace) { LPWSTR source, check; @@ -813,7 +814,7 @@ static UINT ITERATE_Actions(MSIRECORD *row, LPVOID param) if (needs_ui_sequence(package)) rc = ACTION_PerformUIAction(package, action, -1); else - rc = ACTION_PerformAction(package, action, -1, FALSE); + rc = ACTION_PerformAction(package, action, -1); msi_dialog_check_messages( NULL ); @@ -896,6 +897,8 @@ static UINT ACTION_ProcessExecSequence(MSIPACKAGE *package, BOOL UIran) { TRACE("Running the actions\n"); + msi_set_property(package->db, cszSourceDir, NULL); + rc = MSI_IterateRecords(view, NULL, ITERATE_Actions, package); msiobj_release(&view->hdr); } @@ -965,6 +968,12 @@ static UINT ITERATE_CreateFolders(MSIRECORD *row, LPVOID param) if (!comp) return ERROR_SUCCESS; + if (!comp->Enabled) + { + TRACE("component is disabled\n"); + return ERROR_SUCCESS; + } + if (comp->ActionRequest != INSTALLSTATE_LOCAL) { TRACE("Component not scheduled for installation: %s\n", debugstr_w(component)); @@ -1038,6 +1047,12 @@ static UINT ITERATE_RemoveFolders( MSIRECORD *row, LPVOID param ) if (!comp) return ERROR_SUCCESS; + if (!comp->Enabled) + { + TRACE("component is disabled\n"); + return ERROR_SUCCESS; + } + if (comp->ActionRequest != INSTALLSTATE_ABSENT) { TRACE("Component not scheduled for removal: %s\n", debugstr_w(component)); @@ -1605,7 +1620,7 @@ static UINT execute_script(MSIPACKAGE *package, UINT script ) action = package->script->Actions[script][i]; ui_actionstart(package, action); TRACE("Executing Action (%s)\n",debugstr_w(action)); - rc = ACTION_PerformAction(package, action, script, TRUE); + rc = ACTION_PerformAction(package, action, script); if (rc != ERROR_SUCCESS) break; } @@ -1793,17 +1808,29 @@ UINT MSI_SetFeatureStates(MSIPACKAGE *package) msi_feature_set_state(package, fl->feature, INSTALLSTATE_UNKNOWN); } } + else + { + LIST_FOR_EACH_ENTRY( feature, &package->features, MSIFEATURE, entry ) + { + BOOL selected = feature->Level > 0 && feature->Level <= level; + + if (selected && feature->Action == INSTALLSTATE_UNKNOWN) + { + msi_feature_set_state(package, feature, feature->Installed); + } + } + } /* - * now we want to enable or disable components base on feature + * now we want to enable or disable components based on feature */ - LIST_FOR_EACH_ENTRY( feature, &package->features, MSIFEATURE, entry ) { ComponentList *cl; - TRACE("Examining Feature %s (Level %i, Installed %i, Action %i)\n", - debugstr_w(feature->Feature), feature->Level, feature->Installed, feature->Action); + TRACE("Examining Feature %s (Level %d Installed %d Request %d Action %d)\n", + debugstr_w(feature->Feature), feature->Level, feature->Installed, + feature->ActionRequest, feature->Action); if (!feature->Level) continue; @@ -1811,8 +1838,7 @@ UINT MSI_SetFeatureStates(MSIPACKAGE *package) /* features with components that have compressed files are made local */ LIST_FOR_EACH_ENTRY( cl, &feature->Components, ComponentList, entry ) { - if (cl->component->Enabled && - cl->component->ForceLocalState && + if (cl->component->ForceLocalState && feature->Action == INSTALLSTATE_SOURCE) { msi_feature_set_state(package, feature, INSTALLSTATE_LOCAL); @@ -1824,9 +1850,6 @@ UINT MSI_SetFeatureStates(MSIPACKAGE *package) { component = cl->component; - if (!component->Enabled) - continue; - switch (feature->Action) { case INSTALLSTATE_ABSENT: @@ -1857,10 +1880,6 @@ UINT MSI_SetFeatureStates(MSIPACKAGE *package) LIST_FOR_EACH_ENTRY( component, &package->components, MSICOMPONENT, entry ) { - /* if the component isn't enabled, leave it alone */ - if (!component->Enabled) - continue; - /* check if it's local or source */ if (!(component->Attributes & msidbComponentAttributesOptional) && (component->hasLocalFeature || component->hasSourceFeature)) @@ -1899,17 +1918,16 @@ UINT MSI_SetFeatureStates(MSIPACKAGE *package) LIST_FOR_EACH_ENTRY( component, &package->components, MSICOMPONENT, entry ) { - if (component->Action == INSTALLSTATE_DEFAULT) + if (component->ActionRequest == INSTALLSTATE_DEFAULT) { TRACE("%s was default, setting to local\n", debugstr_w(component->Component)); msi_component_set_state(package, component, INSTALLSTATE_LOCAL); } - TRACE("Result: Component %s (Installed %i, Action %i)\n", - debugstr_w(component->Component), component->Installed, component->Action); + TRACE("Result: Component %s (Installed %d Request %d Action %d)\n", + debugstr_w(component->Component), component->Installed, component->ActionRequest, component->Action); } - return ERROR_SUCCESS; } @@ -2370,16 +2388,17 @@ static UINT ITERATE_WriteRegistryValues(MSIRECORD *row, LPVOID param) ui_progress(package,2,0,0,0); - value = NULL; - key = NULL; - uikey = NULL; - name = NULL; - component = MSI_RecordGetString(row, 6); comp = get_loaded_component(package,component); if (!comp) return ERROR_SUCCESS; + if (!comp->Enabled) + { + TRACE("component is disabled\n"); + return ERROR_SUCCESS; + } + if (comp->ActionRequest != INSTALLSTATE_LOCAL) { TRACE("Component not scheduled for installation: %s\n", debugstr_w(component)); @@ -2550,6 +2569,12 @@ static UINT ITERATE_RemoveRegistryValuesOnUninstall( MSIRECORD *row, LPVOID para if (!comp) return ERROR_SUCCESS; + if (!comp->Enabled) + { + TRACE("component is disabled\n"); + return ERROR_SUCCESS; + } + if (comp->ActionRequest != INSTALLSTATE_ABSENT) { TRACE("Component not scheduled for removal: %s\n", debugstr_w(component)); @@ -2619,6 +2644,12 @@ static UINT ITERATE_RemoveRegistryValuesOnInstall( MSIRECORD *row, LPVOID param if (!comp) return ERROR_SUCCESS; + if (!comp->Enabled) + { + TRACE("component is disabled\n"); + return ERROR_SUCCESS; + } + if (comp->ActionRequest != INSTALLSTATE_LOCAL) { TRACE("Component not scheduled for installation: %s\n", debugstr_w(component)); @@ -2742,9 +2773,9 @@ static UINT ACTION_InstallValidate(MSIPACKAGE *package) LIST_FOR_EACH_ENTRY( feature, &package->features, MSIFEATURE, entry ) { - TRACE("Feature: %s; Installed: %i; Action %i; Request %i\n", - debugstr_w(feature->Feature), feature->Installed, feature->Action, - feature->ActionRequest); + TRACE("Feature: %s Installed %d Request %d Action %d\n", + debugstr_w(feature->Feature), feature->Installed, + feature->ActionRequest, feature->Action); } return ERROR_SUCCESS; @@ -2994,6 +3025,8 @@ static UINT ACTION_ProcessComponents(MSIPACKAGE *package) squash_guid(package->ProductCode,squished_pc); ui_progress(package,1,COMPONENT_PROGRESS_VALUE,1,0); + msi_set_sourcedir_props(package, FALSE); + LIST_FOR_EACH_ENTRY( comp, &package->components, MSICOMPONENT, entry ) { MSIRECORD * uirow; @@ -3009,11 +3042,12 @@ static UINT ACTION_ProcessComponents(MSIPACKAGE *package) ACTION_RefCountComponent( package, comp ); - TRACE("Component %s (%s), Keypath=%s, RefCount=%i\n", + TRACE("Component %s (%s), Keypath=%s, RefCount=%i Request=%u\n", debugstr_w(comp->Component), debugstr_w(squished_cc), debugstr_w(comp->FullKeypath), - comp->RefCount); + comp->RefCount, + comp->ActionRequest); if (comp->ActionRequest == INSTALLSTATE_LOCAL || comp->ActionRequest == INSTALLSTATE_SOURCE) @@ -3041,7 +3075,7 @@ static UINT ACTION_ProcessComponents(MSIPACKAGE *package) msi_reg_set_val_str(hkey, szPermKey, comp->FullKeypath); } - if (comp->Action == INSTALLSTATE_LOCAL) + if (comp->ActionRequest == INSTALLSTATE_LOCAL) msi_reg_set_val_str(hkey, squished_pc, comp->FullKeypath); else { @@ -3179,6 +3213,12 @@ static UINT ITERATE_RegisterTypeLibraries(MSIRECORD *row, LPVOID param) if (!comp) return ERROR_SUCCESS; + if (!comp->Enabled) + { + TRACE("component is disabled\n"); + return ERROR_SUCCESS; + } + if (comp->ActionRequest != INSTALLSTATE_LOCAL) { TRACE("Component not scheduled for installation: %s\n", debugstr_w(component)); @@ -3288,6 +3328,12 @@ static UINT ITERATE_UnregisterTypeLibraries( MSIRECORD *row, LPVOID param ) if (!comp) return ERROR_SUCCESS; + if (!comp->Enabled) + { + TRACE("component is disabled\n"); + return ERROR_SUCCESS; + } + if (comp->ActionRequest != INSTALLSTATE_ABSENT) { TRACE("Component not scheduled for removal %s\n", debugstr_w(component)); @@ -3379,6 +3425,12 @@ static UINT ITERATE_CreateShortcuts(MSIRECORD *row, LPVOID param) if (!comp) return ERROR_SUCCESS; + if (!comp->Enabled) + { + TRACE("component is disabled\n"); + return ERROR_SUCCESS; + } + if (comp->ActionRequest != INSTALLSTATE_LOCAL) { TRACE("Component not scheduled for installation %s\n", debugstr_w(component)); @@ -3515,6 +3567,12 @@ static UINT ITERATE_RemoveShortcuts( MSIRECORD *row, LPVOID param ) if (!comp) return ERROR_SUCCESS; + if (!comp->Enabled) + { + TRACE("component is disabled\n"); + return ERROR_SUCCESS; + } + if (comp->ActionRequest != INSTALLSTATE_ABSENT) { TRACE("Component not scheduled for removal %s\n", debugstr_w(component)); @@ -3769,9 +3827,6 @@ static UINT msi_publish_upgrade_code(MSIPACKAGE *package) LPWSTR upgrade; WCHAR squashed_pc[SQUISH_GUID_SIZE]; - static const WCHAR szUpgradeCode[] = - {'U','p','g','r','a','d','e','C','o','d','e',0}; - upgrade = msi_dup_property(package->db, szUpgradeCode); if (!upgrade) return ERROR_SUCCESS; @@ -3825,21 +3880,28 @@ static BOOL msi_check_unpublish(MSIPACKAGE *package) return TRUE; } -static UINT msi_publish_patches( MSIPACKAGE *package, HKEY prodkey ) +static UINT msi_publish_patches( MSIPACKAGE *package ) { static const WCHAR szAllPatches[] = {'A','l','l','P','a','t','c','h','e','s',0}; WCHAR patch_squashed[GUID_SIZE]; - HKEY patches_key = NULL, product_patches_key; + HKEY patches_key = NULL, product_patches_key = NULL, product_key; LONG res; MSIPATCHINFO *patch; UINT r; WCHAR *p, *all_patches = NULL; DWORD len = 0; - res = RegCreateKeyExW( prodkey, szPatches, 0, NULL, 0, KEY_ALL_ACCESS, NULL, &patches_key, NULL ); - if (res != ERROR_SUCCESS) + r = MSIREG_OpenProductKey( package->ProductCode, NULL, package->Context, &product_key, FALSE ); + if (r != ERROR_SUCCESS) return ERROR_FUNCTION_FAILED; + res = RegCreateKeyExW( product_key, szPatches, 0, NULL, 0, KEY_ALL_ACCESS, NULL, &patches_key, NULL ); + if (res != ERROR_SUCCESS) + { + r = ERROR_FUNCTION_FAILED; + goto done; + } + r = MSIREG_OpenUserDataProductPatchesKey( package->ProductCode, package->Context, &product_patches_key, TRUE ); if (r != ERROR_SUCCESS) goto done; @@ -3879,6 +3941,10 @@ static UINT msi_publish_patches( MSIPACKAGE *package, HKEY prodkey ) goto done; res = RegCreateKeyExW( product_patches_key, patch_squashed, 0, NULL, 0, KEY_ALL_ACCESS, NULL, &patch_key, NULL ); + if (res != ERROR_SUCCESS) + goto done; + + res = RegSetValueExW( patch_key, szState, 0, REG_DWORD, (const BYTE *)&patch->state, sizeof(patch->state) ); RegCloseKey( patch_key ); if (res != ERROR_SUCCESS) goto done; @@ -3898,6 +3964,7 @@ static UINT msi_publish_patches( MSIPACKAGE *package, HKEY prodkey ) done: RegCloseKey( product_patches_key ); RegCloseKey( patches_key ); + RegCloseKey( product_key ); msi_free( all_patches ); return r; } @@ -3914,6 +3981,13 @@ static UINT ACTION_PublishProduct(MSIPACKAGE *package) HKEY hukey = NULL, hudkey = NULL; MSIRECORD *uirow; + if (!list_empty(&package->patches)) + { + rc = msi_publish_patches(package); + if (rc != ERROR_SUCCESS) + goto end; + } + /* FIXME: also need to publish if the product is in advertise mode */ if (!msi_check_publish(package)) return ERROR_SUCCESS; @@ -3932,13 +4006,6 @@ static UINT ACTION_PublishProduct(MSIPACKAGE *package) if (rc != ERROR_SUCCESS) goto end; - if (!list_empty(&package->patches)) - { - rc = msi_publish_patches(package, hukey); - if (rc != ERROR_SUCCESS) - goto end; - } - rc = msi_publish_product_properties(package, hukey); if (rc != ERROR_SUCCESS) goto end; @@ -4010,6 +4077,12 @@ static UINT ITERATE_WriteIniValues(MSIRECORD *row, LPVOID param) if (!comp) return ERROR_SUCCESS; + if (!comp->Enabled) + { + TRACE("component is disabled\n"); + return ERROR_SUCCESS; + } + if (comp->ActionRequest != INSTALLSTATE_LOCAL) { TRACE("Component not scheduled for installation %s\n", debugstr_w(component)); @@ -4105,6 +4178,12 @@ static UINT ITERATE_RemoveIniValuesOnUninstall( MSIRECORD *row, LPVOID param ) if (!comp) return ERROR_SUCCESS; + if (!comp->Enabled) + { + TRACE("component is disabled\n"); + return ERROR_SUCCESS; + } + if (comp->ActionRequest != INSTALLSTATE_ABSENT) { TRACE("Component not scheduled for removal %s\n", debugstr_w(component)); @@ -4168,6 +4247,12 @@ static UINT ITERATE_RemoveIniValuesOnInstall( MSIRECORD *row, LPVOID param ) if (!comp) return ERROR_SUCCESS; + if (!comp->Enabled) + { + TRACE("component is disabled\n"); + return ERROR_SUCCESS; + } + if (comp->ActionRequest != INSTALLSTATE_LOCAL) { TRACE("Component not scheduled for installation %s\n", debugstr_w(component)); @@ -4248,23 +4333,38 @@ static UINT ACTION_RemoveIniValues( MSIPACKAGE *package ) return ERROR_SUCCESS; } +static void register_dll( const WCHAR *dll, BOOL unregister ) +{ + HMODULE hmod; + + hmod = LoadLibraryExW( dll, 0, LOAD_WITH_ALTERED_SEARCH_PATH ); + if (hmod) + { + HRESULT (WINAPI *func_ptr)( void ); + const char *func = unregister ? "DllUnregisterServer" : "DllRegisterServer"; + + func_ptr = (void *)GetProcAddress( hmod, func ); + if (func_ptr) + { + HRESULT hr = func_ptr(); + if (FAILED( hr )) + WARN("failed to register dll 0x%08x\n", hr); + } + else + WARN("entry point %s not found\n", func); + FreeLibrary( hmod ); + return; + } + WARN("failed to load library %u\n", GetLastError()); +} + static UINT ITERATE_SelfRegModules(MSIRECORD *row, LPVOID param) { MSIPACKAGE *package = param; LPCWSTR filename; - LPWSTR FullName; MSIFILE *file; - DWORD len; - static const WCHAR ExeStr[] = - {'r','e','g','s','v','r','3','2','.','e','x','e',' ','/','s', ' ','\"',0}; - static const WCHAR close[] = {'\"',0}; - STARTUPINFOW si; - PROCESS_INFORMATION info; - BOOL brc; MSIRECORD *uirow; - memset(&si,0,sizeof(STARTUPINFOW)); - filename = MSI_RecordGetString(row,1); file = get_loaded_file( package, filename ); @@ -4274,23 +4374,9 @@ static UINT ITERATE_SelfRegModules(MSIRECORD *row, LPVOID param) return ERROR_SUCCESS; } - len = strlenW(ExeStr) + strlenW( file->TargetPath ) + 2; + TRACE("Registering %s\n", debugstr_w( file->TargetPath )); - FullName = msi_alloc(len*sizeof(WCHAR)); - strcpyW(FullName,ExeStr); - strcatW( FullName, file->TargetPath ); - strcatW(FullName,close); - - TRACE("Registering %s\n",debugstr_w(FullName)); - brc = CreateProcessW(NULL, FullName, NULL, NULL, FALSE, 0, NULL, c_colon, - &si, &info); - - if (brc) - { - CloseHandle(info.hThread); - msi_dialog_check_messages(info.hProcess); - CloseHandle(info.hProcess); - } + register_dll( file->TargetPath, FALSE ); uirow = MSI_CreateRecord( 2 ); MSI_RecordSetStringW( uirow, 1, filename ); @@ -4298,7 +4384,6 @@ static UINT ITERATE_SelfRegModules(MSIRECORD *row, LPVOID param) ui_actiondata( package, szSelfRegModules, uirow ); msiobj_release( &uirow->hdr ); - msi_free( FullName ); return ERROR_SUCCESS; } @@ -4325,21 +4410,11 @@ static UINT ACTION_SelfRegModules(MSIPACKAGE *package) static UINT ITERATE_SelfUnregModules( MSIRECORD *row, LPVOID param ) { - static const WCHAR regsvr32[] = - {'r','e','g','s','v','r','3','2','.','e','x','e',' ','/','u',' ','/','s',' ','\"',0}; - static const WCHAR close[] = {'\"',0}; MSIPACKAGE *package = param; LPCWSTR filename; - LPWSTR cmdline; MSIFILE *file; - DWORD len; - STARTUPINFOW si; - PROCESS_INFORMATION pi; - BOOL ret; MSIRECORD *uirow; - memset( &si, 0, sizeof(STARTUPINFOW) ); - filename = MSI_RecordGetString( row, 1 ); file = get_loaded_file( package, filename ); @@ -4349,22 +4424,9 @@ static UINT ITERATE_SelfUnregModules( MSIRECORD *row, LPVOID param ) return ERROR_SUCCESS; } - len = strlenW( regsvr32 ) + strlenW( file->TargetPath ) + 2; + TRACE("Unregistering %s\n", debugstr_w( file->TargetPath )); - cmdline = msi_alloc( len * sizeof(WCHAR) ); - strcpyW( cmdline, regsvr32 ); - strcatW( cmdline, file->TargetPath ); - strcatW( cmdline, close ); - - TRACE("Unregistering %s\n", debugstr_w(cmdline)); - - ret = CreateProcessW( NULL, cmdline, NULL, NULL, FALSE, 0, NULL, c_colon, &si, &pi ); - if (ret) - { - CloseHandle( pi.hThread ); - msi_dialog_check_messages( pi.hProcess ); - CloseHandle( pi.hProcess ); - } + register_dll( file->TargetPath, TRUE ); uirow = MSI_CreateRecord( 2 ); MSI_RecordSetStringW( uirow, 1, filename ); @@ -4372,7 +4434,6 @@ static UINT ITERATE_SelfUnregModules( MSIRECORD *row, LPVOID param ) ui_actiondata( package, szSelfUnregModules, uirow ); msiobj_release( &uirow->hdr ); - msi_free( cmdline ); return ERROR_SUCCESS; } @@ -4694,9 +4755,6 @@ static UINT ACTION_RegisterProduct(MSIPACKAGE *package) HKEY upgrade; UINT rc; - static const WCHAR szUpgradeCode[] = { - 'U','p','g','r','a','d','e','C','o','d','e',0}; - /* FIXME: also need to publish if the product is in advertise mode */ if (!msi_check_publish(package)) return ERROR_SUCCESS; @@ -4747,11 +4805,9 @@ static UINT ACTION_InstallExecute(MSIPACKAGE *package) return execute_script(package,INSTALL_SCRIPT); } -static UINT msi_unpublish_product(MSIPACKAGE *package) +static UINT msi_unpublish_product(MSIPACKAGE *package, WCHAR *remove) { - LPWSTR upgrade; - LPWSTR remove = NULL; - LPWSTR *features = NULL; + WCHAR *upgrade, **features; BOOL full_uninstall = TRUE; MSIFEATURE *feature; MSIPATCHINFO *patch; @@ -4759,14 +4815,9 @@ static UINT msi_unpublish_product(MSIPACKAGE *package) static const WCHAR szUpgradeCode[] = {'U','p','g','r','a','d','e','C','o','d','e',0}; - remove = msi_dup_property(package->db, szRemove); - if (!remove) - return ERROR_SUCCESS; - features = msi_split_string(remove, ','); if (!features) { - msi_free(remove); ERR("REMOVE feature list is empty!\n"); return ERROR_FUNCTION_FAILED; } @@ -4781,9 +4832,10 @@ static UINT msi_unpublish_product(MSIPACKAGE *package) full_uninstall = FALSE; } } + msi_free(features); if (!full_uninstall) - goto done; + return ERROR_SUCCESS; MSIREG_DeleteProductKey(package->ProductCode); MSIREG_DeleteUserDataProductKey(package->ProductCode); @@ -4812,19 +4864,13 @@ static UINT msi_unpublish_product(MSIPACKAGE *package) MSIREG_DeleteUserDataPatchKey(patch->patchcode, package->Context); } -done: - msi_free(remove); - msi_free(features); return ERROR_SUCCESS; } static UINT ACTION_InstallFinalize(MSIPACKAGE *package) { UINT rc; - - rc = msi_unpublish_product(package); - if (rc != ERROR_SUCCESS) - return rc; + WCHAR *remove; /* turn off scheduling */ package->script->CurrentlyScripting= FALSE; @@ -4836,7 +4882,14 @@ static UINT ACTION_InstallFinalize(MSIPACKAGE *package) /* then handle Commit Actions */ rc = execute_script(package,COMMIT_SCRIPT); + if (rc != ERROR_SUCCESS) + return rc; + remove = msi_dup_property(package->db, szRemove); + if (remove) + rc = msi_unpublish_product(package, remove); + + msi_free(remove); return rc; } @@ -5337,6 +5390,12 @@ static UINT ITERATE_StartService(MSIRECORD *rec, LPVOID param) if (!comp) return ERROR_SUCCESS; + if (!comp->Enabled) + { + TRACE("component is disabled\n"); + return ERROR_SUCCESS; + } + if (comp->ActionRequest != INSTALLSTATE_LOCAL) { TRACE("Component not scheduled for installation: %s\n", debugstr_w(component)); @@ -5529,6 +5588,12 @@ static UINT ITERATE_StopService( MSIRECORD *rec, LPVOID param ) if (!comp) return ERROR_SUCCESS; + if (!comp->Enabled) + { + TRACE("component is disabled\n"); + return ERROR_SUCCESS; + } + if (comp->ActionRequest != INSTALLSTATE_ABSENT) { TRACE("Component not scheduled for removal: %s\n", debugstr_w(component)); @@ -5606,6 +5671,12 @@ static UINT ITERATE_DeleteService( MSIRECORD *rec, LPVOID param ) if (!comp) return ERROR_SUCCESS; + if (!comp->Enabled) + { + TRACE("component is disabled\n"); + return ERROR_SUCCESS; + } + if (comp->ActionRequest != INSTALLSTATE_ABSENT) { TRACE("Component not scheduled for removal: %s\n", debugstr_w(component)); @@ -6213,6 +6284,12 @@ static UINT ITERATE_WriteEnvironmentString( MSIRECORD *rec, LPVOID param ) if (!comp) return ERROR_SUCCESS; + if (!comp->Enabled) + { + TRACE("component is disabled\n"); + return ERROR_SUCCESS; + } + if (comp->ActionRequest != INSTALLSTATE_LOCAL) { TRACE("Component not scheduled for installation: %s\n", debugstr_w(component)); @@ -6396,6 +6473,12 @@ static UINT ITERATE_RemoveEnvironmentString( MSIRECORD *rec, LPVOID param ) if (!comp) return ERROR_SUCCESS; + if (!comp->Enabled) + { + TRACE("component is disabled\n"); + return ERROR_SUCCESS; + } + if (comp->ActionRequest != INSTALLSTATE_ABSENT) { TRACE("Component not scheduled for removal: %s\n", debugstr_w(component)); @@ -7216,47 +7299,27 @@ StandardActions[] = { NULL, NULL }, }; -static BOOL ACTION_HandleStandardAction(MSIPACKAGE *package, LPCWSTR action, - UINT* rc, BOOL force ) +static BOOL ACTION_HandleStandardAction( MSIPACKAGE *package, LPCWSTR action, UINT *rc ) { BOOL ret = FALSE; - BOOL run = force; - int i; - - if (!run && !package->script->CurrentlyScripting) - run = TRUE; - - if (!run) - { - if (strcmpW(action,szInstallFinalize) == 0 || - strcmpW(action,szInstallExecute) == 0 || - strcmpW(action,szInstallExecuteAgain) == 0) - run = TRUE; - } + UINT i; i = 0; while (StandardActions[i].action != NULL) { - if (strcmpW(StandardActions[i].action, action)==0) + if (!strcmpW( StandardActions[i].action, action )) { - if (!run) + ui_actionstart( package, action ); + if (StandardActions[i].handler) { - ui_actioninfo(package, action, TRUE, 0); - *rc = schedule_action(package,INSTALL_SCRIPT,action); - ui_actioninfo(package, action, FALSE, *rc); + ui_actioninfo( package, action, TRUE, 0 ); + *rc = StandardActions[i].handler( package ); + ui_actioninfo( package, action, FALSE, *rc ); } else { - ui_actionstart(package, action); - if (StandardActions[i].handler) - { - *rc = StandardActions[i].handler(package); - } - else - { - FIXME("unhandled standard action %s\n",debugstr_w(action)); - *rc = ERROR_SUCCESS; - } + FIXME("unhandled standard action %s\n", debugstr_w(action)); + *rc = ERROR_SUCCESS; } ret = TRUE; break; @@ -7266,17 +7329,17 @@ static BOOL ACTION_HandleStandardAction(MSIPACKAGE *package, LPCWSTR action, return ret; } -UINT ACTION_PerformAction(MSIPACKAGE *package, const WCHAR *action, UINT script, BOOL force) +UINT ACTION_PerformAction(MSIPACKAGE *package, const WCHAR *action, UINT script) { UINT rc = ERROR_SUCCESS; BOOL handled; TRACE("Performing action (%s)\n", debugstr_w(action)); - handled = ACTION_HandleStandardAction(package, action, &rc, force); + handled = ACTION_HandleStandardAction(package, action, &rc); if (!handled) - handled = ACTION_HandleCustomAction(package, action, &rc, script, force); + handled = ACTION_HandleCustomAction(package, action, &rc, script, TRUE); if (!handled) { @@ -7294,7 +7357,7 @@ UINT ACTION_PerformUIAction(MSIPACKAGE *package, const WCHAR *action, UINT scrip TRACE("Performing action (%s)\n", debugstr_w(action)); - handled = ACTION_HandleStandardAction(package, action, &rc,TRUE); + handled = ACTION_HandleStandardAction(package, action, &rc); if (!handled) handled = ACTION_HandleCustomAction(package, action, &rc, script, FALSE); @@ -7359,7 +7422,7 @@ static UINT ACTION_PerformActionSequence(MSIPACKAGE *package, UINT seq) if (needs_ui_sequence(package)) rc = ACTION_PerformUIAction(package, action, -1); else - rc = ACTION_PerformAction(package, action, -1, FALSE); + rc = ACTION_PerformAction(package, action, -1); msiobj_release(&row->hdr); } @@ -7433,6 +7496,9 @@ UINT MSI_InstallPackage( MSIPACKAGE *package, LPCWSTR szPackagePath, /* properties may have been added by a transform */ msi_clone_properties( package ); + + msi_parse_command_line( package, szCommandLine, FALSE ); + msi_adjust_allusers_property( package ); msi_set_context( package ); if (needs_ui_sequence( package)) diff --git a/dll/win32/msi/appsearch.c b/dll/win32/msi/appsearch.c index 34130b62a74..a516bdad1c8 100644 --- a/dll/win32/msi/appsearch.c +++ b/dll/win32/msi/appsearch.c @@ -958,7 +958,10 @@ static UINT ACTION_AppSearchDr(MSIPACKAGE *package, LPWSTR *appValue, MSISIGNATU rc = ACTION_AppSearchSigName(package, parentName, &parentSig, &parent); ACTION_FreeSignature(&parentSig); if (!parent) + { + msiobj_release(&row->hdr); return ERROR_SUCCESS; + } } sz = MAX_PATH; diff --git a/dll/win32/msi/classes.c b/dll/win32/msi/classes.c index 22d11c1441c..30ee36b4bfd 100644 --- a/dll/win32/msi/classes.c +++ b/dll/win32/msi/classes.c @@ -824,6 +824,12 @@ UINT ACTION_RegisterClassInfo(MSIPACKAGE *package) if ( !comp ) continue; + if (!comp->Enabled) + { + TRACE("component is disabled\n"); + continue; + } + feature = cls->Feature; if (!feature) continue; @@ -976,6 +982,12 @@ UINT ACTION_UnregisterClassInfo( MSIPACKAGE *package ) if (!comp) continue; + if (!comp->Enabled) + { + TRACE("component is disabled\n"); + continue; + } + feature = cls->Feature; if (!feature) continue; @@ -1137,7 +1149,7 @@ UINT ACTION_UnregisterProgIdInfo( MSIPACKAGE *package ) res = RegDeleteTreeW( HKEY_CLASSES_ROOT, progid->ProgID ); if (res != ERROR_SUCCESS) - WARN("Failed to delete progid key %d\n", res); + TRACE("Failed to delete progid key %d\n", res); uirow = MSI_CreateRecord( 1 ); MSI_RecordSetStringW( uirow, 1, progid->ProgID ); @@ -1250,6 +1262,12 @@ UINT ACTION_RegisterExtensionInfo(MSIPACKAGE *package) if (!ext->Component) continue; + if (!ext->Component->Enabled) + { + TRACE("component is disabled\n"); + continue; + } + feature = ext->Feature; if (!feature) continue; @@ -1354,6 +1372,12 @@ UINT ACTION_UnregisterExtensionInfo( MSIPACKAGE *package ) if (!ext->Component) continue; + if (!ext->Component->Enabled) + { + TRACE("component is disabled\n"); + continue; + } + feature = ext->Feature; if (!feature) continue; diff --git a/dll/win32/msi/database.c b/dll/win32/msi/database.c index 3e577926340..01c32497a37 100644 --- a/dll/win32/msi/database.c +++ b/dll/win32/msi/database.c @@ -126,8 +126,10 @@ static UINT clone_open_stream( MSIDATABASE *db, LPCWSTR name, IStream **stm ) UINT db_get_raw_stream( MSIDATABASE *db, LPCWSTR stname, IStream **stm ) { HRESULT r; + WCHAR decoded[MAX_STREAM_NAME_LEN]; - TRACE("%s\n", debugstr_w(stname)); + decode_streamname( stname, decoded ); + TRACE("%s -> %s\n", debugstr_w(stname), debugstr_w(decoded)); if (clone_open_stream( db, stname, stm ) == ERROR_SUCCESS) return ERROR_SUCCESS; @@ -140,7 +142,6 @@ UINT db_get_raw_stream( MSIDATABASE *db, LPCWSTR stname, IStream **stm ) LIST_FOR_EACH_ENTRY( transform, &db->transforms, MSITRANSFORM, entry ) { - TRACE("looking for %s in transform storage\n", debugstr_w(stname) ); r = IStorage_OpenStream( transform->stg, stname, NULL, STGM_READ | STGM_SHARE_EXCLUSIVE, 0, stm ); if (SUCCEEDED(r)) @@ -226,7 +227,7 @@ void append_storage_to_db( MSIDATABASE *db, IStorage *stg ) t = msi_alloc( sizeof *t ); t->stg = stg; IStorage_AddRef( stg ); - list_add_tail( &db->transforms, &t->entry ); + list_add_head( &db->transforms, &t->entry ); /* the transform may add or replace streams */ free_streams( db ); diff --git a/dll/win32/msi/events.c b/dll/win32/msi/events.c index 4ed395bbc59..157d18575f4 100644 --- a/dll/win32/msi/events.c +++ b/dll/win32/msi/events.c @@ -163,7 +163,7 @@ static UINT ControlEvent_SpawnWaitDialog(MSIPACKAGE* package, LPCWSTR argument, static UINT ControlEvent_DoAction(MSIPACKAGE* package, LPCWSTR argument, msi_dialog* dialog) { - ACTION_PerformAction(package,argument,-1,TRUE); + ACTION_PerformAction(package, argument, -1); return ERROR_SUCCESS; } diff --git a/dll/win32/msi/files.c b/dll/win32/msi/files.c index 79d78143bb4..0ed9582c179 100644 --- a/dll/win32/msi/files.c +++ b/dll/win32/msi/files.c @@ -66,7 +66,7 @@ static void schedule_install_files(MSIPACKAGE *package) LIST_FOR_EACH_ENTRY(file, &package->files, MSIFILE, entry) { - if (file->Component->ActionRequest != INSTALLSTATE_LOCAL) + if (file->Component->ActionRequest != INSTALLSTATE_LOCAL || !file->Component->Enabled) { TRACE("File %s is not scheduled for install\n", debugstr_w(file->File)); @@ -501,6 +501,12 @@ static UINT ITERATE_MoveFiles( MSIRECORD *rec, LPVOID param ) if (!comp) return ERROR_SUCCESS; + if (!comp->Enabled) + { + TRACE("component is disabled\n"); + return ERROR_SUCCESS; + } + if (comp->ActionRequest != INSTALLSTATE_LOCAL && comp->ActionRequest != INSTALLSTATE_SOURCE) { TRACE("Component not scheduled for installation: %s\n", debugstr_w(component)); @@ -693,6 +699,12 @@ static UINT ITERATE_DuplicateFiles(MSIRECORD *row, LPVOID param) if (!comp) return ERROR_SUCCESS; + if (!comp->Enabled) + { + TRACE("component is disabled\n"); + return ERROR_SUCCESS; + } + if (comp->ActionRequest != INSTALLSTATE_LOCAL) { TRACE("Component not scheduled for installation %s\n", debugstr_w(component)); @@ -775,6 +787,12 @@ static UINT ITERATE_RemoveDuplicateFiles( MSIRECORD *row, LPVOID param ) if (!comp) return ERROR_SUCCESS; + if (!comp->Enabled) + { + TRACE("component is disabled\n"); + return ERROR_SUCCESS; + } + if (comp->ActionRequest != INSTALLSTATE_ABSENT) { TRACE("Component not scheduled for removal %s\n", debugstr_w(component)); @@ -888,6 +906,12 @@ static UINT ITERATE_RemoveFiles(MSIRECORD *row, LPVOID param) return ERROR_FUNCTION_FAILED; } + if (!comp->Enabled) + { + TRACE("component is disabled\n"); + return ERROR_SUCCESS; + } + if (!verify_comp_for_removal(comp, install_mode)) { TRACE("Skipping removal due to missing conditions\n"); @@ -972,6 +996,12 @@ UINT ACTION_RemoveFiles( MSIPACKAGE *package ) file->Component->Installed == INSTALLSTATE_SOURCE ) continue; + if (!file->Component->Enabled) + { + TRACE("component is disabled\n"); + continue; + } + if (file->Version) { ver = msi_get_disk_file_version( file->TargetPath ); diff --git a/dll/win32/msi/font.c b/dll/win32/msi/font.c index 1d99a4c0d3a..2128e922a56 100644 --- a/dll/win32/msi/font.c +++ b/dll/win32/msi/font.c @@ -196,6 +196,12 @@ static UINT ITERATE_RegisterFonts(MSIRECORD *row, LPVOID param) return ERROR_SUCCESS; } + if (!file->Component->Enabled) + { + TRACE("component is disabled\n"); + return ERROR_SUCCESS; + } + if (file->Component->ActionRequest != INSTALLSTATE_LOCAL) { TRACE("Component not scheduled for installation\n"); @@ -274,6 +280,12 @@ static UINT ITERATE_UnregisterFonts( MSIRECORD *row, LPVOID param ) return ERROR_SUCCESS; } + if (!file->Component->Enabled) + { + TRACE("component is disabled\n"); + return ERROR_SUCCESS; + } + if (file->Component->ActionRequest != INSTALLSTATE_ABSENT) { TRACE("Component not scheduled for removal\n"); diff --git a/dll/win32/msi/media.c b/dll/win32/msi/media.c index 6dc262c8d3b..a2a90654186 100644 --- a/dll/win32/msi/media.c +++ b/dll/win32/msi/media.c @@ -653,6 +653,7 @@ static UINT msi_load_media_info(MSIPACKAGE *package, MSIFILE *file, MSIMEDIAINFO if (!mi->first_volume) mi->first_volume = strdupW(mi->volume_label); + msi_set_sourcedir_props(package, FALSE); source_dir = msi_dup_property(package->db, cszSourceDir); lstrcpyW(mi->sourcedir, source_dir); mi->type = get_drive_type(source_dir); diff --git a/dll/win32/msi/msi.rc b/dll/win32/msi/msi.rc index 47dc1d61ca9..d81484f66bb 100644 --- a/dll/win32/msi/msi.rc +++ b/dll/win32/msi/msi.rc @@ -51,12 +51,12 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL #include "msi_Ro.rc" #include "msi_Ru.rc" #include "msi_Si.rc" - +#include "msi_Sr.rc" LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL /* @makedep: msiserver.tlb */ -1 TYPELIB LOADONCALL DISCARDABLE msiserver.tlb +1 TYPELIB msiserver.tlb /* @makedep: instadvert.bmp */ 0x1001 BITMAP instadvert.bmp diff --git a/dll/win32/msi/msi.spec b/dll/win32/msi/msi.spec index 94e3ed3cb23..6fdebd86f10 100644 --- a/dll/win32/msi/msi.spec +++ b/dll/win32/msi/msi.spec @@ -275,6 +275,20 @@ 279 stdcall MsiMessageBoxExA(long str str long long long long) 280 stdcall MsiMessageBoxExW(long wstr wstr long long long long) 281 stdcall MsiSetExternalUIRecord(ptr long ptr ptr) +282 stub MsiGetPatchFileListA +283 stub MsiGetPatchFileListW +284 stub MsiBeginTransactionA +285 stub MsiBeginTransactionW +286 stub MsiEndTransaction +287 stub MsiJoinTransaction +288 stub MsiSetOfflineContextW +289 stub MsiEnumComponentsExA +290 stub MsiEnumComponentsExW +291 stub MsiEnumClientsExA +292 stub MsiEnumClientsExW +293 stub MsiGetComponentPathExA +294 stub MsiGetComponentPathExW +295 stub QueryInstanceCount @ stdcall -private DllCanUnloadNow() @ stdcall -private DllGetClassObject(ptr ptr ptr) diff --git a/dll/win32/msi/msi_Bg.rc b/dll/win32/msi/msi_Bg.rc index 8aea16940f3..63b02553a37 100644 --- a/dll/win32/msi/msi_Bg.rc +++ b/dll/win32/msi/msi_Bg.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_BULGARIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { 4 "The specified installation package could not be opened. Please check the file path and try again." 5 " %s " diff --git a/dll/win32/msi/msi_Da.rc b/dll/win32/msi/msi_Da.rc index fa7e1c43c39..88aa3bd472f 100644 --- a/dll/win32/msi/msi_Da.rc +++ b/dll/win32/msi/msi_Da.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_DANISH, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { 4 "Kunne ikke bne den specificerede installationspakke. Kontroller stien og prv igen." 5 "kunne ikke finden stien '%s'." diff --git a/dll/win32/msi/msi_De.rc b/dll/win32/msi/msi_De.rc index e07b5efd127..8c113f9b802 100644 --- a/dll/win32/msi/msi_De.rc +++ b/dll/win32/msi/msi_De.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL #pragma code_page(65001) -STRINGTABLE DISCARDABLE +STRINGTABLE { 4 "Das angegebene Installationspaket konnte nicht geöffnet werden. Bitte überprüfen Sie den Pfadnamen und versuchen Sie es noch einmal." 5 "Der Pfad %s wurde nicht gefunden." diff --git a/dll/win32/msi/msi_En.rc b/dll/win32/msi/msi_En.rc index c506e003445..2bfc165d8a9 100644 --- a/dll/win32/msi/msi_En.rc +++ b/dll/win32/msi/msi_En.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { 4 "The specified installation package could not be opened. Please check the file path and try again." 5 "path %s not found" diff --git a/dll/win32/msi/msi_Es.rc b/dll/win32/msi/msi_Es.rc index f5425dbb654..b27d7c109ae 100644 --- a/dll/win32/msi/msi_Es.rc +++ b/dll/win32/msi/msi_Es.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { 4 "No se ha podido abrir el paquete de instalacin especificado. Por favor, compruebe la ruta del archivo y vuelva a intentarlo." 5 "ruta %s no encontrada" diff --git a/dll/win32/msi/msi_Fi.rc b/dll/win32/msi/msi_Fi.rc index f3d58bff2bc..7769a8afe76 100644 --- a/dll/win32/msi/msi_Fi.rc +++ b/dll/win32/msi/msi_Fi.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_FINNISH, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { 4 "The specified installation package could not be opened. Please check the file path and try again." 5 "Polkua %s ei lydy." diff --git a/dll/win32/msi/msi_Fr.rc b/dll/win32/msi/msi_Fr.rc index 6cd1fc5ca21..62fd941bba7 100644 --- a/dll/win32/msi/msi_Fr.rc +++ b/dll/win32/msi/msi_Fr.rc @@ -26,7 +26,7 @@ LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { 4 "Le paquet d'installation spécifié n'a pu être ouvert. Veuillez vérifier le chemin du fichier et réessayer." 5 "Le chemin %s est introuvable" diff --git a/dll/win32/msi/msi_Hu.rc b/dll/win32/msi/msi_Hu.rc index 846de4ccada..2c21e7ca55d 100644 --- a/dll/win32/msi/msi_Hu.rc +++ b/dll/win32/msi/msi_Hu.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { 4 "The specified installation package could not be opened. Please check the file path and try again." 5 "%s tvonal nem tallhat" diff --git a/dll/win32/msi/msi_It.rc b/dll/win32/msi/msi_It.rc index 0586bb4bab5..0c47280c102 100644 --- a/dll/win32/msi/msi_It.rc +++ b/dll/win32/msi/msi_It.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { 4 "Impossibile aprire il pacchetto di installazione specificato. Per favore controlla l'indirizzo del file e riprova." 5 "percorso %s non trovato" diff --git a/dll/win32/msi/msi_Ko.rc b/dll/win32/msi/msi_Ko.rc index 04efd83f9df..346e9be6105 100644 --- a/dll/win32/msi/msi_Ko.rc +++ b/dll/win32/msi/msi_Ko.rc @@ -24,7 +24,7 @@ LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { 4 " ġ Ű ϴ. θ Ȯϰ ٽ õϽʽÿ." 5 "%s θ ã ϴ" diff --git a/dll/win32/msi/msi_Lt.rc b/dll/win32/msi/msi_Lt.rc index c88592c49bc..6c2a6414df4 100644 --- a/dll/win32/msi/msi_Lt.rc +++ b/dll/win32/msi/msi_Lt.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { 4 "Nepavyko atverti nurodyto diegimo paketo. Patikrinkite failo kelią ir mėginkite dar kartą." 5 "kelias %s nerastas" diff --git a/dll/win32/msi/msi_Nl.rc b/dll/win32/msi/msi_Nl.rc index 306cfd7e30a..29cb8a32e63 100644 --- a/dll/win32/msi/msi_Nl.rc +++ b/dll/win32/msi/msi_Nl.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { 4 "Het opgegeven installatie pakket kon niet worden geopend. Verifieer het bestandspad en probeer opnieuw." 5 "Pad %s niet gevonden" diff --git a/dll/win32/msi/msi_No.rc b/dll/win32/msi/msi_No.rc index 93e26c67211..d9e5938ccf7 100644 --- a/dll/win32/msi/msi_No.rc +++ b/dll/win32/msi/msi_No.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_NORWEGIAN, SUBLANG_NORWEGIAN_BOKMAL -STRINGTABLE DISCARDABLE +STRINGTABLE { 4 "Klarte ikke pne den oppgitte installasjonspakken. Kontroller filbanen og prv igjen." 5 "Fant ikke stien '%s'." diff --git a/dll/win32/msi/msi_Pl.rc b/dll/win32/msi/msi_Pl.rc index ceb64dd9c8c..e3f8bd4f139 100644 --- a/dll/win32/msi/msi_Pl.rc +++ b/dll/win32/msi/msi_Pl.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_POLISH, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { 4 "Nie udao si otworzy wybranego pakietu instalacyjnego. Sprawd czy cieka jest poprawna i sprbuj ponownie." 5 "cieka '%s' nie zostaa odnaleziona" diff --git a/dll/win32/msi/msi_Pt.rc b/dll/win32/msi/msi_Pt.rc index 4a1045c2ebd..d8b75d9d8ff 100644 --- a/dll/win32/msi/msi_Pt.rc +++ b/dll/win32/msi/msi_Pt.rc @@ -26,7 +26,7 @@ LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN -STRINGTABLE DISCARDABLE +STRINGTABLE { 4 "O pacote de instalação especificado não pôde ser aberto. Por favor, verifique o arquivo e tente novamente." 5 "caminho %s não encontrado" @@ -67,7 +67,7 @@ STRINGTABLE DISCARDABLE LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE -STRINGTABLE DISCARDABLE +STRINGTABLE { 4 "The specified installation package could not be opened. Please check the file path and try again." 5 "localização %s não encontrada" diff --git a/dll/win32/msi/msi_Ro.rc b/dll/win32/msi/msi_Ro.rc index ffd9c5e08d7..989e8483053 100644 --- a/dll/win32/msi/msi_Ro.rc +++ b/dll/win32/msi/msi_Ro.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL #pragma code_page(65001) -STRINGTABLE DISCARDABLE +STRINGTABLE { 4 "Pachetul de instalare menționat nu a putut fi deschis. Verificați calea și încercați din nou." 5 "calea %s nu a fost găsită" diff --git a/dll/win32/msi/msi_Ru.rc b/dll/win32/msi/msi_Ru.rc index 7cd4a2b0737..6e635f52947 100644 --- a/dll/win32/msi/msi_Ru.rc +++ b/dll/win32/msi/msi_Ru.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { 4 "Указанный пакет не может быть открыт. Проверьте файл и повторите попытку." 5 "путь %s не найден" diff --git a/dll/win32/msi/msi_Si.rc b/dll/win32/msi/msi_Si.rc index 3477f1ba6e5..1c689c297b6 100644 --- a/dll/win32/msi/msi_Si.rc +++ b/dll/win32/msi/msi_Si.rc @@ -24,7 +24,7 @@ LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { 4 "Navedenega namestitvenega paketa ni mogoče odpreti. Preverite ime datoteke in poskusite znova." 5 "pot %s ne obstaja" diff --git a/dll/win32/msi/msi_Sr.rc b/dll/win32/msi/msi_Sr.rc new file mode 100644 index 00000000000..ed481ea4668 --- /dev/null +++ b/dll/win32/msi/msi_Sr.rc @@ -0,0 +1,106 @@ +/* + * Serbian resources for MSI + * + * Copyright 2010 Nenad Vujic + * Paul Vriens + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include "windef.h" + +#pragma code_page(65001) + +LANGUAGE LANG_SERBIAN, SUBLANG_SERBIAN_LATIN + +STRINGTABLE +{ + 4 "Instalacija ne može biti otvorena. Molimo proverite destinaciju fajla i pokušajte ponovo." + 5 "putanja %s nije nađena" + 9 "Ubacite disk %s" + 10 "Windows Instalacija programa %s\n\n" \ + "Svrha:\n" \ + "msiexec komanda {traženi parametar} [opcioni parametar]\n\n" \ + "Instalacija proizvoda:\n" \ + "\t/i {paket|kod} [svojina]\n" \ + "\t/package {paket|kod} [svojina]\n" \ + "\t/a paket [svojina]\n" \ + "Popravak instalacije:\n" \ + "\t/f[p|o|e|d|c|a|u|m|s|v] {paket|kod}\n" \ + "Uninstal programa:\n" \ + "\t/uninstall {paket|kod} [svojina]\n" \ + "\t/x {paket|kod} [svojina]\n" \ + "Reklama programa:\n" \ + "\t/j[u|m] paket [/t pretvori] [/g id jezika]\n" \ + "Primeni peč:\n" \ + "\t/p pečpaket [svojina]\n" \ + "\t/p pečpaket /a paket [svojina]\n" \ + "Izveštalj i Izgled Modifikatori za komande iznad:\n" \ + "\t/l[*][i|w|e|a|r|u|c|m|o|p|v|][+|!] izvestaj\n" \ + "\t/q{|n|b|r|f|n+|b+|b-}\n" \ + "Registracija MSI Servisa:\n" \ + "\t/y\n " \ + "Uklanjanje MSI Servisa:\n" \ + "\t/z\n" \ + "Prikaži ovu Pomoć:\n" \ + "\t/help\n" \ + "\t/?\n" + 11 "unesite koji folder sadrži %s" + 12 "instalacija nedostaje" + 13 "mrežni drajv nedostaje" + 14 "dodatak sa:" + 15 "izaberite koji folder sadrži %s" +} + +LANGUAGE LANG_SERBIAN, SUBLANG_SERBIAN_CYRILLIC + +STRINGTABLE +{ + 4 "Инсталација не може бити отворена. Молимо проверите дестинацију фајла и покушајте поново." + 5 "путања %s није нађена" + 9 "Убаците диск %s" + 10 "Виндовс Инсталација програма %s\n\n" \ + "Сврха:\n" \ + "msiexec команда {тражени параметар} [опциони параметар]\n\n" \ + "Инсталација производа:\n" \ + "\t/i {пакет|код} [својина]\n" \ + "\t/package {пакет|код} [својина]\n" \ + "\t/a пакет [svojina]\n" \ + "Поправак инсталације:\n" \ + "\t/f[p|o|e|d|c|a|u|m|s|v] {пакет|код}\n" \ + "Брисање програма:\n" \ + "\t/uninstall {пакет|код} [svojina]\n" \ + "\t/x {пакет|код} [својина]\n" \ + "Реклама програма:\n" \ + "\t/j[u|m] пакет [/t transform] [/g languageid]\n" \ + "Примени печ:\n" \ + "\t/p печпакет [својина]\n" \ + "\t/p печпакет /a пакет [својина]\n" \ + "Известај и Изглед Модификатора за команде изнад:\n" \ + "\t/l[*][i|w|e|a|r|u|c|m|o|p|v|][+|!] извештај\n" \ + "\t/q{|n|b|r|f|n+|b+|b-}\n" \ + "Регистрација МСИ Сервиса:\n" \ + "\t/y\n" \ + "Уклањање МСИ Сервиса:\n" \ + "\t/z\n" \ + "Прикажи ову Помоћ:\n" \ + "\t/help\n" \ + "\t/?\n" + 11 "Унесите који фолдер садржи %s" + 12 "Инсталација недостаје" + 13 "Мрежни драјв недостаје" + 14 "Додатак са:" + 15 "Изаберите који фолдер садржи %s" +} diff --git a/dll/win32/msi/msi_Sv.rc b/dll/win32/msi/msi_Sv.rc index 4c37cfc475b..ed61893aba5 100644 --- a/dll/win32/msi/msi_Sv.rc +++ b/dll/win32/msi/msi_Sv.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_SWEDISH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { 4 "Det angivna installationspaketet kunde inte ppnas. Kontrollera filskvgen och frsk igen." 5 "skvgen %s hittades inte" diff --git a/dll/win32/msi/msi_Tr.rc b/dll/win32/msi/msi_Tr.rc index c6a12c1ae07..ad4c14e7a21 100644 --- a/dll/win32/msi/msi_Tr.rc +++ b/dll/win32/msi/msi_Tr.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { 4 "The specified installation package could not be opened. Please check the file path and try again." 5 "%s yolu bulunamad" diff --git a/dll/win32/msi/msi_Uk.rc b/dll/win32/msi/msi_Uk.rc index 2407bbe6e6d..60e2a3f053b 100644 --- a/dll/win32/msi/msi_Uk.rc +++ b/dll/win32/msi/msi_Uk.rc @@ -27,7 +27,7 @@ LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { 4 "Не вдалося відкрити вказаний пакет інсталяції. Перевірте шлях до файлу та спробуйте знов." 5 "шлях %s не знайдено" diff --git a/dll/win32/msi/msi_Zh.rc b/dll/win32/msi/msi_Zh.rc index 91fd5400258..0eb376de28e 100644 --- a/dll/win32/msi/msi_Zh.rc +++ b/dll/win32/msi/msi_Zh.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED -STRINGTABLE DISCARDABLE +STRINGTABLE { 4 "不能打开所指定的安装软件包. 请检查文件路径后再试." 5 "路径 %s 没找到" @@ -66,7 +66,7 @@ STRINGTABLE DISCARDABLE LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL -STRINGTABLE DISCARDABLE +STRINGTABLE { 4 "不能開啟所指定的安裝軟件包. 請檢查檔案路徑後再試." 5 "路徑 %s 沒找到" diff --git a/dll/win32/msi/msipriv.h b/dll/win32/msi/msipriv.h index d1e8113423f..344b1450e3a 100644 --- a/dll/win32/msi/msipriv.h +++ b/dll/win32/msi/msipriv.h @@ -44,6 +44,7 @@ #define MSITYPE_KEY 0x2000 #define MSITYPE_TEMPORARY 0x4000 +#define MAX_STREAM_NAME_LEN 62 /* Install UI level mask for AND operation to exclude flags */ #define INSTALLUILEVEL_MASK 0x0007 @@ -153,6 +154,7 @@ typedef struct tagMSIPATCHINFO LPWSTR patchcode; LPWSTR transforms; LPWSTR localfile; + MSIPATCHSTATE state; } MSIPATCHINFO; typedef struct _column_info @@ -763,6 +765,7 @@ extern UINT msi_package_add_info(MSIPACKAGE *, DWORD, DWORD, LPCWSTR, LPWSTR); extern UINT msi_package_add_media_disk(MSIPACKAGE *, DWORD, DWORD, DWORD, LPWSTR, LPWSTR); extern UINT msi_clone_properties(MSIPACKAGE *); extern UINT msi_set_context(MSIPACKAGE *); +extern void msi_adjust_allusers_property(MSIPACKAGE *); extern UINT MSI_GetFeatureCost(MSIPACKAGE *, MSIFEATURE *, MSICOSTTREE, INSTALLSTATE, LPINT); /* for deformating */ @@ -862,7 +865,7 @@ extern WCHAR gszLogFile[MAX_PATH]; extern HINSTANCE msi_hInstance; /* action related functions */ -extern UINT ACTION_PerformAction(MSIPACKAGE *package, const WCHAR *action, UINT script, BOOL force); +extern UINT ACTION_PerformAction(MSIPACKAGE *package, const WCHAR *action, UINT script); extern UINT ACTION_PerformUIAction(MSIPACKAGE *package, const WCHAR *action, UINT script); extern void ACTION_FinishCustomActions( const MSIPACKAGE* package); extern UINT ACTION_CustomAction(MSIPACKAGE *package,const WCHAR *action, UINT script, BOOL execute); @@ -1009,6 +1012,7 @@ extern WCHAR* generate_error_string(MSIPACKAGE *, UINT, DWORD, ... ); extern UINT msi_set_last_used_source(LPCWSTR product, LPCWSTR usersid, MSIINSTALLCONTEXT context, DWORD options, LPCWSTR value); extern UINT msi_get_local_package_name(LPWSTR path, LPCWSTR suffix); +extern UINT msi_set_sourcedir_props(MSIPACKAGE *package, BOOL replace); /* media */ @@ -1118,6 +1122,7 @@ static const WCHAR szInprocHandler32[] = {'I','n','p','r','o','c','H','a','n','d static const WCHAR szMIMEDatabase[] = {'M','I','M','E','\\','D','a','t','a','b','a','s','e','\\','C','o','n','t','e','n','t',' ','T','y','p','e','\\',0}; static const WCHAR szLocalPackage[] = {'L','o','c','a','l','P','a','c','k','a','g','e',0}; static const WCHAR szOriginalDatabase[] = {'O','r','i','g','i','n','a','l','D','a','t','a','b','a','s','e',0}; +static const WCHAR szUpgradeCode[] = {'U','p','g','r','a','d','e','C','o','d','e',0}; /* memory allocation macro functions */ static void *msi_alloc( size_t len ) __WINE_ALLOC_SIZE(1); diff --git a/dll/win32/msi/msiquery.c b/dll/win32/msi/msiquery.c index f2723affca9..df81a748223 100644 --- a/dll/win32/msi/msiquery.c +++ b/dll/win32/msi/msiquery.c @@ -733,7 +733,10 @@ UINT MSI_DatabaseApplyTransformW( MSIDATABASE *db, r = StgOpenStorage( szTransformFile, NULL, STGM_DIRECT|STGM_READ|STGM_SHARE_DENY_WRITE, NULL, 0, &stg); if ( FAILED(r) ) + { + WARN("failed to open transform 0x%08x\n", r); return ret; + } r = IStorage_Stat( stg, &stat, STATFLAG_NONAME ); if ( FAILED( r ) ) diff --git a/dll/win32/msi/package.c b/dll/win32/msi/package.c index fba722fe55c..d3321686964 100644 --- a/dll/win32/msi/package.c +++ b/dll/win32/msi/package.c @@ -324,57 +324,85 @@ static UINT create_temp_property_table(MSIPACKAGE *package) UINT msi_clone_properties(MSIPACKAGE *package) { - MSIQUERY *view = NULL; + MSIQUERY *view_select = NULL; UINT rc; - static const WCHAR Query[] = { + static const WCHAR query_select[] = { 'S','E','L','E','C','T',' ','*',' ', 'F','R','O','M',' ','`','P','r','o','p','e','r','t','y','`',0}; - static const WCHAR Insert[] = { + static const WCHAR query_insert[] = { 'I','N','S','E','R','T',' ','i','n','t','o',' ', '`','_','P','r','o','p','e','r','t','y','`',' ', '(','`','_','P','r','o','p','e','r','t','y','`',',', '`','V','a','l','u','e','`',')',' ', 'V','A','L','U','E','S',' ','(','?',',','?',')',0}; + static const WCHAR query_update[] = { + 'U','P','D','A','T','E',' ','`','_','P','r','o','p','e','r','t','y','`',' ', + 'S','E','T',' ','`','V','a','l','u','e','`',' ','=',' ','?',' ', + 'W','H','E','R','E',' ','`','_','P','r','o','p','e','r','t','y','`',' ','=',' ','?',0}; - /* clone the existing properties */ - rc = MSI_DatabaseOpenViewW(package->db, Query, &view); + rc = MSI_DatabaseOpenViewW( package->db, query_select, &view_select ); if (rc != ERROR_SUCCESS) return rc; - rc = MSI_ViewExecute(view, 0); + rc = MSI_ViewExecute( view_select, 0 ); if (rc != ERROR_SUCCESS) { - MSI_ViewClose(view); - msiobj_release(&view->hdr); + MSI_ViewClose( view_select ); + msiobj_release( &view_select->hdr ); return rc; } while (1) { - MSIRECORD *row; - MSIQUERY *view2; + MSIQUERY *view_insert, *view_update; + MSIRECORD *rec_select; - rc = MSI_ViewFetch(view, &row); + rc = MSI_ViewFetch( view_select, &rec_select ); if (rc != ERROR_SUCCESS) break; - rc = MSI_DatabaseOpenViewW(package->db, Insert, &view2); + rc = MSI_DatabaseOpenViewW( package->db, query_insert, &view_insert ); if (rc != ERROR_SUCCESS) { - msiobj_release(&row->hdr); + msiobj_release( &rec_select->hdr ); continue; } - MSI_ViewExecute(view2, row); - MSI_ViewClose(view2); - msiobj_release(&view2->hdr); - msiobj_release(&row->hdr); + rc = MSI_ViewExecute( view_insert, rec_select ); + MSI_ViewClose( view_insert ); + msiobj_release( &view_insert->hdr ); + if (rc != ERROR_SUCCESS) + { + MSIRECORD *rec_update; + + TRACE("insert failed, trying update\n"); + + rc = MSI_DatabaseOpenViewW( package->db, query_update, &view_update ); + if (rc != ERROR_SUCCESS) + { + WARN("open view failed %u\n", rc); + msiobj_release( &rec_select->hdr ); + continue; + } + + rec_update = MSI_CreateRecord( 2 ); + MSI_RecordCopyField( rec_select, 1, rec_update, 2 ); + MSI_RecordCopyField( rec_select, 2, rec_update, 1 ); + rc = MSI_ViewExecute( view_update, rec_update ); + if (rc != ERROR_SUCCESS) + WARN("update failed %u\n", rc); + + MSI_ViewClose( view_update ); + msiobj_release( &view_update->hdr ); + msiobj_release( &rec_update->hdr ); + } + + msiobj_release( &rec_select->hdr ); } - MSI_ViewClose(view); - msiobj_release(&view->hdr); - + MSI_ViewClose( view_select ); + msiobj_release( &view_select->hdr ); return rc; } @@ -1014,7 +1042,7 @@ static UINT msi_load_admin_properties(MSIPACKAGE *package) return r; } -static void adjust_allusers_property( MSIPACKAGE *package ) +void msi_adjust_allusers_property( MSIPACKAGE *package ) { /* FIXME: this should depend on the user's privileges */ if (msi_get_property_int( package->db, szAllUsers, 0 ) == 2) @@ -1046,6 +1074,7 @@ MSIPACKAGE *MSI_CreatePackage( MSIDATABASE *db, LPCWSTR base_url ) create_temp_property_table( package ); msi_clone_properties( package ); + msi_adjust_allusers_property( package ); package->ProductCode = msi_dup_property( package->db, szProductCode ); package->script = msi_alloc_zero( sizeof(MSISCRIPT) ); @@ -1065,8 +1094,6 @@ MSIPACKAGE *MSI_CreatePackage( MSIDATABASE *db, LPCWSTR base_url ) if (package->WordCount & msidbSumInfoSourceTypeAdminImage) msi_load_admin_properties( package ); - - adjust_allusers_property( package ); } return package; @@ -1210,6 +1237,13 @@ static UINT apply_registered_patch( MSIPACKAGE *package, LPCWSTR patch_code ) return r; } + patch_info->localfile = strdupW( patch_file ); + if (!patch_info->localfile) + { + msiobj_release( &patch_db->hdr ); + return ERROR_OUTOFMEMORY; + } + r = msi_apply_patch_db( package, patch_db, patch_info ); msiobj_release( &patch_db->hdr ); if (r != ERROR_SUCCESS) @@ -1371,6 +1405,12 @@ UINT MSI_OpenPackageW(LPCWSTR szPackage, MSIPACKAGE **pPackage) index++; } + if (index) + { + msi_clone_properties( package ); + msi_adjust_allusers_property( package ); + } + *pPackage = package; return ERROR_SUCCESS; } diff --git a/dll/win32/msi/registry.c b/dll/win32/msi/registry.c index 518303f5da0..2a84e11be61 100644 --- a/dll/win32/msi/registry.c +++ b/dll/win32/msi/registry.c @@ -1918,7 +1918,7 @@ static UINT msi_check_product_patches(LPCWSTR prodcode, LPCWSTR usersid, goto done; ptr = patches; - for (ptr = patches; *ptr && r == ERROR_NO_MORE_ITEMS; ptr += lstrlenW(ptr)) + for (ptr = patches; *ptr && r == ERROR_NO_MORE_ITEMS; ptr += lstrlenW(ptr) + 1) { if (!unsquash_guid(ptr, patch)) { diff --git a/dll/win32/msi/source.c b/dll/win32/msi/source.c index 0e752f50ffb..8e4323a4711 100644 --- a/dll/win32/msi/source.c +++ b/dll/win32/msi/source.c @@ -588,9 +588,6 @@ UINT WINAPI MsiSourceListGetInfoW( LPCWSTR szProduct, LPCWSTR szUserSid, if (szUserSid) FIXME("Unhandled UserSid %s\n",debugstr_w(szUserSid)); - if (dwContext != MSIINSTALLCONTEXT_USERUNMANAGED) - FIXME("Unhandled context %d\n", dwContext); - rc = OpenSourceKey(szProduct, &sourcekey, dwOptions, dwContext, FALSE); if (rc != ERROR_SUCCESS) return rc; diff --git a/dll/win32/msi/streams.c b/dll/win32/msi/streams.c index 59e845df82d..44c4e67718b 100644 --- a/dll/win32/msi/streams.c +++ b/dll/win32/msi/streams.c @@ -37,7 +37,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(msidb); #define NUM_STREAMS_COLS 2 -#define MAX_STREAM_NAME_LEN 62 typedef struct tabSTREAM { diff --git a/dll/win32/msimtf/msimtf_ros.diff b/dll/win32/msimtf/msimtf_ros.diff new file mode 100644 index 00000000000..19c3b0940ad --- /dev/null +++ b/dll/win32/msimtf/msimtf_ros.diff @@ -0,0 +1,13 @@ +Index: activeimmapp.c +=================================================================== +--- activeimmapp.c (revision 48273) ++++ activeimmapp.c (working copy) +@@ -655,7 +655,7 @@ + static HRESULT WINAPI ActiveIMMApp_OnDefWindowProc(IActiveIMMApp* This, + HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam, LRESULT *plResult) + { +- FIXME("Stub (%p %x %lx %lx)\n",hWnd,Msg,wParam,lParam); ++ //FIXME("Stub (%p %x %lx %lx)\n",hWnd,Msg,wParam,lParam); + return E_FAIL; + } + diff --git a/dll/win32/msrle32/msrle_Bg.rc b/dll/win32/msrle32/msrle_Bg.rc index 5073f0bf375..7eb114bc141 100644 --- a/dll/win32/msrle32/msrle_Bg.rc +++ b/dll/win32/msrle32/msrle_Bg.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_BULGARIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "WINE-MS-RLE" IDS_DESCRIPTION "Wine MS-RLE " diff --git a/dll/win32/msrle32/msrle_Cs.rc b/dll/win32/msrle32/msrle_Cs.rc index a4a6c2f6e49..4d96bea4eff 100644 --- a/dll/win32/msrle32/msrle_Cs.rc +++ b/dll/win32/msrle32/msrle_Cs.rc @@ -26,7 +26,7 @@ LANGUAGE LANG_CZECH, SUBLANG_DEFAULT /* Czech strings in CP1250 */ -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "WINE-MS-RLE" IDS_DESCRIPTION "Wine MS-RLE video kodek" diff --git a/dll/win32/msrle32/msrle_Cy.rc b/dll/win32/msrle32/msrle_Cy.rc new file mode 100644 index 00000000000..1794fd551c4 --- /dev/null +++ b/dll/win32/msrle32/msrle_Cy.rc @@ -0,0 +1,33 @@ +/* + * Cefnogaeth iaith Cymraeg + * Welsh language support + * + * Copyright 2010 Ken Sharp + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include "msrle_private.h" + +#pragma code_page(65001) + +LANGUAGE LANG_WELSH, SUBLANG_DEFAULT + +STRINGTABLE +{ + IDS_NAME "WINE-MS-RLE" + IDS_DESCRIPTION "Wine MS-RLE 'n fideo codec" + IDS_ABOUT "Wine MS-RLE 'n fideo codec\nHawlfraint 2002 Michael Günnewig" +} diff --git a/dll/win32/msrle32/msrle_Da.rc b/dll/win32/msrle32/msrle_Da.rc index 4ab40e3b048..f2835a0cb2c 100644 --- a/dll/win32/msrle32/msrle_Da.rc +++ b/dll/win32/msrle32/msrle_Da.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_DANISH, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "WINE-MS-RLE" IDS_DESCRIPTION "Wine MS-RLE videokodeks" diff --git a/dll/win32/msrle32/msrle_De.rc b/dll/win32/msrle32/msrle_De.rc index 0480cfbd104..71dc2c2be02 100644 --- a/dll/win32/msrle32/msrle_De.rc +++ b/dll/win32/msrle32/msrle_De.rc @@ -24,7 +24,7 @@ LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "WINE-MS-RLE" IDS_DESCRIPTION "Wine MS-RLE Videodekoder" diff --git a/dll/win32/msrle32/msrle_En.rc b/dll/win32/msrle32/msrle_En.rc index e95f395a70e..2a3520769d0 100644 --- a/dll/win32/msrle32/msrle_En.rc +++ b/dll/win32/msrle32/msrle_En.rc @@ -24,7 +24,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "WINE-MS-RLE" IDS_DESCRIPTION "Wine MS-RLE video codec" diff --git a/dll/win32/msrle32/msrle_Es.rc b/dll/win32/msrle32/msrle_Es.rc index edb62148113..de40b5770dd 100644 --- a/dll/win32/msrle32/msrle_Es.rc +++ b/dll/win32/msrle32/msrle_Es.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "WINE-MS-RLE" IDS_DESCRIPTION "Codec de vdeo MS-RLE de Wine" diff --git a/dll/win32/msrle32/msrle_Fr.rc b/dll/win32/msrle32/msrle_Fr.rc index f45892c7d55..aa046c1d330 100644 --- a/dll/win32/msrle32/msrle_Fr.rc +++ b/dll/win32/msrle32/msrle_Fr.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "WINE-MS-RLE" IDS_DESCRIPTION "Wine : codec vidéo MS-RLE" diff --git a/dll/win32/msrle32/msrle_Hu.rc b/dll/win32/msrle32/msrle_Hu.rc index 3f4b581f4cf..0e7876cecf1 100644 --- a/dll/win32/msrle32/msrle_Hu.rc +++ b/dll/win32/msrle32/msrle_Hu.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "WINE-MS-RLE" IDS_DESCRIPTION "Wine MS-RLE video kodek" diff --git a/dll/win32/msrle32/msrle_It.rc b/dll/win32/msrle32/msrle_It.rc index 0b21705355c..002ba7d5a87 100644 --- a/dll/win32/msrle32/msrle_It.rc +++ b/dll/win32/msrle32/msrle_It.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "WINE-MS-RLE" IDS_DESCRIPTION "Codec video MS-RLE di Wine" diff --git a/dll/win32/msrle32/msrle_Ja.rc b/dll/win32/msrle32/msrle_Ja.rc index e1ec7bb2b10..804a8ac0396 100644 --- a/dll/win32/msrle32/msrle_Ja.rc +++ b/dll/win32/msrle32/msrle_Ja.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "WINE-MS-RLE" IDS_DESCRIPTION "Wine MS-RLE ビデオコーデック" diff --git a/dll/win32/msrle32/msrle_Ko.rc b/dll/win32/msrle32/msrle_Ko.rc index f6c38b37a96..b804e32c1bc 100644 --- a/dll/win32/msrle32/msrle_Ko.rc +++ b/dll/win32/msrle32/msrle_Ko.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "WINE-MS-RLE" IDS_DESCRIPTION "Wine MS-RLE ڵ" diff --git a/dll/win32/msrle32/msrle_Lt.rc b/dll/win32/msrle32/msrle_Lt.rc index f399f544060..f6e5e0c98e8 100644 --- a/dll/win32/msrle32/msrle_Lt.rc +++ b/dll/win32/msrle32/msrle_Lt.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "WINE-MS-RLE" IDS_DESCRIPTION "Wine MS-RLE vaizdo kodekas" diff --git a/dll/win32/msrle32/msrle_Nl.rc b/dll/win32/msrle32/msrle_Nl.rc index ba0419c48dd..211b2563bee 100644 --- a/dll/win32/msrle32/msrle_Nl.rc +++ b/dll/win32/msrle32/msrle_Nl.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "WINE-MS-RLE" IDS_DESCRIPTION "Wine MS-RLE videodecoder" diff --git a/dll/win32/msrle32/msrle_No.rc b/dll/win32/msrle32/msrle_No.rc index 6b079f9ed47..02661a33342 100644 --- a/dll/win32/msrle32/msrle_No.rc +++ b/dll/win32/msrle32/msrle_No.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_NORWEGIAN, SUBLANG_NORWEGIAN_BOKMAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "WINE-MS-RLE" IDS_DESCRIPTION "Wine MS-RLE-videokodek" diff --git a/dll/win32/msrle32/msrle_Pl.rc b/dll/win32/msrle32/msrle_Pl.rc index b5b233b00d8..8a5d995a542 100644 --- a/dll/win32/msrle32/msrle_Pl.rc +++ b/dll/win32/msrle32/msrle_Pl.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_POLISH, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "WINE-MS-RLE" IDS_DESCRIPTION "Kodek Wine MS-RLE" diff --git a/dll/win32/msrle32/msrle_Pt.rc b/dll/win32/msrle32/msrle_Pt.rc index 33a646205ec..7ae0a260107 100644 --- a/dll/win32/msrle32/msrle_Pt.rc +++ b/dll/win32/msrle32/msrle_Pt.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "WINE-MS-RLE" IDS_DESCRIPTION "Wine MS-RLE codificador/decodificador de vdeo" @@ -32,7 +32,7 @@ STRINGTABLE DISCARDABLE LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "WINE-MS-RLE" IDS_DESCRIPTION "Wine MS-RLE codificador/decodificador de vdeo" diff --git a/dll/win32/msrle32/msrle_Ro.rc b/dll/win32/msrle32/msrle_Ro.rc index 16aa0e9f985..90ec4f2a2d4 100644 --- a/dll/win32/msrle32/msrle_Ro.rc +++ b/dll/win32/msrle32/msrle_Ro.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL #pragma code_page(65001) -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "WINE-MS-RLE" IDS_DESCRIPTION "Codecul video Wine MS-RLE" diff --git a/dll/win32/msrle32/msrle_Ru.rc b/dll/win32/msrle32/msrle_Ru.rc index 3b73391ef6c..456d7240018 100644 --- a/dll/win32/msrle32/msrle_Ru.rc +++ b/dll/win32/msrle32/msrle_Ru.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "WINE-MS-RLE" IDS_DESCRIPTION "Видео кодек Wine MS-RLE" diff --git a/dll/win32/msrle32/msrle_Si.rc b/dll/win32/msrle32/msrle_Si.rc index 346569bf5fd..e99d6a1bb89 100644 --- a/dll/win32/msrle32/msrle_Si.rc +++ b/dll/win32/msrle32/msrle_Si.rc @@ -24,7 +24,7 @@ LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "WINE-MS-RLE" IDS_DESCRIPTION "Wine MS-RLE video kodek" diff --git a/dll/win32/msrle32/msrle_Sv.rc b/dll/win32/msrle32/msrle_Sv.rc index 4570e609ad5..f3d3e494065 100644 --- a/dll/win32/msrle32/msrle_Sv.rc +++ b/dll/win32/msrle32/msrle_Sv.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_SWEDISH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "WINE-MS-RLE" IDS_DESCRIPTION "Wine MS-RLE videokodek" diff --git a/dll/win32/msrle32/msrle_Tr.rc b/dll/win32/msrle32/msrle_Tr.rc index 8decf375762..af516ac2537 100644 --- a/dll/win32/msrle32/msrle_Tr.rc +++ b/dll/win32/msrle32/msrle_Tr.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "WINE-MS-RLE" IDS_DESCRIPTION "Wine MS-RLE vidyo zc" diff --git a/dll/win32/msrle32/msrle_Uk.rc b/dll/win32/msrle32/msrle_Uk.rc index 19c4d663c8e..1e12f4982be 100644 --- a/dll/win32/msrle32/msrle_Uk.rc +++ b/dll/win32/msrle32/msrle_Uk.rc @@ -26,7 +26,7 @@ LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "WINE-MS-RLE" IDS_DESCRIPTION "Відео кодек Wine MS-RLE" diff --git a/dll/win32/msvcrt/msvcrt.spec b/dll/win32/msvcrt/msvcrt.spec index 3bc0554d68e..14f71694065 100644 --- a/dll/win32/msvcrt/msvcrt.spec +++ b/dll/win32/msvcrt/msvcrt.spec @@ -126,9 +126,9 @@ @ cdecl __RTDynamicCast(ptr long ptr ptr long) MSVCRT___RTDynamicCast @ cdecl __RTtypeid(ptr) MSVCRT___RTtypeid @ cdecl __STRINGTOLD(ptr ptr str long) -# @ cdecl ___lc_codepage_func() +@ cdecl ___lc_codepage_func() # @ cdecl ___lc_collate_cp_func() -# @ cdecl ___lc_handle_func() +@ cdecl ___lc_handle_func() # @ cdecl ___mb_cur_max_func() MSVCRT___mb_cur_max_func @ cdecl ___setlc_active_func() @ cdecl ___unguarded_readlc_active_add_func() @@ -151,10 +151,10 @@ @ cdecl __isascii(long) __isascii @ cdecl __iscsym(long) __iscsym @ cdecl __iscsymf(long) __iscsymf -@ extern __lc_codepage __lc_codepage +@ extern __lc_codepage MSVCRT___lc_codepage @ stub __lc_collate -@ extern __lc_collate_cp __lc_collate_cp -@ extern __lc_handle __lc_handle +@ extern __lc_collate_cp MSVCRT___lc_collate_cp +@ extern __lc_handle MSVCRT___lc_handle @ cdecl __lconv_init() # stub __libm_sse2_acos # stub __libm_sse2_acosf @@ -1166,10 +1166,12 @@ # @ cdecl btowc(long) @ cdecl calloc(long long) @ cdecl ceil(double) +@ cdecl -arch=x86_64 ceilf(double) @ cdecl clearerr(ptr) # stub clearerr_s @ cdecl clock() @ cdecl cos(double) +@ cdecl -arch=x86_64 cosf(double) @ cdecl cosh(double) @ cdecl ctime(ptr) @ cdecl difftime(long long) @@ -1252,6 +1254,7 @@ @ cdecl localtime(ptr) @ cdecl log(double) @ cdecl log10(double) +@ cdecl -arch=x86_64 logf(double) @ cdecl -i386 longjmp(ptr long) @ cdecl malloc(long) @ cdecl mblen(ptr long) diff --git a/dll/win32/msvfw32/msvfw32_Da.rc b/dll/win32/msvfw32/msvfw32_Da.rc index 20d60e23455..185528593b8 100644 --- a/dll/win32/msvfw32/msvfw32_Da.rc +++ b/dll/win32/msvfw32/msvfw32_Da.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_DANISH, SUBLANG_DEFAULT -ICM_CHOOSE_COMPRESSOR DIALOG DISCARDABLE 36, 24, 187, 95 +ICM_CHOOSE_COMPRESSOR DIALOG 36, 24, 187, 95 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Video komprimering" FONT 8, "MS Shell Dlg" @@ -49,7 +49,7 @@ FONT 8, "MS Shell Dlg" LTEXT "KB/s",896,102,78,26,10 } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_FULLFRAMES "Fulde billeder (ukomprimeret)" } diff --git a/dll/win32/msvfw32/msvfw32_De.rc b/dll/win32/msvfw32/msvfw32_De.rc index b697eb1aa14..ce99f640479 100644 --- a/dll/win32/msvfw32/msvfw32_De.rc +++ b/dll/win32/msvfw32/msvfw32_De.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL -ICM_CHOOSE_COMPRESSOR DIALOG DISCARDABLE 36, 24, 187, 95 +ICM_CHOOSE_COMPRESSOR DIALOG 36, 24, 187, 95 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Video Compression" FONT 8, "MS Shell Dlg" @@ -50,7 +50,7 @@ FONT 8, "MS Shell Dlg" LTEXT "KB/sec",896,102,78,26,10 } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_FULLFRAMES "Vollständige Frames (Unkomprimiert)" } diff --git a/dll/win32/msvfw32/msvfw32_En.rc b/dll/win32/msvfw32/msvfw32_En.rc index f3ee7357196..7668a7f0b06 100644 --- a/dll/win32/msvfw32/msvfw32_En.rc +++ b/dll/win32/msvfw32/msvfw32_En.rc @@ -20,7 +20,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT -ICM_CHOOSE_COMPRESSOR DIALOG DISCARDABLE 36, 24, 187, 95 +ICM_CHOOSE_COMPRESSOR DIALOG 36, 24, 187, 95 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Video Compression" FONT 8, "MS Shell Dlg" @@ -47,7 +47,7 @@ FONT 8, "MS Shell Dlg" LTEXT "KB/sec",896,102,78,26,10 } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_FULLFRAMES "Full Frames (Uncompressed)" } diff --git a/dll/win32/msvfw32/msvfw32_Es.rc b/dll/win32/msvfw32/msvfw32_Es.rc index c5eb635cb8f..e763a5263dd 100644 --- a/dll/win32/msvfw32/msvfw32_Es.rc +++ b/dll/win32/msvfw32/msvfw32_Es.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL -ICM_CHOOSE_COMPRESSOR DIALOG DISCARDABLE 36, 24, 187, 95 +ICM_CHOOSE_COMPRESSOR DIALOG 36, 24, 187, 95 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Compresión de vídeo" FONT 8, "MS Shell Dlg" @@ -50,7 +50,7 @@ FONT 8, "MS Shell Dlg" LTEXT "KB/s",896,102,78,26,10 } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_FULLFRAMES "Cuadros completos (no comprimidos)" } diff --git a/dll/win32/msvfw32/msvfw32_Fr.rc b/dll/win32/msvfw32/msvfw32_Fr.rc index 87d61cc0088..5fa94a707c4 100644 --- a/dll/win32/msvfw32/msvfw32_Fr.rc +++ b/dll/win32/msvfw32/msvfw32_Fr.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL -ICM_CHOOSE_COMPRESSOR DIALOG DISCARDABLE 36, 24, 208, 95 +ICM_CHOOSE_COMPRESSOR DIALOG 36, 24, 208, 95 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Compression vidéo" FONT 8, "MS Shell Dlg" @@ -50,7 +50,7 @@ FONT 8, "MS Shell Dlg" LTEXT "Kio/sec",896,115,78,26,10 } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_FULLFRAMES "Images complètes (non compressées)" } diff --git a/dll/win32/msvfw32/msvfw32_Hu.rc b/dll/win32/msvfw32/msvfw32_Hu.rc index e77b67fd543..70bf4d97006 100644 --- a/dll/win32/msvfw32/msvfw32_Hu.rc +++ b/dll/win32/msvfw32/msvfw32_Hu.rc @@ -20,7 +20,7 @@ LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT -ICM_CHOOSE_COMPRESSOR DIALOG DISCARDABLE 36, 24, 187, 95 +ICM_CHOOSE_COMPRESSOR DIALOG 36, 24, 187, 95 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Video tmrts" FONT 8, "MS Shell Dlg" @@ -47,7 +47,7 @@ FONT 8, "MS Shell Dlg" LTEXT "KB/sec",896,102,78,26,10 } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_FULLFRAMES "Teljes kpkockk (tmrtetlen)" } diff --git a/dll/win32/msvfw32/msvfw32_It.rc b/dll/win32/msvfw32/msvfw32_It.rc index 6f8ee4e4513..8d8656135b1 100644 --- a/dll/win32/msvfw32/msvfw32_It.rc +++ b/dll/win32/msvfw32/msvfw32_It.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL -ICM_CHOOSE_COMPRESSOR DIALOG DISCARDABLE 36, 24, 187, 95 +ICM_CHOOSE_COMPRESSOR DIALOG 36, 24, 187, 95 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Compressione video" FONT 8, "MS Shell Dlg" @@ -50,7 +50,7 @@ FONT 8, "MS Shell Dlg" LTEXT "KB/sec",896,102,78,26,10 } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_FULLFRAMES "Frames completi (non compresso)" } diff --git a/dll/win32/msvfw32/msvfw32_Ko.rc b/dll/win32/msvfw32/msvfw32_Ko.rc index 72e999d96f4..04227491b3a 100644 --- a/dll/win32/msvfw32/msvfw32_Ko.rc +++ b/dll/win32/msvfw32/msvfw32_Ko.rc @@ -21,7 +21,7 @@ LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT -ICM_CHOOSE_COMPRESSOR DIALOG DISCARDABLE 36, 24, 187, 95 +ICM_CHOOSE_COMPRESSOR DIALOG 36, 24, 187, 95 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION " " FONT 9, "MS Shell Dlg" @@ -48,7 +48,7 @@ FONT 9, "MS Shell Dlg" LTEXT "KB/sec",896,102,78,26,10 } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_FULLFRAMES "ä ()" } diff --git a/dll/win32/msvfw32/msvfw32_Lt.rc b/dll/win32/msvfw32/msvfw32_Lt.rc index c7432d3518f..1518d467966 100644 --- a/dll/win32/msvfw32/msvfw32_Lt.rc +++ b/dll/win32/msvfw32/msvfw32_Lt.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL -ICM_CHOOSE_COMPRESSOR DIALOG DISCARDABLE 36, 24, 192, 95 +ICM_CHOOSE_COMPRESSOR DIALOG 36, 24, 192, 95 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Vaizdų glaudinimas" FONT 8, "MS Shell Dlg" @@ -50,7 +50,7 @@ FONT 8, "MS Shell Dlg" LTEXT "KB/sek",896,102,78,26,10 } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_FULLFRAMES "Pilni kadrai (neglaudinti)" } diff --git a/dll/win32/msvfw32/msvfw32_Nl.rc b/dll/win32/msvfw32/msvfw32_Nl.rc index d82f860c400..bdd6a48f05a 100644 --- a/dll/win32/msvfw32/msvfw32_Nl.rc +++ b/dll/win32/msvfw32/msvfw32_Nl.rc @@ -20,7 +20,7 @@ LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL -ICM_CHOOSE_COMPRESSOR DIALOG DISCARDABLE 36, 24, 187, 95 +ICM_CHOOSE_COMPRESSOR DIALOG 36, 24, 187, 95 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Video Compressie" FONT 8, "MS Shell Dlg" @@ -47,7 +47,7 @@ FONT 8, "MS Shell Dlg" LTEXT "KB/sec",896,102,78,26,10 } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_FULLFRAMES "Volledige Frames (Ongecomprimeerd)" } diff --git a/dll/win32/msvfw32/msvfw32_No.rc b/dll/win32/msvfw32/msvfw32_No.rc index eb07aed3efb..7905b7a3f8a 100644 --- a/dll/win32/msvfw32/msvfw32_No.rc +++ b/dll/win32/msvfw32/msvfw32_No.rc @@ -20,7 +20,7 @@ LANGUAGE LANG_NORWEGIAN, SUBLANG_NORWEGIAN_BOKMAL -ICM_CHOOSE_COMPRESSOR DIALOG DISCARDABLE 36, 24, 187, 95 +ICM_CHOOSE_COMPRESSOR DIALOG 36, 24, 187, 95 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Videokomprimering" FONT 8, "MS Shell Dlg" @@ -47,7 +47,7 @@ FONT 8, "MS Shell Dlg" LTEXT "KB/s",896,102,78,26,10 } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_FULLFRAMES "Fulle bilder (ukomprimert)" } diff --git a/dll/win32/msvfw32/msvfw32_Pl.rc b/dll/win32/msvfw32/msvfw32_Pl.rc index cb5a9eb6cb7..642c853fd1c 100644 --- a/dll/win32/msvfw32/msvfw32_Pl.rc +++ b/dll/win32/msvfw32/msvfw32_Pl.rc @@ -21,7 +21,7 @@ LANGUAGE LANG_POLISH, SUBLANG_DEFAULT -ICM_CHOOSE_COMPRESSOR DIALOG DISCARDABLE 36, 24, 207, 95 +ICM_CHOOSE_COMPRESSOR DIALOG 36, 24, 207, 95 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Kompresja wideo" FONT 8, "MS Shell Dlg" @@ -48,7 +48,7 @@ FONT 8, "MS Shell Dlg" LTEXT "KB/s",896,114,78,31,10 } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_FULLFRAMES "Pene ramki (bez kompresji)" } diff --git a/dll/win32/msvfw32/msvfw32_Pt.rc b/dll/win32/msvfw32/msvfw32_Pt.rc index efd31191ad8..b12b516e09f 100644 --- a/dll/win32/msvfw32/msvfw32_Pt.rc +++ b/dll/win32/msvfw32/msvfw32_Pt.rc @@ -20,7 +20,7 @@ LANGUAGE LANG_PORTUGUESE, SUBLANG_NEUTRAL -ICM_CHOOSE_COMPRESSOR DIALOG DISCARDABLE 36, 24, 187, 95 +ICM_CHOOSE_COMPRESSOR DIALOG 36, 24, 187, 95 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Compresso de vdeo" FONT 8, "MS Shell Dlg" @@ -47,7 +47,7 @@ FONT 8, "MS Shell Dlg" LTEXT "KB/sec",896,102,78,26,10 } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_FULLFRAMES "Imagens Completas (Descomprimidas)" } diff --git a/dll/win32/msvfw32/msvfw32_Ro.rc b/dll/win32/msvfw32/msvfw32_Ro.rc index 69527b09660..2f442558f4f 100644 --- a/dll/win32/msvfw32/msvfw32_Ro.rc +++ b/dll/win32/msvfw32/msvfw32_Ro.rc @@ -24,7 +24,7 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL #pragma code_page(65001) -ICM_CHOOSE_COMPRESSOR DIALOG DISCARDABLE 36, 24, 200, 95 +ICM_CHOOSE_COMPRESSOR DIALOG 36, 24, 200, 95 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Compresie video" FONT 8, "MS Shell Dlg" @@ -51,7 +51,7 @@ FONT 8, "MS Shell Dlg" LTEXT "KO/sec",896,118,78,22,10 } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_FULLFRAMES "Cadre întregi (necomprimate)" } diff --git a/dll/win32/msvfw32/msvfw32_Ru.rc b/dll/win32/msvfw32/msvfw32_Ru.rc index 7acdb8ccc94..fd3d4096087 100644 --- a/dll/win32/msvfw32/msvfw32_Ru.rc +++ b/dll/win32/msvfw32/msvfw32_Ru.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT -ICM_CHOOSE_COMPRESSOR DIALOG DISCARDABLE 36, 24, 187, 95 +ICM_CHOOSE_COMPRESSOR DIALOG 36, 24, 187, 95 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Сжатие видео" FONT 8, "MS Shell Dlg" @@ -50,7 +50,7 @@ FONT 8, "MS Shell Dlg" LTEXT "КБ/сек",896,102,78,26,10 } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_FULLFRAMES "Кадры целиком (Без компрессии)" } diff --git a/dll/win32/msvfw32/msvfw32_Si.rc b/dll/win32/msvfw32/msvfw32_Si.rc index 93fb1757082..6ea6aa4be0b 100644 --- a/dll/win32/msvfw32/msvfw32_Si.rc +++ b/dll/win32/msvfw32/msvfw32_Si.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT -ICM_CHOOSE_COMPRESSOR DIALOG DISCARDABLE 36, 24, 187, 95 +ICM_CHOOSE_COMPRESSOR DIALOG 36, 24, 187, 95 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Stiskanje videa" FONT 8, "MS Shell Dlg" @@ -49,7 +49,7 @@ FONT 8, "MS Shell Dlg" LTEXT "kb/s",896,102,78,26,10 } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_FULLFRAMES "Polne slike (nestisnjeno)" } diff --git a/dll/win32/msvfw32/msvfw32_Sv.rc b/dll/win32/msvfw32/msvfw32_Sv.rc index 2461fce601e..6d28bb1ff05 100644 --- a/dll/win32/msvfw32/msvfw32_Sv.rc +++ b/dll/win32/msvfw32/msvfw32_Sv.rc @@ -20,7 +20,7 @@ LANGUAGE LANG_SWEDISH, SUBLANG_NEUTRAL -ICM_CHOOSE_COMPRESSOR DIALOG DISCARDABLE 36, 24, 187, 95 +ICM_CHOOSE_COMPRESSOR DIALOG 36, 24, 187, 95 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Videokomprimering" FONT 8, "MS Shell Dlg" @@ -47,7 +47,7 @@ FONT 8, "MS Shell Dlg" LTEXT "KB/s",896,102,78,26,10 } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_FULLFRAMES "Hela bildrutor (okomprimerat)" } diff --git a/dll/win32/msvfw32/msvfw32_Tr.rc b/dll/win32/msvfw32/msvfw32_Tr.rc index 09635095b5b..250416f99a0 100644 --- a/dll/win32/msvfw32/msvfw32_Tr.rc +++ b/dll/win32/msvfw32/msvfw32_Tr.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT -ICM_CHOOSE_COMPRESSOR DIALOG DISCARDABLE 36, 24, 187, 95 +ICM_CHOOSE_COMPRESSOR DIALOG 36, 24, 187, 95 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Vidyo Sktrma" FONT 8, "MS Shell Dlg" @@ -49,7 +49,7 @@ FONT 8, "MS Shell Dlg" LTEXT "KB/sec",896,102,78,26,10 } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_FULLFRAMES "Tm ereveler (Sktrlmam)" } diff --git a/dll/win32/msvfw32/msvfw32_Uk.rc b/dll/win32/msvfw32/msvfw32_Uk.rc index c9b1b67cf0f..5c26a82a00b 100644 --- a/dll/win32/msvfw32/msvfw32_Uk.rc +++ b/dll/win32/msvfw32/msvfw32_Uk.rc @@ -24,7 +24,7 @@ LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT -ICM_CHOOSE_COMPRESSOR DIALOG DISCARDABLE 36, 24, 187, 95 +ICM_CHOOSE_COMPRESSOR DIALOG 36, 24, 187, 95 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Стиснення Відео" FONT 8, "MS Shell Dlg" @@ -51,7 +51,7 @@ FONT 8, "MS Shell Dlg" LTEXT "KB/sec",896,102,78,26,10 } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_FULLFRAMES "Кадри повністю (Без стиснення)" } diff --git a/dll/win32/msvfw32/msvfw32_Zh.rc b/dll/win32/msvfw32/msvfw32_Zh.rc index 3ff0fc047f7..ad960d132b0 100644 --- a/dll/win32/msvfw32/msvfw32_Zh.rc +++ b/dll/win32/msvfw32/msvfw32_Zh.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED -ICM_CHOOSE_COMPRESSOR DIALOG DISCARDABLE 36, 24, 187, 95 +ICM_CHOOSE_COMPRESSOR DIALOG 36, 24, 187, 95 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "视频压缩" FONT 9, "MS Shell Dlg" @@ -52,14 +52,14 @@ FONT 9, "MS Shell Dlg" LTEXT "KB/sec",896,102,78,26,10 } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_FULLFRAMES "全帧(未压缩)" } LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL -ICM_CHOOSE_COMPRESSOR DIALOG DISCARDABLE 36, 24, 187, 95 +ICM_CHOOSE_COMPRESSOR DIALOG 36, 24, 187, 95 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "視頻壓縮" FONT 9, "MS Shell Dlg" @@ -86,7 +86,7 @@ FONT 9, "MS Shell Dlg" LTEXT "KB/sec",896,102,78,26,10 } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_FULLFRAMES "全幀(未壓縮)" } diff --git a/include/reactos/wine/winuser16.h b/dll/win32/msvidc32/msvidc32_Cy.rc similarity index 67% rename from include/reactos/wine/winuser16.h rename to dll/win32/msvidc32/msvidc32_Cy.rc index f53676883d0..28bb58938a5 100644 --- a/include/reactos/wine/winuser16.h +++ b/dll/win32/msvidc32/msvidc32_Cy.rc @@ -1,5 +1,8 @@ /* - * Copyright (C) the Wine project + * Cefnogaeth iaith Cymraeg + * Welsh language support + * + * Copyright 2010 Ken Sharp * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -13,14 +16,15 @@ * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#ifndef __WINE_WINE_WINUSER16_H -#define __WINE_WINE_WINUSER16_H +#include "msvidc32_private.h" -#ifndef CB_SETITEMDATA16 -#define CB_SETITEMDATA16 (WM_USER+17) -#endif +LANGUAGE LANG_WELSH, SUBLANG_DEFAULT -#endif /* __WINE_WINE_WINUSER16_H */ +STRINGTABLE +{ + IDS_NAME "MS-CRAM" + IDS_DESCRIPTION "Wine Video 1 'n fideo codec" +} diff --git a/dll/win32/msvidc32/msvidc32_Da.rc b/dll/win32/msvidc32/msvidc32_Da.rc index 0b286069358..7344cbe1edb 100644 --- a/dll/win32/msvidc32/msvidc32_Da.rc +++ b/dll/win32/msvidc32/msvidc32_Da.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_DANISH, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "MS-CRAM" IDS_DESCRIPTION "Wine Video 1 videokodeks" diff --git a/dll/win32/msvidc32/msvidc32_De.rc b/dll/win32/msvidc32/msvidc32_De.rc index 1dc777b8497..f90eb7c528a 100644 --- a/dll/win32/msvidc32/msvidc32_De.rc +++ b/dll/win32/msvidc32/msvidc32_De.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "MS-CRAM" IDS_DESCRIPTION "Wine Video 1 Video Codec" diff --git a/dll/win32/msvidc32/msvidc32_En.rc b/dll/win32/msvidc32/msvidc32_En.rc index 8ac6b59373f..510c45b1a84 100644 --- a/dll/win32/msvidc32/msvidc32_En.rc +++ b/dll/win32/msvidc32/msvidc32_En.rc @@ -20,7 +20,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "MS-CRAM" IDS_DESCRIPTION "Wine Video 1 video codec" diff --git a/dll/win32/msvidc32/msvidc32_Es.rc b/dll/win32/msvidc32/msvidc32_Es.rc index 889e898f94b..6896dff4672 100644 --- a/dll/win32/msvidc32/msvidc32_Es.rc +++ b/dll/win32/msvidc32/msvidc32_Es.rc @@ -24,7 +24,7 @@ LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL /*UTF-8*/ #pragma code_page(65001) -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "MS-CRAM" IDS_DESCRIPTION "códec de video Wine Video 1" diff --git a/dll/win32/msvidc32/msvidc32_Fr.rc b/dll/win32/msvidc32/msvidc32_Fr.rc index 8843e0d6b10..12864a18d25 100644 --- a/dll/win32/msvidc32/msvidc32_Fr.rc +++ b/dll/win32/msvidc32/msvidc32_Fr.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "MS-CRAM" IDS_DESCRIPTION "Codec vidéo Wine Video 1" diff --git a/dll/win32/msvidc32/msvidc32_Hu.rc b/dll/win32/msvidc32/msvidc32_Hu.rc index 2949bae96d1..ddef88c82f9 100644 --- a/dll/win32/msvidc32/msvidc32_Hu.rc +++ b/dll/win32/msvidc32/msvidc32_Hu.rc @@ -20,7 +20,7 @@ LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "MS-CRAM" IDS_DESCRIPTION "Wine Video 1 video kodek" diff --git a/dll/win32/msvidc32/msvidc32_It.rc b/dll/win32/msvidc32/msvidc32_It.rc index ade53ec8c82..bb98208c428 100644 --- a/dll/win32/msvidc32/msvidc32_It.rc +++ b/dll/win32/msvidc32/msvidc32_It.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "MS-CRAM" IDS_DESCRIPTION "Wine Video 1 video codec" diff --git a/dll/win32/msvidc32/msvidc32_Ja.rc b/dll/win32/msvidc32/msvidc32_Ja.rc index 3d09c760b2f..76ed3155c73 100644 --- a/dll/win32/msvidc32/msvidc32_Ja.rc +++ b/dll/win32/msvidc32/msvidc32_Ja.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "MS-CRAM" IDS_DESCRIPTION "Wine ビデオ 1 ビデオコーデック" diff --git a/dll/win32/msvidc32/msvidc32_Ko.rc b/dll/win32/msvidc32/msvidc32_Ko.rc index e95cc9405e2..a2adeeae42a 100644 --- a/dll/win32/msvidc32/msvidc32_Ko.rc +++ b/dll/win32/msvidc32/msvidc32_Ko.rc @@ -20,7 +20,7 @@ LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "MS-CRAM" IDS_DESCRIPTION "Wine 1 ڵ" diff --git a/dll/win32/msvidc32/msvidc32_Lt.rc b/dll/win32/msvidc32/msvidc32_Lt.rc index ee75ead8bcc..b97fc825a2f 100644 --- a/dll/win32/msvidc32/msvidc32_Lt.rc +++ b/dll/win32/msvidc32/msvidc32_Lt.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "MS-CRAM" IDS_DESCRIPTION "Wine Video 1 vaizdo kodekas" diff --git a/dll/win32/msvidc32/msvidc32_Nl.rc b/dll/win32/msvidc32/msvidc32_Nl.rc index c11ca47e30d..adb15a6cec4 100644 --- a/dll/win32/msvidc32/msvidc32_Nl.rc +++ b/dll/win32/msvidc32/msvidc32_Nl.rc @@ -20,7 +20,7 @@ LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "MS-CRAM" IDS_DESCRIPTION "Wine Video 1 video codec" diff --git a/dll/win32/msvidc32/msvidc32_No.rc b/dll/win32/msvidc32/msvidc32_No.rc index fa2a96f5760..361704fe284 100644 --- a/dll/win32/msvidc32/msvidc32_No.rc +++ b/dll/win32/msvidc32/msvidc32_No.rc @@ -20,7 +20,7 @@ LANGUAGE LANG_NORWEGIAN, SUBLANG_NORWEGIAN_BOKMAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "MS-CRAM" IDS_DESCRIPTION "Wine Video 1-videokodek" diff --git a/dll/win32/msvidc32/msvidc32_Pl.rc b/dll/win32/msvidc32/msvidc32_Pl.rc index 221c41eb812..97f25cc4bf8 100644 --- a/dll/win32/msvidc32/msvidc32_Pl.rc +++ b/dll/win32/msvidc32/msvidc32_Pl.rc @@ -20,7 +20,7 @@ LANGUAGE LANG_POLISH, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "MS-CRAM" IDS_DESCRIPTION "Kodek Wine Video 1" diff --git a/dll/win32/msvidc32/msvidc32_Pt.rc b/dll/win32/msvidc32/msvidc32_Pt.rc index ee0eed48b8b..acea8f4db02 100644 --- a/dll/win32/msvidc32/msvidc32_Pt.rc +++ b/dll/win32/msvidc32/msvidc32_Pt.rc @@ -20,7 +20,7 @@ LANGUAGE LANG_PORTUGUESE, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "MS-CRAM" IDS_DESCRIPTION "codec video Wine Video 1" diff --git a/dll/win32/msvidc32/msvidc32_Ro.rc b/dll/win32/msvidc32/msvidc32_Ro.rc index c001dd4f2c0..4ae7201d342 100644 --- a/dll/win32/msvidc32/msvidc32_Ro.rc +++ b/dll/win32/msvidc32/msvidc32_Ro.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "MS-CRAM" IDS_DESCRIPTION "Codecul video Wine Video 1" diff --git a/dll/win32/msvidc32/msvidc32_Ru.rc b/dll/win32/msvidc32/msvidc32_Ru.rc index ae2c8cc6bf9..4b5ba3785cd 100644 --- a/dll/win32/msvidc32/msvidc32_Ru.rc +++ b/dll/win32/msvidc32/msvidc32_Ru.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "MS-CRAM" IDS_DESCRIPTION "Видео кодер Wine Video 1" diff --git a/dll/win32/msvidc32/msvidc32_Si.rc b/dll/win32/msvidc32/msvidc32_Si.rc index 19d392fccd3..b891f9b7bfc 100644 --- a/dll/win32/msvidc32/msvidc32_Si.rc +++ b/dll/win32/msvidc32/msvidc32_Si.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "MS-CRAM" IDS_DESCRIPTION "Wine Video 1 video kodek" diff --git a/dll/win32/msvidc32/msvidc32_Sv.rc b/dll/win32/msvidc32/msvidc32_Sv.rc index 7c9b0bc0535..a4ebcd1594c 100644 --- a/dll/win32/msvidc32/msvidc32_Sv.rc +++ b/dll/win32/msvidc32/msvidc32_Sv.rc @@ -20,7 +20,7 @@ LANGUAGE LANG_SWEDISH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "MS-CRAM" IDS_DESCRIPTION "Wine Video 1 videokodek" diff --git a/dll/win32/msvidc32/msvidc32_Tr.rc b/dll/win32/msvidc32/msvidc32_Tr.rc index d4b882bf715..a84c9291fb0 100644 --- a/dll/win32/msvidc32/msvidc32_Tr.rc +++ b/dll/win32/msvidc32/msvidc32_Tr.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "MS-CRAM" IDS_DESCRIPTION "Wine Vidyo 1 vidyo zc" diff --git a/dll/win32/msvidc32/msvidc32_Uk.rc b/dll/win32/msvidc32/msvidc32_Uk.rc index 4a4ea72fc3c..ac993373097 100644 --- a/dll/win32/msvidc32/msvidc32_Uk.rc +++ b/dll/win32/msvidc32/msvidc32_Uk.rc @@ -24,7 +24,7 @@ LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_NAME "MS-CRAM" IDS_DESCRIPTION "Відео кодек Wine Video 1" diff --git a/dll/win32/msxml3/domdoc.c b/dll/win32/msxml3/domdoc.c index 0007503a2d7..f9f02e029d5 100644 --- a/dll/win32/msxml3/domdoc.c +++ b/dll/win32/msxml3/domdoc.c @@ -415,22 +415,20 @@ static HRESULT WINAPI domdoc_IPersistStreamInit_Load( } static HRESULT WINAPI domdoc_IPersistStreamInit_Save( - IPersistStreamInit *iface, LPSTREAM pStm, BOOL fClearDirty) + IPersistStreamInit *iface, IStream *stream, BOOL clr_dirty) { domdoc *This = impl_from_IPersistStreamInit(iface); - HRESULT hr; BSTR xmlString; + HRESULT hr; - TRACE("(%p)->(%p %d)\n", This, pStm, fClearDirty); + TRACE("(%p)->(%p %d)\n", This, stream, clr_dirty); hr = IXMLDOMNode_get_xml( IXMLDOMNode_from_impl(&This->node), &xmlString ); if(hr == S_OK) { - DWORD count; - DWORD len = strlenW(xmlString) * sizeof(WCHAR); - - hr = IStream_Write( pStm, xmlString, len, &count ); + DWORD len = SysStringLen(xmlString) * sizeof(WCHAR); + hr = IStream_Write( stream, xmlString, len, NULL ); SysFreeString(xmlString); } diff --git a/dll/win32/msxml3/saxreader.c b/dll/win32/msxml3/saxreader.c index eca9f1d76ed..5381d954ab9 100644 --- a/dll/win32/msxml3/saxreader.c +++ b/dll/win32/msxml3/saxreader.c @@ -139,7 +139,7 @@ static HRESULT namespacePush(saxlocator *locator, int ns) int *new_stack; new_stack = HeapReAlloc(GetProcessHeap(), 0, - locator->nsStack, locator->nsStackSize*2); + locator->nsStack, sizeof(int)*locator->nsStackSize*2); if(!new_stack) return E_OUTOFMEMORY; locator->nsStack = new_stack; locator->nsStackSize *= 2; @@ -158,7 +158,6 @@ static int namespacePop(saxlocator *locator) static BSTR bstr_from_xmlCharN(const xmlChar *buf, int len) { DWORD dLen; - LPWSTR str; BSTR bstr; if (!buf) @@ -166,13 +165,11 @@ static BSTR bstr_from_xmlCharN(const xmlChar *buf, int len) dLen = MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)buf, len, NULL, 0); if(len != -1) dLen++; - str = heap_alloc(dLen * sizeof (WCHAR)); - if (!str) + bstr = SysAllocStringLen(NULL, dLen-1); + if (!bstr) return NULL; - MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)buf, len, str, dLen); - if(len != -1) str[dLen-1] = '\0'; - bstr = SysAllocString(str); - heap_free(str); + MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)buf, len, bstr, dLen); + if(len != -1) bstr[dLen-1] = '\0'; return bstr; } @@ -180,7 +177,6 @@ static BSTR bstr_from_xmlCharN(const xmlChar *buf, int len) static BSTR QName_from_xmlChar(const xmlChar *prefix, const xmlChar *name) { DWORD dLen, dLast; - LPWSTR str; BSTR bstr; if(!name) return NULL; @@ -190,16 +186,13 @@ static BSTR QName_from_xmlChar(const xmlChar *prefix, const xmlChar *name) dLen = MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)prefix, -1, NULL, 0) + MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)name, -1, NULL, 0); - str = heap_alloc(dLen * sizeof(WCHAR)); - if(!str) + bstr = SysAllocStringLen(NULL, dLen-1); + if(!bstr) return NULL; - dLast = MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)prefix, -1, str, dLen); - str[dLast-1] = ':'; - MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)name, -1, &str[dLast], dLen-dLast); - bstr = SysAllocString(str); - - heap_free(str); + dLast = MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)prefix, -1, bstr, dLen); + bstr[dLast-1] = ':'; + MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)name, -1, &bstr[dLast], dLen-dLast); return bstr; } @@ -1752,7 +1745,7 @@ static HRESULT SAXLocator_create(saxreader *reader, saxlocator **ppsaxlocator, B locator->ret = S_OK; locator->nsStackSize = 8; locator->nsStackLast = 0; - locator->nsStack = heap_alloc(locator->nsStackSize); + locator->nsStack = heap_alloc(sizeof(int)*locator->nsStackSize); if(!locator->nsStack) { ISAXXMLReader_Release((ISAXXMLReader*)&reader->lpSAXXMLReaderVtbl); diff --git a/dll/win32/msxml3/version.rc b/dll/win32/msxml3/version.rc index 232f5ead78d..2564bcfcd1e 100644 --- a/dll/win32/msxml3/version.rc +++ b/dll/win32/msxml3/version.rc @@ -15,7 +15,7 @@ */ /* @makedep: msxml3_v1.tlb */ -1 TYPELIB LOADONCALL DISCARDABLE msxml3_v1.tlb +1 TYPELIB msxml3_v1.tlb #define WINE_OLESELFREGISTER #define WINE_FILEDESCRIPTION_STR "Wine MSXML 3.0" diff --git a/dll/win32/ole32/antimoniker.c b/dll/win32/ole32/antimoniker.c index 69e0a902f78..7f040363499 100644 --- a/dll/win32/ole32/antimoniker.c +++ b/dll/win32/ole32/antimoniker.c @@ -67,7 +67,7 @@ AntiMonikerImpl_QueryInterface(IMoniker* iface,REFIID riid,void** ppvObject) TRACE("(%p,%p,%p)\n",This,riid,ppvObject); /* Perform a sanity check on the parameters.*/ - if ( (This==0) || (ppvObject==0) ) + if ( ppvObject==0 ) return E_INVALIDARG; /* Initialize the return parameter */ @@ -192,13 +192,9 @@ AntiMonikerImpl_Load(IMoniker* iface,IStream* pStm) static HRESULT WINAPI AntiMonikerImpl_Save(IMoniker* iface,IStream* pStm,BOOL fClearDirty) { - DWORD constant=1; - HRESULT res; - + static const DWORD constant = 1; /* data written by this function is only a DWORD constant set to 1 ! */ - res=IStream_Write(pStm,&constant,sizeof(constant),NULL); - - return res; + return IStream_Write(pStm,&constant,sizeof(constant),NULL); } /****************************************************************************** @@ -614,9 +610,8 @@ static HRESULT AntiMonikerImpl_Construct(AntiMonikerImpl* This) ******************************************************************************/ HRESULT WINAPI CreateAntiMoniker(LPMONIKER * ppmk) { - AntiMonikerImpl* newAntiMoniker = 0; - HRESULT hr = S_OK; - IID riid=IID_IMoniker; + AntiMonikerImpl* newAntiMoniker; + HRESULT hr; TRACE("(%p)\n",ppmk); @@ -632,9 +627,7 @@ HRESULT WINAPI CreateAntiMoniker(LPMONIKER * ppmk) return hr; } - hr = AntiMonikerImpl_QueryInterface((IMoniker*)newAntiMoniker,&riid,(void**)ppmk); - - return hr; + return AntiMonikerImpl_QueryInterface((IMoniker*)newAntiMoniker,&IID_IMoniker,(void**)ppmk); } static HRESULT WINAPI AntiMonikerCF_QueryInterface(LPCLASSFACTORY iface, @@ -677,7 +670,7 @@ static HRESULT WINAPI AntiMonikerCF_CreateInstance(LPCLASSFACTORY iface, if (FAILED(hr)) return hr; - hr = IMoniker_QueryInterface(pMoniker, riid, ppv); + hr = IMoniker_QueryInterface(pMoniker, riid, ppv); if (FAILED(hr)) IMoniker_Release(pMoniker); diff --git a/dll/win32/ole32/bindctx.c b/dll/win32/ole32/bindctx.c index f7561bdd3ca..1492393b57f 100644 --- a/dll/win32/ole32/bindctx.c +++ b/dll/win32/ole32/bindctx.c @@ -285,8 +285,6 @@ BindCtxImpl_GetBindOptions(IBindCtx* iface,BIND_OPTS *pbindopts) static HRESULT WINAPI BindCtxImpl_GetRunningObjectTable(IBindCtx* iface,IRunningObjectTable** pprot) { - HRESULT res; - BindCtxImpl *This = (BindCtxImpl *)iface; TRACE("(%p,%p)\n",This,pprot); @@ -294,9 +292,7 @@ BindCtxImpl_GetRunningObjectTable(IBindCtx* iface,IRunningObjectTable** pprot) if (pprot==NULL) return E_POINTER; - res=GetRunningObjectTable(0, pprot); - - return res; + return GetRunningObjectTable(0, pprot); } /****************************************************************************** @@ -555,9 +551,8 @@ static HRESULT BindCtxImpl_Construct(BindCtxImpl* This) */ HRESULT WINAPI CreateBindCtx(DWORD reserved, LPBC * ppbc) { - BindCtxImpl* newBindCtx = 0; + BindCtxImpl* newBindCtx; HRESULT hr; - IID riid=IID_IBindCtx; TRACE("(%d,%p)\n",reserved,ppbc); @@ -582,9 +577,7 @@ HRESULT WINAPI CreateBindCtx(DWORD reserved, LPBC * ppbc) return hr; } - hr = BindCtxImpl_QueryInterface((IBindCtx*)newBindCtx,&riid,(void**)ppbc); - - return hr; + return BindCtxImpl_QueryInterface((IBindCtx*)newBindCtx,&IID_IBindCtx,(void**)ppbc); } /****************************************************************************** diff --git a/dll/win32/ole32/classmoniker.c b/dll/win32/ole32/classmoniker.c index f67ae00d9cf..8b927f85db6 100644 --- a/dll/win32/ole32/classmoniker.c +++ b/dll/win32/ole32/classmoniker.c @@ -210,9 +210,7 @@ static HRESULT WINAPI ClassMoniker_Save(IMoniker* iface, hr = IStream_Write(pStm, &This->clsid, sizeof(This->clsid), NULL); if (FAILED(hr)) return hr; - hr = IStream_Write(pStm, &zero, sizeof(zero), NULL); - - return hr; + return IStream_Write(pStm, &zero, sizeof(zero), NULL); } /****************************************************************************** diff --git a/dll/win32/ole32/compositemoniker.c b/dll/win32/ole32/compositemoniker.c index 275d875362b..f7d6ee6cdda 100644 --- a/dll/win32/ole32/compositemoniker.c +++ b/dll/win32/ole32/compositemoniker.c @@ -101,7 +101,7 @@ CompositeMonikerImpl_QueryInterface(IMoniker* iface,REFIID riid,void** ppvObject TRACE("(%p,%p,%p)\n",This,riid,ppvObject); /* Perform a sanity check on the parameters.*/ - if ( (This==0) || (ppvObject==0) ) + if ( ppvObject==0 ) return E_INVALIDARG; /* Initialize the return parameter */ @@ -1504,7 +1504,7 @@ EnumMonikerImpl_QueryInterface(IEnumMoniker* iface,REFIID riid,void** ppvObject) TRACE("(%p,%p,%p)\n",This,riid,ppvObject); /* Perform a sanity check on the parameters.*/ - if ( (This==0) || (ppvObject==0) ) + if ( ppvObject==0 ) return E_INVALIDARG; /* Initialize the return parameter */ diff --git a/dll/win32/ole32/datacache.c b/dll/win32/ole32/datacache.c index ead53fe83c3..2f263630f3a 100644 --- a/dll/win32/ole32/datacache.c +++ b/dll/win32/ole32/datacache.c @@ -655,17 +655,15 @@ static HRESULT DataCacheEntry_LoadData(DataCacheEntry *This) static HRESULT DataCacheEntry_CreateStream(DataCacheEntry *This, IStorage *storage, IStream **stream) { - HRESULT hr; WCHAR wszName[] = {2,'O','l','e','P','r','e','s', '0' + (This->stream_number / 100) % 10, '0' + (This->stream_number / 10) % 10, '0' + This->stream_number % 10, 0}; /* FIXME: cache the created stream in This? */ - hr = IStorage_CreateStream(storage, wszName, - STGM_READWRITE | STGM_SHARE_EXCLUSIVE | STGM_CREATE, - 0, 0, stream); - return hr; + return IStorage_CreateStream(storage, wszName, + STGM_READWRITE | STGM_SHARE_EXCLUSIVE | STGM_CREATE, + 0, 0, stream); } static HRESULT DataCacheEntry_Save(DataCacheEntry *This, IStorage *storage, @@ -881,7 +879,7 @@ static HRESULT WINAPI DataCache_NDIUnknown_QueryInterface( /* * Perform a sanity check on the parameters. */ - if ( (this==0) || (ppvObject==0) ) + if ( ppvObject==0 ) return E_INVALIDARG; /* @@ -892,30 +890,30 @@ static HRESULT WINAPI DataCache_NDIUnknown_QueryInterface( /* * Compare the riid with the interface IDs implemented by this object. */ - if (memcmp(&IID_IUnknown, riid, sizeof(IID_IUnknown)) == 0) + if (IsEqualIID(&IID_IUnknown, riid)) { *ppvObject = iface; } - else if (memcmp(&IID_IDataObject, riid, sizeof(IID_IDataObject)) == 0) + else if (IsEqualIID(&IID_IDataObject, riid)) { *ppvObject = &this->lpVtbl; } - else if ( (memcmp(&IID_IPersistStorage, riid, sizeof(IID_IPersistStorage)) == 0) || - (memcmp(&IID_IPersist, riid, sizeof(IID_IPersist)) == 0) ) + else if ( IsEqualIID(&IID_IPersistStorage, riid) || + IsEqualIID(&IID_IPersist, riid) ) { *ppvObject = &this->lpvtblIPersistStorage; } - else if ( (memcmp(&IID_IViewObject, riid, sizeof(IID_IViewObject)) == 0) || - (memcmp(&IID_IViewObject2, riid, sizeof(IID_IViewObject2)) == 0) ) + else if ( IsEqualIID(&IID_IViewObject, riid) || + IsEqualIID(&IID_IViewObject2, riid) ) { *ppvObject = &this->lpvtblIViewObject; } - else if ( (memcmp(&IID_IOleCache, riid, sizeof(IID_IOleCache)) == 0) || - (memcmp(&IID_IOleCache2, riid, sizeof(IID_IOleCache2)) == 0) ) + else if ( IsEqualIID(&IID_IOleCache, riid) || + IsEqualIID(&IID_IOleCache2, riid) ) { *ppvObject = &this->lpvtblIOleCache2; } - else if (memcmp(&IID_IOleCacheControl, riid, sizeof(IID_IOleCacheControl)) == 0) + else if ( IsEqualIID(&IID_IOleCacheControl, riid) ) { *ppvObject = &this->lpvtblIOleCacheControl; } @@ -2286,8 +2284,7 @@ HRESULT WINAPI CreateDataCache( * This is necessary because it's the only time the non-delegating * IUnknown pointer can be returned to the outside. */ - if ( (pUnkOuter!=NULL) && - (memcmp(&IID_IUnknown, riid, sizeof(IID_IUnknown)) != 0) ) + if ( pUnkOuter && !IsEqualIID(&IID_IUnknown, riid) ) return CLASS_E_NOAGGREGATION; /* diff --git a/dll/win32/ole32/defaulthandler.c b/dll/win32/ole32/defaulthandler.c index d0a871f17c0..b509beef61f 100644 --- a/dll/win32/ole32/defaulthandler.c +++ b/dll/win32/ole32/defaulthandler.c @@ -1146,14 +1146,11 @@ static HRESULT WINAPI DefaultHandler_EnumFormatEtc( DWORD dwDirection, IEnumFORMATETC** ppenumFormatEtc) { - HRESULT hres; DefaultHandler *This = impl_from_IDataObject(iface); TRACE("(%p, %x, %p)\n", iface, dwDirection, ppenumFormatEtc); - hres = OleRegEnumFormatEtc(&This->clsid, dwDirection, ppenumFormatEtc); - - return hres; + return OleRegEnumFormatEtc(&This->clsid, dwDirection, ppenumFormatEtc); } /************************************************************************ diff --git a/dll/win32/ole32/enumx.c b/dll/win32/ole32/enumx.c index 26653014984..4279ca81fa9 100644 --- a/dll/win32/ole32/enumx.c +++ b/dll/win32/ole32/enumx.c @@ -51,7 +51,7 @@ HRESULT WINAPI enumx_QueryInterface( REFIID riid, void** ppvObject) { - if ( (This==0) || (ppvObject==0) ) + if ( ppvObject==0 ) return E_INVALIDARG; *ppvObject = 0; diff --git a/dll/win32/ole32/filelockbytes.c b/dll/win32/ole32/filelockbytes.c new file mode 100644 index 00000000000..29bd1b1f261 --- /dev/null +++ b/dll/win32/ole32/filelockbytes.c @@ -0,0 +1,376 @@ +/****************************************************************************** + * + * File-based ILockBytes implementation + * + * Copyright 1999 Thuy Nguyen + * Copyright 2010 Vincent Povirk for CodeWeavers + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include +#include +#include +#include +#include +#include + +#define COBJMACROS +#define NONAMELESSUNION +#define NONAMELESSSTRUCT + +#include "windef.h" +#include "winbase.h" +#include "winuser.h" +#include "winerror.h" +#include "objbase.h" +#include "ole2.h" + +#include "storage32.h" + +#include "wine/debug.h" +#include "wine/unicode.h" + +WINE_DEFAULT_DEBUG_CHANNEL(storage); + +typedef struct FileLockBytesImpl +{ + const ILockBytesVtbl *lpVtbl; + LONG ref; + ULARGE_INTEGER filesize; + HANDLE hfile; + DWORD flProtect; + LPWSTR pwcsName; +} FileLockBytesImpl; + +static const ILockBytesVtbl FileLockBytesImpl_Vtbl; + +/*********************************************************** + * Prototypes for private methods + */ + +/* Note that this evaluates a and b multiple times, so don't + * pass expressions with side effects. */ +#define ROUND_UP(a, b) ((((a) + (b) - 1)/(b))*(b)) + +/**************************************************************************** + * GetProtectMode + * + * This function will return a protection mode flag for a file-mapping object + * from the open flags of a file. + */ +static DWORD GetProtectMode(DWORD openFlags) +{ + switch(STGM_ACCESS_MODE(openFlags)) + { + case STGM_WRITE: + case STGM_READWRITE: + return PAGE_READWRITE; + } + return PAGE_READONLY; +} + +/****************************************************************************** + * FileLockBytesImpl_Construct + * + * Initialize a big block object supported by a file. + */ +HRESULT FileLockBytesImpl_Construct(HANDLE hFile, DWORD openFlags, LPCWSTR pwcsName, ILockBytes **pLockBytes) +{ + FileLockBytesImpl *This; + WCHAR fullpath[MAX_PATH]; + + if (hFile == INVALID_HANDLE_VALUE) + return E_FAIL; + + This = HeapAlloc(GetProcessHeap(), 0, sizeof(FileLockBytesImpl)); + + if (!This) + return E_OUTOFMEMORY; + + This->lpVtbl = &FileLockBytesImpl_Vtbl; + This->ref = 1; + This->hfile = hFile; + This->filesize.u.LowPart = GetFileSize(This->hfile, + &This->filesize.u.HighPart); + This->flProtect = GetProtectMode(openFlags); + + if(pwcsName) { + if (!GetFullPathNameW(pwcsName, MAX_PATH, fullpath, NULL)) + { + lstrcpynW(fullpath, pwcsName, MAX_PATH); + } + This->pwcsName = HeapAlloc(GetProcessHeap(), 0, + (lstrlenW(fullpath)+1)*sizeof(WCHAR)); + if (!This->pwcsName) + { + HeapFree(GetProcessHeap(), 0, This); + return E_OUTOFMEMORY; + } + strcpyW(This->pwcsName, fullpath); + } + else + This->pwcsName = NULL; + + TRACE("file len %u\n", This->filesize.u.LowPart); + + *pLockBytes = (ILockBytes*)This; + + return S_OK; +} + +/* ILockByte Interfaces */ + +static HRESULT WINAPI FileLockBytesImpl_QueryInterface(ILockBytes *iface, REFIID riid, + void **ppvObject) +{ + if (IsEqualIID(riid, &IID_ILockBytes) || IsEqualIID(riid, &IID_ILockBytes)) + *ppvObject = iface; + else + { + *ppvObject = NULL; + return E_NOINTERFACE; + } + + IUnknown_AddRef((IUnknown*)*ppvObject); + + return S_OK; +} + +static ULONG WINAPI FileLockBytesImpl_AddRef(ILockBytes *iface) +{ + FileLockBytesImpl* This = (FileLockBytesImpl*)iface; + return InterlockedIncrement(&This->ref); +} + +static ULONG WINAPI FileLockBytesImpl_Release(ILockBytes *iface) +{ + FileLockBytesImpl* This = (FileLockBytesImpl*)iface; + ULONG ref; + + ref = InterlockedDecrement(&This->ref); + + if (ref == 0) + { + CloseHandle(This->hfile); + HeapFree(GetProcessHeap(), 0, This->pwcsName); + HeapFree(GetProcessHeap(), 0, This); + } + + return ref; +} + +/****************************************************************************** + * This method is part of the ILockBytes interface. + * + * It reads a block of information from the byte array at the specified + * offset. + * + * See the documentation of ILockBytes for more info. + */ +static HRESULT WINAPI FileLockBytesImpl_ReadAt( + ILockBytes* iface, + ULARGE_INTEGER ulOffset, /* [in] */ + void* pv, /* [length_is][size_is][out] */ + ULONG cb, /* [in] */ + ULONG* pcbRead) /* [out] */ +{ + FileLockBytesImpl* This = (FileLockBytesImpl*)iface; + ULONG bytes_left = cb; + LPBYTE readPtr = pv; + BOOL ret; + LARGE_INTEGER offset; + ULONG cbRead; + + TRACE("(%p)-> %i %p %i %p\n",This, ulOffset.u.LowPart, pv, cb, pcbRead); + + /* verify a sane environment */ + if (!This) return E_FAIL; + + if (pcbRead) + *pcbRead = 0; + + offset.QuadPart = ulOffset.QuadPart; + + ret = SetFilePointerEx(This->hfile, offset, NULL, FILE_BEGIN); + + if (!ret) + return STG_E_READFAULT; + + while (bytes_left) + { + ret = ReadFile(This->hfile, readPtr, bytes_left, &cbRead, NULL); + + if (!ret || cbRead == 0) + return STG_E_READFAULT; + + if (pcbRead) + *pcbRead += cbRead; + + bytes_left -= cbRead; + readPtr += cbRead; + } + + TRACE("finished\n"); + return S_OK; +} + +/****************************************************************************** + * This method is part of the ILockBytes interface. + * + * It writes the specified bytes at the specified offset. + * position. If the file is too small, it will be resized. + * + * See the documentation of ILockBytes for more info. + */ +static HRESULT WINAPI FileLockBytesImpl_WriteAt( + ILockBytes* iface, + ULARGE_INTEGER ulOffset, /* [in] */ + const void* pv, /* [size_is][in] */ + ULONG cb, /* [in] */ + ULONG* pcbWritten) /* [out] */ +{ + FileLockBytesImpl* This = (FileLockBytesImpl*)iface; + ULONG size_needed = ulOffset.u.LowPart + cb; + ULONG bytes_left = cb; + const BYTE *writePtr = pv; + BOOL ret; + LARGE_INTEGER offset; + ULONG cbWritten; + + TRACE("(%p)-> %i %p %i %p\n",This, ulOffset.u.LowPart, pv, cb, pcbWritten); + + /* verify a sane environment */ + if (!This) return E_FAIL; + + if (This->flProtect != PAGE_READWRITE) + return STG_E_ACCESSDENIED; + + if (pcbWritten) + *pcbWritten = 0; + + if (size_needed > This->filesize.u.LowPart) + { + ULARGE_INTEGER newSize; + newSize.u.HighPart = 0; + newSize.u.LowPart = size_needed; + ILockBytes_SetSize(iface, newSize); + } + + offset.QuadPart = ulOffset.QuadPart; + + ret = SetFilePointerEx(This->hfile, offset, NULL, FILE_BEGIN); + + if (!ret) + return STG_E_READFAULT; + + while (bytes_left) + { + ret = WriteFile(This->hfile, writePtr, bytes_left, &cbWritten, NULL); + + if (!ret) + return STG_E_READFAULT; + + if (pcbWritten) + *pcbWritten += cbWritten; + + bytes_left -= cbWritten; + writePtr += cbWritten; + } + + TRACE("finished\n"); + return S_OK; +} + +static HRESULT WINAPI FileLockBytesImpl_Flush(ILockBytes* iface) +{ + return S_OK; +} + +/****************************************************************************** + * ILockBytes_SetSize + * + * Sets the size of the file. + * + */ +static HRESULT WINAPI FileLockBytesImpl_SetSize(ILockBytes* iface, ULARGE_INTEGER newSize) +{ + FileLockBytesImpl* This = (FileLockBytesImpl*)iface; + HRESULT hr = S_OK; + LARGE_INTEGER newpos; + + if (This->filesize.u.LowPart == newSize.u.LowPart) + return hr; + + TRACE("from %u to %u\n", This->filesize.u.LowPart, newSize.u.LowPart); + + newpos.QuadPart = newSize.QuadPart; + if (SetFilePointerEx(This->hfile, newpos, NULL, FILE_BEGIN)) + { + SetEndOfFile(This->hfile); + } + + This->filesize = newSize; + return hr; +} + +static HRESULT WINAPI FileLockBytesImpl_LockRegion(ILockBytes* iface, + ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType) +{ + FIXME("stub\n"); + return E_NOTIMPL; +} + +static HRESULT WINAPI FileLockBytesImpl_UnlockRegion(ILockBytes* iface, + ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType) +{ + FIXME("stub\n"); + return E_NOTIMPL; +} + +static HRESULT WINAPI FileLockBytesImpl_Stat(ILockBytes* iface, + STATSTG *pstatstg, DWORD grfStatFlag) +{ + FileLockBytesImpl* This = (FileLockBytesImpl*)iface; + + if (!(STATFLAG_NONAME & grfStatFlag) && This->pwcsName) + { + pstatstg->pwcsName = + CoTaskMemAlloc((lstrlenW(This->pwcsName)+1)*sizeof(WCHAR)); + + strcpyW(pstatstg->pwcsName, This->pwcsName); + } + else + pstatstg->pwcsName = NULL; + + pstatstg->type = STGTY_LOCKBYTES; + pstatstg->cbSize = This->filesize; + /* FIXME: If the implementation is exported, we'll need to set other fields. */ + + return S_OK; +} + +static const ILockBytesVtbl FileLockBytesImpl_Vtbl = { + FileLockBytesImpl_QueryInterface, + FileLockBytesImpl_AddRef, + FileLockBytesImpl_Release, + FileLockBytesImpl_ReadAt, + FileLockBytesImpl_WriteAt, + FileLockBytesImpl_Flush, + FileLockBytesImpl_SetSize, + FileLockBytesImpl_LockRegion, + FileLockBytesImpl_UnlockRegion, + FileLockBytesImpl_Stat +}; diff --git a/dll/win32/ole32/filemoniker.c b/dll/win32/ole32/filemoniker.c index 72f59136f78..0cbfc3aee91 100644 --- a/dll/win32/ole32/filemoniker.c +++ b/dll/win32/ole32/filemoniker.c @@ -77,7 +77,7 @@ FileMonikerImpl_QueryInterface(IMoniker* iface,REFIID riid,void** ppvObject) TRACE("(%p,%s,%p)\n",This,debugstr_guid(riid),ppvObject); /* Perform a sanity check on the parameters.*/ - if ( (This==0) || (ppvObject==0) ) + if ( ppvObject==0 ) return E_INVALIDARG; /* Initialize the return parameter */ @@ -421,10 +421,7 @@ FileMonikerImpl_Save(IMoniker* iface, IStream* pStm, BOOL fClearDirty) } if (!bWriteWide) - { - res=IStream_Write(pStm,&ZERO,sizeof(DWORD),NULL); - return res; - } + return IStream_Write(pStm,&ZERO,sizeof(DWORD),NULL); /* write bytes needed for the filepathW (without 0) + 6 */ bytesW = len*sizeof(WCHAR) + 6; @@ -441,9 +438,7 @@ FileMonikerImpl_Save(IMoniker* iface, IStream* pStm, BOOL fClearDirty) if (FAILED(res)) return res; /* write W string (no 0) */ - res=IStream_Write(pStm,filePathW,bytesW,NULL); - - return res; + return IStream_Write(pStm,filePathW,bytesW,NULL); } /****************************************************************************** @@ -1455,7 +1450,7 @@ HRESULT WINAPI CreateFileMoniker(LPCOLESTR lpszPathName, LPMONIKER * ppmk) hr = FileMonikerImpl_Construct(newFileMoniker,lpszPathName); if (SUCCEEDED(hr)) - hr = FileMonikerImpl_QueryInterface((IMoniker*)newFileMoniker,&IID_IMoniker,(void**)ppmk); + hr = IMoniker_QueryInterface((IMoniker*)newFileMoniker,&IID_IMoniker,(void**)ppmk); else HeapFree(GetProcessHeap(),0,newFileMoniker); @@ -1605,7 +1600,7 @@ static HRESULT WINAPI FileMonikerCF_CreateInstance(LPCLASSFACTORY iface, hr = FileMonikerImpl_Construct(newFileMoniker, wszEmpty); if (SUCCEEDED(hr)) - hr = FileMonikerImpl_QueryInterface((IMoniker*)newFileMoniker, riid, ppv); + hr = IMoniker_QueryInterface((IMoniker*)newFileMoniker, riid, ppv); if (FAILED(hr)) HeapFree(GetProcessHeap(),0,newFileMoniker); diff --git a/dll/win32/ole32/git.c b/dll/win32/ole32/git.c index e961f904136..3800de0072f 100644 --- a/dll/win32/ole32/git.c +++ b/dll/win32/ole32/git.c @@ -187,9 +187,9 @@ StdGlobalInterfaceTable_RegisterInterfaceInGlobal( TRACE("About to marshal the interface\n"); hres = CreateStreamOnHGlobal(0, TRUE, &stream); - if (hres) return hres; + if (hres != S_OK) return hres; hres = CoMarshalInterface(stream, riid, pUnk, MSHCTX_INPROC, NULL, MSHLFLAGS_TABLESTRONG); - if (hres) + if (hres != S_OK) { IStream_Release(stream); return hres; @@ -281,7 +281,7 @@ StdGlobalInterfaceTable_GetInterfaceFromGlobal( LeaveCriticalSection(&git_section); - if (hres) { + if (hres != S_OK) { WARN("Failed to clone stream with error 0x%08x\n", hres); return hres; } diff --git a/dll/win32/ole32/ole2.c b/dll/win32/ole32/ole2.c index 41989f3331b..84bf174df86 100644 --- a/dll/win32/ole32/ole2.c +++ b/dll/win32/ole32/ole2.c @@ -116,6 +116,10 @@ static const WCHAR prop_olemenuW[] = static const WCHAR prop_oledroptarget[] = {'O','l','e','D','r','o','p','T','a','r','g','e','t','I','n','t','e','r','f','a','c','e',0}; +/* property to store Marshalled IDropTarget pointer */ +static const WCHAR prop_marshalleddroptarget[] = + {'W','i','n','e','M','a','r','s','h','a','l','l','e','d','D','r','o','p','T','a','r','g','e','t',0}; + static const WCHAR clsidfmtW[] = {'C','L','S','I','D','\\','{','%','0','8','x','-','%','0','4','x','-','%','0','4','x','-', '%','0','2','x','%','0','2','x','-','%','0','2','x','%','0','2','x','%','0','2','x','%','0','2','x', @@ -266,14 +270,134 @@ HRESULT WINAPI OleInitializeWOW(DWORD x, DWORD y) { return 0; } -/*** - * OLEDD_FindDropTarget() +/************************************************************* + * get_droptarget_handle * - * Returns IDropTarget pointer registered for this window. + * Retrieve a handle to the map containing the marshalled IDropTarget. + * This handle belongs to the process that called RegisterDragDrop. + * See get_droptarget_local_handle(). */ -static inline IDropTarget* OLEDD_FindDropTarget(HWND hwnd) +static inline HANDLE get_droptarget_handle(HWND hwnd) { - return GetPropW(hwnd, prop_oledroptarget); + return GetPropW(hwnd, prop_marshalleddroptarget); +} + +/************************************************************* + * is_droptarget + * + * Is the window a droptarget. + */ +static inline BOOL is_droptarget(HWND hwnd) +{ + return get_droptarget_handle(hwnd) ? TRUE : FALSE; +} + +/************************************************************* + * get_droptarget_local_handle + * + * Retrieve a handle to the map containing the marshalled IDropTarget. + * The handle should be closed when finished with. + */ +static HANDLE get_droptarget_local_handle(HWND hwnd) +{ + HANDLE handle, local_handle = 0; + + handle = get_droptarget_handle(hwnd); + + if(handle) + { + DWORD pid; + HANDLE process; + + GetWindowThreadProcessId(hwnd, &pid); + process = OpenProcess(PROCESS_DUP_HANDLE, FALSE, pid); + if(process) + { + DuplicateHandle(process, handle, GetCurrentProcess(), &local_handle, 0, FALSE, DUPLICATE_SAME_ACCESS); + CloseHandle(process); + } + } + return local_handle; +} + +/*********************************************************************** + * create_map_from_stream + * + * Helper for RegisterDragDrop. Creates a file mapping object + * with the contents of the provided stream. The stream must + * be a global memory backed stream. + */ +static HRESULT create_map_from_stream(IStream *stream, HANDLE *map) +{ + HGLOBAL hmem; + DWORD size; + HRESULT hr; + void *data; + + hr = GetHGlobalFromStream(stream, &hmem); + if(FAILED(hr)) return hr; + + size = GlobalSize(hmem); + *map = CreateFileMappingW(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, size, NULL); + if(!*map) return E_OUTOFMEMORY; + + data = MapViewOfFile(*map, FILE_MAP_WRITE, 0, 0, size); + memcpy(data, GlobalLock(hmem), size); + GlobalUnlock(hmem); + UnmapViewOfFile(data); + return S_OK; +} + +/*********************************************************************** + * create_stream_from_map + * + * Creates a stream from the provided map. + */ +static HRESULT create_stream_from_map(HANDLE map, IStream **stream) +{ + HRESULT hr = E_OUTOFMEMORY; + HGLOBAL hmem; + void *data; + MEMORY_BASIC_INFORMATION info; + + data = MapViewOfFile(map, FILE_MAP_READ, 0, 0, 0); + if(!data) return hr; + + VirtualQuery(data, &info, sizeof(info)); + TRACE("size %d\n", (int)info.RegionSize); + + hmem = GlobalAlloc(GMEM_MOVEABLE, info.RegionSize); + if(hmem) + { + memcpy(GlobalLock(hmem), data, info.RegionSize); + GlobalUnlock(hmem); + hr = CreateStreamOnHGlobal(hmem, TRUE, stream); + } + UnmapViewOfFile(data); + return hr; +} + +/*********************************************************************** + * get_droptarget_pointer + * + * Retrieves the marshalled IDropTarget from the window. + */ +static IDropTarget* get_droptarget_pointer(HWND hwnd) +{ + IDropTarget *droptarget = NULL; + HANDLE map; + IStream *stream; + + map = get_droptarget_local_handle(hwnd); + if(!map) return NULL; + + if(SUCCEEDED(create_stream_from_map(map, &stream))) + { + CoUnmarshalInterface(stream, &IID_IDropTarget, (void**)&droptarget); + IStream_Release(stream); + } + CloseHandle(map); + return droptarget; } /*********************************************************************** @@ -282,6 +406,10 @@ static inline IDropTarget* OLEDD_FindDropTarget(HWND hwnd) HRESULT WINAPI RegisterDragDrop(HWND hwnd, LPDROPTARGET pDropTarget) { DWORD pid = 0; + HRESULT hr; + IStream *stream; + HANDLE map; + IUnknown *unk; TRACE("(%p,%p)\n", hwnd, pDropTarget); @@ -309,13 +437,50 @@ HRESULT WINAPI RegisterDragDrop(HWND hwnd, LPDROPTARGET pDropTarget) } /* check if the window is already registered */ - if (OLEDD_FindDropTarget(hwnd)) + if (is_droptarget(hwnd)) return DRAGDROP_E_ALREADYREGISTERED; - IDropTarget_AddRef(pDropTarget); - SetPropW(hwnd, prop_oledroptarget, pDropTarget); + /* + * Marshal the drop target pointer into a shared memory map and + * store the map's handle in a Wine specific window prop. We also + * store the drop target pointer itself in the + * "OleDropTargetInterface" prop for compatibility with Windows. + */ - return S_OK; + hr = CreateStreamOnHGlobal(NULL, TRUE, &stream); + if(FAILED(hr)) return hr; + + unk = NULL; + hr = IDropTarget_QueryInterface(pDropTarget, &IID_IUnknown, (void**)&unk); + if (SUCCEEDED(hr) && !unk) hr = E_NOINTERFACE; + if(FAILED(hr)) + { + IStream_Release(stream); + return hr; + } + hr = CoMarshalInterface(stream, &IID_IDropTarget, unk, MSHCTX_LOCAL, NULL, MSHLFLAGS_TABLESTRONG); + IUnknown_Release(unk); + + if(SUCCEEDED(hr)) + { + hr = create_map_from_stream(stream, &map); + if(SUCCEEDED(hr)) + { + IDropTarget_AddRef(pDropTarget); + SetPropW(hwnd, prop_oledroptarget, pDropTarget); + SetPropW(hwnd, prop_marshalleddroptarget, map); + } + else + { + LARGE_INTEGER zero; + zero.QuadPart = 0; + IStream_Seek(stream, zero, STREAM_SEEK_SET, NULL); + CoReleaseMarshalData(stream); + } + } + IStream_Release(stream); + + return hr; } /*********************************************************************** @@ -323,7 +488,10 @@ HRESULT WINAPI RegisterDragDrop(HWND hwnd, LPDROPTARGET pDropTarget) */ HRESULT WINAPI RevokeDragDrop(HWND hwnd) { - IDropTarget* droptarget; + HANDLE map; + IStream *stream; + IDropTarget *drop_target; + HRESULT hr; TRACE("(%p)\n", hwnd); @@ -334,13 +502,24 @@ HRESULT WINAPI RevokeDragDrop(HWND hwnd) } /* no registration data */ - if (!(droptarget = OLEDD_FindDropTarget(hwnd))) + if (!(map = get_droptarget_handle(hwnd))) return DRAGDROP_E_NOTREGISTERED; - IDropTarget_Release(droptarget); - RemovePropW(hwnd, prop_oledroptarget); + drop_target = GetPropW(hwnd, prop_oledroptarget); + if(drop_target) IDropTarget_Release(drop_target); - return S_OK; + RemovePropW(hwnd, prop_oledroptarget); + RemovePropW(hwnd, prop_marshalleddroptarget); + + hr = create_stream_from_map(map, &stream); + if(SUCCEEDED(hr)) + { + CoReleaseMarshalData(stream); + IStream_Release(stream); + } + CloseHandle(map); + + return hr; } /*********************************************************************** @@ -1975,30 +2154,17 @@ static void OLEDD_TrackMouseMove(TrackerWindowInfo* trackerInfo) * Find-out if there is a drag target under the mouse */ HWND next_target_wnd = hwndNewTarget; - IDropTarget *new_target; - DWORD pid; trackerInfo->curTargetHWND = hwndNewTarget; - do { - new_target = OLEDD_FindDropTarget(next_target_wnd); - } while (!new_target && (next_target_wnd = GetParent(next_target_wnd))); + while (next_target_wnd && !is_droptarget(next_target_wnd)) + next_target_wnd = GetParent(next_target_wnd); if (next_target_wnd) hwndNewTarget = next_target_wnd; - GetWindowThreadProcessId(hwndNewTarget, &pid); - if (pid != GetCurrentProcessId()) - { - FIXME("drop to another process window is unsupported\n"); - trackerInfo->curDragTargetHWND = 0; - trackerInfo->curTargetHWND = 0; - trackerInfo->curDragTarget = 0; - } - else - { - trackerInfo->curDragTargetHWND = hwndNewTarget; - trackerInfo->curDragTarget = new_target; - } + trackerInfo->curDragTargetHWND = hwndNewTarget; + if(trackerInfo->curDragTarget) IDropTarget_Release(trackerInfo->curDragTarget); + trackerInfo->curDragTarget = get_droptarget_pointer(hwndNewTarget); /* * If there is, notify it that we just dragged-in @@ -2016,6 +2182,7 @@ static void OLEDD_TrackMouseMove(TrackerWindowInfo* trackerInfo) { trackerInfo->curDragTargetHWND = 0; trackerInfo->curTargetHWND = 0; + IDropTarget_Release(trackerInfo->curDragTarget); trackerInfo->curDragTarget = 0; } } @@ -2027,6 +2194,7 @@ static void OLEDD_TrackMouseMove(TrackerWindowInfo* trackerInfo) */ trackerInfo->curDragTargetHWND = 0; trackerInfo->curTargetHWND = 0; + if(trackerInfo->curDragTarget) IDropTarget_Release(trackerInfo->curDragTarget); trackerInfo->curDragTarget = 0; } } diff --git a/dll/win32/ole32/ole2thk.spec b/dll/win32/ole32/ole2thk.spec deleted file mode 100644 index 7e64f55ae4f..00000000000 --- a/dll/win32/ole32/ole2thk.spec +++ /dev/null @@ -1,7 +0,0 @@ -#1 stub WEP -2 stub ROT16_ISRUNNING16 -3 stub ISWIN32SHANDLE -4 stub ___EXPORTEDSTUB -5 stub COTHKCOMMON -6 stub ROT16_GETTIMEOFLASTCHANGE16 -7 stub ROT16_GETOBJECT16 diff --git a/dll/win32/ole32/oleobj.c b/dll/win32/ole32/oleobj.c index 584e796bf45..7e131ae3391 100644 --- a/dll/win32/ole32/oleobj.c +++ b/dll/win32/ole32/oleobj.c @@ -615,8 +615,8 @@ static HRESULT WINAPI DataAdviseHolder_QueryInterface( /* * Compare the riid with the interface IDs implemented by this object. */ - if ( (memcmp(&IID_IUnknown, riid, sizeof(IID_IUnknown)) == 0) || - (memcmp(&IID_IDataAdviseHolder, riid, sizeof(IID_IDataAdviseHolder)) == 0) ) + if ( IsEqualIID(&IID_IUnknown, riid) || + IsEqualIID(&IID_IDataAdviseHolder, riid) ) { *ppvObject = iface; } diff --git a/dll/win32/ole32/stg_bigblockfile.c b/dll/win32/ole32/stg_bigblockfile.c deleted file mode 100644 index 77abbf6286b..00000000000 --- a/dll/win32/ole32/stg_bigblockfile.c +++ /dev/null @@ -1,828 +0,0 @@ -/****************************************************************************** - * - * BigBlockFile - * - * This is the implementation of a file that consists of blocks of - * a predetermined size. - * This class is used in the Compound File implementation of the - * IStorage and IStream interfaces. It provides the functionality - * to read and write any blocks in the file as well as setting and - * obtaining the size of the file. - * The blocks are indexed sequentially from the start of the file - * starting with -1. - * - * TODO: - * - Support for a transacted mode - * - * Copyright 1999 Thuy Nguyen - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#include -#include -#include -#include -#include -#include - -#define COBJMACROS -#define NONAMELESSUNION -#define NONAMELESSSTRUCT - -#include "windef.h" -#include "winbase.h" -#include "winuser.h" -#include "winerror.h" -#include "objbase.h" -#include "ole2.h" - -#include "storage32.h" - -#include "wine/debug.h" - -WINE_DEFAULT_DEBUG_CHANNEL(storage); - -/*********************************************************** - * Data structures used internally by the BigBlockFile - * class. - */ - -/* We map in PAGE_SIZE-sized chunks. Must be a multiple of 4096. */ -#define PAGE_SIZE 131072 - -/* We keep a list of recently-discarded pages. This controls the - * size of that list. */ -#define MAX_VICTIM_PAGES 16 - -/*** - * This structure identifies the paged that are mapped - * from the file and their position in memory. It is - * also used to hold a reference count to those pages. - * - * page_index identifies which PAGE_SIZE chunk from the - * file this mapping represents. (The mappings are always - * PAGE_SIZE-aligned.) - */ - -typedef struct MappedPage MappedPage; -struct MappedPage -{ - MappedPage *next; - MappedPage *prev; - - DWORD page_index; - DWORD mapped_bytes; - LPVOID lpBytes; - LONG refcnt; -}; - -struct BigBlockFile -{ - BOOL fileBased; - ULARGE_INTEGER filesize; - HANDLE hfile; - HANDLE hfilemap; - DWORD flProtect; - MappedPage *maplist; - MappedPage *victimhead, *victimtail; - ULONG num_victim_pages; - ILockBytes *pLkbyt; -}; - -/*********************************************************** - * Prototypes for private methods - */ - -/* Note that this evaluates a and b multiple times, so don't - * pass expressions with side effects. */ -#define ROUND_UP(a, b) ((((a) + (b) - 1)/(b))*(b)) - -/****************************************************************************** - * BIGBLOCKFILE_FileInit - * - * Initialize a big block object supported by a file. - */ -static BOOL BIGBLOCKFILE_FileInit(LPBIGBLOCKFILE This, HANDLE hFile) -{ - This->pLkbyt = NULL; - This->hfile = hFile; - - if (This->hfile == INVALID_HANDLE_VALUE) - return FALSE; - - This->filesize.u.LowPart = GetFileSize(This->hfile, - &This->filesize.u.HighPart); - - if( This->filesize.u.LowPart || This->filesize.u.HighPart ) - { - /* create the file mapping object - */ - This->hfilemap = CreateFileMappingA(This->hfile, - NULL, - This->flProtect, - 0, 0, - NULL); - - if (!This->hfilemap) - { - CloseHandle(This->hfile); - return FALSE; - } - } - else - This->hfilemap = NULL; - - This->maplist = NULL; - - TRACE("file len %u\n", This->filesize.u.LowPart); - - return TRUE; -} - -/****************************************************************************** - * BIGBLOCKFILE_LockBytesInit - * - * Initialize a big block object supported by an ILockBytes. - */ -static BOOL BIGBLOCKFILE_LockBytesInit(LPBIGBLOCKFILE This, ILockBytes* plkbyt) -{ - This->hfile = 0; - This->hfilemap = 0; - This->pLkbyt = plkbyt; - ILockBytes_AddRef(This->pLkbyt); - - /* We'll get the size directly with ILockBytes_Stat */ - This->filesize.QuadPart = 0; - - TRACE("ILockBytes %p\n", This->pLkbyt); - return TRUE; -} - -/****************************************************************************** - * BIGBLOCKFILE_FindPageInList [PRIVATE] - * - */ -static MappedPage *BIGBLOCKFILE_FindPageInList(MappedPage *head, - ULONG page_index) -{ - for (; head != NULL; head = head->next) - { - if (head->page_index == page_index) - { - InterlockedIncrement(&head->refcnt); - break; - } - } - - return head; - -} - -static void BIGBLOCKFILE_UnlinkPage(MappedPage *page) -{ - if (page->next) page->next->prev = page->prev; - if (page->prev) page->prev->next = page->next; -} - -static void BIGBLOCKFILE_LinkHeadPage(MappedPage **head, MappedPage *page) -{ - if (*head) (*head)->prev = page; - page->next = *head; - page->prev = NULL; - *head = page; -} - -static BOOL BIGBLOCKFILE_MapPage(BigBlockFile *This, MappedPage *page) -{ - DWORD lowoffset = PAGE_SIZE * page->page_index; - DWORD numBytesToMap; - DWORD desired_access; - - assert(This->fileBased); - - if( !This->hfilemap ) - return FALSE; - - if (lowoffset + PAGE_SIZE > This->filesize.u.LowPart) - numBytesToMap = This->filesize.u.LowPart - lowoffset; - else - numBytesToMap = PAGE_SIZE; - - if (This->flProtect == PAGE_READONLY) - desired_access = FILE_MAP_READ; - else - desired_access = FILE_MAP_WRITE; - - page->lpBytes = MapViewOfFile(This->hfilemap, desired_access, 0, - lowoffset, numBytesToMap); - page->mapped_bytes = numBytesToMap; - - TRACE("mapped page %u to %p\n", page->page_index, page->lpBytes); - - return page->lpBytes != NULL; -} - - -static MappedPage *BIGBLOCKFILE_CreatePage(BigBlockFile *This, ULONG page_index) -{ - MappedPage *page; - - page = HeapAlloc(GetProcessHeap(), 0, sizeof(MappedPage)); - if (page == NULL) - return NULL; - - page->page_index = page_index; - page->refcnt = 1; - - page->next = NULL; - page->prev = NULL; - - if (!BIGBLOCKFILE_MapPage(This, page)) - { - HeapFree(GetProcessHeap(),0,page); - return NULL; - } - - return page; -} - - -/****************************************************************************** - * BIGBLOCKFILE_GetMappedView [PRIVATE] - * - * Gets the page requested if it is already mapped. - * If it's not already mapped, this method will map it - */ -static void * BIGBLOCKFILE_GetMappedView( - LPBIGBLOCKFILE This, - DWORD page_index) -{ - MappedPage *page; - - page = BIGBLOCKFILE_FindPageInList(This->maplist, page_index); - if (!page) - { - page = BIGBLOCKFILE_FindPageInList(This->victimhead, page_index); - if (page) - { - This->num_victim_pages--; - } - } - - if (page) - { - /* If the page is not already at the head of the list, move - * it there. (Also moves pages from victim to main list.) */ - if (This->maplist != page) - { - if (This->victimhead == page) This->victimhead = page->next; - if (This->victimtail == page) This->victimtail = page->prev; - - BIGBLOCKFILE_UnlinkPage(page); - - BIGBLOCKFILE_LinkHeadPage(&This->maplist, page); - } - - return page; - } - - page = BIGBLOCKFILE_CreatePage(This, page_index); - if (!page) return NULL; - - BIGBLOCKFILE_LinkHeadPage(&This->maplist, page); - - return page; -} - -static void BIGBLOCKFILE_UnmapPage(LPBIGBLOCKFILE This, MappedPage *page) -{ - TRACE("%d at %p\n", page->page_index, page->lpBytes); - - assert(This->fileBased); - - if (page->refcnt > 0) - ERR("unmapping inuse page %p\n", page->lpBytes); - - if (page->lpBytes) - UnmapViewOfFile(page->lpBytes); - - page->lpBytes = NULL; -} - -static void BIGBLOCKFILE_DeletePage(LPBIGBLOCKFILE This, MappedPage *page) -{ - BIGBLOCKFILE_UnmapPage(This, page); - - HeapFree(GetProcessHeap(), 0, page); -} - -/****************************************************************************** - * BIGBLOCKFILE_ReleaseMappedPage [PRIVATE] - * - * Decrements the reference count of the mapped page. - */ -static void BIGBLOCKFILE_ReleaseMappedPage( - LPBIGBLOCKFILE This, - MappedPage *page) -{ - assert(This != NULL); - assert(page != NULL); - - /* If the page is no longer refenced, move it to the victim list. - * If the victim list is too long, kick somebody off. */ - if (!InterlockedDecrement(&page->refcnt)) - { - if (This->maplist == page) This->maplist = page->next; - - BIGBLOCKFILE_UnlinkPage(page); - - if (MAX_VICTIM_PAGES > 0) - { - if (This->num_victim_pages >= MAX_VICTIM_PAGES) - { - MappedPage *victim = This->victimtail; - if (victim) - { - This->victimtail = victim->prev; - if (This->victimhead == victim) - This->victimhead = victim->next; - - BIGBLOCKFILE_UnlinkPage(victim); - BIGBLOCKFILE_DeletePage(This, victim); - } - } - else This->num_victim_pages++; - - BIGBLOCKFILE_LinkHeadPage(&This->victimhead, page); - if (This->victimtail == NULL) This->victimtail = page; - } - else - BIGBLOCKFILE_DeletePage(This, page); - } -} - -static void BIGBLOCKFILE_DeleteList(LPBIGBLOCKFILE This, MappedPage *list) -{ - while (list != NULL) - { - MappedPage *next = list->next; - - BIGBLOCKFILE_DeletePage(This, list); - - list = next; - } -} - -/****************************************************************************** - * BIGBLOCKFILE_FreeAllMappedPages [PRIVATE] - * - * Unmap all currently mapped pages. - * Empty mapped pages list. - */ -static void BIGBLOCKFILE_FreeAllMappedPages( - LPBIGBLOCKFILE This) -{ - BIGBLOCKFILE_DeleteList(This, This->maplist); - BIGBLOCKFILE_DeleteList(This, This->victimhead); - - This->maplist = NULL; - This->victimhead = NULL; - This->victimtail = NULL; - This->num_victim_pages = 0; -} - -static void BIGBLOCKFILE_UnmapList(LPBIGBLOCKFILE This, MappedPage *list) -{ - for (; list != NULL; list = list->next) - { - BIGBLOCKFILE_UnmapPage(This, list); - } -} - -static void BIGBLOCKFILE_UnmapAllMappedPages(LPBIGBLOCKFILE This) -{ - BIGBLOCKFILE_UnmapList(This, This->maplist); - BIGBLOCKFILE_UnmapList(This, This->victimhead); -} - -static void BIGBLOCKFILE_RemapList(LPBIGBLOCKFILE This, MappedPage *list) -{ - while (list != NULL) - { - MappedPage *next = list->next; - - if (list->page_index * PAGE_SIZE > This->filesize.u.LowPart) - { - TRACE("discarding %u\n", list->page_index); - - /* page is entirely outside of the file, delete it */ - BIGBLOCKFILE_UnlinkPage(list); - BIGBLOCKFILE_DeletePage(This, list); - } - else - { - /* otherwise, remap it */ - BIGBLOCKFILE_MapPage(This, list); - } - - list = next; - } -} - -static void BIGBLOCKFILE_RemapAllMappedPages(LPBIGBLOCKFILE This) -{ - BIGBLOCKFILE_RemapList(This, This->maplist); - BIGBLOCKFILE_RemapList(This, This->victimhead); -} - -/**************************************************************************** - * BIGBLOCKFILE_GetProtectMode - * - * This function will return a protection mode flag for a file-mapping object - * from the open flags of a file. - */ -static DWORD BIGBLOCKFILE_GetProtectMode(DWORD openFlags) -{ - switch(STGM_ACCESS_MODE(openFlags)) - { - case STGM_WRITE: - case STGM_READWRITE: - return PAGE_READWRITE; - } - return PAGE_READONLY; -} - - -/* ILockByte Interfaces */ - -/****************************************************************************** - * This method is part of the ILockBytes interface. - * - * It reads a block of information from the byte array at the specified - * offset. - * - * See the documentation of ILockBytes for more info. - */ -static HRESULT ImplBIGBLOCKFILE_ReadAt( - BigBlockFile* const This, - ULARGE_INTEGER ulOffset, /* [in] */ - void* pv, /* [length_is][size_is][out] */ - ULONG cb, /* [in] */ - ULONG* pcbRead) /* [out] */ -{ - ULONG first_page = ulOffset.u.LowPart / PAGE_SIZE; - ULONG offset_in_page = ulOffset.u.LowPart % PAGE_SIZE; - ULONG bytes_left = cb; - ULONG page_index = first_page; - ULONG bytes_from_page; - LPVOID writePtr = pv; - - HRESULT rc = S_OK; - - TRACE("(%p)-> %i %p %i %p\n",This, ulOffset.u.LowPart, pv, cb, pcbRead); - - /* verify a sane environment */ - if (!This) return E_FAIL; - - if (offset_in_page + bytes_left > PAGE_SIZE) - bytes_from_page = PAGE_SIZE - offset_in_page; - else - bytes_from_page = bytes_left; - - if (pcbRead) - *pcbRead = 0; - - while (bytes_left) - { - LPBYTE readPtr; - BOOL eof = FALSE; - MappedPage *page = BIGBLOCKFILE_GetMappedView(This, page_index); - - if (!page || !page->lpBytes) - { - rc = STG_E_READFAULT; - break; - } - - TRACE("page %i, offset %u, bytes_from_page %u, bytes_left %u\n", - page->page_index, offset_in_page, bytes_from_page, bytes_left); - - if (page->mapped_bytes < bytes_from_page) - { - eof = TRUE; - bytes_from_page = page->mapped_bytes; - } - - readPtr = (BYTE*)page->lpBytes + offset_in_page; - memcpy(writePtr,readPtr,bytes_from_page); - BIGBLOCKFILE_ReleaseMappedPage(This, page); - - if (pcbRead) - *pcbRead += bytes_from_page; - bytes_left -= bytes_from_page; - - if (bytes_left && !eof) - { - writePtr = (LPBYTE)writePtr + bytes_from_page; - page_index ++; - offset_in_page = 0; - if (bytes_left > PAGE_SIZE) - bytes_from_page = PAGE_SIZE; - else - bytes_from_page = bytes_left; - } - if (eof) - { - rc = STG_E_READFAULT; - break; - } - } - - TRACE("finished\n"); - return rc; -} - -/****************************************************************************** - * This method is part of the ILockBytes interface. - * - * It writes the specified bytes at the specified offset. - * position. If the file is too small, it will be resized. - * - * See the documentation of ILockBytes for more info. - */ -static HRESULT ImplBIGBLOCKFILE_WriteAt( - BigBlockFile* const This, - ULARGE_INTEGER ulOffset, /* [in] */ - const void* pv, /* [size_is][in] */ - ULONG cb, /* [in] */ - ULONG* pcbWritten) /* [out] */ -{ - ULONG size_needed = ulOffset.u.LowPart + cb; - ULONG first_page = ulOffset.u.LowPart / PAGE_SIZE; - ULONG offset_in_page = ulOffset.u.LowPart % PAGE_SIZE; - ULONG bytes_left = cb; - ULONG page_index = first_page; - ULONG bytes_to_page; - LPCVOID readPtr = pv; - - HRESULT rc = S_OK; - - TRACE("(%p)-> %i %p %i %p\n",This, ulOffset.u.LowPart, pv, cb, pcbWritten); - - /* verify a sane environment */ - if (!This) return E_FAIL; - - if (This->flProtect != PAGE_READWRITE) - return STG_E_ACCESSDENIED; - - if (size_needed > This->filesize.u.LowPart) - { - ULARGE_INTEGER newSize; - newSize.u.HighPart = 0; - newSize.u.LowPart = size_needed; - BIGBLOCKFILE_SetSize(This, newSize); - } - - if (offset_in_page + bytes_left > PAGE_SIZE) - bytes_to_page = PAGE_SIZE - offset_in_page; - else - bytes_to_page = bytes_left; - - if (pcbWritten) - *pcbWritten = 0; - - while (bytes_left) - { - LPBYTE writePtr; - MappedPage *page = BIGBLOCKFILE_GetMappedView(This, page_index); - - TRACE("page %i, offset %u, bytes_to_page %u, bytes_left %u\n", - page ? page->page_index : 0, offset_in_page, bytes_to_page, bytes_left); - - if (!page) - { - ERR("Unable to get a page to write. This should never happen\n"); - rc = E_FAIL; - break; - } - - if (page->mapped_bytes < bytes_to_page) - { - ERR("Not enough bytes mapped to the page. This should never happen\n"); - rc = E_FAIL; - break; - } - - writePtr = (BYTE*)page->lpBytes + offset_in_page; - memcpy(writePtr,readPtr,bytes_to_page); - BIGBLOCKFILE_ReleaseMappedPage(This, page); - - if (pcbWritten) - *pcbWritten += bytes_to_page; - bytes_left -= bytes_to_page; - - if (bytes_left) - { - readPtr = (const BYTE *)readPtr + bytes_to_page; - page_index ++; - offset_in_page = 0; - if (bytes_left > PAGE_SIZE) - bytes_to_page = PAGE_SIZE; - else - bytes_to_page = bytes_left; - } - } - - return rc; -} - -/****************************************************************************** - * BIGBLOCKFILE_Construct - * - * Construct a big block file. Create the file mapping object. - * Create the read only mapped pages list, the writable mapped page list - * and the blocks in use list. - */ -BigBlockFile *BIGBLOCKFILE_Construct(HANDLE hFile, ILockBytes* pLkByt, DWORD openFlags, - BOOL fileBased) -{ - BigBlockFile *This; - - This = HeapAlloc(GetProcessHeap(), 0, sizeof(BigBlockFile)); - - if (This == NULL) - return NULL; - - This->fileBased = fileBased; - This->flProtect = BIGBLOCKFILE_GetProtectMode(openFlags); - - This->maplist = NULL; - This->victimhead = NULL; - This->victimtail = NULL; - This->num_victim_pages = 0; - - if (This->fileBased) - { - if (!BIGBLOCKFILE_FileInit(This, hFile)) - { - HeapFree(GetProcessHeap(), 0, This); - return NULL; - } - } - else - { - if (!BIGBLOCKFILE_LockBytesInit(This, pLkByt)) - { - HeapFree(GetProcessHeap(), 0, This); - return NULL; - } - } - - return This; -} - -/****************************************************************************** - * BIGBLOCKFILE_Destructor - * - * Destructor. Clean up, free memory. - */ -void BIGBLOCKFILE_Destructor(BigBlockFile *This) -{ - BIGBLOCKFILE_FreeAllMappedPages(This); - - if (This->fileBased) - { - CloseHandle(This->hfilemap); - CloseHandle(This->hfile); - } - else - { - ILockBytes_Release(This->pLkbyt); - } - - HeapFree(GetProcessHeap(), 0, This); -} - -/****************************************************************************** - * BIGBLOCKFILE_ReadAt - */ -HRESULT BIGBLOCKFILE_ReadAt(BigBlockFile *This, ULARGE_INTEGER offset, - void* buffer, ULONG size, ULONG* bytesRead) -{ - if (This->fileBased) - return ImplBIGBLOCKFILE_ReadAt(This,offset,buffer,size,bytesRead); - else - return ILockBytes_ReadAt(This->pLkbyt,offset,buffer,size,bytesRead); -} - -/****************************************************************************** - * BIGBLOCKFILE_WriteAt - */ -HRESULT BIGBLOCKFILE_WriteAt(BigBlockFile *This, ULARGE_INTEGER offset, - const void* buffer, ULONG size, ULONG* bytesRead) -{ - if (This->fileBased) - return ImplBIGBLOCKFILE_WriteAt(This,offset,buffer,size,bytesRead); - else - return ILockBytes_WriteAt(This->pLkbyt,offset,buffer,size,bytesRead); -} - -/****************************************************************************** - * BIGBLOCKFILE_SetSize - * - * Sets the size of the file. - * - */ -HRESULT BIGBLOCKFILE_SetSize(BigBlockFile *This, ULARGE_INTEGER newSize) -{ - HRESULT hr = S_OK; - LARGE_INTEGER newpos; - - if (!This->fileBased) - return ILockBytes_SetSize(This->pLkbyt, newSize); - - if (This->filesize.u.LowPart == newSize.u.LowPart) - return hr; - - TRACE("from %u to %u\n", This->filesize.u.LowPart, newSize.u.LowPart); - - /* - * Unmap all views, must be done before call to SetEndFile. - * - * Just ditch the victim list because there is no guarantee we will need them - * and it is not worth the performance hit to unmap and remap them all. - */ - BIGBLOCKFILE_DeleteList(This, This->victimhead); - This->victimhead = NULL; - This->victimtail = NULL; - This->num_victim_pages = 0; - - BIGBLOCKFILE_UnmapAllMappedPages(This); - - newpos.QuadPart = newSize.QuadPart; - if (SetFilePointerEx(This->hfile, newpos, NULL, FILE_BEGIN)) - { - if( This->hfilemap ) CloseHandle(This->hfilemap); - - SetEndOfFile(This->hfile); - - /* re-create the file mapping object */ - This->hfilemap = CreateFileMappingA(This->hfile, NULL, This->flProtect, - 0, 0, NULL); - } - - This->filesize = newSize; - BIGBLOCKFILE_RemapAllMappedPages(This); - return hr; -} - -/****************************************************************************** - * BIGBLOCKFILE_GetSize - * - * Gets the size of the file. - * - */ -static HRESULT BIGBLOCKFILE_GetSize(BigBlockFile *This, ULARGE_INTEGER *size) -{ - HRESULT hr = S_OK; - if(This->fileBased) - *size = This->filesize; - else - { - STATSTG stat; - hr = ILockBytes_Stat(This->pLkbyt, &stat, STATFLAG_NONAME); - if(SUCCEEDED(hr)) *size = stat.cbSize; - } - return hr; -} - -/****************************************************************************** - * BIGBLOCKFILE_Expand - * - * Grows the file to the specified size if necessary. - */ -HRESULT BIGBLOCKFILE_Expand(BigBlockFile *This, ULARGE_INTEGER newSize) -{ - ULARGE_INTEGER size; - HRESULT hr; - - hr = BIGBLOCKFILE_GetSize(This, &size); - if(FAILED(hr)) return hr; - - if (newSize.QuadPart > size.QuadPart) - hr = BIGBLOCKFILE_SetSize(This, newSize); - return hr; -} diff --git a/dll/win32/ole32/stg_stream.c b/dll/win32/ole32/stg_stream.c index bfecbc72bd1..b09ba5b854b 100644 --- a/dll/win32/ole32/stg_stream.c +++ b/dll/win32/ole32/stg_stream.c @@ -295,6 +295,9 @@ static HRESULT WINAPI StgStreamImpl_Write( */ This->currentPosition.u.LowPart += *pcbWritten; + if (SUCCEEDED(res)) + res = StorageBaseImpl_Flush(This->parentStorage); + TRACE("<-- S_OK, written %u\n", *pcbWritten); return res; } @@ -417,6 +420,10 @@ static HRESULT WINAPI StgStreamImpl_SetSize( } hr = StorageBaseImpl_StreamSetSize(This->parentStorage, This->dirEntry, libNewSize); + + if (SUCCEEDED(hr)) + hr = StorageBaseImpl_Flush(This->parentStorage); + return hr; } @@ -517,7 +524,7 @@ static HRESULT WINAPI StgStreamImpl_Commit( return STG_E_REVERTED; } - return S_OK; + return StorageBaseImpl_Flush(This->parentStorage); } /*** diff --git a/dll/win32/ole32/storage32.c b/dll/win32/ole32/storage32.c index 98df144976c..5c582019f4c 100644 --- a/dll/win32/ole32/storage32.c +++ b/dll/win32/ole32/storage32.c @@ -92,6 +92,7 @@ static StorageInternalImpl* StorageInternalImpl_Construct(StorageBaseImpl* paren DWORD openFlags, DirRef storageDirEntry); static void StorageImpl_Destroy(StorageBaseImpl* iface); static void StorageImpl_Invalidate(StorageBaseImpl* iface); +static HRESULT StorageImpl_Flush(StorageBaseImpl* iface); static BOOL StorageImpl_ReadBigBlock(StorageImpl* This, ULONG blockIndex, void* buffer); static BOOL StorageImpl_WriteBigBlock(StorageImpl* This, ULONG blockIndex, const void* buffer); static void StorageImpl_SetNextBlockInChain(StorageImpl* This, ULONG blockIndex, ULONG nextBlock); @@ -327,7 +328,7 @@ static HRESULT StorageImpl_ReadAt(StorageImpl* This, ULONG size, ULONG* bytesRead) { - return BIGBLOCKFILE_ReadAt(This->bigBlockFile,offset,buffer,size,bytesRead); + return ILockBytes_ReadAt(This->lockBytes,offset,buffer,size,bytesRead); } static HRESULT StorageImpl_WriteAt(StorageImpl* This, @@ -336,7 +337,7 @@ static HRESULT StorageImpl_WriteAt(StorageImpl* This, const ULONG size, ULONG* bytesWritten) { - return BIGBLOCKFILE_WriteAt(This->bigBlockFile,offset,buffer,size,bytesWritten); + return ILockBytes_WriteAt(This->lockBytes,offset,buffer,size,bytesWritten); } /************************************************************************ @@ -855,7 +856,7 @@ static HRESULT WINAPI StorageBaseImpl_RenameElement( return STG_E_FILENOTFOUND; } - return S_OK; + return StorageBaseImpl_Flush(This); } /************************************************************************ @@ -1010,7 +1011,7 @@ static HRESULT WINAPI StorageBaseImpl_CreateStream( return STG_E_INSUFFICIENTMEMORY; } - return S_OK; + return StorageBaseImpl_Flush(This); } /************************************************************************ @@ -1046,6 +1047,9 @@ static HRESULT WINAPI StorageBaseImpl_SetClass( ¤tEntry); } + if (SUCCEEDED(hRes)) + hRes = StorageBaseImpl_Flush(This); + return hRes; } @@ -1202,6 +1206,8 @@ static HRESULT WINAPI StorageBaseImpl_CreateStorage( return hr; } + if (SUCCEEDED(hr)) + hr = StorageBaseImpl_Flush(This); return S_OK; } @@ -1306,6 +1312,8 @@ static HRESULT StorageImpl_CreateDirEntry( entryIndex, emptyData); } + + StorageImpl_SaveFileHeader(storage); } UpdateRawDirEntry(currentData, newData); @@ -1813,16 +1821,15 @@ static HRESULT WINAPI StorageBaseImpl_MoveElementTo( * Ensures that any changes made to a storage object open in transacted mode * are reflected in the parent storage * - * NOTES - * Wine doesn't implement transacted mode, which seems to be a basic - * optimization, so we can ignore this stub for now. + * In a non-transacted mode, this ensures all cached writes are completed. */ static HRESULT WINAPI StorageImpl_Commit( IStorage* iface, DWORD grfCommitFlags)/* [in] */ { - FIXME("(%p %d): stub\n", iface, grfCommitFlags); - return S_OK; + StorageBaseImpl* const base=(StorageBaseImpl*)iface; + TRACE("(%p %d)\n", iface, grfCommitFlags); + return StorageBaseImpl_Flush(base); } /************************************************************************* @@ -1914,6 +1921,9 @@ static HRESULT WINAPI StorageBaseImpl_DestroyElement( if (SUCCEEDED(hr)) StorageBaseImpl_DestroyDirEntry(This, entryToDeleteRef); + if (SUCCEEDED(hr)) + hr = StorageBaseImpl_Flush(This); + return hr; } @@ -2581,6 +2591,19 @@ static HRESULT StorageImpl_StreamLink(StorageBaseImpl *base, DirRef dst, return hr; } +static HRESULT StorageImpl_GetFilename(StorageBaseImpl* iface, LPWSTR *result) +{ + StorageImpl *This = (StorageImpl*) iface; + STATSTG statstg; + HRESULT hr; + + hr = ILockBytes_Stat(This->lockBytes, &statstg, 0); + + *result = statstg.pwcsName; + + return hr; +} + /* * Virtual function table for the IStorage32Impl class. */ @@ -2610,6 +2633,8 @@ static const StorageBaseImplVtbl StorageImpl_BaseVtbl = { StorageImpl_Destroy, StorageImpl_Invalidate, + StorageImpl_Flush, + StorageImpl_GetFilename, StorageImpl_CreateDirEntry, StorageImpl_BaseWriteDirEntry, StorageImpl_BaseReadDirEntry, @@ -2634,7 +2659,6 @@ static HRESULT StorageImpl_Construct( HRESULT hr = S_OK; DirEntry currentEntry; DirRef currentEntryRef; - WCHAR fullpath[MAX_PATH]; if ( FAILED( validateSTGM(openFlags) )) return STG_E_INVALIDFLAG; @@ -2658,40 +2682,22 @@ static HRESULT StorageImpl_Construct( This->base.reverted = 0; - This->hFile = hFile; - - if(pwcsName) { - if (!GetFullPathNameW(pwcsName, MAX_PATH, fullpath, NULL)) - { - lstrcpynW(fullpath, pwcsName, MAX_PATH); - } - This->pwcsName = HeapAlloc(GetProcessHeap(), 0, - (lstrlenW(fullpath)+1)*sizeof(WCHAR)); - if (!This->pwcsName) - { - hr = STG_E_INSUFFICIENTMEMORY; - goto end; - } - strcpyW(This->pwcsName, fullpath); - This->base.filename = This->pwcsName; - } - /* * Initialize the big block cache. */ This->bigBlockSize = sector_size; This->smallBlockSize = DEF_SMALL_BLOCK_SIZE; - This->bigBlockFile = BIGBLOCKFILE_Construct(hFile, - pLkbyt, - openFlags, - fileBased); - - if (This->bigBlockFile == 0) + if (hFile) + hr = FileLockBytesImpl_Construct(hFile, openFlags, pwcsName, &This->lockBytes); + else { - hr = E_FAIL; - goto end; + This->lockBytes = pLkbyt; + ILockBytes_AddRef(pLkbyt); } + if (FAILED(hr)) + goto end; + if (create) { ULARGE_INTEGER size; @@ -2727,7 +2733,7 @@ static HRESULT StorageImpl_Construct( */ size.u.HighPart = 0; size.u.LowPart = This->bigBlockSize * 3; - BIGBLOCKFILE_SetSize(This->bigBlockFile, size); + ILockBytes_SetSize(This->lockBytes, size); /* * Initialize the big block depot @@ -2851,7 +2857,10 @@ end: *result = NULL; } else + { + StorageImpl_Flush((StorageBaseImpl*)This); *result = This; + } return hr; } @@ -2871,9 +2880,9 @@ static void StorageImpl_Destroy(StorageBaseImpl* iface) int i; TRACE("(%p)\n", This); - StorageImpl_Invalidate(iface); + StorageImpl_Flush(iface); - HeapFree(GetProcessHeap(), 0, This->pwcsName); + StorageImpl_Invalidate(iface); BlockChainStream_Destroy(This->smallBlockRootChain); BlockChainStream_Destroy(This->rootBlockChain); @@ -2882,11 +2891,36 @@ static void StorageImpl_Destroy(StorageBaseImpl* iface) for (i=0; iblockChainCache[i]); - if (This->bigBlockFile) - BIGBLOCKFILE_Destructor(This->bigBlockFile); + if (This->lockBytes) + ILockBytes_Release(This->lockBytes); HeapFree(GetProcessHeap(), 0, This); } +static HRESULT StorageImpl_Flush(StorageBaseImpl* iface) +{ + StorageImpl *This = (StorageImpl*) iface; + int i; + HRESULT hr; + TRACE("(%p)\n", This); + + hr = BlockChainStream_Flush(This->smallBlockRootChain); + + if (SUCCEEDED(hr)) + hr = BlockChainStream_Flush(This->rootBlockChain); + + if (SUCCEEDED(hr)) + hr = BlockChainStream_Flush(This->smallBlockDepotChain); + + for (i=0; SUCCEEDED(hr) && iblockChainCache[i]) + hr = BlockChainStream_Flush(This->blockChainCache[i]); + + if (SUCCEEDED(hr)) + hr = ILockBytes_Flush(This->lockBytes); + + return hr; +} + /****************************************************************************** * Storage32Impl_GetNextFreeBigBlock * @@ -2906,6 +2940,7 @@ static ULONG StorageImpl_GetNextFreeBigBlock( int depotIndex = 0; ULONG freeBlock = BLOCK_UNUSED; ULARGE_INTEGER neededSize; + STATSTG statstg; depotIndex = This->prevFreeBlock / blocksPerDepot; depotBlockOffset = (This->prevFreeBlock % blocksPerDepot) * sizeof(ULONG); @@ -3020,7 +3055,11 @@ static ULONG StorageImpl_GetNextFreeBigBlock( * make sure that the block physically exists before using it */ neededSize.QuadPart = StorageImpl_GetBigBlockOffset(This, freeBlock)+This->bigBlockSize; - BIGBLOCKFILE_Expand(This->bigBlockFile, neededSize); + + ILockBytes_Stat(This->lockBytes, &statstg, STATFLAG_NONAME); + + if (neededSize.QuadPart > statstg.cbSize.QuadPart) + ILockBytes_SetSize(This->lockBytes, neededSize); This->prevFreeBlock = freeBlock; @@ -3465,6 +3504,7 @@ static void StorageImpl_SaveFileHeader( HRESULT hr; ULARGE_INTEGER offset; DWORD bytes_read, bytes_written; + DWORD major_version, dirsectorcount; /* * Get a pointer to the big block of data containing the header. @@ -3475,6 +3515,16 @@ static void StorageImpl_SaveFileHeader( if (SUCCEEDED(hr) && bytes_read != HEADER_SIZE) hr = STG_E_FILENOTFOUND; + if (This->bigBlockSizeBits == 0x9) + major_version = 3; + else if (This->bigBlockSizeBits == 0xc) + major_version = 4; + else + { + ERR("invalid big block shift 0x%x\n", This->bigBlockSizeBits); + major_version = 4; + } + /* * If the block read failed, the file is probably new. */ @@ -3489,18 +3539,26 @@ static void StorageImpl_SaveFileHeader( * Initialize the magic number. */ memcpy(headerBigBlock, STORAGE_magic, sizeof(STORAGE_magic)); - - /* - * And a bunch of things we don't know what they mean - */ - StorageUtl_WriteWord(headerBigBlock, 0x18, 0x3b); - StorageUtl_WriteWord(headerBigBlock, 0x1a, 0x3); - StorageUtl_WriteWord(headerBigBlock, 0x1c, (WORD)-2); } /* * Write the information to the header. */ + StorageUtl_WriteWord( + headerBigBlock, + OFFSET_MINORVERSION, + 0x3e); + + StorageUtl_WriteWord( + headerBigBlock, + OFFSET_MAJORVERSION, + major_version); + + StorageUtl_WriteWord( + headerBigBlock, + OFFSET_BYTEORDERMARKER, + (WORD)-2); + StorageUtl_WriteWord( headerBigBlock, OFFSET_BIGBLOCKSIZEBITS, @@ -3511,6 +3569,23 @@ static void StorageImpl_SaveFileHeader( OFFSET_SMALLBLOCKSIZEBITS, This->smallBlockSizeBits); + if (major_version >= 4) + { + if (This->rootBlockChain) + dirsectorcount = BlockChainStream_GetCount(This->rootBlockChain); + else + /* This file is being created, and it will start out with one block. */ + dirsectorcount = 1; + } + else + /* This field must be 0 in versions older than 4 */ + dirsectorcount = 0; + + StorageUtl_WriteDWord( + headerBigBlock, + OFFSET_DIRSECTORCOUNT, + dirsectorcount); + StorageUtl_WriteDWord( headerBigBlock, OFFSET_BBDEPOTCOUNT, @@ -3800,13 +3875,20 @@ static BOOL StorageImpl_ReadBigBlock( void* buffer) { ULARGE_INTEGER ulOffset; - DWORD read; + DWORD read=0; ulOffset.u.HighPart = 0; ulOffset.u.LowPart = StorageImpl_GetBigBlockOffset(This, blockIndex); StorageImpl_ReadAt(This, ulOffset, buffer, This->bigBlockSize, &read); - return (read == This->bigBlockSize); + + if (read && read < This->bigBlockSize) + { + /* File ends during this block; fill the rest with 0's. */ + memset((LPBYTE)buffer+read, 0, This->bigBlockSize-read); + } + + return (read != 0); } static BOOL StorageImpl_ReadDWordFromBigBlock( @@ -4489,9 +4571,12 @@ static HRESULT WINAPI TransactedSnapshotImpl_Commit( else dir_root_ref = This->entries[root_entry->data.dirRootEntry].newTransactedParentEntry; + hr = StorageBaseImpl_Flush(This->transactedParent); + /* Update the storage to use the new data in one step. */ - hr = StorageBaseImpl_ReadDirEntry(This->transactedParent, - root_entry->transactedParentEntry, &data); + if (SUCCEEDED(hr)) + hr = StorageBaseImpl_ReadDirEntry(This->transactedParent, + root_entry->transactedParentEntry, &data); if (SUCCEEDED(hr)) { @@ -4504,6 +4589,11 @@ static HRESULT WINAPI TransactedSnapshotImpl_Commit( root_entry->transactedParentEntry, &data); } + /* Try to flush after updating the root storage, but if the flush fails, keep + * going, on the theory that it'll either succeed later or the subsequent + * writes will fail. */ + StorageBaseImpl_Flush(This->transactedParent); + if (SUCCEEDED(hr)) { /* Destroy the old now-orphaned data. */ @@ -4543,6 +4633,9 @@ static HRESULT WINAPI TransactedSnapshotImpl_Commit( TransactedSnapshotImpl_DestroyTemporaryCopy(This, DIRENTRY_NULL); } + if (SUCCEEDED(hr)) + hr = StorageBaseImpl_Flush(This->transactedParent); + return hr; } @@ -4606,6 +4699,19 @@ static void TransactedSnapshotImpl_Destroy( StorageBaseImpl *iface) HeapFree(GetProcessHeap(), 0, This); } +static HRESULT TransactedSnapshotImpl_Flush(StorageBaseImpl* iface) +{ + /* We only need to flush when committing. */ + return S_OK; +} + +static HRESULT TransactedSnapshotImpl_GetFilename(StorageBaseImpl* iface, LPWSTR *result) +{ + TransactedSnapshotImpl* This = (TransactedSnapshotImpl*) iface; + + return StorageBaseImpl_GetFilename(This->transactedParent, result); +} + static HRESULT TransactedSnapshotImpl_CreateDirEntry(StorageBaseImpl *base, const DirEntry *newData, DirRef *index) { @@ -4853,6 +4959,8 @@ static const StorageBaseImplVtbl TransactedSnapshotImpl_BaseVtbl = { TransactedSnapshotImpl_Destroy, TransactedSnapshotImpl_Invalidate, + TransactedSnapshotImpl_Flush, + TransactedSnapshotImpl_GetFilename, TransactedSnapshotImpl_CreateDirEntry, TransactedSnapshotImpl_WriteDirEntry, TransactedSnapshotImpl_ReadDirEntry, @@ -4886,8 +4994,6 @@ static HRESULT TransactedSnapshotImpl_Construct(StorageBaseImpl *parentStorage, (*result)->base.openFlags = parentStorage->openFlags; - (*result)->base.filename = parentStorage->filename; - /* Create a new temporary storage to act as the scratch file. */ hr = StgCreateDocfile(NULL, STGM_READWRITE|STGM_SHARE_EXCLUSIVE|STGM_CREATE, 0, (IStorage**)&(*result)->scratch); @@ -5000,6 +5106,20 @@ static void StorageInternalImpl_Destroy( StorageBaseImpl *iface) HeapFree(GetProcessHeap(), 0, This); } +static HRESULT StorageInternalImpl_Flush(StorageBaseImpl* iface) +{ + StorageInternalImpl* This = (StorageInternalImpl*) iface; + + return StorageBaseImpl_Flush(This->parentStorage); +} + +static HRESULT StorageInternalImpl_GetFilename(StorageBaseImpl* iface, LPWSTR *result) +{ + StorageInternalImpl* This = (StorageInternalImpl*) iface; + + return StorageBaseImpl_GetFilename(This->parentStorage, result); +} + static HRESULT StorageInternalImpl_CreateDirEntry(StorageBaseImpl *base, const DirEntry *newData, DirRef *index) { @@ -5081,8 +5201,9 @@ static HRESULT WINAPI StorageInternalImpl_Commit( IStorage* iface, DWORD grfCommitFlags) /* [in] */ { - FIXME("(%p,%x): stub\n", iface, grfCommitFlags); - return S_OK; + StorageBaseImpl* base = (StorageBaseImpl*) iface; + TRACE("(%p,%x)\n", iface, grfCommitFlags); + return StorageBaseImpl_Flush(base); } /****************************************************************************** @@ -5425,6 +5546,8 @@ static const StorageBaseImplVtbl StorageInternalImpl_BaseVtbl = { StorageInternalImpl_Destroy, StorageInternalImpl_Invalidate, + StorageInternalImpl_Flush, + StorageInternalImpl_GetFilename, StorageInternalImpl_CreateDirEntry, StorageInternalImpl_WriteDirEntry, StorageInternalImpl_ReadDirEntry, @@ -5565,33 +5688,26 @@ void StorageUtl_CopyDirEntryToSTATSTG( const DirEntry* source, int statFlags) { - LPCWSTR entryName; - - if (source->stgType == STGTY_ROOT) - { - /* replace the name of root entry (often "Root Entry") by the file name */ - entryName = storage->filename; - } - else - { - entryName = source->name; - } - /* * The copy of the string occurs only when the flag is not set */ - if( ((statFlags & STATFLAG_NONAME) != 0) || - (entryName == NULL) || - (entryName[0] == 0) ) + if (!(statFlags & STATFLAG_NONAME) && source->stgType == STGTY_ROOT) + { + /* Use the filename for the root storage. */ + destination->pwcsName = 0; + StorageBaseImpl_GetFilename(storage, &destination->pwcsName); + } + else if( ((statFlags & STATFLAG_NONAME) != 0) || + (source->name[0] == 0) ) { destination->pwcsName = 0; } else { destination->pwcsName = - CoTaskMemAlloc((lstrlenW(entryName)+1)*sizeof(WCHAR)); + CoTaskMemAlloc((lstrlenW(source->name)+1)*sizeof(WCHAR)); - strcpyW(destination->pwcsName, entryName); + strcpyW(destination->pwcsName, source->name); } switch (source->stgType) @@ -5732,6 +5848,53 @@ ULONG BlockChainStream_GetSectorOfOffset(BlockChainStream *This, ULONG offset) return This->indexCache[min_run].firstSector + offset - This->indexCache[min_run].firstOffset; } +HRESULT BlockChainStream_GetBlockAtOffset(BlockChainStream *This, + ULONG index, BlockChainBlock **block, ULONG *sector, BOOL create) +{ + BlockChainBlock *result=NULL; + int i; + + for (i=0; i<2; i++) + if (This->cachedBlocks[i].index == index) + { + *sector = This->cachedBlocks[i].sector; + *block = &This->cachedBlocks[i]; + return S_OK; + } + + *sector = BlockChainStream_GetSectorOfOffset(This, index); + if (*sector == BLOCK_END_OF_CHAIN) + return STG_E_DOCFILECORRUPT; + + if (create) + { + if (This->cachedBlocks[0].index == 0xffffffff) + result = &This->cachedBlocks[0]; + else if (This->cachedBlocks[1].index == 0xffffffff) + result = &This->cachedBlocks[1]; + else + { + result = &This->cachedBlocks[This->blockToEvict++]; + if (This->blockToEvict == 2) + This->blockToEvict = 0; + } + + if (result->dirty) + { + if (!StorageImpl_WriteBigBlock(This->parentStorage, result->sector, result->data)) + return STG_E_WRITEFAULT; + result->dirty = 0; + } + + result->read = 0; + result->index = index; + result->sector = *sector; + } + + *block = result; + return S_OK; +} + BlockChainStream* BlockChainStream_Construct( StorageImpl* parentStorage, ULONG* headOfStreamPlaceHolder, @@ -5747,6 +5910,11 @@ BlockChainStream* BlockChainStream_Construct( newStream->indexCache = NULL; newStream->indexCacheLen = 0; newStream->indexCacheSize = 0; + newStream->cachedBlocks[0].index = 0xffffffff; + newStream->cachedBlocks[0].dirty = 0; + newStream->cachedBlocks[1].index = 0xffffffff; + newStream->cachedBlocks[1].dirty = 0; + newStream->blockToEvict = 0; if (FAILED(BlockChainStream_UpdateIndexCache(newStream))) { @@ -5758,10 +5926,30 @@ BlockChainStream* BlockChainStream_Construct( return newStream; } +HRESULT BlockChainStream_Flush(BlockChainStream* This) +{ + int i; + if (!This) return S_OK; + for (i=0; i<2; i++) + { + if (This->cachedBlocks[i].dirty) + { + if (StorageImpl_WriteBigBlock(This->parentStorage, This->cachedBlocks[i].sector, This->cachedBlocks[i].data)) + This->cachedBlocks[i].dirty = 0; + else + return STG_E_WRITEFAULT; + } + } + return S_OK; +} + void BlockChainStream_Destroy(BlockChainStream* This) { if (This) + { + BlockChainStream_Flush(This); HeapFree(GetProcessHeap(), 0, This->indexCache); + } HeapFree(GetProcessHeap(), 0, This); } @@ -5827,6 +6015,8 @@ HRESULT BlockChainStream_ReadAt(BlockChainStream* This, ULONG blockIndex; BYTE* bufferWalker; ULARGE_INTEGER stream_size; + HRESULT hr; + BlockChainBlock *cachedBlock; TRACE("(%p)-> %i %p %i %p\n",This, offset.u.LowPart, buffer, size, bytesRead); @@ -5848,32 +6038,50 @@ HRESULT BlockChainStream_ReadAt(BlockChainStream* This, */ bufferWalker = buffer; - while ( (size > 0) && (blockIndex != BLOCK_END_OF_CHAIN) ) + while (size > 0) { ULARGE_INTEGER ulOffset; DWORD bytesReadAt; + /* * Calculate how many bytes we can copy from this big block. */ bytesToReadInBuffer = min(This->parentStorage->bigBlockSize - offsetInBlock, size); - TRACE("block %i\n",blockIndex); - ulOffset.u.HighPart = 0; - ulOffset.u.LowPart = StorageImpl_GetBigBlockOffset(This->parentStorage, blockIndex) + - offsetInBlock; + hr = BlockChainStream_GetBlockAtOffset(This, blockNoInSequence, &cachedBlock, &blockIndex, size == bytesToReadInBuffer); - StorageImpl_ReadAt(This->parentStorage, - ulOffset, - bufferWalker, - bytesToReadInBuffer, - &bytesReadAt); - /* - * Step to the next big block. - */ - if( size > bytesReadAt && FAILED(StorageImpl_GetNextBlockInChain(This->parentStorage, blockIndex, &blockIndex))) - return STG_E_DOCFILECORRUPT; + if (FAILED(hr)) + return hr; + if (!cachedBlock) + { + /* Not in cache, and we're going to read past the end of the block. */ + ulOffset.u.HighPart = 0; + ulOffset.u.LowPart = StorageImpl_GetBigBlockOffset(This->parentStorage, blockIndex) + + offsetInBlock; + + StorageImpl_ReadAt(This->parentStorage, + ulOffset, + bufferWalker, + bytesToReadInBuffer, + &bytesReadAt); + } + else + { + if (!cachedBlock->read) + { + if (!StorageImpl_ReadBigBlock(This->parentStorage, cachedBlock->sector, cachedBlock->data)) + return STG_E_READFAULT; + + cachedBlock->read = 1; + } + + memcpy(bufferWalker, cachedBlock->data+offsetInBlock, bytesToReadInBuffer); + bytesReadAt = bytesToReadInBuffer; + } + + blockNoInSequence++; bufferWalker += bytesReadAt; size -= bytesReadAt; *bytesRead += bytesReadAt; @@ -5903,51 +6111,61 @@ HRESULT BlockChainStream_WriteAt(BlockChainStream* This, ULONG bytesToWrite; ULONG blockIndex; const BYTE* bufferWalker; - - /* - * Find the first block in the stream that contains part of the buffer. - */ - blockIndex = BlockChainStream_GetSectorOfOffset(This, blockNoInSequence); - - /* BlockChainStream_SetSize should have already been called to ensure we have - * enough blocks in the chain to write into */ - if (blockIndex == BLOCK_END_OF_CHAIN) - { - ERR("not enough blocks in chain to write data\n"); - return STG_E_DOCFILECORRUPT; - } + HRESULT hr; + BlockChainBlock *cachedBlock; *bytesWritten = 0; bufferWalker = buffer; - while ( (size > 0) && (blockIndex != BLOCK_END_OF_CHAIN) ) + while (size > 0) { ULARGE_INTEGER ulOffset; DWORD bytesWrittenAt; + /* - * Calculate how many bytes we can copy from this big block. + * Calculate how many bytes we can copy to this big block. */ bytesToWrite = min(This->parentStorage->bigBlockSize - offsetInBlock, size); - TRACE("block %i\n",blockIndex); - ulOffset.u.HighPart = 0; - ulOffset.u.LowPart = StorageImpl_GetBigBlockOffset(This->parentStorage, blockIndex) + - offsetInBlock; + hr = BlockChainStream_GetBlockAtOffset(This, blockNoInSequence, &cachedBlock, &blockIndex, size == bytesToWrite); - StorageImpl_WriteAt(This->parentStorage, - ulOffset, - bufferWalker, - bytesToWrite, - &bytesWrittenAt); + /* BlockChainStream_SetSize should have already been called to ensure we have + * enough blocks in the chain to write into */ + if (FAILED(hr)) + { + ERR("not enough blocks in chain to write data\n"); + return hr; + } - /* - * Step to the next big block. - */ - if(size > bytesWrittenAt && FAILED(StorageImpl_GetNextBlockInChain(This->parentStorage, blockIndex, - &blockIndex))) - return STG_E_DOCFILECORRUPT; + if (!cachedBlock) + { + /* Not in cache, and we're going to write past the end of the block. */ + ulOffset.u.HighPart = 0; + ulOffset.u.LowPart = StorageImpl_GetBigBlockOffset(This->parentStorage, blockIndex) + + offsetInBlock; + StorageImpl_WriteAt(This->parentStorage, + ulOffset, + bufferWalker, + bytesToWrite, + &bytesWrittenAt); + } + else + { + if (!cachedBlock->read && bytesToWrite != This->parentStorage->bigBlockSize) + { + if (!StorageImpl_ReadBigBlock(This->parentStorage, cachedBlock->sector, cachedBlock->data)) + return STG_E_READFAULT; + } + + memcpy(cachedBlock->data+offsetInBlock, bufferWalker, bytesToWrite); + bytesWrittenAt = bytesToWrite; + cachedBlock->read = 1; + cachedBlock->dirty = 1; + } + + blockNoInSequence++; bufferWalker += bytesWrittenAt; size -= bytesWrittenAt; *bytesWritten += bytesWrittenAt; @@ -5970,6 +6188,7 @@ static BOOL BlockChainStream_Shrink(BlockChainStream* This, { ULONG blockIndex; ULONG numBlocks; + int i; /* * Figure out how many blocks are needed to contain the new size @@ -6037,6 +6256,18 @@ static BOOL BlockChainStream_Shrink(BlockChainStream* This, last_run->lastOffset--; } + /* + * Reset the last accessed block cache. + */ + for (i=0; i<2; i++) + { + if (This->cachedBlocks[i].index >= numBlocks) + { + This->cachedBlocks[i].index = 0xffffffff; + This->cachedBlocks[i].dirty = 0; + } + } + return TRUE; } diff --git a/dll/win32/ole32/storage32.h b/dll/win32/ole32/storage32.h index 19f3f2d682c..36d0e2fff4a 100644 --- a/dll/win32/ole32/storage32.h +++ b/dll/win32/ole32/storage32.h @@ -11,6 +11,7 @@ * * Copyright 1998,1999 Francis Beaudet * Copyright 1998,1999 Thuy Nguyen + * Copyright 2010 Vincent Povirk for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -42,8 +43,12 @@ /* * Definitions for the file format offsets. */ +static const ULONG OFFSET_MINORVERSION = 0x00000018; +static const ULONG OFFSET_MAJORVERSION = 0x0000001a; +static const ULONG OFFSET_BYTEORDERMARKER = 0x0000001c; static const ULONG OFFSET_BIGBLOCKSIZEBITS = 0x0000001e; static const ULONG OFFSET_SMALLBLOCKSIZEBITS = 0x00000020; +static const ULONG OFFSET_DIRSECTORCOUNT = 0x00000028; static const ULONG OFFSET_BBDEPOTCOUNT = 0x0000002C; static const ULONG OFFSET_ROOTSTARTBLOCK = 0x00000030; static const ULONG OFFSET_SMALLBLOCKLIMIT = 0x00000038; @@ -149,31 +154,7 @@ struct DirEntry ULARGE_INTEGER size; }; -/************************************************************************* - * Big Block File support - * - * The big block file is an abstraction of a flat file separated in - * same sized blocks. The implementation for the methods described in - * this section appear in stg_bigblockfile.c - */ - -typedef struct BigBlockFile BigBlockFile,*LPBIGBLOCKFILE; - -/* - * Declaration of the functions used to manipulate the BigBlockFile - * data structure. - */ -BigBlockFile* BIGBLOCKFILE_Construct(HANDLE hFile, - ILockBytes* pLkByt, - DWORD openFlags, - BOOL fileBased); -void BIGBLOCKFILE_Destructor(LPBIGBLOCKFILE This); -HRESULT BIGBLOCKFILE_Expand(LPBIGBLOCKFILE This, ULARGE_INTEGER newSize); -HRESULT BIGBLOCKFILE_SetSize(LPBIGBLOCKFILE This, ULARGE_INTEGER newSize); -HRESULT BIGBLOCKFILE_ReadAt(LPBIGBLOCKFILE This, ULARGE_INTEGER offset, - void* buffer, ULONG size, ULONG* bytesRead); -HRESULT BIGBLOCKFILE_WriteAt(LPBIGBLOCKFILE This, ULARGE_INTEGER offset, - const void* buffer, ULONG size, ULONG* bytesRead); +HRESULT FileLockBytesImpl_Construct(HANDLE hFile, DWORD openFlags, LPCWSTR pwcsName, ILockBytes **pLockBytes); /************************************************************************* * Ole Convert support @@ -240,9 +221,6 @@ struct StorageBaseImpl */ DWORD stateBits; - /* If set, this overrides the root storage name returned by IStorage_Stat */ - LPCWSTR filename; - BOOL create; /* Was the storage created or opened. The behaviour of STGM_SIMPLE depends on this */ /* @@ -256,6 +234,8 @@ struct StorageBaseImpl struct StorageBaseImplVtbl { void (*Destroy)(StorageBaseImpl*); void (*Invalidate)(StorageBaseImpl*); + HRESULT (*Flush)(StorageBaseImpl*); + HRESULT (*GetFilename)(StorageBaseImpl*,LPWSTR*); HRESULT (*CreateDirEntry)(StorageBaseImpl*,const DirEntry*,DirRef*); HRESULT (*WriteDirEntry)(StorageBaseImpl*,DirRef,const DirEntry*); HRESULT (*ReadDirEntry)(StorageBaseImpl*,DirRef,DirEntry*); @@ -276,6 +256,16 @@ static inline void StorageBaseImpl_Invalidate(StorageBaseImpl *This) This->baseVtbl->Invalidate(This); } +static inline HRESULT StorageBaseImpl_Flush(StorageBaseImpl *This) +{ + return This->baseVtbl->Flush(This); +} + +static inline HRESULT StorageBaseImpl_GetFilename(StorageBaseImpl *This, LPWSTR *result) +{ + return This->baseVtbl->GetFilename(This, result); +} + static inline HRESULT StorageBaseImpl_CreateDirEntry(StorageBaseImpl *This, const DirEntry *newData, DirRef *index) { @@ -351,13 +341,6 @@ struct StorageImpl { struct StorageBaseImpl base; - /* - * The following data members are specific to the Storage32Impl - * class - */ - HANDLE hFile; /* Physical support for the Docfile */ - LPOLESTR pwcsName; /* Full path of the document file */ - /* * File header */ @@ -391,10 +374,7 @@ struct StorageImpl BlockChainStream* blockChainCache[BLOCKCHAIN_CACHE_SIZE]; UINT blockChainToEvict; - /* - * Pointer to the big block file abstraction - */ - BigBlockFile* bigBlockFile; + ILockBytes* lockBytes; }; HRESULT StorageImpl_ReadRawDirEntry( @@ -532,6 +512,15 @@ struct BlockChainRun ULONG lastOffset; }; +typedef struct BlockChainBlock +{ + ULONG index; + ULONG sector; + int read; + int dirty; + BYTE data[MAX_BIG_BLOCK_SIZE]; +} BlockChainBlock; + struct BlockChainStream { StorageImpl* parentStorage; @@ -540,6 +529,8 @@ struct BlockChainStream struct BlockChainRun* indexCache; ULONG indexCacheLen; ULONG indexCacheSize; + BlockChainBlock cachedBlocks[2]; + ULONG blockToEvict; ULONG tailIndex; ULONG numBlocks; }; @@ -573,6 +564,9 @@ BOOL BlockChainStream_SetSize( BlockChainStream* This, ULARGE_INTEGER newSize); +HRESULT BlockChainStream_Flush( + BlockChainStream* This); + /**************************************************************************** * SmallBlockChainStream definitions. * diff --git a/dll/win32/oleacc/oleacc_De.rc b/dll/win32/oleacc/oleacc_De.rc index f15cc2dcbba..6c0c9542c81 100644 --- a/dll/win32/oleacc/oleacc_De.rc +++ b/dll/win32/oleacc/oleacc_De.rc @@ -24,7 +24,7 @@ LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { 0 "unbekanntes Objekt" /* undocumented */ ROLE_SYSTEM_TITLEBAR "Titelleiste" diff --git a/dll/win32/oleacc/oleacc_En.rc b/dll/win32/oleacc/oleacc_En.rc index 5c1af2de217..37d3a557495 100644 --- a/dll/win32/oleacc/oleacc_En.rc +++ b/dll/win32/oleacc/oleacc_En.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { 0 "unknown object" /* undocumented */ ROLE_SYSTEM_TITLEBAR "title bar" diff --git a/dll/win32/oleacc/oleacc_Fr.rc b/dll/win32/oleacc/oleacc_Fr.rc index 8eabc3cd4d5..ef21c088452 100644 --- a/dll/win32/oleacc/oleacc_Fr.rc +++ b/dll/win32/oleacc/oleacc_Fr.rc @@ -26,7 +26,7 @@ LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { 0 "objet inconnu" /* non documenté */ ROLE_SYSTEM_TITLEBAR "barre de titre" diff --git a/dll/win32/oleacc/oleacc_Hu.rc b/dll/win32/oleacc/oleacc_Hu.rc index eb75a9a1824..63ce7410b3b 100644 --- a/dll/win32/oleacc/oleacc_Hu.rc +++ b/dll/win32/oleacc/oleacc_Hu.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { 0 "ismeretlen objektum" /* undocumented */ ROLE_SYSTEM_TITLEBAR "címsor" diff --git a/dll/win32/oleacc/oleacc_It.rc b/dll/win32/oleacc/oleacc_It.rc index 3f99e65fc9d..97456932e83 100644 --- a/dll/win32/oleacc/oleacc_It.rc +++ b/dll/win32/oleacc/oleacc_It.rc @@ -26,7 +26,7 @@ LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { 0 "oggetto sconosciuto" /* undocumented */ ROLE_SYSTEM_TITLEBAR "barra del titolo" diff --git a/dll/win32/oleacc/oleacc_Ko.rc b/dll/win32/oleacc/oleacc_Ko.rc index 70138756f3e..19d5d381a8d 100644 --- a/dll/win32/oleacc/oleacc_Ko.rc +++ b/dll/win32/oleacc/oleacc_Ko.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { 0 " ü" /* undocumented */ ROLE_SYSTEM_TITLEBAR "" diff --git a/dll/win32/oleacc/oleacc_Lt.rc b/dll/win32/oleacc/oleacc_Lt.rc index 4056c3dd9d6..c6d57b8b44b 100644 --- a/dll/win32/oleacc/oleacc_Lt.rc +++ b/dll/win32/oleacc/oleacc_Lt.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { 0 "nežinomas objektas" /* undocumented */ ROLE_SYSTEM_TITLEBAR "lango antraštės juosta" diff --git a/dll/win32/oleacc/oleacc_Nl.rc b/dll/win32/oleacc/oleacc_Nl.rc index 8c9552bbc77..ccef803da84 100644 --- a/dll/win32/oleacc/oleacc_Nl.rc +++ b/dll/win32/oleacc/oleacc_Nl.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { 0 "onbekend object" /* undocumented */ ROLE_SYSTEM_TITLEBAR "titelbalk" diff --git a/dll/win32/oleacc/oleacc_No.rc b/dll/win32/oleacc/oleacc_No.rc index 1bbadf0507c..6eb25d11c3a 100644 --- a/dll/win32/oleacc/oleacc_No.rc +++ b/dll/win32/oleacc/oleacc_No.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_NORWEGIAN, SUBLANG_NORWEGIAN_BOKMAL -STRINGTABLE DISCARDABLE +STRINGTABLE { 0 "unknown object" /* undocumented */ ROLE_SYSTEM_TITLEBAR "tittellinje" diff --git a/dll/win32/oleacc/oleacc_Pl.rc b/dll/win32/oleacc/oleacc_Pl.rc index 424857731d1..87e3917b1ac 100644 --- a/dll/win32/oleacc/oleacc_Pl.rc +++ b/dll/win32/oleacc/oleacc_Pl.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_POLISH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { 0 "unknown object" /* undocumented */ ROLE_SYSTEM_TITLEBAR "pasek tytuu" diff --git a/dll/win32/oleacc/oleacc_Pt.rc b/dll/win32/oleacc/oleacc_Pt.rc index 769039a2f64..d692ddd631a 100644 --- a/dll/win32/oleacc/oleacc_Pt.rc +++ b/dll/win32/oleacc/oleacc_Pt.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN -STRINGTABLE DISCARDABLE +STRINGTABLE { 0 "objeto desconhecido" /* undocumented */ ROLE_SYSTEM_TITLEBAR "barra de título" @@ -96,7 +96,7 @@ STRINGTABLE DISCARDABLE LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE -STRINGTABLE DISCARDABLE +STRINGTABLE { 0 "objecto desconhecido" /* undocumented */ ROLE_SYSTEM_TITLEBAR "barra de título" diff --git a/dll/win32/oleacc/oleacc_Ro.rc b/dll/win32/oleacc/oleacc_Ro.rc index 52fc47b7dcb..11ff2a201dd 100644 --- a/dll/win32/oleacc/oleacc_Ro.rc +++ b/dll/win32/oleacc/oleacc_Ro.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL #pragma code_page(65001) -STRINGTABLE DISCARDABLE +STRINGTABLE { 0 "obiect necunoscut" /* undocumented */ ROLE_SYSTEM_TITLEBAR "bară de titlu" diff --git a/dll/win32/oleacc/oleacc_Si.rc b/dll/win32/oleacc/oleacc_Si.rc index 5b28c46ab5b..2622901b9db 100644 --- a/dll/win32/oleacc/oleacc_Si.rc +++ b/dll/win32/oleacc/oleacc_Si.rc @@ -24,7 +24,7 @@ LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { 0 "nepoznan objekt" /* undocumented */ ROLE_SYSTEM_TITLEBAR "naslovna vrstica" diff --git a/dll/win32/oleacc/oleacc_Uk.rc b/dll/win32/oleacc/oleacc_Uk.rc index 5822cf3f4bd..10cead739f8 100644 --- a/dll/win32/oleacc/oleacc_Uk.rc +++ b/dll/win32/oleacc/oleacc_Uk.rc @@ -27,7 +27,7 @@ LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { 0 "unknown object" /* undocumented */ ROLE_SYSTEM_TITLEBAR "смуга назви" diff --git a/dll/win32/oleaut32/oleaut32.spec b/dll/win32/oleaut32/oleaut32.spec index 7b764ef96b6..a86486fecac 100644 --- a/dll/win32/oleaut32/oleaut32.spec +++ b/dll/win32/oleaut32/oleaut32.spec @@ -410,6 +410,8 @@ 439 stdcall VarUI8FromUI2(long ptr) 440 stdcall VarUI8FromUI4(long ptr) 441 stdcall VarUI8FromDec(long ptr) +442 stdcall RegisterTypeLibForUser(ptr wstr wstr) +443 stdcall UnRegisterTypeLibForUser(ptr long long long long) @ stdcall -private DllCanUnloadNow() @ stdcall -private DllGetClassObject(ptr ptr ptr) diff --git a/dll/win32/oleaut32/oleaut32_Bg.rc b/dll/win32/oleaut32/oleaut32_Bg.rc index 7f0180b2b09..70b8debe73c 100644 --- a/dll/win32/oleaut32/oleaut32_Bg.rc +++ b/dll/win32/oleaut32/oleaut32_Bg.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_BULGARIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TRUE "" IDS_FALSE "" diff --git a/dll/win32/oleaut32/oleaut32_Cy.rc b/dll/win32/oleaut32/oleaut32_Cy.rc new file mode 100644 index 00000000000..af9428059e0 --- /dev/null +++ b/dll/win32/oleaut32/oleaut32_Cy.rc @@ -0,0 +1,34 @@ +/* + * Cefnogaeth iaith Cymraeg + * Welsh language support + * + * Copyright 2010 Ken Sharp + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include "resource.h" + +LANGUAGE LANG_WELSH, SUBLANG_DEFAULT + +STRINGTABLE +{ + IDS_TRUE "Gwir" + IDS_FALSE "Ffug" + IDS_YES "Ydw" + IDS_NO "Dim" + IDS_ON "Ar" + IDS_OFF "Off" +} diff --git a/dll/win32/oleaut32/oleaut32_Cz.rc b/dll/win32/oleaut32/oleaut32_Cz.rc index 48be0b70a82..680143b3127 100644 --- a/dll/win32/oleaut32/oleaut32_Cz.rc +++ b/dll/win32/oleaut32/oleaut32_Cz.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_CZECH, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TRUE "Pravda" IDS_FALSE "Nepravda" diff --git a/dll/win32/oleaut32/oleaut32_Da.rc b/dll/win32/oleaut32/oleaut32_Da.rc index e28922fa1bf..1f54db37f0a 100644 --- a/dll/win32/oleaut32/oleaut32_Da.rc +++ b/dll/win32/oleaut32/oleaut32_Da.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_DANISH, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TRUE "Sand" IDS_FALSE "Falsk" diff --git a/dll/win32/oleaut32/oleaut32_De.rc b/dll/win32/oleaut32/oleaut32_De.rc index 1dbee3ee8c7..61a3c260e41 100644 --- a/dll/win32/oleaut32/oleaut32_De.rc +++ b/dll/win32/oleaut32/oleaut32_De.rc @@ -24,7 +24,7 @@ LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TRUE "Wahr" IDS_FALSE "Falsch" diff --git a/dll/win32/oleaut32/oleaut32_El.rc b/dll/win32/oleaut32/oleaut32_El.rc index a0337950262..73745041fac 100644 --- a/dll/win32/oleaut32/oleaut32_El.rc +++ b/dll/win32/oleaut32/oleaut32_El.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_GREEK, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TRUE "" IDS_FALSE "" diff --git a/dll/win32/oleaut32/oleaut32_En.rc b/dll/win32/oleaut32/oleaut32_En.rc index 6a98642e7ca..f35200465ce 100644 --- a/dll/win32/oleaut32/oleaut32_En.rc +++ b/dll/win32/oleaut32/oleaut32_En.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TRUE "True" IDS_FALSE "False" diff --git a/dll/win32/oleaut32/oleaut32_Es.rc b/dll/win32/oleaut32/oleaut32_Es.rc index 5c187db364f..eeb3d9080a6 100644 --- a/dll/win32/oleaut32/oleaut32_Es.rc +++ b/dll/win32/oleaut32/oleaut32_Es.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TRUE "Verdadero" IDS_FALSE "Falso" diff --git a/dll/win32/oleaut32/oleaut32_Fr.rc b/dll/win32/oleaut32/oleaut32_Fr.rc index d6136ef8cda..1583bd1d3c2 100644 --- a/dll/win32/oleaut32/oleaut32_Fr.rc +++ b/dll/win32/oleaut32/oleaut32_Fr.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TRUE "Vrai" IDS_FALSE "Faux" diff --git a/dll/win32/oleaut32/oleaut32_Hu.rc b/dll/win32/oleaut32/oleaut32_Hu.rc index ec3b9827e3f..5705441b74a 100644 --- a/dll/win32/oleaut32/oleaut32_Hu.rc +++ b/dll/win32/oleaut32/oleaut32_Hu.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TRUE "Igaz" IDS_FALSE "Hamis" diff --git a/dll/win32/oleaut32/oleaut32_It.rc b/dll/win32/oleaut32/oleaut32_It.rc index 69fa31a34a7..561675c43af 100644 --- a/dll/win32/oleaut32/oleaut32_It.rc +++ b/dll/win32/oleaut32/oleaut32_It.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TRUE "Vero" IDS_FALSE "Falso" diff --git a/dll/win32/oleaut32/oleaut32_Ko.rc b/dll/win32/oleaut32/oleaut32_Ko.rc index 541380543a5..a91be617321 100644 --- a/dll/win32/oleaut32/oleaut32_Ko.rc +++ b/dll/win32/oleaut32/oleaut32_Ko.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TRUE "" IDS_FALSE "" diff --git a/dll/win32/oleaut32/oleaut32_Lt.rc b/dll/win32/oleaut32/oleaut32_Lt.rc index c568d93cb78..1eca35f3734 100644 --- a/dll/win32/oleaut32/oleaut32_Lt.rc +++ b/dll/win32/oleaut32/oleaut32_Lt.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TRUE "Tiesa" IDS_FALSE "Netiesa" diff --git a/dll/win32/oleaut32/oleaut32_Nl.rc b/dll/win32/oleaut32/oleaut32_Nl.rc index e2ae3dea380..513ba61cb6c 100644 --- a/dll/win32/oleaut32/oleaut32_Nl.rc +++ b/dll/win32/oleaut32/oleaut32_Nl.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TRUE "Waar" IDS_FALSE "Onwaar" diff --git a/dll/win32/oleaut32/oleaut32_No.rc b/dll/win32/oleaut32/oleaut32_No.rc index 1f99f7bbe56..f1b6d636506 100644 --- a/dll/win32/oleaut32/oleaut32_No.rc +++ b/dll/win32/oleaut32/oleaut32_No.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_NORWEGIAN, SUBLANG_NORWEGIAN_BOKMAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TRUE "Sann" IDS_FALSE "Usann" diff --git a/dll/win32/oleaut32/oleaut32_Pl.rc b/dll/win32/oleaut32/oleaut32_Pl.rc index 7d34796fd0b..f80bc80a1fb 100644 --- a/dll/win32/oleaut32/oleaut32_Pl.rc +++ b/dll/win32/oleaut32/oleaut32_Pl.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_POLISH, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TRUE "Prawda" IDS_FALSE "Fasz" diff --git a/dll/win32/oleaut32/oleaut32_Pt.rc b/dll/win32/oleaut32/oleaut32_Pt.rc index de008bbd0f9..484990de8ad 100644 --- a/dll/win32/oleaut32/oleaut32_Pt.rc +++ b/dll/win32/oleaut32/oleaut32_Pt.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_PORTUGUESE, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TRUE "Verdadeiro" IDS_FALSE "Falso" diff --git a/dll/win32/oleaut32/oleaut32_Ro.rc b/dll/win32/oleaut32/oleaut32_Ro.rc index 3a37a69ddef..1b80fa2fe2e 100644 --- a/dll/win32/oleaut32/oleaut32_Ro.rc +++ b/dll/win32/oleaut32/oleaut32_Ro.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL #pragma code_page(65001) -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TRUE "Adevărat" IDS_FALSE "Fals" diff --git a/dll/win32/oleaut32/oleaut32_Ru.rc b/dll/win32/oleaut32/oleaut32_Ru.rc index e7c31073e33..1545bffd07b 100644 --- a/dll/win32/oleaut32/oleaut32_Ru.rc +++ b/dll/win32/oleaut32/oleaut32_Ru.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TRUE "Правда" IDS_FALSE "Ложь" diff --git a/dll/win32/oleaut32/oleaut32_Si.rc b/dll/win32/oleaut32/oleaut32_Si.rc index 32a80adefb6..bf4e9953920 100644 --- a/dll/win32/oleaut32/oleaut32_Si.rc +++ b/dll/win32/oleaut32/oleaut32_Si.rc @@ -24,7 +24,7 @@ LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TRUE "Da" IDS_FALSE "Ne" diff --git a/dll/win32/oleaut32/oleaut32_Sv.rc b/dll/win32/oleaut32/oleaut32_Sv.rc index 4362a068bab..08bee95caaf 100644 --- a/dll/win32/oleaut32/oleaut32_Sv.rc +++ b/dll/win32/oleaut32/oleaut32_Sv.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_SWEDISH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TRUE "Sant" IDS_FALSE "Falskt" diff --git a/dll/win32/oleaut32/oleaut32_Th.rc b/dll/win32/oleaut32/oleaut32_Th.rc index 8fcf212a969..0cc3831f132 100644 --- a/dll/win32/oleaut32/oleaut32_Th.rc +++ b/dll/win32/oleaut32/oleaut32_Th.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_THAI, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TRUE "ԧ" IDS_FALSE "ԧ" diff --git a/dll/win32/oleaut32/oleaut32_Tr.rc b/dll/win32/oleaut32/oleaut32_Tr.rc index 08d841a92a4..a2dd130e30a 100644 --- a/dll/win32/oleaut32/oleaut32_Tr.rc +++ b/dll/win32/oleaut32/oleaut32_Tr.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TRUE "Doru" IDS_FALSE "Yanl" diff --git a/dll/win32/oleaut32/oleaut32_Uk.rc b/dll/win32/oleaut32/oleaut32_Uk.rc index d51b06eb72c..56bf3520fe0 100644 --- a/dll/win32/oleaut32/oleaut32_Uk.rc +++ b/dll/win32/oleaut32/oleaut32_Uk.rc @@ -27,7 +27,7 @@ LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TRUE "Істина" IDS_FALSE "Неправда" diff --git a/dll/win32/oleaut32/oleaut32_Zh.rc b/dll/win32/oleaut32/oleaut32_Zh.rc index bbb9e06433e..7257f836ed2 100644 --- a/dll/win32/oleaut32/oleaut32_Zh.rc +++ b/dll/win32/oleaut32/oleaut32_Zh.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TRUE "真" IDS_FALSE "假" @@ -37,7 +37,7 @@ STRINGTABLE DISCARDABLE LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_TRUE "真" IDS_FALSE "假" diff --git a/dll/win32/oleaut32/typelib.c b/dll/win32/oleaut32/typelib.c index 7a56e934229..46c0d284be0 100644 --- a/dll/win32/oleaut32/typelib.c +++ b/dll/win32/oleaut32/typelib.c @@ -903,6 +903,49 @@ end: return result; } +/****************************************************************************** + * RegisterTypeLibForUser [OLEAUT32.442] + * Adds information about a type library to the user registry + * NOTES + * Docs: ITypeLib FAR * ptlib + * Docs: OLECHAR FAR* szFullPath + * Docs: OLECHAR FAR* szHelpDir + * + * RETURNS + * Success: S_OK + * Failure: Status + */ +HRESULT WINAPI RegisterTypeLibForUser( + ITypeLib * ptlib, /* [in] Pointer to the library*/ + OLECHAR * szFullPath, /* [in] full Path of the library*/ + OLECHAR * szHelpDir) /* [in] dir to the helpfile for the library, + may be NULL*/ +{ + FIXME("(%p, %s, %s) registering the typelib system-wide\n", ptlib, + debugstr_w(szFullPath), debugstr_w(szHelpDir)); + return RegisterTypeLib(ptlib, szFullPath, szHelpDir); +} + +/****************************************************************************** + * UnRegisterTypeLibForUser [OLEAUT32.443] + * Removes information about a type library from the user registry + * + * RETURNS + * Success: S_OK + * Failure: Status + */ +HRESULT WINAPI UnRegisterTypeLibForUser( + REFGUID libid, /* [in] GUID of the library */ + WORD wVerMajor, /* [in] major version */ + WORD wVerMinor, /* [in] minor version */ + LCID lcid, /* [in] locale id */ + SYSKIND syskind) +{ + FIXME("(%s, %u, %u, %u, %u) unregistering the typelib system-wide\n", + debugstr_guid(libid), wVerMajor, wVerMinor, lcid, syskind); + return UnRegisterTypeLib(libid, wVerMajor, wVerMinor, lcid, syskind); +} + /*======================= ITypeLib implementation =======================*/ typedef struct tagTLBCustData @@ -6023,6 +6066,9 @@ static HRESULT WINAPI ITypeInfo_fnInvoke( This,pIUnk,memid,wFlags,pDispParams,pVarResult,pExcepInfo,pArgErr ); + if( This->TypeAttr.wTypeFlags & TYPEFLAG_FRESTRICTED ) + return DISP_E_MEMBERNOTFOUND; + if (!pDispParams) { ERR("NULL pDispParams not allowed\n"); @@ -6042,7 +6088,8 @@ static HRESULT WINAPI ITypeInfo_fnInvoke( * FUNCDESC for dispinterfaces and we want the real function description */ for (pFuncInfo = This->funclist; pFuncInfo; pFuncInfo=pFuncInfo->next) if ((memid == pFuncInfo->funcdesc.memid) && - (wFlags & pFuncInfo->funcdesc.invkind)) + (wFlags & pFuncInfo->funcdesc.invkind) && + (pFuncInfo->funcdesc.wFuncFlags & FUNCFLAG_FRESTRICTED) == 0) break; if (pFuncInfo) { @@ -6491,7 +6538,7 @@ func_fail: WARN("Could not search inherited interface!\n"); } } - ERR("did not find member id %d, flags 0x%x!\n", memid, wFlags); + WARN("did not find member id %d, flags 0x%x!\n", memid, wFlags); return DISP_E_MEMBERNOTFOUND; } @@ -7654,9 +7701,9 @@ static HRESULT WINAPI ITypeComp_fnBind( ITypeInfoImpl *This = info_impl_from_ITypeComp(iface); const TLBFuncDesc *pFDesc; const TLBVarDesc *pVDesc; - HRESULT hr = DISP_E_MEMBERNOTFOUND; + HRESULT hr = S_OK; - TRACE("(%s, %x, 0x%x, %p, %p, %p)\n", debugstr_w(szName), lHash, wFlags, ppTInfo, pDescKind, pBindPtr); + TRACE("(%p)->(%s, %x, 0x%x, %p, %p, %p)\n", This, debugstr_w(szName), lHash, wFlags, ppTInfo, pDescKind, pBindPtr); *pDescKind = DESCKIND_NONE; pBindPtr->lpfuncdesc = NULL; @@ -7716,7 +7763,7 @@ static HRESULT WINAPI ITypeComp_fnBind( } WARN("Could not search inherited interface!\n"); } - WARN("did not find member with name %s, flags 0x%x!\n", debugstr_w(szName), wFlags); + TRACE("did not find member with name %s, flags 0x%x\n", debugstr_w(szName), wFlags); return hr; } diff --git a/dll/win32/oleaut32/typelib2.c b/dll/win32/oleaut32/typelib2.c index aa14d225798..92d4ab036d6 100644 --- a/dll/win32/oleaut32/typelib2.c +++ b/dll/win32/oleaut32/typelib2.c @@ -317,7 +317,7 @@ static int ctl2_find_guid( while (offset != -1) { guidentry = (MSFT_GuidEntry *)&This->typelib_segment_data[MSFT_SEG_GUID][offset]; - if (!memcmp(guidentry, guid, sizeof(GUID))) return offset; + if (IsEqualGUID(guidentry, guid)) return offset; offset = guidentry->next_hash; } @@ -797,416 +797,16 @@ static int ctl2_alloc_importfile( } /**************************************************************************** - * ctl2_alloc_custdata + * ctl2_encode_variant * - * Allocates and initializes a "custom data" value in a type library. - * - * RETURNS - * - * Success: The offset of the new custdata. - * Failure: - * - * -1: Out of memory. - * -2: Unable to encode VARIANT data (typically a bug). - */ -static int ctl2_alloc_custdata( - ICreateTypeLib2Impl *This, /* [I] The type library in which to encode the value. */ - VARIANT *pVarVal) /* [I] The value to encode. */ -{ - int offset; - - TRACE("(%p,%p(%d))\n",This,pVarVal,V_VT(pVarVal)); - - switch (V_VT(pVarVal)) { - case VT_UI4: - case VT_I4: - case VT_R4: - case VT_INT: - case VT_UINT: - case VT_HRESULT: - offset = ctl2_alloc_segment(This, MSFT_SEG_CUSTDATA, 8, 0); - if (offset == -1) return offset; - - *((unsigned short *)&This->typelib_segment_data[MSFT_SEG_CUSTDATA][offset]) = V_VT(pVarVal); - *((DWORD *)&This->typelib_segment_data[MSFT_SEG_CUSTDATA][offset+2]) = V_UI4(pVarVal); - break; - - case VT_BSTR: { - /* Construct the data */ - UINT cp = CP_ACP; - int stringlen = SysStringLen(V_BSTR(pVarVal)); - int len = 0; - if (stringlen > 0) { - GetLocaleInfoA(This->typelib_header.lcid, LOCALE_IDEFAULTANSICODEPAGE | LOCALE_RETURN_NUMBER, - (LPSTR)&cp, sizeof(cp)); - len = WideCharToMultiByte(cp, 0, V_BSTR(pVarVal), SysStringLen(V_BSTR(pVarVal)), NULL, 0, NULL, NULL); - if (!len) - return -1; - } - - offset = ctl2_alloc_segment(This, MSFT_SEG_CUSTDATA, (6 + len + 3) & ~0x3, 0); - if (offset == -1) return offset; - - *((unsigned short *)&This->typelib_segment_data[MSFT_SEG_CUSTDATA][offset]) = V_VT(pVarVal); - *((DWORD *)&This->typelib_segment_data[MSFT_SEG_CUSTDATA][offset+2]) = (DWORD)len; - if (stringlen > 0) { - WideCharToMultiByte(cp, 0, V_BSTR(pVarVal), SysStringLen(V_BSTR(pVarVal)), - &This->typelib_segment_data[MSFT_SEG_CUSTDATA][offset+6], len, NULL, NULL); - } - } - break; - - default: - FIXME("Unknown variable encoding vt %d.\n", V_VT(pVarVal)); - return -2; - } - - return offset; -} - -/**************************************************************************** - * ctl2_set_custdata - * - * Adds a custom data element to an object in a type library. - * - * RETURNS - * - * Success: S_OK. - * Failure: One of E_INVALIDARG or E_OUTOFMEMORY. - */ -static HRESULT ctl2_set_custdata( - ICreateTypeLib2Impl *This, /* [I] The type library to store the custom data in. */ - REFGUID guid, /* [I] The GUID used as a key to retrieve the custom data. */ - VARIANT *pVarVal, /* [I] The custom data itself. */ - int *offset) /* [I/O] The list of custom data to prepend to. */ -{ - MSFT_GuidEntry guidentry; - int dataoffset; - int guidoffset; - int custoffset; - int *custdata; - - guidentry.guid = *guid; - - guidentry.hreftype = -1; - guidentry.next_hash = -1; - - guidoffset = ctl2_alloc_guid(This, &guidentry); - if (guidoffset == -1) return E_OUTOFMEMORY; - dataoffset = ctl2_alloc_custdata(This, pVarVal); - if (dataoffset == -1) return E_OUTOFMEMORY; - if (dataoffset == -2) return DISP_E_BADVARTYPE; - - custoffset = ctl2_alloc_segment(This, MSFT_SEG_CUSTDATAGUID, 12, 0); - if (custoffset == -1) return E_OUTOFMEMORY; - - custdata = (int *)&This->typelib_segment_data[MSFT_SEG_CUSTDATAGUID][custoffset]; - custdata[0] = guidoffset; - custdata[1] = dataoffset; - custdata[2] = *offset; - *offset = custoffset; - - return S_OK; -} - -/**************************************************************************** - * ctl2_encode_typedesc - * - * Encodes a type description, storing information in the TYPEDESC and ARRAYDESC - * segments as needed. - * - * RETURNS - * - * Success: 0. - * Failure: -1. - */ -static int ctl2_encode_typedesc( - ICreateTypeLib2Impl *This, /* [I] The type library in which to encode the TYPEDESC. */ - const TYPEDESC *tdesc, /* [I] The type description to encode. */ - int *encoded_tdesc, /* [O] The encoded type description. */ - int *width, /* [O] The width of the type, or NULL. */ - int *alignment, /* [O] The alignment of the type, or NULL. */ - int *decoded_size) /* [O] The total size of the unencoded TYPEDESCs, including nested descs. */ -{ - int default_tdesc; - int scratch; - int typeoffset; - int arrayoffset; - int *typedata; - int *arraydata; - int target_type; - int child_size; - - default_tdesc = 0x80000000 | (tdesc->vt << 16) | tdesc->vt; - if (!width) width = &scratch; - if (!alignment) alignment = &scratch; - if (!decoded_size) decoded_size = &scratch; - - *decoded_size = 0; - - switch (tdesc->vt) { - case VT_UI1: - case VT_I1: - *encoded_tdesc = default_tdesc; - *width = 1; - *alignment = 1; - break; - - case VT_INT: - *encoded_tdesc = 0x80000000 | (VT_I4 << 16) | VT_INT; - if ((This->typelib_header.varflags & 0x0f) == SYS_WIN16) { - *width = 2; - *alignment = 2; - } else { - *width = 4; - *alignment = 4; - } - break; - - case VT_UINT: - *encoded_tdesc = 0x80000000 | (VT_UI4 << 16) | VT_UINT; - if ((This->typelib_header.varflags & 0x0f) == SYS_WIN16) { - *width = 2; - *alignment = 2; - } else { - *width = 4; - *alignment = 4; - } - break; - - case VT_UI2: - case VT_I2: - case VT_BOOL: - *encoded_tdesc = default_tdesc; - *width = 2; - *alignment = 2; - break; - - case VT_I4: - case VT_UI4: - case VT_R4: - case VT_ERROR: - case VT_BSTR: - case VT_HRESULT: - *encoded_tdesc = default_tdesc; - *width = 4; - *alignment = 4; - break; - - case VT_CY: - *encoded_tdesc = default_tdesc; - *width = 8; - *alignment = 4; /* guess? */ - break; - - case VT_VOID: - *encoded_tdesc = 0x80000000 | (VT_EMPTY << 16) | tdesc->vt; - *width = 0; - *alignment = 1; - break; - - case VT_PTR: - /* FIXME: Make with the error checking. */ - FIXME("PTR vartype, may not work correctly.\n"); - - ctl2_encode_typedesc(This, tdesc->u.lptdesc, &target_type, NULL, NULL, &child_size); - - for (typeoffset = 0; typeoffset < This->typelib_segdir[MSFT_SEG_TYPEDESC].length; typeoffset += 8) { - typedata = (void *)&This->typelib_segment_data[MSFT_SEG_TYPEDESC][typeoffset]; - if (((typedata[0] & 0xffff) == VT_PTR) && (typedata[1] == target_type)) break; - } - - if (typeoffset == This->typelib_segdir[MSFT_SEG_TYPEDESC].length) { - int mix_field; - - if (target_type & 0x80000000) { - mix_field = ((target_type >> 16) & 0x3fff) | VT_BYREF; - } else { - typedata = (void *)&This->typelib_segment_data[MSFT_SEG_TYPEDESC][target_type]; - mix_field = ((typedata[0] >> 16) == 0x7fff)? 0x7fff: 0x7ffe; - } - - typeoffset = ctl2_alloc_segment(This, MSFT_SEG_TYPEDESC, 8, 0); - typedata = (void *)&This->typelib_segment_data[MSFT_SEG_TYPEDESC][typeoffset]; - - typedata[0] = (mix_field << 16) | VT_PTR; - typedata[1] = target_type; - } - - *encoded_tdesc = typeoffset; - - *width = 4; - *alignment = 4; - *decoded_size = sizeof(TYPEDESC) + child_size; - break; - - case VT_SAFEARRAY: - /* FIXME: Make with the error checking. */ - FIXME("SAFEARRAY vartype, may not work correctly.\n"); - - ctl2_encode_typedesc(This, tdesc->u.lptdesc, &target_type, NULL, NULL, &child_size); - - for (typeoffset = 0; typeoffset < This->typelib_segdir[MSFT_SEG_TYPEDESC].length; typeoffset += 8) { - typedata = (void *)&This->typelib_segment_data[MSFT_SEG_TYPEDESC][typeoffset]; - if (((typedata[0] & 0xffff) == VT_SAFEARRAY) && (typedata[1] == target_type)) break; - } - - if (typeoffset == This->typelib_segdir[MSFT_SEG_TYPEDESC].length) { - int mix_field; - - if (target_type & 0x80000000) { - mix_field = ((target_type >> 16) & VT_TYPEMASK) | VT_ARRAY; - } else { - typedata = (void *)&This->typelib_segment_data[MSFT_SEG_TYPEDESC][target_type]; - mix_field = ((typedata[0] >> 16) == 0x7fff)? 0x7fff: 0x7ffe; - } - - typeoffset = ctl2_alloc_segment(This, MSFT_SEG_TYPEDESC, 8, 0); - typedata = (void *)&This->typelib_segment_data[MSFT_SEG_TYPEDESC][typeoffset]; - - typedata[0] = (mix_field << 16) | VT_SAFEARRAY; - typedata[1] = target_type; - } - - *encoded_tdesc = typeoffset; - - *width = 4; - *alignment = 4; - *decoded_size = sizeof(TYPEDESC) + child_size; - break; - - case VT_CARRAY: - { - /* FIXME: Make with the error checking. */ - int num_dims = tdesc->u.lpadesc->cDims, elements = 1, dim; - - ctl2_encode_typedesc(This, &tdesc->u.lpadesc->tdescElem, &target_type, width, alignment, NULL); - arrayoffset = ctl2_alloc_segment(This, MSFT_SEG_ARRAYDESC, (2 + 2 * num_dims) * sizeof(int), 0); - arraydata = (void *)&This->typelib_segment_data[MSFT_SEG_ARRAYDESC][arrayoffset]; - - arraydata[0] = target_type; - arraydata[1] = num_dims; - arraydata[1] |= ((num_dims * 2 * sizeof(int)) << 16); - arraydata += 2; - - for(dim = 0; dim < num_dims; dim++) { - arraydata[0] = tdesc->u.lpadesc->rgbounds[dim].cElements; - arraydata[1] = tdesc->u.lpadesc->rgbounds[dim].lLbound; - elements *= tdesc->u.lpadesc->rgbounds[dim].cElements; - arraydata += 2; - } - typeoffset = ctl2_alloc_segment(This, MSFT_SEG_TYPEDESC, 8, 0); - typedata = (void *)&This->typelib_segment_data[MSFT_SEG_TYPEDESC][typeoffset]; - - typedata[0] = (0x7ffe << 16) | VT_CARRAY; - typedata[1] = arrayoffset; - - *encoded_tdesc = typeoffset; - *width = *width * elements; - *decoded_size = sizeof(ARRAYDESC) + (num_dims - 1) * sizeof(SAFEARRAYBOUND); - - break; - } - case VT_USERDEFINED: - TRACE("USERDEFINED.\n"); - for (typeoffset = 0; typeoffset < This->typelib_segdir[MSFT_SEG_TYPEDESC].length; typeoffset += 8) { - typedata = (void *)&This->typelib_segment_data[MSFT_SEG_TYPEDESC][typeoffset]; - if ((typedata[0] == ((0x7fff << 16) | VT_USERDEFINED)) && (typedata[1] == tdesc->u.hreftype)) break; - } - - if (typeoffset == This->typelib_segdir[MSFT_SEG_TYPEDESC].length) { - typeoffset = ctl2_alloc_segment(This, MSFT_SEG_TYPEDESC, 8, 0); - typedata = (void *)&This->typelib_segment_data[MSFT_SEG_TYPEDESC][typeoffset]; - - typedata[0] = (0x7fff << 16) | VT_USERDEFINED; - typedata[1] = tdesc->u.hreftype; - } - - *encoded_tdesc = typeoffset; - *width = 0; - *alignment = 1; - break; - - default: - FIXME("Unrecognized type %d.\n", tdesc->vt); - *encoded_tdesc = default_tdesc; - *width = 0; - *alignment = 1; - break; - } - - return 0; -} - -/**************************************************************************** - * ctl2_find_nth_reference - * - * Finds a reference by index into the linked list of reference records. - * - * RETURNS - * - * Success: Offset of the desired reference record. - * Failure: -1. - */ -static int ctl2_find_nth_reference( - ICreateTypeLib2Impl *This, /* [I] The type library in which to search. */ - int offset, /* [I] The starting offset of the reference list. */ - int index) /* [I] The index of the reference to find. */ -{ - MSFT_RefRecord *ref; - - for (; index && (offset != -1); index--) { - ref = (MSFT_RefRecord *)&This->typelib_segment_data[MSFT_SEG_REFERENCES][offset]; - offset = ref->onext; - } - - return offset; -} - -/**************************************************************************** - * ctl2_find_typeinfo_from_offset - * - * Finds an ITypeInfo given an offset into the TYPEINFO segment. - * - * RETURNS - * - * Success: S_OK. - * Failure: TYPE_E_ELEMENTNOTFOUND. - */ -static HRESULT ctl2_find_typeinfo_from_offset( - ICreateTypeLib2Impl *This, /* [I] The typelib to find the typeinfo in. */ - int offset, /* [I] The offset of the desired typeinfo. */ - ITypeInfo **ppTinfo) /* [I] The typeinfo found. */ -{ - void *typeinfodata; - ICreateTypeInfo2Impl *typeinfo; - - typeinfodata = &This->typelib_segment_data[MSFT_SEG_TYPEINFO][offset]; - - for (typeinfo = This->typeinfos; typeinfo; typeinfo = typeinfo->next_typeinfo) { - if (typeinfo->typeinfo == typeinfodata) { - *ppTinfo = (ITypeInfo *)&typeinfo->lpVtblTypeInfo2; - ITypeInfo2_AddRef(*ppTinfo); - return S_OK; - } - } - - ERR("Failed to find typeinfo, invariant varied.\n"); - - return TYPE_E_ELEMENTNOTFOUND; -} - -/**************************************************************************** - * ctl2_add_default_value - * - * Adds default value of an argument + * Encodes a variant, inline if possible or in custom data segment * * RETURNS * * Success: S_OK * Failure: Error code from winerror.h */ -static HRESULT ctl2_add_default_value( +static HRESULT ctl2_encode_variant( ICreateTypeLib2Impl *This, /* [I] The typelib to allocate data in */ int *encoded_value, /* [O] The encoded default value or data offset */ VARIANT *value, /* [I] Default value to be encoded */ @@ -1321,6 +921,357 @@ static HRESULT ctl2_add_default_value( } } +/**************************************************************************** + * ctl2_set_custdata + * + * Adds a custom data element to an object in a type library. + * + * RETURNS + * + * Success: S_OK. + * Failure: One of E_INVALIDARG or E_OUTOFMEMORY. + */ +static HRESULT ctl2_set_custdata( + ICreateTypeLib2Impl *This, /* [I] The type library to store the custom data in. */ + REFGUID guid, /* [I] The GUID used as a key to retrieve the custom data. */ + VARIANT *pVarVal, /* [I] The custom data itself. */ + int *offset) /* [I/O] The list of custom data to prepend to. */ +{ + MSFT_GuidEntry guidentry; + HRESULT status; + int dataoffset; + int guidoffset; + int custoffset; + int *custdata; + + switch(V_VT(pVarVal)) + { + case VT_I4: + case VT_R4: + case VT_UI4: + case VT_INT: + case VT_UINT: + case VT_HRESULT: + case VT_BSTR: + /* empty */ + break; + default: + return DISP_E_BADVARTYPE; + } + + guidentry.guid = *guid; + + guidentry.hreftype = -1; + guidentry.next_hash = -1; + + guidoffset = ctl2_alloc_guid(This, &guidentry); + if (guidoffset == -1) return E_OUTOFMEMORY; + + status = ctl2_encode_variant(This, &dataoffset, pVarVal, V_VT(pVarVal)); + if (status) + return status; + + custoffset = ctl2_alloc_segment(This, MSFT_SEG_CUSTDATAGUID, 12, 0); + if (custoffset == -1) return E_OUTOFMEMORY; + + custdata = (int *)&This->typelib_segment_data[MSFT_SEG_CUSTDATAGUID][custoffset]; + custdata[0] = guidoffset; + custdata[1] = dataoffset; + custdata[2] = *offset; + *offset = custoffset; + + return S_OK; +} + +/**************************************************************************** + * ctl2_encode_typedesc + * + * Encodes a type description, storing information in the TYPEDESC and ARRAYDESC + * segments as needed. + * + * RETURNS + * + * Success: 0. + * Failure: -1. + */ +static int ctl2_encode_typedesc( + ICreateTypeLib2Impl *This, /* [I] The type library in which to encode the TYPEDESC. */ + const TYPEDESC *tdesc, /* [I] The type description to encode. */ + int *encoded_tdesc, /* [O] The encoded type description. */ + int *width, /* [O] The width of the type, or NULL. */ + int *alignment, /* [O] The alignment of the type, or NULL. */ + int *decoded_size) /* [O] The total size of the unencoded TYPEDESCs, including nested descs. */ +{ + int default_tdesc; + int scratch; + int typeoffset; + int arrayoffset; + int *typedata; + int *arraydata; + int target_type; + int child_size; + + default_tdesc = 0x80000000 | (tdesc->vt << 16) | tdesc->vt; + if (!width) width = &scratch; + if (!alignment) alignment = &scratch; + if (!decoded_size) decoded_size = &scratch; + + *decoded_size = 0; + + switch (tdesc->vt) { + case VT_UI1: + case VT_I1: + *encoded_tdesc = default_tdesc; + *width = 1; + *alignment = 1; + break; + + case VT_INT: + *encoded_tdesc = 0x80000000 | (VT_I4 << 16) | VT_INT; + if ((This->typelib_header.varflags & 0x0f) == SYS_WIN16) { + *width = 2; + *alignment = 2; + } else { + *width = 4; + *alignment = 4; + } + break; + + case VT_UINT: + *encoded_tdesc = 0x80000000 | (VT_UI4 << 16) | VT_UINT; + if ((This->typelib_header.varflags & 0x0f) == SYS_WIN16) { + *width = 2; + *alignment = 2; + } else { + *width = 4; + *alignment = 4; + } + break; + + case VT_UI2: + case VT_I2: + case VT_BOOL: + *encoded_tdesc = default_tdesc; + *width = 2; + *alignment = 2; + break; + + case VT_I4: + case VT_UI4: + case VT_R4: + case VT_ERROR: + case VT_BSTR: + case VT_HRESULT: + *encoded_tdesc = default_tdesc; + *width = 4; + *alignment = 4; + break; + + case VT_CY: + *encoded_tdesc = default_tdesc; + *width = 8; + *alignment = 4; /* guess? */ + break; + + case VT_VOID: + *encoded_tdesc = 0x80000000 | (VT_EMPTY << 16) | tdesc->vt; + *width = 0; + *alignment = 1; + break; + + case VT_PTR: + case VT_SAFEARRAY: + /* FIXME: Make with the error checking. */ + FIXME("PTR or SAFEARRAY vartype, may not work correctly.\n"); + + ctl2_encode_typedesc(This, tdesc->u.lptdesc, &target_type, NULL, NULL, &child_size); + + for (typeoffset = 0; typeoffset < This->typelib_segdir[MSFT_SEG_TYPEDESC].length; typeoffset += 8) { + typedata = (void *)&This->typelib_segment_data[MSFT_SEG_TYPEDESC][typeoffset]; + if (((typedata[0] & 0xffff) == tdesc->vt) && (typedata[1] == target_type)) break; + } + + if (typeoffset == This->typelib_segdir[MSFT_SEG_TYPEDESC].length) { + int mix_field; + + if (target_type & 0x80000000) { + mix_field = (target_type >> 16) & VT_TYPEMASK; + } else { + typedata = (void *)&This->typelib_segment_data[MSFT_SEG_TYPEDESC][target_type]; + switch((typedata[0]>>16) & ~VT_ARRAY) + { + case VT_UI1: + case VT_I1: + case VT_UI2: + case VT_I2: + case VT_I4: + case VT_UI4: + mix_field = typedata[0]>>16; + break; + default: + mix_field = 0x7fff; + break; + } + } + + if (tdesc->vt == VT_PTR) + mix_field |= VT_BYREF; + else if (tdesc->vt == VT_SAFEARRAY) + mix_field |= VT_ARRAY; + + typeoffset = ctl2_alloc_segment(This, MSFT_SEG_TYPEDESC, 8, 0); + typedata = (void *)&This->typelib_segment_data[MSFT_SEG_TYPEDESC][typeoffset]; + + typedata[0] = (mix_field << 16) | tdesc->vt; + typedata[1] = target_type; + } + + *encoded_tdesc = typeoffset; + + *width = 4; + *alignment = 4; + *decoded_size = sizeof(TYPEDESC) + child_size; + break; + + case VT_CARRAY: + { + /* FIXME: Make with the error checking. */ + int num_dims = tdesc->u.lpadesc->cDims, elements = 1, dim; + + ctl2_encode_typedesc(This, &tdesc->u.lpadesc->tdescElem, &target_type, width, alignment, NULL); + arrayoffset = ctl2_alloc_segment(This, MSFT_SEG_ARRAYDESC, (2 + 2 * num_dims) * sizeof(int), 0); + arraydata = (void *)&This->typelib_segment_data[MSFT_SEG_ARRAYDESC][arrayoffset]; + + arraydata[0] = target_type; + arraydata[1] = num_dims; + arraydata[1] |= ((num_dims * 2 * sizeof(int)) << 16); + arraydata += 2; + + for(dim = 0; dim < num_dims; dim++) { + arraydata[0] = tdesc->u.lpadesc->rgbounds[dim].cElements; + arraydata[1] = tdesc->u.lpadesc->rgbounds[dim].lLbound; + elements *= tdesc->u.lpadesc->rgbounds[dim].cElements; + arraydata += 2; + } + typeoffset = ctl2_alloc_segment(This, MSFT_SEG_TYPEDESC, 8, 0); + typedata = (void *)&This->typelib_segment_data[MSFT_SEG_TYPEDESC][typeoffset]; + + typedata[0] = (0x7ffe << 16) | VT_CARRAY; + typedata[1] = arrayoffset; + + *encoded_tdesc = typeoffset; + *width = *width * elements; + *decoded_size = sizeof(ARRAYDESC) + (num_dims - 1) * sizeof(SAFEARRAYBOUND); + + break; + } + case VT_USERDEFINED: + { + const MSFT_TypeInfoBase *basetype; + INT basevt = 0x7fff; + + TRACE("USERDEFINED.\n"); + if (tdesc->u.hreftype % sizeof(*basetype) == 0 && tdesc->u.hreftype < This->typelib_segdir[MSFT_SEG_TYPEINFO].length) + { + basetype = (MSFT_TypeInfoBase*)&(This->typelib_segment_data[MSFT_SEG_TYPEINFO][tdesc->u.hreftype]); + switch(basetype->typekind & 0xf) + { + case TKIND_ENUM: + basevt = VT_I4; + break; + default: + FIXME("USERDEFINED basetype %d not handled\n", basetype->typekind & 0xf); + break; + } + } + for (typeoffset = 0; typeoffset < This->typelib_segdir[MSFT_SEG_TYPEDESC].length; typeoffset += 8) { + typedata = (void *)&This->typelib_segment_data[MSFT_SEG_TYPEDESC][typeoffset]; + if ((typedata[0] == ((basevt << 16) | VT_USERDEFINED)) && (typedata[1] == tdesc->u.hreftype)) break; + } + + if (typeoffset == This->typelib_segdir[MSFT_SEG_TYPEDESC].length) { + typeoffset = ctl2_alloc_segment(This, MSFT_SEG_TYPEDESC, 8, 0); + typedata = (void *)&This->typelib_segment_data[MSFT_SEG_TYPEDESC][typeoffset]; + + typedata[0] = (basevt << 16) | VT_USERDEFINED; + typedata[1] = tdesc->u.hreftype; + } + + *encoded_tdesc = typeoffset; + *width = 0; + *alignment = 1; + break; + } + + default: + FIXME("Unrecognized type %d.\n", tdesc->vt); + *encoded_tdesc = default_tdesc; + *width = 0; + *alignment = 1; + break; + } + + return 0; +} + +/**************************************************************************** + * ctl2_find_nth_reference + * + * Finds a reference by index into the linked list of reference records. + * + * RETURNS + * + * Success: Offset of the desired reference record. + * Failure: -1. + */ +static int ctl2_find_nth_reference( + ICreateTypeLib2Impl *This, /* [I] The type library in which to search. */ + int offset, /* [I] The starting offset of the reference list. */ + int index) /* [I] The index of the reference to find. */ +{ + MSFT_RefRecord *ref; + + for (; index && (offset != -1); index--) { + ref = (MSFT_RefRecord *)&This->typelib_segment_data[MSFT_SEG_REFERENCES][offset]; + offset = ref->onext; + } + + return offset; +} + +/**************************************************************************** + * ctl2_find_typeinfo_from_offset + * + * Finds an ITypeInfo given an offset into the TYPEINFO segment. + * + * RETURNS + * + * Success: S_OK. + * Failure: TYPE_E_ELEMENTNOTFOUND. + */ +static HRESULT ctl2_find_typeinfo_from_offset( + ICreateTypeLib2Impl *This, /* [I] The typelib to find the typeinfo in. */ + int offset, /* [I] The offset of the desired typeinfo. */ + ITypeInfo **ppTinfo) /* [I] The typeinfo found. */ +{ + void *typeinfodata; + ICreateTypeInfo2Impl *typeinfo; + + typeinfodata = &This->typelib_segment_data[MSFT_SEG_TYPEINFO][offset]; + + for (typeinfo = This->typeinfos; typeinfo; typeinfo = typeinfo->next_typeinfo) { + if (typeinfo->typeinfo == typeinfodata) { + *ppTinfo = (ITypeInfo *)&typeinfo->lpVtblTypeInfo2; + ITypeInfo2_AddRef(*ppTinfo); + return S_OK; + } + } + + ERR("Failed to find typeinfo, invariant varied.\n"); + + return TYPE_E_ELEMENTNOTFOUND; +} + /**************************************************************************** * funcrecord_reallochdr * @@ -1744,7 +1695,7 @@ static HRESULT WINAPI ICreateTypeInfo2_fnAddRefTypeInfo( impinfo.oGuid = guid_offset; *phRefType = ctl2_alloc_importinfo(This->typelib, &impinfo)+1; - if(!memcmp(&guid.guid, &IID_IDispatch, sizeof(GUID))) + if(IsEqualGUID(&guid.guid, &IID_IDispatch)) This->typelib->typelib_header.dispatchpos = *phRefType; } @@ -1855,7 +1806,7 @@ static HRESULT WINAPI ICreateTypeInfo2_fnAddFuncDesc( if(num_defaults) { for (i = 0; i < pFuncDesc->cParams; i++) if(pFuncDesc->lprgelemdescParam[i].u.paramdesc.wParamFlags & PARAMFLAG_FHASDEFAULT) { - hres = ctl2_add_default_value(This->typelib, typedata+6+i, + hres = ctl2_encode_variant(This->typelib, typedata+6+i, &pFuncDesc->lprgelemdescParam[i].u.paramdesc.pparamdescex->varDefaultValue, pFuncDesc->lprgelemdescParam[i].tdesc.vt); @@ -2077,6 +2028,7 @@ static HRESULT WINAPI ICreateTypeInfo2_fnAddVarDesc( { ICreateTypeInfo2Impl *This = (ICreateTypeInfo2Impl *)iface; + HRESULT status = S_OK; CyclicList *insert; INT *typedata; int var_datawidth; @@ -2130,7 +2082,7 @@ static HRESULT WINAPI ICreateTypeInfo2_fnAddVarDesc( /* fill out the basic type information */ typedata[0] = 0x14 | (index << 16); typedata[2] = pVarDesc->wVarFlags; - typedata[3] = (sizeof(VARDESC) << 16) | 0; + typedata[3] = (sizeof(VARDESC) << 16) | pVarDesc->varkind; /* update the index data */ insert->indice = 0x40000000 + index; @@ -2142,44 +2094,52 @@ static HRESULT WINAPI ICreateTypeInfo2_fnAddVarDesc( &typedata[1], &var_datawidth, &var_alignment, &var_type_size); - /* pad out starting position to data width */ - This->datawidth += var_alignment - 1; - This->datawidth &= ~(var_alignment - 1); - typedata[4] = This->datawidth; - - /* add the new variable to the total data width */ - This->datawidth += var_datawidth; - if(This->dual) - This->dual->datawidth = This->datawidth; + if (pVarDesc->varkind != VAR_CONST) + { + /* pad out starting position to data width */ + This->datawidth += var_alignment - 1; + This->datawidth &= ~(var_alignment - 1); + typedata[4] = This->datawidth; - /* add type description size to total required allocation */ - typedata[3] += var_type_size << 16; + /* add the new variable to the total data width */ + This->datawidth += var_datawidth; + if(This->dual) + This->dual->datawidth = This->datawidth; - /* fix type alignment */ - alignment = (This->typeinfo->typekind >> 11) & 0x1f; - if (alignment < var_alignment) { - alignment = var_alignment; - This->typeinfo->typekind &= ~0xf800; - This->typeinfo->typekind |= alignment << 11; + /* add type description size to total required allocation */ + typedata[3] += var_type_size << 16; + + /* fix type alignment */ + alignment = (This->typeinfo->typekind >> 11) & 0x1f; + if (alignment < var_alignment) { + alignment = var_alignment; + This->typeinfo->typekind &= ~0xf800; + This->typeinfo->typekind |= alignment << 11; + } + + /* ??? */ + if (!This->typeinfo->res2) This->typeinfo->res2 = 0x1a; + if ((index == 0) || (index == 1) || (index == 2) || (index == 4) || (index == 9)) { + This->typeinfo->res2 <<= 1; + } + + /* ??? */ + if (This->typeinfo->res3 == -1) This->typeinfo->res3 = 0; + This->typeinfo->res3 += 0x2c; + + /* pad data width to alignment */ + This->typeinfo->size = (This->datawidth + (alignment - 1)) & ~(alignment - 1); + } else { + VARIANT *value = pVarDesc->DUMMYUNIONNAME.lpvarValue; + status = ctl2_encode_variant(This->typelib, typedata+4, value, V_VT(value)); + /* ??? native sets size 0x34 */ + typedata[3] += 0x10 << 16; } - /* ??? */ - if (!This->typeinfo->res2) This->typeinfo->res2 = 0x1a; - if ((index == 0) || (index == 1) || (index == 2) || (index == 4) || (index == 9)) { - This->typeinfo->res2 <<= 1; - } - - /* ??? */ - if (This->typeinfo->res3 == -1) This->typeinfo->res3 = 0; - This->typeinfo->res3 += 0x2c; - /* increment the number of variable elements */ This->typeinfo->cElement += 0x10000; - /* pad data width to alignment */ - This->typeinfo->size = (This->datawidth + (alignment - 1)) & ~(alignment - 1); - - return S_OK; + return status; } /****************************************************************************** @@ -2509,7 +2469,7 @@ static HRESULT WINAPI ICreateTypeInfo2_fnLayOut( return hres; } - if(!memcmp(&typeattr->guid, &IID_IDispatch, sizeof(IDispatch))) + if(IsEqualGUID(&typeattr->guid, &IID_IDispatch)) This->typeinfo->flags |= TYPEFLAG_FDISPATCHABLE; This->typeinfo->datatype2 += (typeattr->cFuncs<<16) + 1; diff --git a/dll/win32/oledlg/oledlg_Cs.rc b/dll/win32/oledlg/oledlg_Cs.rc index 1cf038537de..e098dc2d72b 100644 --- a/dll/win32/oledlg/oledlg_Cs.rc +++ b/dll/win32/oledlg/oledlg_Cs.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_CZECH, SUBLANG_DEFAULT /* Czech strings in CP1250 */ -UIINSERTOBJECT DIALOG DISCARDABLE 0, 0, 294, 151 +UIINSERTOBJECT DIALOG 0, 0, 294, 151 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Vloit objekt" FONT 8, "MS Shell Dlg" @@ -52,7 +52,7 @@ BEGIN EDITTEXT IDC_FILE,83,37,132,13,ES_AUTOHSCROLL | NOT WS_VISIBLE END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_RESULTOBJDESC "Vloen nov %s objekt do Vaeho dokumentu" IDS_RESULTFILEOBJDESC "Vloen obsah souboru jako objekt do Vaeho dokumentu, take ho mete upravit programem, kterm byl vytvoen." diff --git a/dll/win32/oledlg/oledlg_Da.rc b/dll/win32/oledlg/oledlg_Da.rc index 852733ab6d1..52e8d81f0fa 100644 --- a/dll/win32/oledlg/oledlg_Da.rc +++ b/dll/win32/oledlg/oledlg_Da.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_DANISH, SUBLANG_DEFAULT -UIINSERTOBJECT DIALOG DISCARDABLE 0, 0, 294, 151 +UIINSERTOBJECT DIALOG 0, 0, 294, 151 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Indst objekt" FONT 8, "MS Shell Dlg" @@ -49,7 +49,7 @@ BEGIN EDITTEXT IDC_FILE,83,37,132,13,ES_AUTOHSCROLL | NOT WS_VISIBLE END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_RESULTOBJDESC "Indst nyt %s objekt i dokumentet" IDS_RESULTFILEOBJDESC "Indst filens indhold som objekt ind i dokumentet, s du kan aktivere det med programmet som har lavet det." @@ -58,7 +58,7 @@ STRINGTABLE DISCARDABLE IDS_NOTOLEMODCAPTION "Tilfj control" } -IDD_PASTESPECIAL4 DIALOG DISCARDABLE 3, 15, 293, 140 +IDD_PASTESPECIAL4 DIALOG 3, 15, 293, 140 STYLE DS_MODALFRAME | DS_SETFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Indst speciel" FONT 8, "MS Shell Dlg" @@ -84,7 +84,7 @@ BEGIN CONTROL "", IDC_PS_SOURCETEXT, "Edit", ES_READONLY | ES_AUTOHSCROLL | WS_VISIBLE, 37, 9, 180, 8 END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_PS_PASTE_DATA "Indstter indholdet fra klippebordet ind i dokumentet som %s." IDS_PS_PASTE_OBJECT "Indstter indholdet fra klippebordet ind i dokumentet, s du kan aktivere det med %s." diff --git a/dll/win32/oledlg/oledlg_De.rc b/dll/win32/oledlg/oledlg_De.rc index 9aad9ba52f8..f7db2b2d1d0 100644 --- a/dll/win32/oledlg/oledlg_De.rc +++ b/dll/win32/oledlg/oledlg_De.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL -UIINSERTOBJECT DIALOG DISCARDABLE 0, 0, 294, 151 +UIINSERTOBJECT DIALOG 0, 0, 294, 151 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Objekt einfügen" FONT 8, "MS Shell Dlg" @@ -49,7 +49,7 @@ BEGIN EDITTEXT IDC_FILE,83,37,132,13,ES_AUTOHSCROLL | NOT WS_VISIBLE END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_RESULTOBJDESC "Fügt ein neues %s - Objekt in Ihr Dokument ein." IDS_RESULTFILEOBJDESC "Fügt den Inhalt der Datei als Objekt so in Ihr Dokument ein, dass Sie es mit dem Programm aktivieren können, mit dem es erstellt wurde." @@ -58,7 +58,7 @@ STRINGTABLE DISCARDABLE IDS_NOTOLEMODCAPTION "Steuerung hinzufügen" } -IDD_PASTESPECIAL4 DIALOG DISCARDABLE 3, 15, 293, 140 +IDD_PASTESPECIAL4 DIALOG 3, 15, 293, 140 STYLE DS_MODALFRAME | DS_SETFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Inhalte einfügen" FONT 8, "MS Shell Dlg" @@ -84,7 +84,7 @@ BEGIN CONTROL "", IDC_PS_SOURCETEXT, "Edit", ES_READONLY | ES_AUTOHSCROLL | WS_VISIBLE, 37, 9, 180, 8 END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_PS_PASTE_DATA "Fügt den Inhalt der Zwischenablage in Ihr Dokument als %s ein." IDS_PS_PASTE_OBJECT "Fügt den Inhalt der Zwischenablage so in Ihr Dokument ein dass Sie es mit %s aktivieren können." diff --git a/dll/win32/oledlg/oledlg_En.rc b/dll/win32/oledlg/oledlg_En.rc index 5dd5be40b3b..a806db7dbde 100644 --- a/dll/win32/oledlg/oledlg_En.rc +++ b/dll/win32/oledlg/oledlg_En.rc @@ -20,7 +20,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT -UIINSERTOBJECT DIALOG DISCARDABLE 0, 0, 294, 151 +UIINSERTOBJECT DIALOG 0, 0, 294, 151 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Insert Object" FONT 8, "MS Shell Dlg" @@ -47,7 +47,7 @@ BEGIN EDITTEXT IDC_FILE,83,37,132,13,ES_AUTOHSCROLL | NOT WS_VISIBLE END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_RESULTOBJDESC "Insert a new %s object into your document" IDS_RESULTFILEOBJDESC "Insert the contents of the file as an object into your document so that you may activate it using the program which created it." @@ -56,7 +56,7 @@ STRINGTABLE DISCARDABLE IDS_NOTOLEMODCAPTION "Add Control" } -IDD_PASTESPECIAL4 DIALOG DISCARDABLE 3, 15, 293, 140 +IDD_PASTESPECIAL4 DIALOG 3, 15, 293, 140 STYLE DS_MODALFRAME | DS_SETFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Paste Special" FONT 8, "MS Shell Dlg" @@ -82,7 +82,7 @@ BEGIN CONTROL "", IDC_PS_SOURCETEXT, "Edit", ES_READONLY | ES_AUTOHSCROLL | WS_VISIBLE, 37, 9, 180, 8 END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_PS_PASTE_DATA "Inserts the contents of the clipboard into your document as %s." IDS_PS_PASTE_OBJECT "Inserts the contents of the clipboard into your document so that you can activate it using %s." diff --git a/dll/win32/oledlg/oledlg_Es.rc b/dll/win32/oledlg/oledlg_Es.rc index 74f8c0867f8..8b3d0abb2df 100644 --- a/dll/win32/oledlg/oledlg_Es.rc +++ b/dll/win32/oledlg/oledlg_Es.rc @@ -20,7 +20,7 @@ LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL -UIINSERTOBJECT DIALOG DISCARDABLE 0, 0, 294, 151 +UIINSERTOBJECT DIALOG 0, 0, 294, 151 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Insertar objeto" FONT 8, "MS Shell Dlg" @@ -47,7 +47,7 @@ BEGIN EDITTEXT IDC_FILE,83,37,132,13,ES_AUTOHSCROLL | NOT WS_VISIBLE END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_RESULTOBJDESC "Inserta un nuevo objeto %s en su documento" IDS_RESULTFILEOBJDESC "Inserta el contenido del archivo como un objeto en su documento, con lo que podr activarlo utilizando el programa que lo cre." @@ -56,7 +56,7 @@ STRINGTABLE DISCARDABLE IDS_NOTOLEMODCAPTION "Aadir control" } -IDD_PASTESPECIAL4 DIALOG DISCARDABLE 3, 15, 293, 140 +IDD_PASTESPECIAL4 DIALOG 3, 15, 293, 140 STYLE DS_MODALFRAME | DS_SETFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Pegado especial" FONT 8, "MS Shell Dlg" @@ -82,7 +82,7 @@ BEGIN CONTROL "", IDC_PS_SOURCETEXT, "Edit", ES_READONLY | ES_AUTOHSCROLL | WS_VISIBLE, 37, 9, 180, 8 END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_PS_PASTE_DATA "Inserta el contenido del portapapeles en su documento como %s." IDS_PS_PASTE_OBJECT "Inserta el contenido del portapapeles en su documento de modo que pueda activarlo usando %s." diff --git a/dll/win32/oledlg/oledlg_Fr.rc b/dll/win32/oledlg/oledlg_Fr.rc index 176cc87f70f..a0e40524b8f 100644 --- a/dll/win32/oledlg/oledlg_Fr.rc +++ b/dll/win32/oledlg/oledlg_Fr.rc @@ -27,7 +27,7 @@ LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL -UIINSERTOBJECT DIALOG DISCARDABLE 0, 0, 308, 151 +UIINSERTOBJECT DIALOG 0, 0, 308, 151 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Insérer objet" FONT 8, "MS Shell Dlg" @@ -54,7 +54,7 @@ BEGIN EDITTEXT IDC_FILE,95,37,129,13,ES_AUTOHSCROLL | NOT WS_VISIBLE END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_RESULTOBJDESC "Insérer un nouvel object %s dans votre document" IDS_RESULTFILEOBJDESC "Insère le contenu du fichier comme un objet dans votre document afin que vous puissiez l'activer en utilisant le programme avec lequel il a été créé." @@ -63,7 +63,7 @@ STRINGTABLE DISCARDABLE IDS_NOTOLEMODCAPTION "Ajouter un contrôle" } -IDD_PASTESPECIAL4 DIALOG DISCARDABLE 3, 15, 308, 140 +IDD_PASTESPECIAL4 DIALOG 3, 15, 308, 140 STYLE DS_MODALFRAME | DS_SETFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Collage spécial" FONT 8, "MS Shell Dlg" @@ -89,7 +89,7 @@ BEGIN CONTROL "", IDC_PS_SOURCETEXT, "Edit", ES_READONLY | ES_AUTOHSCROLL | WS_VISIBLE, 37, 9, 180, 8 END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_PS_PASTE_DATA "Insère le contenu du presse-papiers dans votre document comme %s." IDS_PS_PASTE_OBJECT "Insère le contenu du presse-papiers dans votre document de sorte que vous puissiez l'activer en utilisant %s." diff --git a/dll/win32/oledlg/oledlg_Hu.rc b/dll/win32/oledlg/oledlg_Hu.rc index a1d0d35d573..a4286373b10 100644 --- a/dll/win32/oledlg/oledlg_Hu.rc +++ b/dll/win32/oledlg/oledlg_Hu.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT -UIINSERTOBJECT DIALOG DISCARDABLE 0, 0, 294, 151 +UIINSERTOBJECT DIALOG 0, 0, 294, 151 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Objektum beszúrása" FONT 8, "MS Shell Dlg" @@ -50,7 +50,7 @@ BEGIN EDITTEXT IDC_FILE,83,37,132,13,ES_AUTOHSCROLL | NOT WS_VISIBLE END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_RESULTOBJDESC "Új %s objektum behelyezése az Ön dokumentumába" IDS_RESULTFILEOBJDESC "Kérem illesssze be a fájl tartalmát, mint objektumot a dokumentumába, azzal a programmal amivel létrehozta." @@ -59,7 +59,7 @@ STRINGTABLE DISCARDABLE IDS_NOTOLEMODCAPTION "Vezérlő hozzáadása" } -IDD_PASTESPECIAL4 DIALOG DISCARDABLE 3, 15, 293, 140 +IDD_PASTESPECIAL4 DIALOG 3, 15, 293, 140 STYLE DS_MODALFRAME | DS_SETFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Speciális beillesztés" FONT 8, "MS Shell Dlg" @@ -85,7 +85,7 @@ BEGIN CONTROL "", IDC_PS_SOURCETEXT, "Edit", ES_READONLY | ES_AUTOHSCROLL | WS_VISIBLE, 37, 9, 180, 8 END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_PS_PASTE_DATA "A vágólap tartalmának beillesztése az Ön dokumentumába mint: %s." IDS_PS_PASTE_OBJECT "A vágólap tartalmának beillesztése az Ön dokumentumába, amit a következő használatával aktiválhat: %s." diff --git a/dll/win32/oledlg/oledlg_It.rc b/dll/win32/oledlg/oledlg_It.rc index fb5ea3203f2..187fbc6f1fa 100644 --- a/dll/win32/oledlg/oledlg_It.rc +++ b/dll/win32/oledlg/oledlg_It.rc @@ -24,7 +24,7 @@ LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL -UIINSERTOBJECT DIALOG DISCARDABLE 0, 0, 294, 151 +UIINSERTOBJECT DIALOG 0, 0, 294, 151 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Inserisci oggetto" FONT 8, "MS Shell Dlg" @@ -51,7 +51,7 @@ BEGIN EDITTEXT IDC_FILE,83,37,132,13,ES_AUTOHSCROLL | NOT WS_VISIBLE END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_RESULTOBJDESC "Inserisci un nuovo oggetto %s nel documento" IDS_RESULTFILEOBJDESC "Inserisci i contenuti del file come un oggetto nel documento in modo da poterlo attivare usando il programma che lo ha creato." @@ -60,7 +60,7 @@ STRINGTABLE DISCARDABLE IDS_NOTOLEMODCAPTION "Aggiungi Controllo" } -IDD_PASTESPECIAL4 DIALOG DISCARDABLE 3, 15, 293, 140 +IDD_PASTESPECIAL4 DIALOG 3, 15, 293, 140 STYLE DS_MODALFRAME | DS_SETFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Incolla Speciale" FONT 8, "MS Shell Dlg" @@ -86,7 +86,7 @@ BEGIN CONTROL "", IDC_PS_SOURCETEXT, "Edit", ES_READONLY | ES_AUTOHSCROLL | WS_VISIBLE, 37, 9, 180, 8 END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_PS_PASTE_DATA "Inserisce i contenuti degli appunti nel tuo documento come %s." IDS_PS_PASTE_OBJECT "Inserisce i contenuti degli appunti nel tuo documento permettendoti di attivarlo usando %s." diff --git a/dll/win32/oledlg/oledlg_Ja.rc b/dll/win32/oledlg/oledlg_Ja.rc index a2cb2292bc0..f3c137f2dae 100644 --- a/dll/win32/oledlg/oledlg_Ja.rc +++ b/dll/win32/oledlg/oledlg_Ja.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT -UIINSERTOBJECT DIALOG DISCARDABLE 0, 0, 294, 151 +UIINSERTOBJECT DIALOG 0, 0, 294, 151 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "オブジェクトの挿入" FONT 9, "MS Shell Dlg" @@ -50,7 +50,7 @@ BEGIN EDITTEXT IDC_FILE,83,37,132,13,ES_AUTOHSCROLL | NOT WS_VISIBLE END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_RESULTOBJDESC "ドキュメントに新しい %s オブジェクトを挿入します" IDS_RESULTFILEOBJDESC "ファイルの内容をオブジェクトとしてドキュメントに挿入します。オブジェクトは作成したプログラムから有効にできます。" @@ -59,7 +59,7 @@ STRINGTABLE DISCARDABLE IDS_NOTOLEMODCAPTION "コントロールを追加" } -IDD_PASTESPECIAL4 DIALOG DISCARDABLE 3, 15, 293, 140 +IDD_PASTESPECIAL4 DIALOG 3, 15, 293, 140 STYLE DS_MODALFRAME | DS_SETFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "形式を選択して貼り付け" FONT 8, "MS Shell Dlg" @@ -85,7 +85,7 @@ BEGIN CONTROL "", IDC_PS_SOURCETEXT, "Edit", ES_READONLY | ES_AUTOHSCROLL | WS_VISIBLE, 37, 9, 180, 8 END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_PS_PASTE_DATA "クリップボードの内容を %s として、文書に挿入します。" IDS_PS_PASTE_OBJECT "クリップボードの内容を文書に挿入します。 %s を利用して、編集できます。" diff --git a/dll/win32/oledlg/oledlg_Ko.rc b/dll/win32/oledlg/oledlg_Ko.rc index a1474c9a123..2c313e4dde6 100644 --- a/dll/win32/oledlg/oledlg_Ko.rc +++ b/dll/win32/oledlg/oledlg_Ko.rc @@ -21,7 +21,7 @@ LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT -UIINSERTOBJECT DIALOG DISCARDABLE 0, 0, 294, 151 +UIINSERTOBJECT DIALOG 0, 0, 294, 151 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "ü " FONT 9, "MS Shell Dlg" @@ -48,7 +48,7 @@ BEGIN EDITTEXT IDC_FILE,83,37,132,13,ES_AUTOHSCROLL | NOT WS_VISIBLE END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_RESULTOBJDESC " %s ü " IDS_RESULTFILEOBJDESC "ۼ Ǯ׸ Ͽ Ȱȭų ִ ü Ͻÿ." @@ -57,7 +57,7 @@ STRINGTABLE DISCARDABLE IDS_NOTOLEMODCAPTION "Ʈ ϱ" } -IDD_PASTESPECIAL4 DIALOG DISCARDABLE 3, 15, 299, 140 +IDD_PASTESPECIAL4 DIALOG 3, 15, 299, 140 STYLE DS_MODALFRAME | DS_SETFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Ưϰ ٿֱ" FONT 9, "MS Shell Dlg" @@ -83,7 +83,7 @@ BEGIN CONTROL "", IDC_PS_SOURCETEXT, "Edit", ES_READONLY | ES_AUTOHSCROLL | WS_VISIBLE, 37, 9, 180, 8 END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_PS_PASTE_DATA " %s Ŭ ϱ." IDS_PS_PASTE_OBJECT " Ŭ ÷ϸ %s ؼ ̰ ֽϴ." diff --git a/dll/win32/oledlg/oledlg_Lt.rc b/dll/win32/oledlg/oledlg_Lt.rc index 961fd1d996f..8ef09ef62d7 100644 --- a/dll/win32/oledlg/oledlg_Lt.rc +++ b/dll/win32/oledlg/oledlg_Lt.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL -UIINSERTOBJECT DIALOG DISCARDABLE 0, 0, 294, 151 +UIINSERTOBJECT DIALOG 0, 0, 294, 151 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Įterpti objektą" FONT 8, "MS Shell Dlg" @@ -50,7 +50,7 @@ BEGIN EDITTEXT IDC_FILE,83,37,132,13,ES_AUTOHSCROLL | NOT WS_VISIBLE END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_RESULTOBJDESC "Įterpia naują objektą „%s“ į jūsų dokumentą" IDS_RESULTFILEOBJDESC "Įterpia failo turinį kaip objektą į jūsų dokumentą, kad galėtumėte jį aktyvuoti naudodami programą, kuri jį sukūrė." @@ -59,7 +59,7 @@ STRINGTABLE DISCARDABLE IDS_NOTOLEMODCAPTION "Pridėti valdiklį" } -IDD_PASTESPECIAL4 DIALOG DISCARDABLE 3, 15, 293, 140 +IDD_PASTESPECIAL4 DIALOG 3, 15, 293, 140 STYLE DS_MODALFRAME | DS_SETFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Įdėti kaip" FONT 8, "MS Shell Dlg" @@ -85,7 +85,7 @@ BEGIN CONTROL "", IDC_PS_SOURCETEXT, "Edit", ES_READONLY | ES_AUTOHSCROLL | WS_VISIBLE, 37, 9, 180, 8 END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_PS_PASTE_DATA "Įterpia iškarpinės turinį į jūsų dokumentą kaip %s." IDS_PS_PASTE_OBJECT "Įterpia iškarpinės turinį į jūsų dokumentą, kad galėtumėte jį aktyvuoti naudodami %s." diff --git a/dll/win32/oledlg/oledlg_Nl.rc b/dll/win32/oledlg/oledlg_Nl.rc index e81b0102dc8..b603c58ee5b 100644 --- a/dll/win32/oledlg/oledlg_Nl.rc +++ b/dll/win32/oledlg/oledlg_Nl.rc @@ -24,7 +24,7 @@ LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL #pragma code_page(65001) -UIINSERTOBJECT DIALOG DISCARDABLE 0, 0, 294, 151 +UIINSERTOBJECT DIALOG 0, 0, 294, 151 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Object invoegen" FONT 8, "MS Shell Dlg" @@ -51,7 +51,7 @@ BEGIN EDITTEXT IDC_FILE,83,37,132,13,ES_AUTOHSCROLL | NOT WS_VISIBLE END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_RESULTOBJDESC "Voeg een nieuw %s object in uw document in" IDS_RESULTFILEOBJDESC "Voeg de inhoud van het bestand als object in uw document in, zodat u het later kunt bewerken met het programma waarmee u het heeft gemaakt." @@ -60,7 +60,7 @@ STRINGTABLE DISCARDABLE IDS_NOTOLEMODCAPTION "Toevoegen" } -IDD_PASTESPECIAL4 DIALOG DISCARDABLE 3, 15, 293, 140 +IDD_PASTESPECIAL4 DIALOG 3, 15, 293, 140 STYLE DS_MODALFRAME | DS_SETFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Plakken (Speciaal)" FONT 8, "MS Shell Dlg" @@ -86,7 +86,7 @@ BEGIN CONTROL "", IDC_PS_SOURCETEXT, "Edit", ES_READONLY | ES_AUTOHSCROLL | WS_VISIBLE, 37, 9, 180, 8 END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_PS_PASTE_DATA "Voegt de inhoud van het klembord in uw document in als %s." IDS_PS_PASTE_OBJECT "Voegt de inhoud van het klembord in uw document in zodat u het kan activeren met %s." diff --git a/dll/win32/oledlg/oledlg_No.rc b/dll/win32/oledlg/oledlg_No.rc index 5657d495737..fc3aea6845c 100644 --- a/dll/win32/oledlg/oledlg_No.rc +++ b/dll/win32/oledlg/oledlg_No.rc @@ -20,7 +20,7 @@ LANGUAGE LANG_NORWEGIAN, SUBLANG_NORWEGIAN_BOKMAL -UIINSERTOBJECT DIALOG DISCARDABLE 0, 0, 294, 151 +UIINSERTOBJECT DIALOG 0, 0, 294, 151 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Sett inn objekt" FONT 8, "MS Shell Dlg" @@ -47,7 +47,7 @@ BEGIN EDITTEXT IDC_FILE,83,37,132,13,ES_AUTOHSCROLL | NOT WS_VISIBLE END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_RESULTOBJDESC "Sett inn et nytt %s-objekt i dokumentet" IDS_RESULTFILEOBJDESC "Sett filens innhold inn som et objekt i dokumentet, snn at du kan aktivere det ved hjelp av programmet som laget den." @@ -56,7 +56,7 @@ STRINGTABLE DISCARDABLE IDS_NOTOLEMODCAPTION "Legg til kontroller" } -IDD_PASTESPECIAL4 DIALOG DISCARDABLE 3, 15, 293, 140 +IDD_PASTESPECIAL4 DIALOG 3, 15, 293, 140 STYLE DS_MODALFRAME | DS_SETFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Lim inn spesiell" FONT 8, "MS Shell Dlg" @@ -82,7 +82,7 @@ BEGIN CONTROL "", IDC_PS_SOURCETEXT, "Edit", ES_READONLY | ES_AUTOHSCROLL | WS_VISIBLE, 37, 9, 180, 8 END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_PS_PASTE_DATA "Setter innholdet fra utklippstavlen inn i dokumentet som %s." IDS_PS_PASTE_OBJECT "Setter innholdet fra utklippstavlen inn i dokumentet s du kan aktivere det med %s." diff --git a/dll/win32/oledlg/oledlg_Pl.rc b/dll/win32/oledlg/oledlg_Pl.rc index 079a2b9d82b..341fcbf937f 100644 --- a/dll/win32/oledlg/oledlg_Pl.rc +++ b/dll/win32/oledlg/oledlg_Pl.rc @@ -21,7 +21,7 @@ LANGUAGE LANG_POLISH, SUBLANG_DEFAULT -UIINSERTOBJECT DIALOG DISCARDABLE 0, 0, 310, 151 +UIINSERTOBJECT DIALOG 0, 0, 310, 151 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Wstaw obiekt" FONT 8, "MS Shell Dlg" @@ -48,7 +48,7 @@ BEGIN EDITTEXT IDC_FILE,83,37,132,13,ES_AUTOHSCROLL | NOT WS_VISIBLE END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_RESULTOBJDESC "Wstaw nowy obiekt %s do dokumentu" IDS_RESULTFILEOBJDESC "Wstaw zawarto pliku jako obiekt do dokumentu. Bdzie mona go aktywowa uywajc programu, ktry go stworzy." @@ -57,7 +57,7 @@ STRINGTABLE DISCARDABLE IDS_NOTOLEMODCAPTION "Dodaj kontrolk" } -IDD_PASTESPECIAL4 DIALOG DISCARDABLE 3, 15, 309, 140 +IDD_PASTESPECIAL4 DIALOG 3, 15, 309, 140 STYLE DS_MODALFRAME | DS_SETFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Wklej specjalnie" FONT 8, "MS Shell Dlg" @@ -83,7 +83,7 @@ BEGIN CONTROL "", IDC_PS_SOURCETEXT, "Edit", ES_READONLY | ES_AUTOHSCROLL | WS_VISIBLE, 37, 9, 180, 8 END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_PS_PASTE_DATA "Wstawia zawarto schowka do dokumentu jako %s." IDS_PS_PASTE_OBJECT "Wstawia zawarto schowka do dokumentu, tak aby mg by aktywowany za pomoc %s." diff --git a/dll/win32/oledlg/oledlg_Pt.rc b/dll/win32/oledlg/oledlg_Pt.rc index f37719f87d5..3cec3e463bc 100644 --- a/dll/win32/oledlg/oledlg_Pt.rc +++ b/dll/win32/oledlg/oledlg_Pt.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN -UIINSERTOBJECT DIALOG DISCARDABLE 0, 0, 294, 151 +UIINSERTOBJECT DIALOG 0, 0, 294, 151 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Inserir objeto" FONT 8, "MS Shell Dlg" @@ -54,7 +54,7 @@ END LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE -UIINSERTOBJECT DIALOG DISCARDABLE 0, 0, 294, 151 +UIINSERTOBJECT DIALOG 0, 0, 294, 151 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Inserir objecto" FONT 8, "MS Shell Dlg" @@ -84,7 +84,7 @@ END LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_RESULTOBJDESC "Inserir um novo objeto %s no documento" IDS_RESULTFILEOBJDESC "Inserir o conteúdo do arquivo como um objeto no documento de modo que possa ativá-lo usando o programa que o criou." @@ -95,7 +95,7 @@ STRINGTABLE DISCARDABLE LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_RESULTOBJDESC "Inserir novo objecto %s no documento" IDS_RESULTFILEOBJDESC "Inserir conteúdo do ficheiro como um objecto no documento de modo que opossa activar usando o programa que o criou." @@ -107,7 +107,7 @@ STRINGTABLE DISCARDABLE LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN -IDD_PASTESPECIAL4 DIALOG DISCARDABLE 3, 15, 293, 140 +IDD_PASTESPECIAL4 DIALOG 3, 15, 293, 140 STYLE DS_MODALFRAME | DS_SETFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Colar Especial" FONT 8, "MS Shell Dlg" @@ -135,7 +135,7 @@ END LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE -IDD_PASTESPECIAL4 DIALOG DISCARDABLE 3, 15, 293, 140 +IDD_PASTESPECIAL4 DIALOG 3, 15, 293, 140 STYLE DS_MODALFRAME | DS_SETFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Colar Especial" FONT 8, "MS Shell Dlg" @@ -164,7 +164,7 @@ END LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_PS_PASTE_DATA "Insere o conteúdo da área de transferência no seu documento como %s." IDS_PS_PASTE_OBJECT "Insere o conteúdo da área de transferência no seu documento para que seja possível ativá-lo usando %s." @@ -180,7 +180,7 @@ STRINGTABLE DISCARDABLE LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_PS_PASTE_DATA "Insere o conteúdo da área de transferência no seu documento como %s." IDS_PS_PASTE_OBJECT "Insere o conteúdo da área de transferência no seu documento para que o possa activar usando %s." diff --git a/dll/win32/oledlg/oledlg_Ro.rc b/dll/win32/oledlg/oledlg_Ro.rc index 8ffa714690f..4b0e2a81c95 100644 --- a/dll/win32/oledlg/oledlg_Ro.rc +++ b/dll/win32/oledlg/oledlg_Ro.rc @@ -24,7 +24,7 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL #pragma code_page(65001) -UIINSERTOBJECT DIALOG DISCARDABLE 0, 0, 314, 151 +UIINSERTOBJECT DIALOG 0, 0, 314, 151 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Inserare obiect" FONT 8, "MS Shell Dlg" @@ -51,7 +51,7 @@ BEGIN EDITTEXT IDC_FILE,83,37,132,13,ES_AUTOHSCROLL | NOT WS_VISIBLE END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_RESULTOBJDESC "Inserați un nou obiect %s în document" IDS_RESULTFILEOBJDESC "Inserați conținutul fișierului ca pe un obiect în document, astfel încât să îl puteți activa utilizând programul care l-a creat." @@ -60,7 +60,7 @@ STRINGTABLE DISCARDABLE IDS_NOTOLEMODCAPTION "Adaugă un control" } -IDD_PASTESPECIAL4 DIALOG DISCARDABLE 3, 15, 324, 140 +IDD_PASTESPECIAL4 DIALOG 3, 15, 324, 140 STYLE DS_MODALFRAME | DS_SETFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Inserare specială" FONT 8, "MS Shell Dlg" @@ -86,7 +86,7 @@ BEGIN CONTROL "", IDC_PS_SOURCETEXT, "Edit", ES_READONLY | ES_AUTOHSCROLL | WS_VISIBLE, 37, 9, 180, 8 END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_PS_PASTE_DATA "Inserează conținutul din clipboard în document ca %s." IDS_PS_PASTE_OBJECT "Inserează conținutul din clipboard în document astfel încât să îl puteți activa utilizând %s." diff --git a/dll/win32/oledlg/oledlg_Ru.rc b/dll/win32/oledlg/oledlg_Ru.rc index abfcf7c4704..eff2c57c2fa 100644 --- a/dll/win32/oledlg/oledlg_Ru.rc +++ b/dll/win32/oledlg/oledlg_Ru.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT -UIINSERTOBJECT DIALOG DISCARDABLE 0, 0, 294, 151 +UIINSERTOBJECT DIALOG 0, 0, 294, 151 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Вставить объект" FONT 8, "MS Shell Dlg" @@ -50,7 +50,7 @@ BEGIN EDITTEXT IDC_FILE,83,37,132,13,ES_AUTOHSCROLL | NOT WS_VISIBLE END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_RESULTOBJDESC "Добавление нового объекта %s в документ" IDS_RESULTFILEOBJDESC "Добавление объекта из файла в документ. Работать с объектом можно будет в создавшей его программе." @@ -59,7 +59,7 @@ STRINGTABLE DISCARDABLE IDS_NOTOLEMODCAPTION "Добавить элемент управления" } -IDD_PASTESPECIAL4 DIALOG DISCARDABLE 3, 15, 293, 140 +IDD_PASTESPECIAL4 DIALOG 3, 15, 293, 140 STYLE DS_MODALFRAME | DS_SETFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Специальная вставка" FONT 8, "MS Shell Dlg" @@ -85,7 +85,7 @@ BEGIN CONTROL "", IDC_PS_SOURCETEXT, "Edit", ES_READONLY | ES_AUTOHSCROLL | WS_VISIBLE, 37, 9, 180, 8 END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_PS_PASTE_DATA "Вставка содержимого буфера обмена в документ как %s." IDS_PS_PASTE_OBJECT "Вставка содержимого буфера обмена в документ так, что его можно активировать, используя %s." diff --git a/dll/win32/oledlg/oledlg_Si.rc b/dll/win32/oledlg/oledlg_Si.rc index 0f737af2d61..a6ba5d48827 100644 --- a/dll/win32/oledlg/oledlg_Si.rc +++ b/dll/win32/oledlg/oledlg_Si.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT -UIINSERTOBJECT DIALOG DISCARDABLE 0, 0, 294, 151 +UIINSERTOBJECT DIALOG 0, 0, 294, 151 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Vstavljanje predmeta" FONT 8, "MS Shell Dlg" @@ -49,7 +49,7 @@ BEGIN EDITTEXT IDC_FILE,83,37,132,13,ES_AUTOHSCROLL | NOT WS_VISIBLE END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_RESULTOBJDESC "Vstavi nov predmet %s v dokument" IDS_RESULTFILEOBJDESC "Vstavi vsebino datoteke kot predmet v dokument, tako da lahko z njim upravljate z ustreznim programom." @@ -58,7 +58,7 @@ STRINGTABLE DISCARDABLE IDS_NOTOLEMODCAPTION "Dodajanje kontrole" } -IDD_PASTESPECIAL4 DIALOG DISCARDABLE 3, 15, 293, 140 +IDD_PASTESPECIAL4 DIALOG 3, 15, 293, 140 STYLE DS_MODALFRAME | DS_SETFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Posebno lepljenje" FONT 8, "MS Shell Dlg" @@ -84,7 +84,7 @@ BEGIN CONTROL "", IDC_PS_SOURCETEXT, "Edit", ES_READONLY | ES_AUTOHSCROLL | WS_VISIBLE, 37, 9, 180, 8 END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_PS_PASTE_DATA "Vnese vsebino odložišča kot predmet vrste %s." IDS_PS_PASTE_OBJECT "Vnese vsebino odložišča, tako da jo lahko urejate s programom %s." diff --git a/dll/win32/oledlg/oledlg_Sv.rc b/dll/win32/oledlg/oledlg_Sv.rc index 6a38d90e369..1dc70cbea11 100644 --- a/dll/win32/oledlg/oledlg_Sv.rc +++ b/dll/win32/oledlg/oledlg_Sv.rc @@ -20,7 +20,7 @@ LANGUAGE LANG_SWEDISH, SUBLANG_NEUTRAL -UIINSERTOBJECT DIALOG DISCARDABLE 0, 0, 294, 151 +UIINSERTOBJECT DIALOG 0, 0, 294, 151 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Infoga objekt" FONT 8, "MS Shell Dlg" @@ -47,7 +47,7 @@ BEGIN EDITTEXT IDC_FILE,83,37,132,13,ES_AUTOHSCROLL | NOT WS_VISIBLE END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_RESULTOBJDESC "Infoga ett nytt %s-objekt i ditt dokument" IDS_RESULTFILEOBJDESC "Insert the contents of the file as an object into your document so that you may activate it using the program which created it." @@ -56,7 +56,7 @@ STRINGTABLE DISCARDABLE IDS_NOTOLEMODCAPTION "Add Control" } -IDD_PASTESPECIAL4 DIALOG DISCARDABLE 3, 15, 293, 140 +IDD_PASTESPECIAL4 DIALOG 3, 15, 293, 140 STYLE DS_MODALFRAME | DS_SETFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Paste Special" FONT 8, "MS Shell Dlg" @@ -82,7 +82,7 @@ BEGIN CONTROL "", IDC_PS_SOURCETEXT, "Edit", ES_READONLY | ES_AUTOHSCROLL | WS_VISIBLE, 37, 9, 180, 8 END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_PS_PASTE_DATA "Inserts the contents of the clipboard into your document as %s." IDS_PS_PASTE_OBJECT "Inserts the contents of the clipboard into your document so that you can activate it using %s." diff --git a/dll/win32/oledlg/oledlg_Tr.rc b/dll/win32/oledlg/oledlg_Tr.rc index 7e68c0094ed..f4b6d7e056a 100644 --- a/dll/win32/oledlg/oledlg_Tr.rc +++ b/dll/win32/oledlg/oledlg_Tr.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT -UIINSERTOBJECT DIALOG DISCARDABLE 0, 0, 294, 151 +UIINSERTOBJECT DIALOG 0, 0, 294, 151 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Nesne Ekle" FONT 8, "MS Shell Dlg" @@ -49,7 +49,7 @@ BEGIN EDITTEXT IDC_FILE,83,37,132,13,ES_AUTOHSCROLL | NOT WS_VISIBLE END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_RESULTOBJDESC "Belgenize yeni bir %s nesnesi ekle" IDS_RESULTFILEOBJDESC "Dosya ieriini belgenize nesne olarak ekleyin. Bylece kendisini oluturan program kullanarak onu etkinletirebilirsiniz." diff --git a/dll/win32/oledlg/oledlg_Uk.rc b/dll/win32/oledlg/oledlg_Uk.rc index 2563ac2686a..045b7c71a7f 100644 --- a/dll/win32/oledlg/oledlg_Uk.rc +++ b/dll/win32/oledlg/oledlg_Uk.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT -UIINSERTOBJECT DIALOG DISCARDABLE 0, 0, 294, 151 +UIINSERTOBJECT DIALOG 0, 0, 294, 151 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Вставка об'єкта" FONT 8, "MS Shell Dlg" @@ -50,7 +50,7 @@ BEGIN EDITTEXT IDC_FILE,83,37,132,13,ES_AUTOHSCROLL | NOT WS_VISIBLE END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_RESULTOBJDESC "Вставка в документ нового об'єкта типу %s" IDS_RESULTFILEOBJDESC "Вставка в документ вмісту файла у вигляді об'єкта, що активізується за допомогою програми, що створила його." @@ -59,7 +59,7 @@ STRINGTABLE DISCARDABLE IDS_NOTOLEMODCAPTION "Додати елемент управління" } -IDD_PASTESPECIAL4 DIALOG DISCARDABLE 3, 15, 293, 140 +IDD_PASTESPECIAL4 DIALOG 3, 15, 293, 140 STYLE DS_MODALFRAME | DS_SETFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Спеціальна вставка" FONT 8, "MS Shell Dlg" @@ -85,7 +85,7 @@ BEGIN CONTROL "", IDC_PS_SOURCETEXT, "Edit", ES_READONLY | ES_AUTOHSCROLL | WS_VISIBLE, 37, 9, 180, 8 END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_PS_PASTE_DATA "Вставка до документа вмісту буфера у форматі: %s." IDS_PS_PASTE_OBJECT "Вставка до документа вмісту буфера, що дає змогу активувати об'єкт за допомогою %s." diff --git a/dll/win32/oledlg/oledlg_Zh.rc b/dll/win32/oledlg/oledlg_Zh.rc index 40aac0b9814..19234ec7026 100644 --- a/dll/win32/oledlg/oledlg_Zh.rc +++ b/dll/win32/oledlg/oledlg_Zh.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED -UIINSERTOBJECT DIALOG DISCARDABLE 0, 0, 294, 151 +UIINSERTOBJECT DIALOG 0, 0, 294, 151 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "插入对象" FONT 9, "MS Shell Dlg" @@ -52,7 +52,7 @@ BEGIN EDITTEXT IDC_FILE,83,37,132,13,ES_AUTOHSCROLL | NOT WS_VISIBLE END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_RESULTOBJDESC "在你的文件中插入一个新的 %s 对象" IDS_RESULTFILEOBJDESC "将文件的内容以对象的方式插入到你的文件以便你可以用创建本文件的程序来激活它." @@ -61,7 +61,7 @@ STRINGTABLE DISCARDABLE IDS_NOTOLEMODCAPTION "添加控件" } -IDD_PASTESPECIAL4 DIALOG DISCARDABLE 3, 15, 293, 140 +IDD_PASTESPECIAL4 DIALOG 3, 15, 293, 140 STYLE DS_MODALFRAME | DS_SETFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "特殊粘贴" FONT 9, "MS Shell Dlg" @@ -87,7 +87,7 @@ BEGIN CONTROL "", IDC_PS_SOURCETEXT, "Edit", ES_READONLY | ES_AUTOHSCROLL | WS_VISIBLE, 37, 9, 180, 8 END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_PS_PASTE_DATA "将剪贴板的内容以 %s 插入到你的文件." IDS_PS_PASTE_OBJECT "将剪贴板的内容插入到你的文件以便你可以使用 %s." @@ -103,7 +103,7 @@ STRINGTABLE DISCARDABLE LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL -UIINSERTOBJECT DIALOG DISCARDABLE 0, 0, 294, 151 +UIINSERTOBJECT DIALOG 0, 0, 294, 151 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "插入對象" FONT 9, "MS Shell Dlg" @@ -130,7 +130,7 @@ BEGIN EDITTEXT IDC_FILE,83,37,132,13,ES_AUTOHSCROLL | NOT WS_VISIBLE END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_RESULTOBJDESC "在你的檔案中插入一個新的 %s 對象" IDS_RESULTFILEOBJDESC "將檔案的內容以對象的方式插入到你的檔案以便你可以用創建本檔案的程式來激活它." @@ -139,7 +139,7 @@ STRINGTABLE DISCARDABLE IDS_NOTOLEMODCAPTION "添加控件" } -IDD_PASTESPECIAL4 DIALOG DISCARDABLE 3, 15, 293, 140 +IDD_PASTESPECIAL4 DIALOG 3, 15, 293, 140 STYLE DS_MODALFRAME | DS_SETFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "特殊貼上" FONT 9, "MS Shell Dlg" @@ -165,7 +165,7 @@ BEGIN CONTROL "", IDC_PS_SOURCETEXT, "Edit", ES_READONLY | ES_AUTOHSCROLL | WS_VISIBLE, 37, 9, 180, 8 END -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_PS_PASTE_DATA "將剪貼板的內容以 %s 插入到你的檔案." IDS_PS_PASTE_OBJECT "將剪貼板的內容插入到你的檔案以便你可以使用 %s." diff --git a/dll/win32/pstorec/rsrc.rc b/dll/win32/pstorec/rsrc.rc index 85b6205eec8..80dc7816e8f 100644 --- a/dll/win32/pstorec/rsrc.rc +++ b/dll/win32/pstorec/rsrc.rc @@ -26,4 +26,4 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL /* @makedep: pstorec_tlb.tlb */ -1 TYPELIB LOADONCALL DISCARDABLE pstorec_tlb.tlb +1 TYPELIB pstorec_tlb.tlb diff --git a/dll/win32/riched20/editor.c b/dll/win32/riched20/editor.c index b4bff4f07d9..14ae16b88b9 100644 --- a/dll/win32/riched20/editor.c +++ b/dll/win32/riched20/editor.c @@ -4406,10 +4406,9 @@ static LRESULT RichEditWndProc_common(HWND hWnd, UINT msg, WPARAM wParam, texthost = ME_CreateTextHost(hWnd, pcs, FALSE); return texthost != NULL; } - else if (msg != WM_NCDESTROY) + else { - ERR("called with invalid hWnd %p - application bug?\n", hWnd); - return 0; + return DefWindowProcW(hWnd, msg, wParam, lParam); } } diff --git a/dll/win32/riched20/writer.c b/dll/win32/riched20/writer.c index 107fadfc70f..8c8714504b8 100644 --- a/dll/win32/riched20/writer.c +++ b/dll/win32/riched20/writer.c @@ -406,12 +406,44 @@ ME_StreamOutRTFTableProps(ME_TextEditor *editor, ME_OutStream *pStream, static BOOL ME_StreamOutRTFParaProps(ME_TextEditor *editor, ME_OutStream *pStream, - const ME_DisplayItem *para) + ME_DisplayItem *para) { PARAFORMAT2 *fmt = para->member.para.pFmt; char props[STREAMOUT_BUFFER_SIZE] = ""; int i; - + + if (!editor->bEmulateVersion10) { /* v4.1 */ + if (para->member.para.nFlags & MEPF_ROWSTART) { + pStream->nNestingLevel++; + if (pStream->nNestingLevel == 1) { + if (!ME_StreamOutRTFTableProps(editor, pStream, para)) + return FALSE; + } + return TRUE; + } else if (para->member.para.nFlags & MEPF_ROWEND) { + pStream->nNestingLevel--; + if (pStream->nNestingLevel >= 1) { + if (!ME_StreamOutPrint(pStream, "{\\*\\nesttableprops")) + return FALSE; + if (!ME_StreamOutRTFTableProps(editor, pStream, para)) + return FALSE; + if (!ME_StreamOutPrint(pStream, "\\nestrow}{\\nonesttables\\par}\r\n")) + return FALSE; + } else { + if (!ME_StreamOutPrint(pStream, "\\row \r\n")) + return FALSE; + } + return TRUE; + } + } else { /* v1.0 - 3.0 */ + if (para->member.para.pFmt->dwMask & PFM_TABLE && + para->member.para.pFmt->wEffects & PFE_TABLE) + { + if (!ME_StreamOutRTFTableProps(editor, pStream, para)) + return FALSE; + } + } + /* TODO: Don't emit anything if the last PARAFORMAT2 is inherited */ if (!ME_StreamOutPrint(pStream, "\\pard")) return FALSE; @@ -798,39 +830,8 @@ static BOOL ME_StreamOutRTF(ME_TextEditor *editor, ME_OutStream *pStream, if (cursor.pPara != prev_para) { prev_para = cursor.pPara; - if (!editor->bEmulateVersion10) { /* v4.1 */ - if (cursor.pPara->member.para.nFlags & MEPF_ROWSTART) { - pStream->nNestingLevel++; - if (pStream->nNestingLevel == 1) { - if (!ME_StreamOutRTFTableProps(editor, pStream, cursor.pPara)) - return FALSE; - } - } else if (cursor.pPara->member.para.nFlags & MEPF_ROWEND) { - pStream->nNestingLevel--; - if (pStream->nNestingLevel >= 1) { - if (!ME_StreamOutPrint(pStream, "{\\*\\nesttableprops")) - return FALSE; - if (!ME_StreamOutRTFTableProps(editor, pStream, cursor.pPara)) - return FALSE; - if (!ME_StreamOutPrint(pStream, "\\nestrow}{\\nonesttables\\par}\r\n")) - return FALSE; - } else { - if (!ME_StreamOutPrint(pStream, "\\row \r\n")) - return FALSE; - } - } else if (!ME_StreamOutRTFParaProps(editor, pStream, cursor.pPara)) { - return FALSE; - } - } else { /* v1.0 - 3.0 */ - if (cursor.pPara->member.para.pFmt->dwMask & PFM_TABLE && - cursor.pPara->member.para.pFmt->wEffects & PFE_TABLE) - { - if (!ME_StreamOutRTFTableProps(editor, pStream, cursor.pPara)) - return FALSE; - } - if (!ME_StreamOutRTFParaProps(editor, pStream, cursor.pPara)) - return FALSE; - } + if (!ME_StreamOutRTFParaProps(editor, pStream, cursor.pPara)) + return FALSE; } if (cursor.pRun == endCur.pRun && !endCur.nOffset) @@ -838,7 +839,7 @@ static BOOL ME_StreamOutRTF(ME_TextEditor *editor, ME_OutStream *pStream, TRACE("flags %xh\n", cursor.pRun->member.run.nFlags); /* TODO: emit embedded objects */ if (cursor.pPara->member.para.nFlags & (MEPF_ROWSTART|MEPF_ROWEND)) - break; + continue; if (cursor.pRun->member.run.nFlags & MERF_GRAPHICS) { FIXME("embedded objects are not handled\n"); } else if (cursor.pRun->member.run.nFlags & MERF_TAB) { diff --git a/dll/win32/shdoclc/Da.rc b/dll/win32/shdoclc/Da.rc index 8a25db92dbf..5a08716e830 100644 --- a/dll/win32/shdoclc/Da.rc +++ b/dll/win32/shdoclc/Da.rc @@ -20,12 +20,12 @@ LANGUAGE LANG_DANISH, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_MESSAGE_BOX_TITLE, "Wine Internet Explorer" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_PRINT_HEADER_TEMPLATE "&w&bSide &p" /* FIXME: should be "&w&bPage &p of &P" */ IDS_PRINT_FOOTER_TEMPLATE "&u&b&d" diff --git a/dll/win32/shdoclc/De.rc b/dll/win32/shdoclc/De.rc index f41619faeee..3dc3a4642d5 100644 --- a/dll/win32/shdoclc/De.rc +++ b/dll/win32/shdoclc/De.rc @@ -24,12 +24,12 @@ LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_MESSAGE_BOX_TITLE, "Wine Internet Explorer" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_PRINT_HEADER_TEMPLATE "&w&bSeite &p" /* FIXME: should be "&w&bSeite &p von &P" */ IDS_PRINT_FOOTER_TEMPLATE "&u&b&d" diff --git a/dll/win32/shdoclc/En.rc b/dll/win32/shdoclc/En.rc index 4cb0a11d839..4a0ac8277af 100644 --- a/dll/win32/shdoclc/En.rc +++ b/dll/win32/shdoclc/En.rc @@ -20,12 +20,12 @@ LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_MESSAGE_BOX_TITLE, "Wine Internet Explorer" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_PRINT_HEADER_TEMPLATE "&w&bPage &p" /* FIXME: should be "&w&bPage &p of &P" */ IDS_PRINT_FOOTER_TEMPLATE "&u&b&d" diff --git a/dll/win32/shdoclc/Es.rc b/dll/win32/shdoclc/Es.rc index 7dc968971f6..52d6a23d283 100644 --- a/dll/win32/shdoclc/Es.rc +++ b/dll/win32/shdoclc/Es.rc @@ -22,12 +22,12 @@ LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_MESSAGE_BOX_TITLE, "Internet Explorer de Wine" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_PRINT_HEADER_TEMPLATE "&w&bPgina &p" /* FIXME: should be "&w&bPage &p of &P" */ IDS_PRINT_FOOTER_TEMPLATE "&u&b&d" diff --git a/dll/win32/shdoclc/Fr.rc b/dll/win32/shdoclc/Fr.rc index 9277938bb45..23d2cc11511 100644 --- a/dll/win32/shdoclc/Fr.rc +++ b/dll/win32/shdoclc/Fr.rc @@ -26,12 +26,12 @@ LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_MESSAGE_BOX_TITLE, "Internet Explorer de Wine" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_PRINT_HEADER_TEMPLATE "&w&bPage &p" /* FIXME: should be "&w&bPage &p of &P" */ IDS_PRINT_FOOTER_TEMPLATE "&u&b&d" diff --git a/dll/win32/shdoclc/Hu.rc b/dll/win32/shdoclc/Hu.rc index 5cc7258a337..ccb6f903ac9 100644 --- a/dll/win32/shdoclc/Hu.rc +++ b/dll/win32/shdoclc/Hu.rc @@ -23,12 +23,12 @@ LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_MESSAGE_BOX_TITLE, "Wine Internet Explorer" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_PRINT_HEADER_TEMPLATE "&w&bOldal &p" /* FIXME: should be "&w&bPage &p of &P" */ IDS_PRINT_FOOTER_TEMPLATE "&u&b&d" diff --git a/dll/win32/shdoclc/It.rc b/dll/win32/shdoclc/It.rc index 08a3b47edfb..d7d749e68af 100644 --- a/dll/win32/shdoclc/It.rc +++ b/dll/win32/shdoclc/It.rc @@ -24,12 +24,12 @@ LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_MESSAGE_BOX_TITLE, "Wine Internet Explorer" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_PRINT_HEADER_TEMPLATE "&w&bPage &p" /* FIXME: should be "&w&bPage &p of &P" */ IDS_PRINT_FOOTER_TEMPLATE "&u&b&d" diff --git a/dll/win32/shdoclc/Ja.rc b/dll/win32/shdoclc/Ja.rc index f4239779e32..f764b698dba 100644 --- a/dll/win32/shdoclc/Ja.rc +++ b/dll/win32/shdoclc/Ja.rc @@ -24,12 +24,12 @@ LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_MESSAGE_BOX_TITLE, "Wine インターネット エクスプローラ" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_PRINT_HEADER_TEMPLATE "&w&b&pページ" /* FIXME: should be "&w&bPage &p of &P" */ IDS_PRINT_FOOTER_TEMPLATE "&u&b&d" diff --git a/dll/win32/shdoclc/Ko.rc b/dll/win32/shdoclc/Ko.rc index f637d729765..615a5541e8b 100644 --- a/dll/win32/shdoclc/Ko.rc +++ b/dll/win32/shdoclc/Ko.rc @@ -24,12 +24,12 @@ LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_MESSAGE_BOX_TITLE, "Wine 인터넷 익스폴로어r" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_PRINT_HEADER_TEMPLATE "&w&b페이지 &p" /* FIXME: should be "&w&bPage &p of &P" */ IDS_PRINT_FOOTER_TEMPLATE "&u&b&d" diff --git a/dll/win32/shdoclc/Lt.rc b/dll/win32/shdoclc/Lt.rc index e6c812d3bfe..ab2d97a8e43 100644 --- a/dll/win32/shdoclc/Lt.rc +++ b/dll/win32/shdoclc/Lt.rc @@ -23,12 +23,12 @@ LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_MESSAGE_BOX_TITLE, "Wine interneto naršyklė" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_PRINT_HEADER_TEMPLATE "&w&bPuslapis &p" /* FIXME: should be "&w&bPuslapis &p iš &P" */ IDS_PRINT_FOOTER_TEMPLATE "&u&b&d" diff --git a/dll/win32/shdoclc/Nl.rc b/dll/win32/shdoclc/Nl.rc index 075af99e621..b2813e1ffe4 100644 --- a/dll/win32/shdoclc/Nl.rc +++ b/dll/win32/shdoclc/Nl.rc @@ -22,12 +22,12 @@ LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_MESSAGE_BOX_TITLE, "Wine Internet Verkenner" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_PRINT_HEADER_TEMPLATE "&w&bPagina &p" /* FIXME: should be "&w&bPagina &p of &P" */ IDS_PRINT_FOOTER_TEMPLATE "&u&b&d" diff --git a/dll/win32/shdoclc/No.rc b/dll/win32/shdoclc/No.rc index 65f554a5777..2ec626bc515 100644 --- a/dll/win32/shdoclc/No.rc +++ b/dll/win32/shdoclc/No.rc @@ -20,12 +20,12 @@ LANGUAGE LANG_NORWEGIAN, SUBLANG_NORWEGIAN_BOKMAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_MESSAGE_BOX_TITLE, "Wine Internet Explorer" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_PRINT_HEADER_TEMPLATE "&w&bSide &p" /* FIXME: should be "&w&bPage &p of &P" */ IDS_PRINT_FOOTER_TEMPLATE "&u&b&d" diff --git a/dll/win32/shdoclc/Pl.rc b/dll/win32/shdoclc/Pl.rc index 4d82d58c3c2..0b2e3787b42 100644 --- a/dll/win32/shdoclc/Pl.rc +++ b/dll/win32/shdoclc/Pl.rc @@ -20,12 +20,12 @@ LANGUAGE LANG_POLISH, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_MESSAGE_BOX_TITLE, "Wine Internet Explorer" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_PRINT_HEADER_TEMPLATE "&w&bStrona &p" /* FIXME: should be "&w&bStrona &p z &P" */ IDS_PRINT_FOOTER_TEMPLATE "&u&b&d" diff --git a/dll/win32/shdoclc/Pt.rc b/dll/win32/shdoclc/Pt.rc index 3df4240208a..817a8039920 100644 --- a/dll/win32/shdoclc/Pt.rc +++ b/dll/win32/shdoclc/Pt.rc @@ -23,14 +23,14 @@ LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_MESSAGE_BOX_TITLE, "Wine Internet Explorer" } LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_MESSAGE_BOX_TITLE, "Explorador de Internet Wine" } @@ -38,7 +38,7 @@ STRINGTABLE DISCARDABLE LANGUAGE LANG_PORTUGUESE, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_PRINT_HEADER_TEMPLATE "&w&bPage &p" /* FIXME: should be "&w&bPage &p of &P" */ IDS_PRINT_FOOTER_TEMPLATE "&u&b&d" @@ -54,17 +54,17 @@ IDR_BROWSE_CONTEXT_MENU MENU MENUITEM "&Voltar", IDM_GOBACKWARD MENUITEM "&Avançar", IDM_GOFORWARD MENUITEM SEPARATOR - MENUITEM "&Salvar Fundo como...", IDM_SAVEBACKGROUND - MENUITEM "D&efinir como Fundo", IDM_SETWALLPAPER + MENUITEM "&Salvar fundo como...", IDM_SAVEBACKGROUND + MENUITEM "D&efinir como fundo", IDM_SETWALLPAPER MENUITEM "&Copiar Fundo", IDM_COPYBACKGROUND - MENUITEM "Definir como &Item da Área de Trabalho", IDM_SETDESKTOPITEM + MENUITEM "Definir como &item da Área de Trabalho", IDM_SETDESKTOPITEM MENUITEM SEPARATOR - MENUITEM "Selecionar &Tudo", IDM_SELECTALL + MENUITEM "Selecionar &tudo", IDM_SELECTALL MENUITEM "C&olar", IDM_PASTE MENUITEM SEPARATOR - MENUITEM "Criar Ata&lho", IDM_CREATESHORTCUT + MENUITEM "Criar ata&lho", IDM_CREATESHORTCUT MENUITEM "Adicio&nar aos Favoritos", IDM_ADDFAVORITES - MENUITEM "Ver Código &Fonte", IDM_VIEWSOURCE + MENUITEM "Ver código &fonte", IDM_VIEWSOURCE MENUITEM SEPARATOR MENUITEM "Co&dificação", IDM_LANGUAGE MENUITEM SEPARATOR @@ -77,22 +77,22 @@ IDR_BROWSE_CONTEXT_MENU MENU POPUP "Imagem" { - MENUITEM "&Abrir Link", IDM_FOLLOWLINKC - MENUITEM "A&brir Link numa Nova Janela", IDM_FOLLOWLINKN - MENUITEM "&Salvar Link como...", IDM_SAVETARGET - MENUITEM "Imprimir Lin&k", IDM_PRINTTARGET + MENUITEM "&Abrir link", IDM_FOLLOWLINKC + MENUITEM "A&brir link numa nova janela", IDM_FOLLOWLINKN + MENUITEM "&Salvar link como...", IDM_SAVETARGET + MENUITEM "Imprimir lin&k", IDM_PRINTTARGET MENUITEM SEPARATOR - MENUITEM "Mos&trar Imagem", IDM_SHOWPICTURE - MENUITEM "Sal&var Imagem como...", IDM_SAVEPICTURE - MENUITEM "&Enviar Imagem...", IDM_MP_EMAILPICTURE - MENUITEM "I&mprimir Imagem...", IDM_MP_PRINTPICTURE - MENUITEM "I&r para Minhas Imagens", IDM_MP_MYPICS - MENUITEM "&Definir como Fundo", IDM_SETWALLPAPER - MENUITEM "Definir como &Item da Área de Trabalho...", IDM_SETDESKTOPITEM + MENUITEM "Mos&trar imagem", IDM_SHOWPICTURE + MENUITEM "Sal&var imagem como...", IDM_SAVEPICTURE + MENUITEM "&Enviar imagem...", IDM_MP_EMAILPICTURE + MENUITEM "I&mprimir imagem...", IDM_MP_PRINTPICTURE + MENUITEM "I&r para minhas imagens", IDM_MP_MYPICS + MENUITEM "&Definir como fundo", IDM_SETWALLPAPER + MENUITEM "Definir como &item da Área de Trabalho...", IDM_SETDESKTOPITEM MENUITEM SEPARATOR MENUITEM "&Cortar", IDM_CUT MENUITEM "C&opiar", IDM_COPY - MENUITEM "Copiar Atal&ho", IDM_COPYSHORTCUT + MENUITEM "Copiar atal&ho", IDM_COPYSHORTCUT MENUITEM "Co&lar", IDM_PASTE MENUITEM SEPARATOR MENUITEM "Adicionar aos &Favoritos...", IDM_ADDFAVORITES @@ -111,7 +111,7 @@ IDR_BROWSE_CONTEXT_MENU MENU MENUITEM "&Apagar", IDM_DELETE MENUITEM SEPARATOR MENUITEM SEPARATOR - MENUITEM "&Selecionar Tudo", IDM_SELECTALL + MENUITEM "&Selecionar tudo", IDM_SELECTALL } POPUP "Tabela" @@ -125,8 +125,8 @@ IDR_BROWSE_CONTEXT_MENU MENU } MENUITEM SEPARATOR MENUITEM SEPARATOR - MENUITEM "Propriedades da &Célula", IDM_CELLPROPERTIES - MENUITEM "Propriedades da &Tabela", IDM_TABLEPROPERTIES + MENUITEM "Propriedades da &célula", IDM_CELLPROPERTIES + MENUITEM "Propriedades da &tabela", IDM_TABLEPROPERTIES } POPUP "1DSite Select" @@ -134,7 +134,7 @@ IDR_BROWSE_CONTEXT_MENU MENU MENUITEM "&Cortar", IDM_CUT MENUITEM "C&opiar", IDM_COPY MENUITEM "Co&lar", IDM_PASTE - MENUITEM "Selecionar Tudo", IDM_SELECTALL + MENUITEM "Selecionar tudo", IDM_SELECTALL MENUITEM "&Imprimir", IDM_PRINT MENUITEM SEPARATOR } @@ -142,13 +142,13 @@ IDR_BROWSE_CONTEXT_MENU MENU POPUP "Âncora" { MENUITEM "&Abrir", IDM_FOLLOWLINKC - MENUITEM "A&brir numa Nova Janela", IDM_FOLLOWLINKN - MENUITEM "&Salvar Link como...", IDM_SAVETARGET - MENUITEM "&Imprimir Link", IDM_PRINTTARGET + MENUITEM "A&brir numa nova janela", IDM_FOLLOWLINKN + MENUITEM "&Salvar link como...", IDM_SAVETARGET + MENUITEM "&Imprimir link", IDM_PRINTTARGET MENUITEM SEPARATOR MENUITEM "&Cortar", IDM_CUT MENUITEM "C&opiar", IDM_COPY - MENUITEM "Copia&r Atalho", IDM_COPYSHORTCUT + MENUITEM "Copia&r atalho", IDM_COPYSHORTCUT MENUITEM "Co&lar", IDM_PASTE MENUITEM SEPARATOR MENUITEM "Adicionar aos &Favoritos...", IDM_ADDFAVORITES @@ -164,19 +164,19 @@ IDR_BROWSE_CONTEXT_MENU MENU POPUP "Imagem DYNSRC" { - MENUITEM "&Abrir Link", IDM_FOLLOWLINKC - MENUITEM "A&brir Link numa Nova Janela", IDM_FOLLOWLINKN - MENUITEM "&Salvar Link como...", IDM_SAVETARGET - MENUITEM "Imprimir Lin&k", IDM_PRINTTARGET + MENUITEM "&Abrir link", IDM_FOLLOWLINKC + MENUITEM "A&brir link numa nova janela", IDM_FOLLOWLINKN + MENUITEM "&Salvar link como...", IDM_SAVETARGET + MENUITEM "Imprimir lin&k", IDM_PRINTTARGET MENUITEM SEPARATOR - MENUITEM "&Mostrar Imagem", IDM_SHOWPICTURE - MENUITEM "Sal&var Vídeo como...", IDM_SAVEPICTURE - MENUITEM "&Definir como Fundo", IDM_SETWALLPAPER - MENUITEM "Definir como &Item da Área de Trabalho...", IDM_SETDESKTOPITEM + MENUITEM "&Mostrar imagem", IDM_SHOWPICTURE + MENUITEM "Sal&var vídeo como...", IDM_SAVEPICTURE + MENUITEM "&Definir como fundo", IDM_SETWALLPAPER + MENUITEM "Definir como &item da Área de Trabalho...", IDM_SETDESKTOPITEM MENUITEM SEPARATOR MENUITEM "&Cortar", IDM_CUT MENUITEM "C&opiar", IDM_COPY - MENUITEM "Copiar Atal&ho", IDM_COPYSHORTCUT + MENUITEM "Copiar atal&ho", IDM_COPYSHORTCUT MENUITEM "Co&lar", IDM_PASTE MENUITEM SEPARATOR MENUITEM "Adicionar aos &Favoritos...", IDM_ADDFAVORITES @@ -189,19 +189,19 @@ IDR_BROWSE_CONTEXT_MENU MENU POPUP "Imagem ART" { - MENUITEM "&Abrir Link", IDM_FOLLOWLINKC - MENUITEM "A&brir Link numa Nova Janela", IDM_FOLLOWLINKN - MENUITEM "&Salvar Link como...", IDM_SAVETARGET - MENUITEM "Imprimir Lin&k", IDM_PRINTTARGET + MENUITEM "&Abrir link", IDM_FOLLOWLINKC + MENUITEM "A&brir link numa nova janela", IDM_FOLLOWLINKN + MENUITEM "&Salvar link como...", IDM_SAVETARGET + MENUITEM "Imprimir lin&k", IDM_PRINTTARGET MENUITEM SEPARATOR - MENUITEM "&Mostrar Imagem", IDM_SHOWPICTURE - MENUITEM "Sal&var Vídeo como...", IDM_SAVEPICTURE - MENUITEM "&Definir como Fundo", IDM_SETWALLPAPER - MENUITEM "Definir como &Item da Área de Trabalho...", IDM_SETDESKTOPITEM + MENUITEM "&Mostrar imagem", IDM_SHOWPICTURE + MENUITEM "Sal&var vídeo como...", IDM_SAVEPICTURE + MENUITEM "&Definir como fundo", IDM_SETWALLPAPER + MENUITEM "Definir como &item da Área de Trabalho...", IDM_SETDESKTOPITEM MENUITEM SEPARATOR MENUITEM "&Cortar", IDM_CUT MENUITEM "C&opiar", IDM_COPY - MENUITEM "Copiar Atal&ho", IDM_COPYSHORTCUT + MENUITEM "Copiar atal&ho", IDM_COPYSHORTCUT MENUITEM "Co&lar", IDM_PASTE MENUITEM SEPARATOR MENUITEM "Adicionar aos &Favoritos...", IDM_ADDFAVORITES @@ -236,30 +236,30 @@ IDR_BROWSE_CONTEXT_MENU MENU POPUP "Barra de Rolagem Vertical" { - MENUITEM "Rolar Aqui", IDM_SCROLL_HERE + MENUITEM "Rolar aqui", IDM_SCROLL_HERE MENUITEM SEPARATOR MENUITEM "Topo", IDM_SCROLL_TOP MENUITEM "Fundo", IDM_SCROLL_BOTTOM MENUITEM SEPARATOR - MENUITEM "Página Acima", IDM_SCROLL_PAGEUP - MENUITEM "Página Abaixo", IDM_SCROLL_PAGEDOWN + MENUITEM "Página acima", IDM_SCROLL_PAGEUP + MENUITEM "Página abaixo", IDM_SCROLL_PAGEDOWN MENUITEM SEPARATOR - MENUITEM "Rolar para Cima", IDM_SCROLL_UP - MENUITEM "Rolar para Baixo", IDM_SCROLL_DOWN + MENUITEM "Rolar para cima", IDM_SCROLL_UP + MENUITEM "Rolar para baixo", IDM_SCROLL_DOWN } POPUP "Barra de Rolagem Horizontal" { - MENUITEM "Rolar Aqui", IDM_SCROLL_HERE + MENUITEM "Rolar aqui", IDM_SCROLL_HERE MENUITEM SEPARATOR - MENUITEM "Canto Esquerdo", IDM_SCROLL_LEFTEDGE - MENUITEM "Canto Direito", IDM_SCROLL_RIGHTEDGE + MENUITEM "Canto esquerdo", IDM_SCROLL_LEFTEDGE + MENUITEM "Canto direito", IDM_SCROLL_RIGHTEDGE MENUITEM SEPARATOR - MENUITEM "Página à Esquerda", IDM_SCROLL_PAGELEFT - MENUITEM "Página à Direita", IDM_SCROLL_PAGERIGHT + MENUITEM "Página à esquerda", IDM_SCROLL_PAGELEFT + MENUITEM "Página à direita", IDM_SCROLL_PAGERIGHT MENUITEM SEPARATOR - MENUITEM "Rolar para a Esquerda", IDM_SCROLL_LEFT - MENUITEM "Rolar para a Direita", IDM_SCROLL_RIGHT + MENUITEM "Rolar para a esquerda", IDM_SCROLL_LEFT + MENUITEM "Rolar para a direita", IDM_SCROLL_RIGHT } } @@ -272,17 +272,17 @@ IDR_BROWSE_CONTEXT_MENU MENU MENUITEM "&Retroceder", IDM_GOBACKWARD MENUITEM "&Avançar", IDM_GOFORWARD MENUITEM SEPARATOR - MENUITEM "&Guardar Fundo como...", IDM_SAVEBACKGROUND - MENUITEM "D&efinir como Fundo", IDM_SETWALLPAPER - MENUITEM "&Copiar Fundo", IDM_COPYBACKGROUND - MENUITEM "Definir como &Item do Ambiente de Trabalho", IDM_SETDESKTOPITEM + MENUITEM "&Guardar fundo como...", IDM_SAVEBACKGROUND + MENUITEM "D&efinir como fundo", IDM_SETWALLPAPER + MENUITEM "&Copiar fundo", IDM_COPYBACKGROUND + MENUITEM "Definir como &item do Ambiente de Trabalho", IDM_SETDESKTOPITEM MENUITEM SEPARATOR - MENUITEM "&Seleccionar Tudo", IDM_SELECTALL + MENUITEM "&Seleccionar tudo", IDM_SELECTALL MENUITEM "C&olar", IDM_PASTE MENUITEM SEPARATOR - MENUITEM "Criar Ata&lho", IDM_CREATESHORTCUT + MENUITEM "Criar ata&lho", IDM_CREATESHORTCUT MENUITEM "Adicionar aos &Favoritos", IDM_ADDFAVORITES - MENUITEM "&Ver Código Fonte", IDM_VIEWSOURCE + MENUITEM "&Ver código fonte", IDM_VIEWSOURCE MENUITEM SEPARATOR MENUITEM "Co&dificação", IDM_LANGUAGE MENUITEM SEPARATOR @@ -300,17 +300,17 @@ IDR_BROWSE_CONTEXT_MENU MENU MENUITEM "&Guardar Ligação como...", IDM_SAVETARGET MENUITEM "I&mprimir Ligação", IDM_PRINTTARGET MENUITEM SEPARATOR - MENUITEM "Mos&trar Imagem", IDM_SHOWPICTURE - MENUITEM "G&uardar Imagem como...", IDM_SAVEPICTURE - MENUITEM "En&viar Imagem...", IDM_MP_EMAILPICTURE - MENUITEM "Imprimir Imag&em...", IDM_MP_PRINTPICTURE - MENUITEM "I&r para Minhas Imagens", IDM_MP_MYPICS - MENUITEM "&Definir como Fundo", IDM_SETWALLPAPER - MENUITEM "Definir como &Item do Ambiente de Trabalho...", IDM_SETDESKTOPITEM + MENUITEM "Mos&trar imagem", IDM_SHOWPICTURE + MENUITEM "G&uardar imagem como...", IDM_SAVEPICTURE + MENUITEM "En&viar imagem...", IDM_MP_EMAILPICTURE + MENUITEM "Imprimir imag&em...", IDM_MP_PRINTPICTURE + MENUITEM "I&r para minhas imagens", IDM_MP_MYPICS + MENUITEM "&Definir como fundo", IDM_SETWALLPAPER + MENUITEM "Definir como &item do Ambiente de Trabalho...", IDM_SETDESKTOPITEM MENUITEM SEPARATOR MENUITEM "&Cortar", IDM_CUT MENUITEM "C&opiar", IDM_COPY - MENUITEM "Copiar Atal&ho", IDM_COPYSHORTCUT + MENUITEM "Copiar atal&ho", IDM_COPYSHORTCUT MENUITEM "Co&lar", IDM_PASTE MENUITEM SEPARATOR MENUITEM "Adicionar aos &Favoritos...", IDM_ADDFAVORITES @@ -329,7 +329,7 @@ IDR_BROWSE_CONTEXT_MENU MENU MENUITEM "&Apagar", IDM_DELETE MENUITEM SEPARATOR MENUITEM SEPARATOR - MENUITEM "&Seleccionar Tudo", IDM_SELECTALL + MENUITEM "&Seleccionar tudo", IDM_SELECTALL } POPUP "Tabela" @@ -343,8 +343,8 @@ IDR_BROWSE_CONTEXT_MENU MENU } MENUITEM SEPARATOR MENUITEM SEPARATOR - MENUITEM "Propriedades da &Célula", IDM_CELLPROPERTIES - MENUITEM "Propriedades da &Tabela", IDM_TABLEPROPERTIES + MENUITEM "Propriedades da &célula", IDM_CELLPROPERTIES + MENUITEM "Propriedades da &tabela", IDM_TABLEPROPERTIES } POPUP "1DSite Select" @@ -352,7 +352,7 @@ IDR_BROWSE_CONTEXT_MENU MENU MENUITEM "&Cortar", IDM_CUT MENUITEM "C&opiar", IDM_COPY MENUITEM "Co&lar", IDM_PASTE - MENUITEM "Seleccionar Tudo", IDM_SELECTALL + MENUITEM "Seleccionar tudo", IDM_SELECTALL MENUITEM "&Imprimir", IDM_PRINT MENUITEM SEPARATOR } @@ -360,13 +360,13 @@ IDR_BROWSE_CONTEXT_MENU MENU POPUP "Âncora" { MENUITEM "&Abrir", IDM_FOLLOWLINKC - MENUITEM "A&brir numa Nova Janela", IDM_FOLLOWLINKN - MENUITEM "&Guardar Ligação como...", IDM_SAVETARGET - MENUITEM "&Imprimir Ligação", IDM_PRINTTARGET + MENUITEM "A&brir numa nova janela", IDM_FOLLOWLINKN + MENUITEM "&Guardar ligação como...", IDM_SAVETARGET + MENUITEM "&Imprimir ligação", IDM_PRINTTARGET MENUITEM SEPARATOR MENUITEM "&Cortar", IDM_CUT MENUITEM "C&opiar", IDM_COPY - MENUITEM "Copia&r Atalho", IDM_COPYSHORTCUT + MENUITEM "Copia&r atalho", IDM_COPYSHORTCUT MENUITEM "Co&lar", IDM_PASTE MENUITEM SEPARATOR MENUITEM "Adicionar aos &Favoritos...", IDM_ADDFAVORITES @@ -382,19 +382,19 @@ IDR_BROWSE_CONTEXT_MENU MENU POPUP "Imagem DYNSRC" { - MENUITEM "&Abrir Ligação", IDM_FOLLOWLINKC - MENUITEM "A&brir Ligação numa Nova Janela", IDM_FOLLOWLINKN - MENUITEM "&Guardar Ligação como...", IDM_SAVETARGET - MENUITEM "&Imprimir Ligação", IDM_PRINTTARGET + MENUITEM "&Abrir ligação", IDM_FOLLOWLINKC + MENUITEM "A&brir ligação numa nova janela", IDM_FOLLOWLINKN + MENUITEM "&Guardar ligação como...", IDM_SAVETARGET + MENUITEM "&Imprimir ligação", IDM_PRINTTARGET MENUITEM SEPARATOR - MENUITEM "&Mostrar Imagem", IDM_SHOWPICTURE - MENUITEM "G&uardar Vídeo como...", IDM_SAVEPICTURE - MENUITEM "&Definir como Fundo", IDM_SETWALLPAPER - MENUITEM "D&efinir como Item do Ambiente de Trabalho...", IDM_SETDESKTOPITEM + MENUITEM "&Mostrar imagem", IDM_SHOWPICTURE + MENUITEM "G&uardar vídeo como...", IDM_SAVEPICTURE + MENUITEM "&Definir como fundo", IDM_SETWALLPAPER + MENUITEM "D&efinir como item do Ambiente de Trabalho...", IDM_SETDESKTOPITEM MENUITEM SEPARATOR MENUITEM "&Cortar", IDM_CUT MENUITEM "C&opiar", IDM_COPY - MENUITEM "Copiar Atal&ho", IDM_COPYSHORTCUT + MENUITEM "Copiar atal&ho", IDM_COPYSHORTCUT MENUITEM "Co&lar", IDM_PASTE MENUITEM SEPARATOR MENUITEM "Adicionar aos &Favoritos...", IDM_ADDFAVORITES @@ -407,19 +407,19 @@ IDR_BROWSE_CONTEXT_MENU MENU POPUP "Imagem ART" { - MENUITEM "&Abrir Ligação", IDM_FOLLOWLINKC - MENUITEM "A&brir Ligação numa Nova Janela", IDM_FOLLOWLINKN - MENUITEM "&Guardar Ligação como...", IDM_SAVETARGET - MENUITEM "&Imprimir Ligação", IDM_PRINTTARGET + MENUITEM "&Abrir ligação", IDM_FOLLOWLINKC + MENUITEM "A&brir ligação numa nova janela", IDM_FOLLOWLINKN + MENUITEM "&Guardar ligação como...", IDM_SAVETARGET + MENUITEM "&Imprimir ligação", IDM_PRINTTARGET MENUITEM SEPARATOR - MENUITEM "&Mostrar Imagem", IDM_SHOWPICTURE - MENUITEM "G&uardar Vídeo como...", IDM_SAVEPICTURE - MENUITEM "&Definir como Fundo", IDM_SETWALLPAPER - MENUITEM "D&efinir como Item do Ambiente de Trabalho...", IDM_SETDESKTOPITEM + MENUITEM "&Mostrar imagem", IDM_SHOWPICTURE + MENUITEM "G&uardar vídeo como...", IDM_SAVEPICTURE + MENUITEM "&Definir como fundo", IDM_SETWALLPAPER + MENUITEM "D&efinir como item do Ambiente de Trabalho...", IDM_SETDESKTOPITEM MENUITEM SEPARATOR MENUITEM "&Cortar", IDM_CUT MENUITEM "C&opiar", IDM_COPY - MENUITEM "Copiar Atal&ho", IDM_COPYSHORTCUT + MENUITEM "Copiar atal&ho", IDM_COPYSHORTCUT MENUITEM "Co&lar", IDM_PASTE MENUITEM SEPARATOR MENUITEM "Adicionar aos &Favoritos...", IDM_ADDFAVORITES @@ -454,29 +454,29 @@ IDR_BROWSE_CONTEXT_MENU MENU POPUP "Scrollbar Vertical" { - MENUITEM "Scroll Aqui", IDM_SCROLL_HERE + MENUITEM "Scroll aqui", IDM_SCROLL_HERE MENUITEM SEPARATOR MENUITEM "Topo", IDM_SCROLL_TOP MENUITEM "Fundo", IDM_SCROLL_BOTTOM MENUITEM SEPARATOR - MENUITEM "Página Acima", IDM_SCROLL_PAGEUP + MENUITEM "Página acima", IDM_SCROLL_PAGEUP MENUITEM "Página baixo", IDM_SCROLL_PAGEDOWN MENUITEM SEPARATOR - MENUITEM "Scroll Cima", IDM_SCROLL_UP - MENUITEM "Scroll Baixo", IDM_SCROLL_DOWN + MENUITEM "Scroll cima", IDM_SCROLL_UP + MENUITEM "Scroll baixo", IDM_SCROLL_DOWN } POPUP "Horizontal Scrollbar" { - MENUITEM "Scroll Aqui", IDM_SCROLL_HERE + MENUITEM "Scroll aqui", IDM_SCROLL_HERE MENUITEM SEPARATOR - MENUITEM "Canto Esquerdo", IDM_SCROLL_LEFTEDGE - MENUITEM "Canto Direito", IDM_SCROLL_RIGHTEDGE + MENUITEM "Canto esquerdo", IDM_SCROLL_LEFTEDGE + MENUITEM "Canto direito", IDM_SCROLL_RIGHTEDGE MENUITEM SEPARATOR - MENUITEM "Página Esquerda", IDM_SCROLL_PAGELEFT - MENUITEM "Página Direita", IDM_SCROLL_PAGERIGHT + MENUITEM "Página esquerda", IDM_SCROLL_PAGELEFT + MENUITEM "Página direita", IDM_SCROLL_PAGERIGHT MENUITEM SEPARATOR - MENUITEM "Scroll Esquerda", IDM_SCROLL_LEFT - MENUITEM "Scroll Direita", IDM_SCROLL_RIGHT + MENUITEM "Scroll esquerda", IDM_SCROLL_LEFT + MENUITEM "Scroll direita", IDM_SCROLL_RIGHT } } diff --git a/dll/win32/shdoclc/Ro.rc b/dll/win32/shdoclc/Ro.rc index 45a3c8800b6..78b22e92566 100644 --- a/dll/win32/shdoclc/Ro.rc +++ b/dll/win32/shdoclc/Ro.rc @@ -23,12 +23,12 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL #pragma code_page(65001) -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_MESSAGE_BOX_TITLE, "Wine Internet Explorer" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_PRINT_HEADER_TEMPLATE "&w&bPagina &p" /* FIXME: should be "&w&bPagina &p of &P" */ IDS_PRINT_FOOTER_TEMPLATE "&u&b&d" diff --git a/dll/win32/shdoclc/Ru.rc b/dll/win32/shdoclc/Ru.rc index 06ca7193630..ae2eceec970 100644 --- a/dll/win32/shdoclc/Ru.rc +++ b/dll/win32/shdoclc/Ru.rc @@ -23,12 +23,12 @@ LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_MESSAGE_BOX_TITLE, "Wine Internet Explorer" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_PRINT_HEADER_TEMPLATE "&w&bСтраница &p" /* FIXME: should be "&w&bPage &p of &P" */ IDS_PRINT_FOOTER_TEMPLATE "&u&b&d" diff --git a/dll/win32/shdoclc/Si.rc b/dll/win32/shdoclc/Si.rc index c95dc017089..27097d4b263 100644 --- a/dll/win32/shdoclc/Si.rc +++ b/dll/win32/shdoclc/Si.rc @@ -22,12 +22,12 @@ LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT #pragma code_page(65001) -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_MESSAGE_BOX_TITLE, "Wine Internet Explorer" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_PRINT_HEADER_TEMPLATE "&w&bStran &p" /* FIXME: should be "&w&bPage &p of &P" */ IDS_PRINT_FOOTER_TEMPLATE "&u&b&d" diff --git a/dll/win32/shdoclc/Sv.rc b/dll/win32/shdoclc/Sv.rc index 277745d5630..8e233511021 100644 --- a/dll/win32/shdoclc/Sv.rc +++ b/dll/win32/shdoclc/Sv.rc @@ -20,12 +20,12 @@ LANGUAGE LANG_SWEDISH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_MESSAGE_BOX_TITLE, "Wine Internet Explorer" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_PRINT_HEADER_TEMPLATE "&w&bSida &p" /* FIXME: should be "&w&bPage &p of &P" */ IDS_PRINT_FOOTER_TEMPLATE "&u&b&d" diff --git a/dll/win32/shdoclc/Uk.rc b/dll/win32/shdoclc/Uk.rc index ae2356b92b4..dab12150998 100644 --- a/dll/win32/shdoclc/Uk.rc +++ b/dll/win32/shdoclc/Uk.rc @@ -24,12 +24,12 @@ LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_MESSAGE_BOX_TITLE, "Wine Internet Explorer" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_PRINT_HEADER_TEMPLATE "&w&bPage &p" /* FIXME: should be "&w&bPage &p of &P" */ IDS_PRINT_FOOTER_TEMPLATE "&u&b&d" diff --git a/dll/win32/shdoclc/Zh.rc b/dll/win32/shdoclc/Zh.rc index c597676882c..4d4bcfa77c0 100644 --- a/dll/win32/shdoclc/Zh.rc +++ b/dll/win32/shdoclc/Zh.rc @@ -25,12 +25,12 @@ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_MESSAGE_BOX_TITLE, "Wine Internet Explorer" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_PRINT_HEADER_TEMPLATE "&w&bPage &p" /* FIXME: should be "&w&bPage &p of &P" */ IDS_PRINT_FOOTER_TEMPLATE "&u&b&d" @@ -254,12 +254,12 @@ IDR_BROWSE_CONTEXT_MENU MENU LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_MESSAGE_BOX_TITLE, "Wine Internet Explorer" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_PRINT_HEADER_TEMPLATE "&w&bPage &p" /* FIXME: should be "&w&bPage &p of &P" */ IDS_PRINT_FOOTER_TEMPLATE "&u&b&d" diff --git a/dll/win32/shdocvw/En.rc b/dll/win32/shdocvw/En.rc new file mode 100644 index 00000000000..749c849aa3c --- /dev/null +++ b/dll/win32/shdocvw/En.rc @@ -0,0 +1,57 @@ +/* + * Copyright 2010 Alexander N. Sørnes + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include "resource.h" + +LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT + +IDD_BROWSE_OPEN DIALOG 10, 10, 200, 70 +STYLE DS_MODALFRAME | WS_CAPTION +CAPTION "Open URL" +FONT 8, "MS Shell Dlg" +{ + LTEXT "Specify the URL you wish to open in Internet Explorer",-1,25, 5, 150,15 + LTEXT "Open:", -1, 2, 32, 20, 15 + EDITTEXT IDC_BROWSE_OPEN_URL, 25, 30, 160, 13 + DEFPUSHBUTTON "&OK", IDOK, 25, 50, 50, 15 + PUSHBUTTON "&Cancel", IDCANCEL, 85, 50, 50, 15 +} + +IDR_BROWSE_MAIN_MENU MENU +{ + POPUP "&File" + { + POPUP "&New" + { + MENUITEM "&Window" ID_BROWSE_NEW_WINDOW + } + MENUITEM "&Open...", ID_BROWSE_OPEN + MENUITEM "&Save", ID_BROWSE_SAVE + MENUITEM "Save &as...", ID_BROWSE_SAVE_AS + MENUITEM SEPARATOR + MENUITEM "Print &format...", ID_BROWSE_PRINT_FORMAT + MENUITEM "Pr&int...", ID_BROWSE_PRINT + MENUITEM "Print previe&w...", ID_BROWSE_PRINT_PREVIEW + MENUITEM SEPARATOR + MENUITEM "&Properties...", ID_BROWSE_PROPERTIES + } + POPUP "&Help" + { + MENUITEM "&About Internet Explorer...", ID_BROWSE_ABOUT + } +} diff --git a/dll/win32/shdocvw/dochost.c b/dll/win32/shdocvw/dochost.c index 2196eb9c02e..b3db0125700 100644 --- a/dll/win32/shdocvw/dochost.c +++ b/dll/win32/shdocvw/dochost.c @@ -820,5 +820,5 @@ void DocHost_Release(DocHost *This) ConnectionPointContainer_Destroy(&This->cps); - CoTaskMemFree(This->url); + heap_free(This->url); } diff --git a/dll/win32/shdocvw/ie.c b/dll/win32/shdocvw/ie.c index 7b07de6a8a3..9d661ca7071 100644 --- a/dll/win32/shdocvw/ie.c +++ b/dll/win32/shdocvw/ie.c @@ -422,8 +422,25 @@ static HRESULT WINAPI InternetExplorer_get_MenuBar(IWebBrowser2 *iface, VARIANT_ static HRESULT WINAPI InternetExplorer_put_MenuBar(IWebBrowser2 *iface, VARIANT_BOOL Value) { InternetExplorer *This = WEBBROWSER_THIS(iface); - FIXME("(%p)->(%x)\n", This, Value); - return E_NOTIMPL; + HMENU menu = NULL; + + TRACE("(%p)->(%x)\n", This, Value); + + if((menu = GetMenu(This->frame_hwnd))) + DestroyMenu(menu); + + menu = NULL; + + if(Value) + menu = LoadMenuW(shdocvw_hinstance, MAKEINTRESOURCEW(IDR_BROWSE_MAIN_MENU)); + + if(!SetMenu(This->frame_hwnd, menu)) + { + DestroyMenu(menu); + return HRESULT_FROM_WIN32(GetLastError()); + } + + return S_OK; } static HRESULT WINAPI InternetExplorer_get_FullScreen(IWebBrowser2 *iface, VARIANT_BOOL *pbFullScreen) diff --git a/dll/win32/shdocvw/iexplore.c b/dll/win32/shdocvw/iexplore.c index e4e7618eba0..fa643feecfa 100644 --- a/dll/win32/shdocvw/iexplore.c +++ b/dll/win32/shdocvw/iexplore.c @@ -32,6 +32,8 @@ #include "oleidl.h" #include "shdocvw.h" +#include "mshtmcid.h" +#include "shellapi.h" #include "wine/debug.h" @@ -41,6 +43,68 @@ WINE_DEFAULT_DEBUG_CHANNEL(shdocvw); static const WCHAR szIEWinFrame[] = { 'I','E','F','r','a','m','e',0 }; +/* Windows uses "Microsoft Internet Explorer" */ +static const WCHAR wszWineInternetExplorer[] = + {'W','i','n','e',' ','I','n','t','e','r','n','e','t',' ','E','x','p','l','o','r','e','r',0}; + +static INT_PTR CALLBACK ie_dialog_open_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) +{ + static InternetExplorer* This; + + switch(msg) + { + case WM_INITDIALOG: + This = (InternetExplorer*)lparam; + EnableWindow(GetDlgItem(hwnd, IDOK), FALSE); + return TRUE; + + case WM_COMMAND: + switch(LOWORD(wparam)) + { + case IDC_BROWSE_OPEN_URL: + { + HWND hwndurl = GetDlgItem(hwnd, IDC_BROWSE_OPEN_URL); + int len = GetWindowTextLengthW(hwndurl); + + EnableWindow(GetDlgItem(hwnd, IDOK), len ? TRUE : FALSE); + break; + } + case IDOK: + { + HWND hwndurl = GetDlgItem(hwnd, IDC_BROWSE_OPEN_URL); + int len = GetWindowTextLengthW(hwndurl); + + if(len) + { + VARIANT url; + + V_VT(&url) = VT_BSTR; + V_BSTR(&url) = SysAllocStringLen(NULL, len); + + GetWindowTextW(hwndurl, V_BSTR(&url), len); + IWebBrowser2_Navigate2(WEBBROWSER2(This), &url, NULL, NULL, NULL, NULL); + + SysFreeString(V_BSTR(&url)); + } + } + /* fall through */ + case IDCANCEL: + EndDialog(hwnd, wparam); + return TRUE; + } + } + return FALSE; +} + +static void ie_dialog_about(HWND hwnd) +{ + HICON icon = LoadImageW(GetModuleHandleW(0), MAKEINTRESOURCEW(IDI_APPICON), IMAGE_ICON, 48, 48, LR_SHARED); + + ShellAboutW(hwnd, wszWineInternetExplorer, NULL, icon); + + DestroyIcon(icon); +} + static LRESULT iewnd_OnCreate(HWND hwnd, LPCREATESTRUCTW lpcs) { SetWindowLongPtrW(hwnd, 0, (LONG_PTR) lpcs->lpCreateParams); @@ -66,6 +130,38 @@ static LRESULT iewnd_OnDestroy(InternetExplorer *This) return 0; } +static LRESULT CALLBACK iewnd_OnCommand(InternetExplorer *This, HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) +{ + switch(LOWORD(wparam)) + { + case ID_BROWSE_OPEN: + DialogBoxParamW(shdocvw_hinstance, MAKEINTRESOURCEW(IDD_BROWSE_OPEN), hwnd, ie_dialog_open_proc, (LPARAM)This); + break; + + case ID_BROWSE_PRINT: + if(This->doc_host.document) + { + IOleCommandTarget* target; + + if(FAILED(IUnknown_QueryInterface(This->doc_host.document, &IID_IOleCommandTarget, (LPVOID*)&target))) + break; + + IOleCommandTarget_Exec(target, &CGID_MSHTML, IDM_PRINT, OLECMDEXECOPT_DODEFAULT, NULL, NULL); + + IOleCommandTarget_Release(target); + } + break; + + case ID_BROWSE_ABOUT: + ie_dialog_about(hwnd); + break; + + default: + return DefWindowProcW(hwnd, msg, wparam, lparam); + } + return 0; +} + static LRESULT CALLBACK ie_window_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { @@ -79,6 +175,8 @@ ie_window_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) return iewnd_OnDestroy(This); case WM_SIZE: return iewnd_OnSize(This, LOWORD(lparam), HIWORD(lparam)); + case WM_COMMAND: + return iewnd_OnCommand(This, hwnd, msg, wparam, lparam); case WM_DOCHOSTTASK: return process_dochost_task(&This->doc_host, lparam); } @@ -114,10 +212,6 @@ void unregister_iewindow_class(void) static void create_frame_hwnd(InternetExplorer *This) { - /* Windows uses "Microsoft Internet Explorer" */ - static const WCHAR wszWineInternetExplorer[] = - {'W','i','n','e',' ','I','n','t','e','r','n','e','t',' ','E','x','p','l','o','r','e','r',0}; - This->frame_hwnd = CreateWindowExW( WS_EX_WINDOWEDGE, szIEWinFrame, wszWineInternetExplorer, @@ -136,21 +230,30 @@ static IWebBrowser2 *create_ie_window(LPCSTR cmdline) return NULL; IWebBrowser2_put_Visible(wb, VARIANT_TRUE); + IWebBrowser2_put_MenuBar(wb, VARIANT_TRUE); if(!*cmdline) { IWebBrowser2_GoHome(wb); }else { VARIANT var_url; DWORD len; + int cmdlen; if(!strncasecmp(cmdline, "-nohome", 7)) cmdline += 7; + while(*cmdline == ' ' || *cmdline == '\t') + cmdline++; + cmdlen = lstrlenA(cmdline); + if(cmdlen > 2 && cmdline[0] == '"' && cmdline[cmdlen-1] == '"') { + cmdline++; + cmdlen -= 2; + } V_VT(&var_url) = VT_BSTR; - len = MultiByteToWideChar(CP_ACP, 0, cmdline, -1, NULL, 0); + len = MultiByteToWideChar(CP_ACP, 0, cmdline, cmdlen, NULL, 0); V_BSTR(&var_url) = SysAllocStringLen(NULL, len); - MultiByteToWideChar(CP_ACP, 0, cmdline, -1, V_BSTR(&var_url), len); + MultiByteToWideChar(CP_ACP, 0, cmdline, cmdlen, V_BSTR(&var_url), len); /* navigate to the first page */ IWebBrowser2_Navigate2(wb, &var_url, NULL, NULL, NULL, NULL); diff --git a/dll/win32/shdocvw/intshcut.c b/dll/win32/shdocvw/intshcut.c index 32dab6dd519..8c17873453a 100644 --- a/dll/win32/shdocvw/intshcut.c +++ b/dll/win32/shdocvw/intshcut.c @@ -361,7 +361,7 @@ static HRESULT WINAPI PersistFile_Load(IPersistFile *pFile, LPCOLESTR pszFileNam { CoTaskMemFree(url); len *= 2; - url = CoTaskMemAlloc(len); + url = CoTaskMemAlloc(len*sizeof(WCHAR)); if (url == NULL) break; r = GetPrivateProfileStringW(str_header, str_URL, NULL, url, len, pszFileName); diff --git a/dll/win32/shdocvw/navigate.c b/dll/win32/shdocvw/navigate.c index 3310cbadf98..6d73fd98b29 100644 --- a/dll/win32/shdocvw/navigate.c +++ b/dll/win32/shdocvw/navigate.c @@ -111,6 +111,23 @@ static void set_status_text(BindStatusCallback *This, LPCWSTR str) IOleInPlaceFrame_SetStatusText(This->doc_host->frame, str); } +static HRESULT set_dochost_url(DocHost *This, const WCHAR *url) +{ + WCHAR *new_url; + + if(url) { + new_url = heap_strdupW(url); + if(!new_url) + return E_OUTOFMEMORY; + }else { + new_url = NULL; + } + + heap_free(This->url); + This->url = new_url; + return S_OK; +} + #define BINDSC_THIS(iface) DEFINE_THIS(BindStatusCallback, BindStatusCallback, iface) static HRESULT WINAPI BindStatusCallback_QueryInterface(IBindStatusCallback *iface, @@ -205,6 +222,8 @@ static HRESULT WINAPI BindStatusCallback_OnProgress(IBindStatusCallback *iface, debugstr_w(szStatusText)); switch(ulStatusCode) { + case BINDSTATUS_REDIRECTING: + return set_dochost_url(This->doc_host, szStatusText); case BINDSTATUS_BEGINDOWNLOADDATA: set_status_text(This, szStatusText); /* FIXME: "Start downloading from site: %s" */ return S_OK; @@ -502,6 +521,7 @@ static HRESULT bind_to_object(DocHost *This, IMoniker *mon, LPCWSTR url, IBindCt IBindStatusCallback *callback) { IUnknown *unk = NULL; + WCHAR *display_name; HRESULT hres; if(mon) { @@ -512,10 +532,16 @@ static HRESULT bind_to_object(DocHost *This, IMoniker *mon, LPCWSTR url, IBindCt return hres; } - CoTaskMemFree(This->url); - hres = IMoniker_GetDisplayName(mon, 0, NULL, &This->url); - if(FAILED(hres)) + hres = IMoniker_GetDisplayName(mon, 0, NULL, &display_name); + if(FAILED(hres)) { FIXME("GetDisplayName failed: %08x\n", hres); + return hres; + } + + hres = set_dochost_url(This, display_name); + CoTaskMemFree(display_name); + if(FAILED(hres)) + return hres; IBindCtx_RegisterObjectParam(bindctx, (LPOLESTR)SZ_HTML_CLIENTSITE_OBJECTPARAM, (IUnknown*)CLIENTSITE(This)); @@ -538,18 +564,12 @@ static HRESULT bind_to_object(DocHost *This, IMoniker *mon, LPCWSTR url, IBindCt static void html_window_navigate(DocHost *This, IHTMLPrivateWindow *window, BSTR url, BSTR headers, SAFEARRAY *post_data) { VARIANT headers_var, post_data_var; - WCHAR *new_url; BSTR empty_str; - DWORD size; HRESULT hres; - size = (strlenW(url)+1)*sizeof(WCHAR); - new_url = CoTaskMemAlloc(size); - if(!new_url) + hres = set_dochost_url(This, url); + if(FAILED(hres)) return; - memcpy(new_url, url, size); - CoTaskMemFree(This->url); - This->url = new_url; empty_str = SysAllocStringLen(NULL, 0); @@ -739,19 +759,12 @@ HRESULT navigate_url(DocHost *This, LPCWSTR url, const VARIANT *Flags, Flags, Flags ? V_VT(Flags) : -1, TargetFrameName, TargetFrameName ? V_VT(TargetFrameName) : -1); - if(PostData) { - TRACE("PostData vt=%d\n", V_VT(PostData)); - - if(V_VT(PostData) == (VT_ARRAY | VT_UI1)) { - SafeArrayAccessData(V_ARRAY(PostData), (void**)&post_data); - post_data_len = V_ARRAY(PostData)->rgsabound[0].cElements; - } + if(PostData && V_VT(PostData) == (VT_ARRAY | VT_UI1)) { + SafeArrayAccessData(V_ARRAY(PostData), (void**)&post_data); + post_data_len = V_ARRAY(PostData)->rgsabound[0].cElements; } - if(Headers && V_VT(Headers) != VT_EMPTY && V_VT(Headers) != VT_ERROR) { - if(V_VT(Headers) != VT_BSTR) - return E_INVALIDARG; - + if(Headers && V_VT(Headers) == VT_BSTR) { headers = V_BSTR(Headers); TRACE("Headers: %s\n", debugstr_w(headers)); } diff --git a/dll/win32/shdocvw/resource.h b/dll/win32/shdocvw/resource.h new file mode 100644 index 00000000000..31a700566fb --- /dev/null +++ b/dll/win32/shdocvw/resource.h @@ -0,0 +1,36 @@ +/* + * Resource identifiers for shdocvw.dll + * + * Copyright 2010 Alexander N. Sørnes + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License 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 IDR_BROWSE_MAIN_MENU 1000 +#define IDD_BROWSE_OPEN 1001 +#define IDC_BROWSE_OPEN_URL 1002 + +#define ID_BROWSE_NEW_WINDOW 275 +#define ID_BROWSE_OPEN 256 +#define ID_BROWSE_SAVE 257 +#define ID_BROWSE_SAVE_AS 258 +#define ID_BROWSE_PRINT_FORMAT 259 +#define ID_BROWSE_PRINT 260 +#define ID_BROWSE_PRINT_PREVIEW 277 +#define ID_BROWSE_PROPERTIES 262 +#define ID_BROWSE_ABOUT 336 diff --git a/dll/win32/shdocvw/shdocvw.h b/dll/win32/shdocvw/shdocvw.h index 1af0365d25d..d1787cb85c4 100644 --- a/dll/win32/shdocvw/shdocvw.h +++ b/dll/win32/shdocvw/shdocvw.h @@ -40,6 +40,8 @@ #include "htiframe.h" #include "wine/unicode.h" +#include "resource.h" + /********************************************************************** * Shell Instance Objects diff --git a/dll/win32/shdocvw/shdocvw.rc b/dll/win32/shdocvw/shdocvw.rc index bb4809b6e08..e7276fff6c4 100644 --- a/dll/win32/shdocvw/shdocvw.rc +++ b/dll/win32/shdocvw/shdocvw.rc @@ -29,7 +29,9 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL /* @makedep: shdocvw_v1.tlb */ -1 TYPELIB LOADONCALL DISCARDABLE shdocvw_v1.tlb +1 TYPELIB shdocvw_v1.tlb /* @makedep: shdocvw.inf */ REGINST REGINST shdocvw.inf + +#include "En.rc" diff --git a/dll/win32/shell32/iconcache.c b/dll/win32/shell32/iconcache.c index bc3ea24d699..a57c33e52c6 100644 --- a/dll/win32/shell32/iconcache.c +++ b/dll/win32/shell32/iconcache.c @@ -171,26 +171,20 @@ static HICON SIC_OverlayShortcutImage(HICON SourceIcon, BOOL large) goto fail; } - /* Copy the source xor bitmap to the target and clear out part of it by using - the shortcut mask */ + /* Copy the source color bitmap to the target */ if (! BitBlt(TargetDC, 0, 0, SourceBitmapInfo.bmWidth, SourceBitmapInfo.bmHeight, - SourceDC, 0, 0, SRCCOPY) || - ! BitBlt(TargetDC, 0, SourceBitmapInfo.bmHeight - ShortcutBitmapInfo.bmHeight, - ShortcutBitmapInfo.bmWidth, ShortcutBitmapInfo.bmHeight, - ShortcutDC, 0, 0, SRCAND)) - { - goto fail; - } + SourceDC, 0, 0, SRCCOPY)) goto fail; - if (NULL == SelectObject(ShortcutDC, ShortcutIconInfo.hbmColor)) goto fail; - - /* Now put in the shortcut xor mask */ - if (! BitBlt(TargetDC, 0, SourceBitmapInfo.bmHeight - ShortcutBitmapInfo.bmHeight, - ShortcutBitmapInfo.bmWidth, ShortcutBitmapInfo.bmHeight, - ShortcutDC, 0, 0, SRCINVERT)) - { - goto fail; - } + /* Copy the source xor bitmap to the target and clear out part of it by using + the shortcut mask */ + if (NULL == SelectObject(ShortcutDC, ShortcutIconInfo.hbmColor)) goto fail; + if (!MaskBlt(TargetDC, 0, SourceBitmapInfo.bmHeight - ShortcutBitmapInfo.bmHeight, + ShortcutBitmapInfo.bmWidth, ShortcutBitmapInfo.bmHeight, + ShortcutDC, 0, 0, ShortcutIconInfo.hbmMask, 0, 0, + MAKEROP4(SRCCOPY, 0xAA0000))) + { + goto fail; + } /* Clean up, we're not goto'ing to 'fail' after this so we can be lazy and not set handles to NULL */ @@ -387,14 +381,14 @@ BOOL SIC_Initialize(void) if (sic_hdpa) { TRACE("Icon cache already initialized\n"); - return TRUE; + return TRUE; } - sic_hdpa = DPA_Create(16); - if (!sic_hdpa) - { + sic_hdpa = DPA_Create(16); + if (!sic_hdpa) + { return FALSE; - } + } hDC = CreateICW(L"DISPLAY", NULL, NULL, NULL); if (!hDC) @@ -439,7 +433,7 @@ BOOL SIC_Initialize(void) 100); if (ShellSmallIconList) { - /* Load the document icon, which is used as the default if an icon isn't found. */ + /* Load the document icon, which is used as the default if an icon isn't found. */ hSm = (HICON)LoadImageW(shell32_hInstance, MAKEINTRESOURCEW(IDI_SHELL_DOCUMENT), IMAGE_ICON, @@ -459,7 +453,7 @@ BOOL SIC_Initialize(void) } if (ShellBigIconList) - { + { hLg = (HICON)LoadImageW(shell32_hInstance, MAKEINTRESOURCEW(IDI_SHELL_DOCUMENT), IMAGE_ICON, @@ -470,7 +464,7 @@ BOOL SIC_Initialize(void) { ERR("Failed to load IDI_SHELL_DOCUMENT icon2!\n"); DestroyIcon(hSm); - return FALSE; + return FALSE; } } else @@ -482,9 +476,9 @@ BOOL SIC_Initialize(void) SIC_IconAppend(swShell32Name, IDI_SHELL_DOCUMENT-1, hSm, hLg, 0); SIC_IconAppend(swShell32Name, -IDI_SHELL_DOCUMENT, hSm, hLg, 0); - TRACE("hIconSmall=%p hIconBig=%p\n",ShellSmallIconList, ShellBigIconList); + TRACE("hIconSmall=%p hIconBig=%p\n",ShellSmallIconList, ShellBigIconList); - return TRUE; + return TRUE; } /************************************************************************* * SIC_Destroy @@ -550,7 +544,7 @@ static int SIC_LoadOverlayIcon(int icon_idx) LPWSTR p = wcschr(buffer, ','); if (p) - *p++ = 0; + *p++ = 0; iconPath = buffer; iconIdx = _wtoi(p); diff --git a/dll/win32/shell32/lang/uk-UA.rc b/dll/win32/shell32/lang/uk-UA.rc index 571581510bf..b65aea75945 100644 --- a/dll/win32/shell32/lang/uk-UA.rc +++ b/dll/win32/shell32/lang/uk-UA.rc @@ -156,7 +156,7 @@ FONT 8, "MS Shell Dlg" BEGIN ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE LTEXT " ' , , , ReactOS .", 12289, 36, 11, 182, 18 - LTEXT "&³:", 12305, 3, 39, 29, 10 + LTEXT "&³:", 12305, 3, 39, 32, 10 CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100 DEFPUSHBUTTON "OK", IDOK, 62, 63, 50, 14, WS_TABSTOP PUSHBUTTON "", IDCANCEL, 116, 63, 50, 14, WS_TABSTOP diff --git a/dll/win32/shell32/shelllink.c b/dll/win32/shell32/shelllink.c index ae159cdcdc2..fb60fab4316 100644 --- a/dll/win32/shell32/shelllink.c +++ b/dll/win32/shell32/shelllink.c @@ -134,6 +134,7 @@ typedef struct LPWSTR sComponent; volume_info volume; LPWSTR sLinkPath; + LPWSTR sCurFile; BOOL bRunAs; BOOL bDirty; INT iIdOpen; /* id of the "Open" entry in the context menu */ @@ -186,6 +187,7 @@ static HRESULT ShellLink_UpdatePath(LPCWSTR sPathRel, LPCWSTR path, LPCWSTR sWor /* strdup on the process heap */ static LPWSTR __inline HEAP_strdupAtoW( HANDLE heap, DWORD flags, LPCSTR str) { + assert(str); INT len = MultiByteToWideChar( CP_ACP, 0, str, -1, NULL, 0 ); LPWSTR p = HeapAlloc( heap, flags, len*sizeof (WCHAR) ); if( !p ) @@ -440,12 +442,22 @@ static HRESULT WINAPI IPersistFile_fnSave(IPersistFile* iface, LPCOLESTR pszFile IStream_Release( stm ); if( SUCCEEDED( r ) ) - { + { + if ( This->sLinkPath ) + { + HeapFree(GetProcessHeap(), 0, This->sLinkPath); + } + This->sLinkPath = HeapAlloc(GetProcessHeap(), 0, (wcslen(pszFileName)+1) * sizeof(WCHAR)); + if ( This->sLinkPath ) + { + wcscpy(This->sLinkPath, pszFileName); + } + StartLinkProcessor( pszFileName ); This->bDirty = FALSE; } - else + else { DeleteFileW( pszFileName ); WARN("Failed to create shortcut %s\n", debugstr_w(pszFileName) ); @@ -464,9 +476,27 @@ static HRESULT WINAPI IPersistFile_fnSaveCompleted(IPersistFile* iface, LPCOLEST static HRESULT WINAPI IPersistFile_fnGetCurFile(IPersistFile* iface, LPOLESTR *ppszFileName) { - IShellLinkImpl *This = impl_from_IPersistFile(iface); - FIXME("(%p)\n",This); - return NOERROR; + IShellLinkImpl *This = impl_from_IPersistFile(iface); + + *ppszFileName = NULL; + + if ( !This->sLinkPath) + { + /* IPersistFile::GetCurFile called before IPersistFile::Save */ + return S_FALSE; + } + + *ppszFileName = CoTaskMemAlloc((wcslen(This->sLinkPath)+1) * sizeof(WCHAR)); + if (!*ppszFileName) + { + /* out of memory */ + return E_OUTOFMEMORY; + } + + /* copy last saved filename */ + wcscpy(*ppszFileName, This->sLinkPath); + + return NOERROR; } static const IPersistFileVtbl pfvt = @@ -1355,9 +1385,6 @@ static HRESULT WINAPI IShellLinkA_fnGetPath(IShellLinkA * iface, LPSTR pszFile, TRACE("(%p)->(pfile=%p len=%u find_data=%p flags=%u)(%s)\n", This, pszFile, cchMaxPath, pfd, fFlags, debugstr_w(This->sPath)); - if (This->sComponent || This->sProduct) - return S_FALSE; - if (cchMaxPath) pszFile[0] = 0; if (This->sPath) @@ -1414,10 +1441,13 @@ static HRESULT WINAPI IShellLinkA_fnSetDescription(IShellLinkA * iface, LPCSTR p TRACE("(%p)->(pName=%s)\n", This, pszName); HeapFree(GetProcessHeap(), 0, This->sDescription); - This->sDescription = HEAP_strdupAtoW( GetProcessHeap(), 0, pszName); - if ( !This->sDescription ) - return E_OUTOFMEMORY; + This->sDescription = NULL; + if ( pszName ) { + This->sDescription = HEAP_strdupAtoW( GetProcessHeap(), 0, pszName); + if ( !This->sDescription ) + return E_OUTOFMEMORY; + } This->bDirty = TRUE; return S_OK; @@ -1445,10 +1475,13 @@ static HRESULT WINAPI IShellLinkA_fnSetWorkingDirectory(IShellLinkA * iface, LPC TRACE("(%p)->(dir=%s)\n",This, pszDir); HeapFree(GetProcessHeap(), 0, This->sWorkDir); - This->sWorkDir = HEAP_strdupAtoW( GetProcessHeap(), 0, pszDir); - if ( !This->sWorkDir ) - return E_OUTOFMEMORY; + This->sWorkDir = NULL; + if ( pszDir ) { + This->sWorkDir = HEAP_strdupAtoW( GetProcessHeap(), 0, pszDir); + if ( !This->sWorkDir ) + return E_OUTOFMEMORY; + } This->bDirty = TRUE; return S_OK; @@ -1476,9 +1509,13 @@ static HRESULT WINAPI IShellLinkA_fnSetArguments(IShellLinkA * iface, LPCSTR psz TRACE("(%p)->(args=%s)\n",This, pszArgs); HeapFree(GetProcessHeap(), 0, This->sArgs); - This->sArgs = HEAP_strdupAtoW( GetProcessHeap(), 0, pszArgs); - if( !This->sArgs ) - return E_OUTOFMEMORY; + This->sArgs = NULL; + + if ( pszArgs ) { + This->sArgs = HEAP_strdupAtoW( GetProcessHeap(), 0, pszArgs); + if( !This->sArgs ) + return E_OUTOFMEMORY; + } This->bDirty = TRUE; @@ -1611,9 +1648,13 @@ static HRESULT WINAPI IShellLinkA_fnSetIconLocation(IShellLinkA * iface, LPCSTR TRACE("(%p)->(path=%s iicon=%u)\n",This, pszIconPath, iIcon); HeapFree(GetProcessHeap(), 0, This->sIcoPath); - This->sIcoPath = HEAP_strdupAtoW(GetProcessHeap(), 0, pszIconPath); - if ( !This->sIcoPath ) - return E_OUTOFMEMORY; + This->sIcoPath = NULL; + + if ( pszIconPath ) { + This->sIcoPath = HEAP_strdupAtoW(GetProcessHeap(), 0, pszIconPath); + if ( !This->sIcoPath ) + return E_OUTOFMEMORY; + } This->iIcoNdx = iIcon; This->bDirty = TRUE; @@ -1628,7 +1669,15 @@ static HRESULT WINAPI IShellLinkA_fnSetRelativePath(IShellLinkA * iface, LPCSTR TRACE("(%p)->(path=%s %x)\n",This, pszPathRel, dwReserved); HeapFree(GetProcessHeap(), 0, This->sPathRel); - This->sPathRel = HEAP_strdupAtoW(GetProcessHeap(), 0, pszPathRel); + This->sPathRel = NULL; + + if ( pszPathRel ) { + This->sPathRel = HEAP_strdupAtoW(GetProcessHeap(), 0, pszPathRel); + + if ( !This->sPathRel ) + return E_OUTOFMEMORY; + } + This->bDirty = TRUE; return ShellLink_UpdatePath(This->sPathRel, This->sPath, This->sWorkDir, &This->sPath); diff --git a/dll/win32/shell32/shlfileop.c b/dll/win32/shell32/shlfileop.c index defe95facd6..8fa50417493 100644 --- a/dll/win32/shell32/shlfileop.c +++ b/dll/win32/shell32/shlfileop.c @@ -550,7 +550,7 @@ static DWORD SHNotifyMoveFileW(LPCWSTR src, LPCWSTR dest) return GetLastError(); } -static WINAPI DWORD SHOperationProgressRoutine(LARGE_INTEGER TotalFileSize, LARGE_INTEGER TotalBytesTransferred, LARGE_INTEGER StreamSize, LARGE_INTEGER StreamBytesTransferred, DWORD dwStreamNumber, DWORD dwCallbackReason, HANDLE hSourceFile, HANDLE hDestinationFile, LPVOID lpData) +static DWORD WINAPI SHOperationProgressRoutine(LARGE_INTEGER TotalFileSize, LARGE_INTEGER TotalBytesTransferred, LARGE_INTEGER StreamSize, LARGE_INTEGER StreamBytesTransferred, DWORD dwStreamNumber, DWORD dwCallbackReason, HANDLE hSourceFile, HANDLE hDestinationFile, LPVOID lpData) { FILE_OPERATION_CONTEXT * Context; LARGE_INTEGER Progress; diff --git a/dll/win32/shlwapi/ordinal.c b/dll/win32/shlwapi/ordinal.c index 5f332f38cf7..2bf0e79f1ac 100644 --- a/dll/win32/shlwapi/ordinal.c +++ b/dll/win32/shlwapi/ordinal.c @@ -3246,29 +3246,72 @@ BOOL WINAPI PlaySoundWrapW(LPCWSTR pszSound, HMODULE hmod, DWORD fdwSound) /************************************************************************* * @ [SHLWAPI.294] + * + * Retrieve a key value from an INI file. See GetPrivateProfileString for + * more information. + * + * PARAMS + * appName [I] The section in the INI file that contains the key + * keyName [I] The key to be retrieved + * out [O] The buffer into which the key's value will be copied + * outLen [I] The length of the `out' buffer + * filename [I] The location of the INI file + * + * RETURNS + * Length of string copied into `out'. */ -BOOL WINAPI SHGetIniStringW(LPCWSTR str1, LPCWSTR str2, LPWSTR pStr, DWORD some_len, LPCWSTR lpStr2) +DWORD WINAPI SHGetIniStringW(LPCWSTR appName, LPCWSTR keyName, LPWSTR out, + DWORD outLen, LPCWSTR filename) { - FIXME("(%s,%s,%p,%08x,%s): stub!\n", debugstr_w(str1), debugstr_w(str2), - pStr, some_len, debugstr_w(lpStr2)); - return TRUE; + INT ret; + WCHAR *buf; + + TRACE("(%s,%s,%p,%08x,%s)\n", debugstr_w(appName), debugstr_w(keyName), + out, outLen, debugstr_w(filename)); + + if(outLen == 0) + return 0; + + buf = HeapAlloc(GetProcessHeap(), 0, outLen * sizeof(WCHAR)); + if(!buf){ + *out = 0; + return 0; + } + + ret = GetPrivateProfileStringW(appName, keyName, NULL, buf, outLen, filename); + if(ret) + strcpyW(out, buf); + else + *out = 0; + + HeapFree(GetProcessHeap(), 0, buf); + + return strlenW(out); } /************************************************************************* * @ [SHLWAPI.295] * - * Called by ICQ2000b install via SHDOCVW: - * str1: "InternetShortcut" - * x: some unknown pointer - * str2: "http://free.aol.com/tryaolfree/index.adp?139269" - * str3: "C:\\WINDOWS\\Desktop.new2\\Free AOL & Unlimited Internet.url" + * Set a key value in an INI file. See WritePrivateProfileString for + * more information. * - * In short: this one maybe creates a desktop link :-) + * PARAMS + * appName [I] The section in the INI file that contains the key + * keyName [I] The key to be set + * str [O] The value of the key + * filename [I] The location of the INI file + * + * RETURNS + * Success: TRUE + * Failure: FALSE */ -BOOL WINAPI SHSetIniStringW(LPWSTR str1, LPVOID x, LPWSTR str2, LPWSTR str3) +BOOL WINAPI SHSetIniStringW(LPCWSTR appName, LPCWSTR keyName, LPCWSTR str, + LPCWSTR filename) { - FIXME("(%s, %p, %s, %s), stub.\n", debugstr_w(str1), x, debugstr_w(str2), debugstr_w(str3)); - return TRUE; + TRACE("(%s, %p, %s, %s)\n", debugstr_w(appName), keyName, debugstr_w(str), + debugstr_w(filename)); + + return WritePrivateProfileStringW(appName, keyName, str, filename); } /************************************************************************* @@ -3694,24 +3737,19 @@ BOOL WINAPI GetOpenFileNameWrapW(LPOPENFILENAMEW ofn) */ HRESULT WINAPI SHIShellFolder_EnumObjects(LPSHELLFOLDER lpFolder, HWND hwnd, SHCONTF flags, IEnumIDList **ppenum) { - IPersist *persist; - HRESULT hr; + /* Windows attempts to get an IPersist interface and, if that fails, an + * IPersistFolder interface on the folder passed-in here. If one of those + * interfaces is available, it then calls GetClassID on the folder... and + * then calls IShellFolder_EnumObjects no matter what, even crashing if + * lpFolder isn't actually an IShellFolder object. The purpose of getting + * the ClassID is unknown, so we don't do it here. + * + * For discussion and detailed tests, see: + * "shlwapi: Be less strict on which type of IShellFolder can be enumerated" + * wine-devel mailing list, 3 Jun 2010 + */ - hr = IShellFolder_QueryInterface(lpFolder, &IID_IPersist, (LPVOID)&persist); - if(SUCCEEDED(hr)) - { - CLSID clsid; - hr = IPersist_GetClassID(persist, &clsid); - if(SUCCEEDED(hr)) - { - if(IsEqualCLSID(&clsid, &CLSID_ShellFSFolder)) - hr = IShellFolder_EnumObjects(lpFolder, hwnd, flags, ppenum); - else - hr = E_FAIL; - } - IPersist_Release(persist); - } - return hr; + return IShellFolder_EnumObjects(lpFolder, hwnd, flags, ppenum); } /* INTERNAL: Map from HLS color space to RGB */ diff --git a/dll/win32/shlwapi/shlwapi.rc b/dll/win32/shlwapi/shlwapi.rc index c80099e3cd6..0dd60f80528 100644 --- a/dll/win32/shlwapi/shlwapi.rc +++ b/dll/win32/shlwapi/shlwapi.rc @@ -29,25 +29,25 @@ #include "shlwapi_En.rc" #include "shlwapi_Es.rc" #include "shlwapi_Fi.rc" -#include "shlwapi_Hu.rc" #include "shlwapi_It.rc" #include "shlwapi_Ko.rc" #include "shlwapi_Nl.rc" +#include "shlwapi_No.rc" #include "shlwapi_Pl.rc" -#include "shlwapi_Pt.rc" #include "shlwapi_Sk.rc" #include "shlwapi_Sv.rc" #include "shlwapi_Tr.rc" #include "shlwapi_Uk.rc" -#include "shlwapi_Zh.rc" /* UTF-8 */ #include "shlwapi_De.rc" #include "shlwapi_Fr.rc" +#include "shlwapi_Hu.rc" #include "shlwapi_Ja.rc" #include "shlwapi_Lt.rc" -#include "shlwapi_No.rc" +#include "shlwapi_Pt.rc" #include "shlwapi_Ro.rc" #include "shlwapi_Ru.rc" #include "shlwapi_Si.rc" +#include "shlwapi_Zh.rc" diff --git a/dll/win32/shlwapi/shlwapi.spec b/dll/win32/shlwapi/shlwapi.spec index 268a2e20145..a277f50736a 100644 --- a/dll/win32/shlwapi/shlwapi.spec +++ b/dll/win32/shlwapi/shlwapi.spec @@ -550,10 +550,10 @@ @ stdcall AssocIsDangerous(long) @ stdcall AssocQueryKeyA(long long str ptr ptr) @ stdcall AssocQueryKeyW(long long wstr ptr ptr) -@ stdcall AssocQueryStringA(long long ptr ptr str ptr) -@ stdcall AssocQueryStringByKeyA(long long ptr ptr str ptr) -@ stdcall AssocQueryStringByKeyW(long long ptr ptr wstr ptr) -@ stdcall AssocQueryStringW(long long ptr ptr wstr ptr) +@ stdcall AssocQueryStringA(long long ptr ptr ptr ptr) +@ stdcall AssocQueryStringByKeyA(long long ptr ptr ptr ptr) +@ stdcall AssocQueryStringByKeyW(long long ptr ptr ptr ptr) +@ stdcall AssocQueryStringW(long long ptr ptr ptr ptr) @ stdcall ChrCmpIA(long long) @ stdcall ChrCmpIW(long long) @ stdcall ColorAdjustLuma(long long long) @@ -801,6 +801,8 @@ @ stdcall StrStrA(str str) @ stdcall StrStrIA(str str) @ stdcall StrStrIW(wstr wstr) +@ stdcall StrStrNW(wstr wstr long) +@ stdcall StrStrNIW(wstr wstr long) @ stdcall StrStrW(wstr wstr) @ stdcall StrToIntA(str) @ stdcall StrToIntExA(str long ptr) diff --git a/dll/win32/shlwapi/shlwapi_Da.rc b/dll/win32/shlwapi/shlwapi_Da.rc index 7e34d55e4a2..bfbe9a20d80 100644 --- a/dll/win32/shlwapi/shlwapi_Da.rc +++ b/dll/win32/shlwapi/shlwapi_Da.rc @@ -1,5 +1,5 @@ /* - * English resources for shlwapi + * Danish resources for shlwapi * * Copyright 2008 Jens Albretsen * @@ -22,7 +22,7 @@ LANGUAGE LANG_DANISH, SUBLANG_DEFAULT -IDD_ERR_DIALOG DIALOG MOVEABLE DISCARDABLE 0, 0, 220, 60 +IDD_ERR_DIALOG DIALOG 0, 0, 220, 60 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Fejl!" FONT 8, "MS Shell Dlg" @@ -36,7 +36,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON L"&Nej", IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_BYTES_FORMAT "%ld bytes" IDS_TIME_INTERVAL_HOURS " hr" diff --git a/dll/win32/shlwapi/shlwapi_De.rc b/dll/win32/shlwapi/shlwapi_De.rc index 452e01a2e99..c473e00fbb7 100644 --- a/dll/win32/shlwapi/shlwapi_De.rc +++ b/dll/win32/shlwapi/shlwapi_De.rc @@ -24,7 +24,7 @@ LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL -IDD_ERR_DIALOG DIALOG MOVEABLE DISCARDABLE 0, 0, 220, 60 +IDD_ERR_DIALOG DIALOG 0, 0, 220, 60 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Fehler!" FONT 8, "MS Shell Dlg" @@ -38,7 +38,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON L"&Nein", IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_BYTES_FORMAT "%ld Bytes" IDS_TIME_INTERVAL_HOURS " Std" diff --git a/dll/win32/shlwapi/shlwapi_En.rc b/dll/win32/shlwapi/shlwapi_En.rc index 9eb67ecd881..8418f0eff7a 100644 --- a/dll/win32/shlwapi/shlwapi_En.rc +++ b/dll/win32/shlwapi/shlwapi_En.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT -IDD_ERR_DIALOG DIALOG MOVEABLE DISCARDABLE 0, 0, 220, 60 +IDD_ERR_DIALOG DIALOG 0, 0, 220, 60 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Error!" FONT 8, "MS Shell Dlg" @@ -36,7 +36,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON L"&No", IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_BYTES_FORMAT "%ld bytes" IDS_TIME_INTERVAL_HOURS " hr" diff --git a/dll/win32/shlwapi/shlwapi_Es.rc b/dll/win32/shlwapi/shlwapi_Es.rc index ceb3cf0648d..4de3cb22d21 100644 --- a/dll/win32/shlwapi/shlwapi_Es.rc +++ b/dll/win32/shlwapi/shlwapi_Es.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL -IDD_ERR_DIALOG DIALOG MOVEABLE DISCARDABLE 0, 0, 220, 60 +IDD_ERR_DIALOG DIALOG 0, 0, 220, 60 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Error!" FONT 8, "MS Shell Dlg" @@ -36,7 +36,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON L"&No", IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_BYTES_FORMAT "%ld bytes" IDS_TIME_INTERVAL_HOURS " hr" diff --git a/dll/win32/shlwapi/shlwapi_Fi.rc b/dll/win32/shlwapi/shlwapi_Fi.rc index 947a34494d5..13dff2ca647 100644 --- a/dll/win32/shlwapi/shlwapi_Fi.rc +++ b/dll/win32/shlwapi/shlwapi_Fi.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_FINNISH, SUBLANG_DEFAULT -IDD_ERR_DIALOG DIALOG MOVEABLE DISCARDABLE 0, 0, 220, 60 +IDD_ERR_DIALOG DIALOG 0, 0, 220, 60 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Virhe!" FONT 8, "MS Shell Dlg" @@ -36,7 +36,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON L"&Ei", IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_BYTES_FORMAT "%ld bytes" IDS_TIME_INTERVAL_HOURS " hr" diff --git a/dll/win32/shlwapi/shlwapi_Fr.rc b/dll/win32/shlwapi/shlwapi_Fr.rc index 81939d916c6..6623a359743 100644 --- a/dll/win32/shlwapi/shlwapi_Fr.rc +++ b/dll/win32/shlwapi/shlwapi_Fr.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL -IDD_ERR_DIALOG DIALOG MOVEABLE DISCARDABLE 0, 0, 220, 60 +IDD_ERR_DIALOG DIALOG 0, 0, 220, 60 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Erreur !" FONT 8, "MS Shell Dlg" @@ -39,10 +39,10 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON L"&Non", IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_BYTES_FORMAT "%ld bytes" - IDS_TIME_INTERVAL_HOURS " hr" + IDS_TIME_INTERVAL_HOURS " h" IDS_TIME_INTERVAL_MINUTES " min" - IDS_TIME_INTERVAL_SECONDS " sec" + IDS_TIME_INTERVAL_SECONDS " s" } diff --git a/dll/win32/shlwapi/shlwapi_Hu.rc b/dll/win32/shlwapi/shlwapi_Hu.rc index 92f2f417466..c8ffa5aa296 100644 --- a/dll/win32/shlwapi/shlwapi_Hu.rc +++ b/dll/win32/shlwapi/shlwapi_Hu.rc @@ -1,7 +1,7 @@ /* * Hungarian resources for shlwapi * - * Copyright 2006 Andras Kovacs + * Copyright 2006-2010 Andras Kovacs * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -20,26 +20,29 @@ #include "resource.h" +/* UTF-8 */ +#pragma code_page(65001) + LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT -IDD_ERR_DIALOG DIALOG MOVEABLE DISCARDABLE 0, 0, 220, 60 +IDD_ERR_DIALOG DIALOG 0, 0, 220, 60 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Hiba!" FONT 8, "MS Shell Dlg" { LTEXT "", IDS_ERR_USER_MSG2, 15, 5, 28, 20 LTEXT "", IDS_ERR_USER_MSG, 15, 5, 210, 8 - CHECKBOX "Ne jelen&tse meg ezt az zenetet ismt", IDC_ERR_DONT_SHOW, 5, 20, 210, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP + CHECKBOX "Ne jelen&tse meg ezt az zenetet mgegyszer", IDC_ERR_DONT_SHOW, 5, 20, 210, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP PUSHBUTTON L"&OK", IDOK, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON L"&Mgse", IDCANCEL, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON L"&Igen", IDYES, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON L"&Nem", IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP } -STRINGTABLE DISCARDABLE +STRINGTABLE { - IDS_BYTES_FORMAT "%ld bytes" - IDS_TIME_INTERVAL_HOURS " hr" - IDS_TIME_INTERVAL_MINUTES " min" - IDS_TIME_INTERVAL_SECONDS " sec" + IDS_BYTES_FORMAT "%ld bjt" + IDS_TIME_INTERVAL_HOURS " ra" + IDS_TIME_INTERVAL_MINUTES " perc" + IDS_TIME_INTERVAL_SECONDS " mp" } diff --git a/dll/win32/shlwapi/shlwapi_It.rc b/dll/win32/shlwapi/shlwapi_It.rc index d591e10fbaa..ea1851308e3 100644 --- a/dll/win32/shlwapi/shlwapi_It.rc +++ b/dll/win32/shlwapi/shlwapi_It.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL -IDD_ERR_DIALOG DIALOG MOVEABLE DISCARDABLE 0, 0, 220, 60 +IDD_ERR_DIALOG DIALOG 0, 0, 220, 60 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Errore!" FONT 8, "MS Shell Dlg" @@ -36,7 +36,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON L"&No", IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_BYTES_FORMAT "%ld bytes" IDS_TIME_INTERVAL_HOURS " hr" diff --git a/dll/win32/shlwapi/shlwapi_Ja.rc b/dll/win32/shlwapi/shlwapi_Ja.rc index 7e3e1f74c2b..32eabd6b5a8 100644 --- a/dll/win32/shlwapi/shlwapi_Ja.rc +++ b/dll/win32/shlwapi/shlwapi_Ja.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT -IDD_ERR_DIALOG DIALOG MOVEABLE DISCARDABLE 0, 0, 220, 60 +IDD_ERR_DIALOG DIALOG 0, 0, 220, 60 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "エラー!" FONT 9, "MS Shell Dlg" @@ -39,7 +39,7 @@ FONT 9, "MS Shell Dlg" PUSHBUTTON L"いいえ(&N)", IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_BYTES_FORMAT "%ld bytes" IDS_TIME_INTERVAL_HOURS " hr" diff --git a/dll/win32/shlwapi/shlwapi_Ko.rc b/dll/win32/shlwapi/shlwapi_Ko.rc index 1e618e3924f..b209496dd92 100644 --- a/dll/win32/shlwapi/shlwapi_Ko.rc +++ b/dll/win32/shlwapi/shlwapi_Ko.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT -IDD_ERR_DIALOG DIALOG MOVEABLE DISCARDABLE 0, 0, 220, 60 +IDD_ERR_DIALOG DIALOG 0, 0, 220, 60 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "!" FONT 9, "MS Shell Dlg" @@ -37,7 +37,7 @@ FONT 9, "MS Shell Dlg" } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_BYTES_FORMAT "%ld Ʈ" IDS_TIME_INTERVAL_HOURS "" diff --git a/dll/win32/shlwapi/shlwapi_Lt.rc b/dll/win32/shlwapi/shlwapi_Lt.rc index 78d69cb9bb1..7ddbbeae96f 100644 --- a/dll/win32/shlwapi/shlwapi_Lt.rc +++ b/dll/win32/shlwapi/shlwapi_Lt.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL -IDD_ERR_DIALOG DIALOG MOVEABLE DISCARDABLE 0, 0, 220, 60 +IDD_ERR_DIALOG DIALOG 0, 0, 220, 60 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Klaida!" FONT 8, "MS Shell Dlg" @@ -39,7 +39,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON L"&Ne", IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_BYTES_FORMAT "%ld baitai" IDS_TIME_INTERVAL_HOURS " val" diff --git a/dll/win32/shlwapi/shlwapi_Nl.rc b/dll/win32/shlwapi/shlwapi_Nl.rc index 5ca2f9603b3..82ef57da192 100644 --- a/dll/win32/shlwapi/shlwapi_Nl.rc +++ b/dll/win32/shlwapi/shlwapi_Nl.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL -IDD_ERR_DIALOG DIALOG MOVEABLE DISCARDABLE 0, 0, 220, 60 +IDD_ERR_DIALOG DIALOG 0, 0, 220, 60 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Fout!" FONT 8, "MS Shell Dlg" @@ -36,7 +36,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON L"&Nee", IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_BYTES_FORMAT "%ld bytes" IDS_TIME_INTERVAL_HOURS " hr" diff --git a/dll/win32/shlwapi/shlwapi_No.rc b/dll/win32/shlwapi/shlwapi_No.rc index 7a1e4421501..7f7d321af5a 100644 --- a/dll/win32/shlwapi/shlwapi_No.rc +++ b/dll/win32/shlwapi/shlwapi_No.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_NORWEGIAN, SUBLANG_NORWEGIAN_BOKMAL -IDD_ERR_DIALOG DIALOG MOVEABLE DISCARDABLE 0, 0, 220, 60 +IDD_ERR_DIALOG DIALOG 0, 0, 220, 60 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Feil" FONT 8, "MS Shell Dlg" @@ -36,7 +36,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON L"&Nei", IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_BYTES_FORMAT "%ld byte" IDS_TIME_INTERVAL_HOURS " hr" diff --git a/dll/win32/shlwapi/shlwapi_Pl.rc b/dll/win32/shlwapi/shlwapi_Pl.rc index 8cbad8562b0..9e72ee0f7e3 100644 --- a/dll/win32/shlwapi/shlwapi_Pl.rc +++ b/dll/win32/shlwapi/shlwapi_Pl.rc @@ -1,5 +1,5 @@ /* - * English resources for shlwapi + * Polish resources for shlwapi * * Copyright 2004 Jon Griffiths * Copyright 2006 Mikolaj Zalewski @@ -23,7 +23,7 @@ LANGUAGE LANG_POLISH, SUBLANG_DEFAULT -IDD_ERR_DIALOG DIALOG MOVEABLE DISCARDABLE 0, 0, 220, 60 +IDD_ERR_DIALOG DIALOG 0, 0, 220, 60 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Bd!" FONT 8, "MS Shell Dlg" @@ -37,7 +37,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON L"&Nie", IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_BYTES_FORMAT "%ld bajtw" IDS_TIME_INTERVAL_HOURS " godz." diff --git a/dll/win32/shlwapi/shlwapi_Pt.rc b/dll/win32/shlwapi/shlwapi_Pt.rc index 70b6e65036f..6014fcc6e2c 100644 --- a/dll/win32/shlwapi/shlwapi_Pt.rc +++ b/dll/win32/shlwapi/shlwapi_Pt.rc @@ -3,6 +3,7 @@ * * Copyright 2004 Marcelo Duarte * Copyright 2006 Amrico Jos Melo + * Copyright 2010 Gustavo Henrique Milar * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -21,25 +22,11 @@ #include "resource.h" -LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN +#pragma code_page(65001) -IDD_ERR_DIALOG DIALOG MOVEABLE DISCARDABLE 0, 0, 220, 60 -STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Erro!" -FONT 8, "MS Shell Dlg" -{ - LTEXT "", IDS_ERR_USER_MSG2, 15, 5, 28, 20 - LTEXT "", IDS_ERR_USER_MSG, 15, 5, 210, 8 - CHECKBOX "No &me mostre essa mensagem novamente", IDC_ERR_DONT_SHOW, 5, 20, 210, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&OK", IDOK, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&Cancelar", IDCANCEL, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&Sim", IDYES, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&No", IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP -} +LANGUAGE LANG_PORTUGUESE, SUBLANG_NEUTRAL -LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE - -IDD_ERR_DIALOG DIALOG MOVEABLE DISCARDABLE 0, 0, 220, 60 +IDD_ERR_DIALOG DIALOG 0, 0, 220, 60 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Erro!" FONT 8, "MS Shell Dlg" @@ -53,20 +40,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON L"&No", IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP } - -LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN - -STRINGTABLE DISCARDABLE -{ - IDS_BYTES_FORMAT "%ld bytes" - IDS_TIME_INTERVAL_HOURS " hr" - IDS_TIME_INTERVAL_MINUTES " min" - IDS_TIME_INTERVAL_SECONDS " sec" -} - -LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE - -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_BYTES_FORMAT "%ld bytes" IDS_TIME_INTERVAL_HOURS " hr" diff --git a/dll/win32/shlwapi/shlwapi_Ro.rc b/dll/win32/shlwapi/shlwapi_Ro.rc index 74e52d84880..21b3bf04f78 100644 --- a/dll/win32/shlwapi/shlwapi_Ro.rc +++ b/dll/win32/shlwapi/shlwapi_Ro.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL #pragma code_page(65001) -IDD_ERR_DIALOG DIALOG MOVEABLE DISCARDABLE 0, 0, 220, 60 +IDD_ERR_DIALOG DIALOG 0, 0, 220, 60 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Eroare!" FONT 8, "MS Shell Dlg" @@ -37,7 +37,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON L"&Nu", IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_BYTES_FORMAT "%ld octeți" IDS_TIME_INTERVAL_HOURS " ore" diff --git a/dll/win32/shlwapi/shlwapi_Ru.rc b/dll/win32/shlwapi/shlwapi_Ru.rc index 42f097cab6e..e8d36aaab3b 100644 --- a/dll/win32/shlwapi/shlwapi_Ru.rc +++ b/dll/win32/shlwapi/shlwapi_Ru.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT -IDD_ERR_DIALOG DIALOG MOVEABLE DISCARDABLE 0, 0, 220, 60 +IDD_ERR_DIALOG DIALOG 0, 0, 220, 60 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Ошибка!" FONT 8, "MS Shell Dlg" @@ -39,7 +39,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON L"&Нет", IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_BYTES_FORMAT "%ld байт" IDS_TIME_INTERVAL_HOURS " час" diff --git a/dll/win32/shlwapi/shlwapi_Si.rc b/dll/win32/shlwapi/shlwapi_Si.rc index 1837d1cd2d0..eaa047c2af2 100644 --- a/dll/win32/shlwapi/shlwapi_Si.rc +++ b/dll/win32/shlwapi/shlwapi_Si.rc @@ -24,7 +24,7 @@ LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT -IDD_ERR_DIALOG DIALOG MOVEABLE DISCARDABLE 0, 0, 220, 60 +IDD_ERR_DIALOG DIALOG 0, 0, 220, 60 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Napak!" FONT 8, "MS Shell Dlg" @@ -38,7 +38,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON L"&Ne", IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_BYTES_FORMAT "%ld bajtov" IDS_TIME_INTERVAL_HOURS " ur" diff --git a/dll/win32/shlwapi/shlwapi_Sk.rc b/dll/win32/shlwapi/shlwapi_Sk.rc index 2533d95c800..52ccf349cca 100644 --- a/dll/win32/shlwapi/shlwapi_Sk.rc +++ b/dll/win32/shlwapi/shlwapi_Sk.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT -IDD_ERR_DIALOG DIALOG MOVEABLE DISCARDABLE 0, 0, 220, 60 +IDD_ERR_DIALOG DIALOG 0, 0, 220, 60 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Chyba!" FONT 8, "MS Shell Dlg" @@ -36,7 +36,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON L"&Nie", IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_BYTES_FORMAT "%ld bajtov" IDS_TIME_INTERVAL_HOURS " hod." diff --git a/dll/win32/shlwapi/shlwapi_Sv.rc b/dll/win32/shlwapi/shlwapi_Sv.rc index 2aa19b9617d..6d6994fad38 100644 --- a/dll/win32/shlwapi/shlwapi_Sv.rc +++ b/dll/win32/shlwapi/shlwapi_Sv.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_SWEDISH, SUBLANG_NEUTRAL -IDD_ERR_DIALOG DIALOG MOVEABLE DISCARDABLE 0, 0, 220, 60 +IDD_ERR_DIALOG DIALOG 0, 0, 220, 60 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Fel!" FONT 8, "MS Shell Dlg" @@ -36,7 +36,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON L"&Nej", IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_BYTES_FORMAT "%ld byte" IDS_TIME_INTERVAL_HOURS " h" diff --git a/dll/win32/shlwapi/shlwapi_Tr.rc b/dll/win32/shlwapi/shlwapi_Tr.rc index 437ad28b283..4a41c615469 100644 --- a/dll/win32/shlwapi/shlwapi_Tr.rc +++ b/dll/win32/shlwapi/shlwapi_Tr.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT -IDD_ERR_DIALOG DIALOG MOVEABLE DISCARDABLE 0, 0, 220, 60 +IDD_ERR_DIALOG DIALOG 0, 0, 220, 60 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Hata!" FONT 8, "MS Shell Dlg" @@ -36,7 +36,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON L"&Hayr", IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_BYTES_FORMAT "%ld bytes" IDS_TIME_INTERVAL_HOURS " hr" diff --git a/dll/win32/shlwapi/shlwapi_Uk.rc b/dll/win32/shlwapi/shlwapi_Uk.rc index 485f7cc02b7..e468c4ac451 100644 --- a/dll/win32/shlwapi/shlwapi_Uk.rc +++ b/dll/win32/shlwapi/shlwapi_Uk.rc @@ -22,7 +22,7 @@ LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT -IDD_ERR_DIALOG DIALOG MOVEABLE DISCARDABLE 0, 0, 220, 60 +IDD_ERR_DIALOG DIALOG 0, 0, 220, 60 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "!" FONT 8, "MS Shell Dlg" @@ -36,7 +36,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON L"&ͳ", IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_BYTES_FORMAT "%ld " IDS_TIME_INTERVAL_HOURS " " diff --git a/dll/win32/shlwapi/shlwapi_Zh.rc b/dll/win32/shlwapi/shlwapi_Zh.rc index 83c2c08ecaa..33961fb10a9 100644 --- a/dll/win32/shlwapi/shlwapi_Zh.rc +++ b/dll/win32/shlwapi/shlwapi_Zh.rc @@ -25,7 +25,7 @@ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED -IDD_ERR_DIALOG DIALOG MOVEABLE DISCARDABLE 0, 0, 220, 60 +IDD_ERR_DIALOG DIALOG 0, 0, 220, 60 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "错误!" FONT 9, "MS Shell Dlg" @@ -39,7 +39,7 @@ FONT 9, "MS Shell Dlg" PUSHBUTTON L"否(&N)", IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_BYTES_FORMAT "%ld 字节" IDS_TIME_INTERVAL_HOURS " 小时" @@ -49,7 +49,7 @@ STRINGTABLE DISCARDABLE LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL -IDD_ERR_DIALOG DIALOG MOVEABLE DISCARDABLE 0, 0, 220, 60 +IDD_ERR_DIALOG DIALOG 0, 0, 220, 60 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "錯誤!" FONT 9, "MS Shell Dlg" @@ -63,7 +63,7 @@ FONT 9, "MS Shell Dlg" PUSHBUTTON L"否(&N)", IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP } -STRINGTABLE DISCARDABLE +STRINGTABLE { IDS_BYTES_FORMAT "%ld 字節" IDS_TIME_INTERVAL_HOURS " 小時" diff --git a/dll/win32/shlwapi/string.c b/dll/win32/shlwapi/string.c index a0269b6cb37..1609c3812b1 100644 --- a/dll/win32/shlwapi/string.c +++ b/dll/win32/shlwapi/string.c @@ -91,7 +91,7 @@ static void FillNumberFmt(NUMBERFMTW *fmt, LPWSTR decimal_buffer, int decimal_bu * Format an integer according to the current locale * * RETURNS - * The number of bytes written on success or 0 on failure + * The number of characters written on success or 0 on failure */ static int FormatInt(LONGLONG qdwValue, LPWSTR pszBuf, int cchBuf) { @@ -124,7 +124,7 @@ static int FormatInt(LONGLONG qdwValue, LPWSTR pszBuf, int cchBuf) * after the decimal point * * RETURNS - * The number of bytes written on success or 0 on failure + * The number of characters written on success or 0 on failure */ static int FormatDouble(double value, int decimals, LPWSTR pszBuf, int cchBuf) { @@ -584,7 +584,9 @@ LPSTR WINAPI StrStrA(LPCSTR lpszStr, LPCSTR lpszSearch) */ LPWSTR WINAPI StrStrW(LPCWSTR lpszStr, LPCWSTR lpszSearch) { - if (!lpszStr || !lpszSearch) return NULL; + TRACE("(%s, %s)\n", debugstr_w(lpszStr), debugstr_w(lpszSearch)); + + if (!lpszStr || !lpszSearch || !*lpszSearch) return NULL; return strstrW( lpszStr, lpszSearch ); } @@ -707,6 +709,75 @@ LPWSTR WINAPI StrStrIW(LPCWSTR lpszStr, LPCWSTR lpszSearch) return NULL; } +/************************************************************************* + * StrStrNW [SHLWAPI.@] + * + * Find a substring within a string up to a given number of initial characters. + * + * PARAMS + * lpFirst [I] String to search in + * lpSrch [I] String to look for + * cchMax [I] Maximum number of initial search characters + * + * RETURNS + * The start of lpFirst within lpSrch, or NULL if not found. + */ +LPWSTR WINAPI StrStrNW(LPCWSTR lpFirst, LPCWSTR lpSrch, UINT cchMax) +{ + UINT i; + int len; + + TRACE("(%s, %s, %u)\n", debugstr_w(lpFirst), debugstr_w(lpSrch), cchMax); + + if (!lpFirst || !lpSrch || !*lpSrch || !cchMax) + return NULL; + + len = strlenW(lpSrch); + + for (i = cchMax; *lpFirst && (i > 0); i--, lpFirst++) + { + if (!strncmpW(lpFirst, lpSrch, len)) + return (LPWSTR)lpFirst; + } + + return NULL; +} + +/************************************************************************* + * StrStrNIW [SHLWAPI.@] + * + * Find a substring within a string up to a given number of initial characters, + * ignoring case. + * + * PARAMS + * lpFirst [I] String to search in + * lpSrch [I] String to look for + * cchMax [I] Maximum number of initial search characters + * + * RETURNS + * The start of lpFirst within lpSrch, or NULL if not found. + */ +LPWSTR WINAPI StrStrNIW(LPCWSTR lpFirst, LPCWSTR lpSrch, UINT cchMax) +{ + UINT i; + int len; + + TRACE("(%s, %s, %u)\n", debugstr_w(lpFirst), debugstr_w(lpSrch), cchMax); + + if (!lpFirst || !lpSrch || !*lpSrch || !cchMax) + return NULL; + + len = strlenW(lpSrch); + + for (i = cchMax; *lpFirst && (i > 0); i--, lpFirst++) + { + if (!strncmpiW(lpFirst, lpSrch, len)) + return (LPWSTR)lpFirst; + } + + return NULL; +} + /************************************************************************* * StrToIntA [SHLWAPI.@] * diff --git a/dll/win32/shlwapi/url.c b/dll/win32/shlwapi/url.c index d7a36dbec46..2f09bc7836d 100644 --- a/dll/win32/shlwapi/url.c +++ b/dll/win32/shlwapi/url.c @@ -276,10 +276,11 @@ HRESULT WINAPI UrlCanonicalizeW(LPCWSTR pszUrl, LPWSTR pszCanonicalized, LPWSTR lpszUrlCpy, wk2, mp, mp2; INT state; DWORD nByteLen, nLen, nWkLen; - WCHAR slash = '/'; + WCHAR slash = '\0'; static const WCHAR wszFile[] = {'f','i','l','e',':'}; static const WCHAR wszRes[] = {'r','e','s',':'}; + static const WCHAR wszHttp[] = {'h','t','t','p',':'}; static const WCHAR wszLocalhost[] = {'l','o','c','a','l','h','o','s','t'}; static const WCHAR wszFilePrefix[] = {'f','i','l','e',':','/','/','/'}; @@ -299,6 +300,12 @@ HRESULT WINAPI UrlCanonicalizeW(LPCWSTR pszUrl, LPWSTR pszCanonicalized, lpszUrlCpy = HeapAlloc(GetProcessHeap(), 0, nByteLen+sizeof(wszFilePrefix)+sizeof(WCHAR)); + if ((nByteLen >= sizeof(wszHttp) && + !memcmp(wszHttp, pszUrl, sizeof(wszHttp))) || + (nByteLen >= sizeof(wszFile) && + !memcmp(wszFile, pszUrl, sizeof(wszFile)))) + slash = '/'; + if((dwFlags & URL_FILE_USE_PATHURL) && nByteLen >= sizeof(wszFile) && !memcmp(wszFile, pszUrl, sizeof(wszFile))) slash = '\\'; @@ -437,38 +444,38 @@ HRESULT WINAPI UrlCanonicalizeW(LPCWSTR pszUrl, LPWSTR pszCanonicalized, *wk2++ = *wk1; wk1++; - if (*wk1 == '.') { + while (*wk1 == '.') { TRACE("found '/.'\n"); if (wk1[1] == '/' || wk1[1] == '\\') { /* case of /./ -> skip the ./ */ wk1 += 2; } - else if (wk1[1] == '.') { - /* found /.. look for next / */ - TRACE("found '/..'\n"); - if (wk1[2] == '/' || wk1[2] == '\\' ||wk1[2] == '?' - || wk1[2] == '#' || !wk1[2]) { - /* case /../ -> need to backup wk2 */ - TRACE("found '/../'\n"); - *(wk2-1) = '\0'; /* set end of string */ - mp = strrchrW(root, '/'); - mp2 = strrchrW(root, '\\'); - if(mp2 && (!mp || mp2 < mp)) - mp = mp2; - if (mp && (mp >= root)) { - /* found valid backup point */ - wk2 = mp + 1; - if(wk1[2] != '/' && wk1[2] != '\\') - wk1 += 2; - else - wk1 += 3; - } - else { - /* did not find point, restore '/' */ - *(wk2-1) = slash; - } + else if (wk1[1] == '.' && (wk1[2] == '/' + || wk1[2] == '\\' || wk1[2] == '?' + || wk1[2] == '#' || !wk1[2])) { + /* case /../ -> need to backup wk2 */ + TRACE("found '/../'\n"); + *(wk2-1) = '\0'; /* set end of string */ + mp = strrchrW(root, '/'); + mp2 = strrchrW(root, '\\'); + if(mp2 && (!mp || mp2 < mp)) + mp = mp2; + if (mp && (mp >= root)) { + /* found valid backup point */ + wk2 = mp + 1; + if(wk1[2] != '/' && wk1[2] != '\\') + wk1 += 2; + else + wk1 += 3; + } + else { + /* did not find point, restore '/' */ + *(wk2-1) = slash; + break; } } + else + break; } } *wk2 = '\0'; diff --git a/dll/win32/stdole2.tlb/rsrc.rc b/dll/win32/stdole2.tlb/rsrc.rc index 91b1f85aa86..d50667f2378 100644 --- a/dll/win32/stdole2.tlb/rsrc.rc +++ b/dll/win32/stdole2.tlb/rsrc.rc @@ -28,4 +28,4 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL #include "wine/wine_common_ver.rc" /* @makedep: std_ole_v2.tlb */ -1 TYPELIB LOADONCALL DISCARDABLE std_ole_v2.tlb +1 TYPELIB std_ole_v2.tlb diff --git a/dll/win32/stdole32.tlb/rsrc.rc b/dll/win32/stdole32.tlb/rsrc.rc index de506757352..d75d804b0b7 100644 --- a/dll/win32/stdole32.tlb/rsrc.rc +++ b/dll/win32/stdole32.tlb/rsrc.rc @@ -28,4 +28,4 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL #include "wine/wine_common_ver.rc" /* @makedep: std_ole_v1.tlb */ -1 TYPELIB LOADONCALL DISCARDABLE std_ole_v1.tlb +1 TYPELIB std_ole_v1.tlb diff --git a/dll/win32/urlmon/umon.c b/dll/win32/urlmon/umon.c index 9a54e11ea21..fea7b21c471 100644 --- a/dll/win32/urlmon/umon.c +++ b/dll/win32/urlmon/umon.c @@ -733,8 +733,18 @@ HRESULT WINAPI HlinkSimpleNavigateToMoniker(IMoniker *pmkTarget, LPCWSTR szLocation, LPCWSTR szTargetFrameName, IUnknown *pUnk, IBindCtx *pbc, IBindStatusCallback *pbsc, DWORD grfHLNF, DWORD dwReserved) { - FIXME("stub\n"); - return E_NOTIMPL; + LPWSTR target; + HRESULT hres; + + TRACE("\n"); + + hres = IMoniker_GetDisplayName(pmkTarget, pbc, 0, &target); + if(hres == S_OK) + hres = HlinkSimpleNavigateToString( target, szLocation, szTargetFrameName, + pUnk, pbc, pbsc, grfHLNF, dwReserved ); + CoTaskMemFree(target); + + return hres; } /*********************************************************************** diff --git a/dll/win32/urlmon/uri.c b/dll/win32/urlmon/uri.c index df5ca8b1974..82f48a0cae5 100644 --- a/dll/win32/urlmon/uri.c +++ b/dll/win32/urlmon/uri.c @@ -20,11 +20,35 @@ #include "urlmon_main.h" #include "wine/debug.h" +#define NO_SHLWAPI_REG +#include "shlwapi.h" + +#define UINT_MAX 0xffffffff + WINE_DEFAULT_DEBUG_CHANNEL(urlmon); typedef struct { const IUriVtbl *lpIUriVtbl; LONG ref; + + BSTR raw_uri; + + /* Information about the canonicalized URI's buffer. */ + WCHAR *canon_uri; + DWORD canon_size; + DWORD canon_len; + + INT scheme_start; + DWORD scheme_len; + URL_SCHEME scheme_type; + + INT userinfo_start; + DWORD userinfo_len; + INT userinfo_split; + + INT host_start; + DWORD host_len; + Uri_HOST_TYPE host_type; } Uri; typedef struct { @@ -32,6 +56,1111 @@ typedef struct { LONG ref; } UriBuilder; +typedef struct { + BSTR uri; + + BOOL is_relative; + BOOL is_opaque; + BOOL has_implicit_scheme; + BOOL has_implicit_ip; + UINT implicit_ipv4; + + const WCHAR *scheme; + DWORD scheme_len; + URL_SCHEME scheme_type; + + const WCHAR *userinfo; + DWORD userinfo_len; + INT userinfo_split; + + const WCHAR *host; + DWORD host_len; + Uri_HOST_TYPE host_type; +} parse_data; + +static const CHAR hexDigits[] = "0123456789ABCDEF"; + +/* List of scheme types/scheme names that are recognized by the IUri interface as of IE 7. */ +static const struct { + URL_SCHEME scheme; + WCHAR scheme_name[16]; +} recognized_schemes[] = { + {URL_SCHEME_FTP, {'f','t','p',0}}, + {URL_SCHEME_HTTP, {'h','t','t','p',0}}, + {URL_SCHEME_GOPHER, {'g','o','p','h','e','r',0}}, + {URL_SCHEME_MAILTO, {'m','a','i','l','t','o',0}}, + {URL_SCHEME_NEWS, {'n','e','w','s',0}}, + {URL_SCHEME_NNTP, {'n','n','t','p',0}}, + {URL_SCHEME_TELNET, {'t','e','l','n','e','t',0}}, + {URL_SCHEME_WAIS, {'w','a','i','s',0}}, + {URL_SCHEME_FILE, {'f','i','l','e',0}}, + {URL_SCHEME_MK, {'m','k',0}}, + {URL_SCHEME_HTTPS, {'h','t','t','p','s',0}}, + {URL_SCHEME_SHELL, {'s','h','e','l','l',0}}, + {URL_SCHEME_SNEWS, {'s','n','e','w','s',0}}, + {URL_SCHEME_LOCAL, {'l','o','c','a','l',0}}, + {URL_SCHEME_JAVASCRIPT, {'j','a','v','a','s','c','r','i','p','t',0}}, + {URL_SCHEME_VBSCRIPT, {'v','b','s','c','r','i','p','t',0}}, + {URL_SCHEME_ABOUT, {'a','b','o','u','t',0}}, + {URL_SCHEME_RES, {'r','e','s',0}}, + {URL_SCHEME_MSSHELLROOTED, {'m','s','-','s','h','e','l','l','-','r','o','o','t','e','d',0}}, + {URL_SCHEME_MSSHELLIDLIST, {'m','s','-','s','h','e','l','l','-','i','d','l','i','s','t',0}}, + {URL_SCHEME_MSHELP, {'h','c','p',0}}, + {URL_SCHEME_WILDCARD, {'*',0}} +}; + +static inline BOOL is_alpha(WCHAR val) { + return ((val >= 'a' && val <= 'z') || (val >= 'A' && val <= 'Z')); +} + +static inline BOOL is_num(WCHAR val) { + return (val >= '0' && val <= '9'); +} + +/* A URI is implicitly a file path if it begins with + * a drive letter (eg X:) or starts with "\\" (UNC path). + */ +static inline BOOL is_implicit_file_path(const WCHAR *str) { + if(is_alpha(str[0]) && str[1] == ':') + return TRUE; + else if(str[0] == '\\' && str[1] == '\\') + return TRUE; + + return FALSE; +} + +/* Checks if the URI is a hierarchical URI. A hierarchical + * URI is one that has "//" after the scheme. + */ +static BOOL check_hierarchical(const WCHAR **ptr) { + const WCHAR *start = *ptr; + + if(**ptr != '/') + return FALSE; + + ++(*ptr); + if(**ptr != '/') { + *ptr = start; + return FALSE; + } + + ++(*ptr); + return TRUE; +} + +/* unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" */ +static inline BOOL is_unreserved(WCHAR val) { + return (is_alpha(val) || is_num(val) || val == '-' || val == '.' || + val == '_' || val == '~'); +} + +/* sub-delims = "!" / "$" / "&" / "'" / "(" / ")" + * / "*" / "+" / "," / ";" / "=" + */ +static inline BOOL is_subdelim(WCHAR val) { + return (val == '!' || val == '$' || val == '&' || + val == '\'' || val == '(' || val == ')' || + val == '*' || val == '+' || val == ',' || + val == ';' || val == '='); +} + +/* gen-delims = ":" / "/" / "?" / "#" / "[" / "]" / "@" */ +static inline BOOL is_gendelim(WCHAR val) { + return (val == ':' || val == '/' || val == '?' || + val == '#' || val == '[' || val == ']' || + val == '@'); +} + +/* Characters that delimit the end of the authority + * section of a URI. Sometimes a '\\' is considered + * an authority delimeter. + */ +static inline BOOL is_auth_delim(WCHAR val, BOOL acceptSlash) { + return (val == '#' || val == '/' || val == '?' || + val == '\0' || (acceptSlash && val == '\\')); +} + +/* reserved = gen-delims / sub-delims */ +static inline BOOL is_reserved(WCHAR val) { + return (is_subdelim(val) || is_gendelim(val)); +} + +static inline BOOL is_hexdigit(WCHAR val) { + return ((val >= 'a' && val <= 'f') || + (val >= 'A' && val <= 'F') || + (val >= '0' && val <= '9')); +} + +/* Taken from dlls/jscript/lex.c */ +static int hex_to_int(WCHAR val) { + if(val >= '0' && val <= '9') + return val - '0'; + else if(val >= 'a' && val <= 'f') + return val - 'a' + 10; + else if(val >= 'A' && val <= 'F') + return val - 'A' + 10; + + return -1; +} + +/* Helper function for converting a percent encoded string + * representation of a WCHAR value into its actual WCHAR value. If + * the two characters following the '%' aren't valid hex values then + * this function returns the NULL character. + * + * Eg. + * "%2E" will result in '.' being returned by this function. + */ +static WCHAR decode_pct_val(const WCHAR *ptr) { + WCHAR ret = '\0'; + + if(*ptr == '%' && is_hexdigit(*(ptr + 1)) && is_hexdigit(*(ptr + 2))) { + INT a = hex_to_int(*(ptr + 1)); + INT b = hex_to_int(*(ptr + 2)); + + ret = a << 4; + ret += b; + } + + return ret; +} + +/* Helper function for percent encoding a given character + * and storing the encoded value into a given buffer (dest). + * + * It's up to the calling function to ensure that there is + * at least enough space in 'dest' for the percent encoded + * value to be stored (so dest + 3 spaces available). + */ +static inline void pct_encode_val(WCHAR val, WCHAR *dest) { + dest[0] = '%'; + dest[1] = hexDigits[(val >> 4) & 0xf]; + dest[2] = hexDigits[val & 0xf]; +} + +/* Converts an IPv4 address in numerical form into it's fully qualified + * string form. This function returns the number of characters written + * to 'dest'. If 'dest' is NULL this function will return the number of + * characters that would have been written. + * + * It's up to the caller to ensure there's enough space in 'dest' for the + * address. + */ +static DWORD ui2ipv4(WCHAR *dest, UINT address) { + static const WCHAR formatW[] = + {'%','u','.','%','u','.','%','u','.','%','u',0}; + DWORD ret = 0; + UCHAR digits[4]; + + digits[0] = (address >> 24) & 0xff; + digits[1] = (address >> 16) & 0xff; + digits[2] = (address >> 8) & 0xff; + digits[3] = address & 0xff; + + if(!dest) { + WCHAR tmp[16]; + ret = sprintfW(tmp, formatW, digits[0], digits[1], digits[2], digits[3]); + } else + ret = sprintfW(dest, formatW, digits[0], digits[1], digits[2], digits[3]); + + return ret; +} + +/* Checks if the characters pointed to by 'ptr' are + * a percent encoded data octet. + * + * pct-encoded = "%" HEXDIG HEXDIG + */ +static BOOL check_pct_encoded(const WCHAR **ptr) { + const WCHAR *start = *ptr; + + if(**ptr != '%') + return FALSE; + + ++(*ptr); + if(!is_hexdigit(**ptr)) { + *ptr = start; + return FALSE; + } + + ++(*ptr); + if(!is_hexdigit(**ptr)) { + *ptr = start; + return FALSE; + } + + ++(*ptr); + return TRUE; +} + +/* dec-octet = DIGIT ; 0-9 + * / %x31-39 DIGIT ; 10-99 + * / "1" 2DIGIT ; 100-199 + * / "2" %x30-34 DIGIT ; 200-249 + * / "25" %x30-35 ; 250-255 + */ +static BOOL check_dec_octet(const WCHAR **ptr) { + const WCHAR *c1, *c2, *c3; + + c1 = *ptr; + /* A dec-octet must be at least 1 digit long. */ + if(*c1 < '0' || *c1 > '9') + return FALSE; + + ++(*ptr); + + c2 = *ptr; + /* Since the 1 digit requirment was meet, it doesn't + * matter if this is a DIGIT value, it's considered a + * dec-octet. + */ + if(*c2 < '0' || *c2 > '9') + return TRUE; + + ++(*ptr); + + c3 = *ptr; + /* Same explanation as above. */ + if(*c3 < '0' || *c3 > '9') + return TRUE; + + /* Anything > 255 isn't a valid IP dec-octet. */ + if(*c1 >= '2' && *c2 >= '5' && *c3 >= '5') { + *ptr = c1; + return FALSE; + } + + ++(*ptr); + return TRUE; +} + +/* Checks if there is an implicit IPv4 address in the host component of the URI. + * The max value of an implicit IPv4 address is UINT_MAX. + * + * Ex: + * "234567" would be considered an implicit IPv4 address. + */ +static BOOL check_implicit_ipv4(const WCHAR **ptr, UINT *val) { + const WCHAR *start = *ptr; + ULONGLONG ret = 0; + *val = 0; + + while(is_num(**ptr)) { + ret = ret*10 + (**ptr - '0'); + + if(ret > UINT_MAX) { + *ptr = start; + return FALSE; + } + ++(*ptr); + } + + if(*ptr == start) + return FALSE; + + *val = ret; + return TRUE; +} + +/* Checks if the string contains an IPv4 address. + * + * This function has a strict mode or a non-strict mode of operation + * When 'strict' is set to FALSE this function will return TRUE if + * the string contains at least 'dec-octet "." dec-octet' since partial + * IPv4 addresses will be normalized out into full IPv4 addresses. When + * 'strict' is set this function expects there to be a full IPv4 address. + * + * IPv4address = dec-octet "." dec-octet "." dec-octet "." dec-octet + */ +static BOOL check_ipv4address(const WCHAR **ptr, BOOL strict) { + const WCHAR *start = *ptr; + + if(!check_dec_octet(ptr)) { + *ptr = start; + return FALSE; + } + + if(**ptr != '.') { + *ptr = start; + return FALSE; + } + + ++(*ptr); + if(!check_dec_octet(ptr)) { + *ptr = start; + return FALSE; + } + + if(**ptr != '.') { + if(strict) { + *ptr = start; + return FALSE; + } else + return TRUE; + } + + ++(*ptr); + if(!check_dec_octet(ptr)) { + *ptr = start; + return FALSE; + } + + if(**ptr != '.') { + if(strict) { + *ptr = start; + return FALSE; + } else + return TRUE; + } + + ++(*ptr); + if(!check_dec_octet(ptr)) { + *ptr = start; + return FALSE; + } + + /* Found a four digit ip address. */ + return TRUE; +} +/* Tries to parse the scheme name of the URI. + * + * scheme = ALPHA *(ALPHA | NUM | '+' | '-' | '.') as defined by RFC 3896. + * NOTE: Windows accepts a number as the first character of a scheme. + */ +static BOOL parse_scheme_name(const WCHAR **ptr, parse_data *data) { + const WCHAR *start = *ptr; + + data->scheme = NULL; + data->scheme_len = 0; + + while(**ptr) { + if(**ptr == '*' && *ptr == start) { + /* Might have found a wildcard scheme. If it is the next + * char has to be a ':' for it to be a valid URI + */ + ++(*ptr); + break; + } else if(!is_num(**ptr) && !is_alpha(**ptr) && **ptr != '+' && + **ptr != '-' && **ptr != '.') + break; + + (*ptr)++; + } + + if(*ptr == start) + return FALSE; + + /* Schemes must end with a ':' */ + if(**ptr != ':') { + *ptr = start; + return FALSE; + } + + data->scheme = start; + data->scheme_len = *ptr - start; + + ++(*ptr); + return TRUE; +} + +/* Tries to deduce the corresponding URL_SCHEME for the given URI. Stores + * the deduced URL_SCHEME in data->scheme_type. + */ +static BOOL parse_scheme_type(parse_data *data) { + /* If there's scheme data then see if it's a recognized scheme. */ + if(data->scheme && data->scheme_len) { + DWORD i; + + for(i = 0; i < sizeof(recognized_schemes)/sizeof(recognized_schemes[0]); ++i) { + if(lstrlenW(recognized_schemes[i].scheme_name) == data->scheme_len) { + /* Has to be a case insensitive compare. */ + if(!StrCmpNIW(recognized_schemes[i].scheme_name, data->scheme, data->scheme_len)) { + data->scheme_type = recognized_schemes[i].scheme; + return TRUE; + } + } + } + + /* If we get here it means it's not a recognized scheme. */ + data->scheme_type = URL_SCHEME_UNKNOWN; + return TRUE; + } else if(data->is_relative) { + /* Relative URI's have no scheme. */ + data->scheme_type = URL_SCHEME_UNKNOWN; + return TRUE; + } else { + /* Should never reach here! what happened... */ + FIXME("(%p): Unable to determine scheme type for URI %s\n", data, debugstr_w(data->uri)); + return FALSE; + } +} + +/* Tries to parse (or deduce) the scheme_name of a URI. If it can't + * parse a scheme from the URI it will try to deduce the scheme_name and scheme_type + * using the flags specified in 'flags' (if any). Flags that affect how this function + * operates are the Uri_CREATE_ALLOW_* flags. + * + * All parsed/deduced information will be stored in 'data' when the function returns. + * + * Returns TRUE if it was able to successfully parse the information. + */ +static BOOL parse_scheme(const WCHAR **ptr, parse_data *data, DWORD flags) { + static const WCHAR fileW[] = {'f','i','l','e',0}; + static const WCHAR wildcardW[] = {'*',0}; + + /* First check to see if the uri could implicitly be a file path. */ + if(is_implicit_file_path(*ptr)) { + if(flags & Uri_CREATE_ALLOW_IMPLICIT_FILE_SCHEME) { + data->scheme = fileW; + data->scheme_len = lstrlenW(fileW); + data->has_implicit_scheme = TRUE; + + TRACE("(%p %p %x): URI is an implicit file path.\n", ptr, data, flags); + } else { + /* Window's does not consider anything that can implicitly be a file + * path to be a valid URI if the ALLOW_IMPLICIT_FILE_SCHEME flag is not set... + */ + TRACE("(%p %p %x): URI is implicitly a file path, but, the ALLOW_IMPLICIT_FILE_SCHEME flag wasn't set.\n", + ptr, data, flags); + return FALSE; + } + } else if(!parse_scheme_name(ptr, data)) { + /* No Scheme was found, this means it could be: + * a) an implicit Wildcard scheme + * b) a relative URI + * c) a invalid URI. + */ + if(flags & Uri_CREATE_ALLOW_IMPLICIT_WILDCARD_SCHEME) { + data->scheme = wildcardW; + data->scheme_len = lstrlenW(wildcardW); + data->has_implicit_scheme = TRUE; + + TRACE("(%p %p %x): URI is an implicit wildcard scheme.\n", ptr, data, flags); + } else if (flags & Uri_CREATE_ALLOW_RELATIVE) { + data->is_relative = TRUE; + TRACE("(%p %p %x): URI is relative.\n", ptr, data, flags); + } else { + TRACE("(%p %p %x): Malformed URI found. Unable to deduce scheme name.\n", ptr, data, flags); + return FALSE; + } + } + + if(!data->is_relative) + TRACE("(%p %p %x): Found scheme=%s scheme_len=%d\n", ptr, data, flags, + debugstr_wn(data->scheme, data->scheme_len), data->scheme_len); + + if(!parse_scheme_type(data)) + return FALSE; + + TRACE("(%p %p %x): Assigned %d as the URL_SCHEME.\n", ptr, data, flags, data->scheme_type); + return TRUE; +} + +/* Parses the userinfo part of the URI (if it exists). The userinfo field of + * a URI can consist of "username:password@", or just "username@". + * + * RFC def: + * userinfo = *( unreserved / pct-encoded / sub-delims / ":" ) + * + * NOTES: + * 1) If there is more than one ':' in the userinfo part of the URI Windows + * uses the first occurence of ':' to delimit the username and password + * components. + * + * ex: + * ftp://user:pass:word@winehq.org + * + * Would yield, "user" as the username and "pass:word" as the password. + * + * 2) Windows allows any character to appear in the "userinfo" part of + * a URI, as long as it's not an authority delimeter character set. + */ +static void parse_userinfo(const WCHAR **ptr, parse_data *data, DWORD flags) { + data->userinfo = *ptr; + data->userinfo_split = -1; + + while(**ptr != '@') { + if(**ptr == ':' && data->userinfo_split == -1) + data->userinfo_split = *ptr - data->userinfo; + else if(**ptr == '%') { + /* If it's a known scheme type, it has to be a valid percent + * encoded value. + */ + if(!check_pct_encoded(ptr)) { + if(data->scheme_type != URL_SCHEME_UNKNOWN) { + *ptr = data->userinfo; + data->userinfo = NULL; + data->userinfo_split = -1; + + TRACE("(%p %p %x): URI contained no userinfo.\n", ptr, data, flags); + return; + } + } else + continue; + } else if(is_auth_delim(**ptr, data->scheme_type != URL_SCHEME_UNKNOWN)) + break; + + ++(*ptr); + } + + if(**ptr != '@') { + *ptr = data->userinfo; + data->userinfo = NULL; + data->userinfo_split = -1; + + TRACE("(%p %p %x): URI contained no userinfo.\n", ptr, data, flags); + return; + } + + data->userinfo_len = *ptr - data->userinfo; + TRACE("(%p %p %x): Found userinfo=%s userinfo_len=%d split=%d.\n", ptr, data, flags, + debugstr_wn(data->userinfo, data->userinfo_len), data->userinfo_len, data->userinfo_split); + ++(*ptr); +} + +/* Attempts to parse a IPv4 address from the URI. + * + * NOTES: + * Window's normalizes IPv4 addresses, This means there's three + * possibilities for the URI to contain an IPv4 address. + * 1) A well formed address (ex. 192.2.2.2). + * 2) A partially formed address. For example "192.0" would + * normalize to "192.0.0.0" during canonicalization. + * 3) An implicit IPv4 address. For example "256" would + * normalize to "0.0.1.0" during canonicalization. Also + * note that the maximum value for an implicit IP address + * is UINT_MAX, if the value in the URI exceeds this then + * it is not considered an IPv4 address. + */ +static BOOL parse_ipv4address(const WCHAR **ptr, parse_data *data, DWORD flags) { + const BOOL is_unknown = data->scheme_type == URL_SCHEME_UNKNOWN; + data->host = *ptr; + + if(!check_ipv4address(ptr, FALSE)) { + if(!check_implicit_ipv4(ptr, &data->implicit_ipv4)) { + TRACE("(%p %p %x): URI didn't contain anything looking like an IPv4 address.\n", + ptr, data, flags); + *ptr = data->host; + data->host = NULL; + return FALSE; + } else + data->has_implicit_ip = TRUE; + } + + /* Check if what we found is the only part of the host name (if it isn't + * we don't have an IPv4 address). + */ + if(!is_auth_delim(**ptr, !is_unknown) && **ptr != ':') { + *ptr = data->host; + data->host = NULL; + data->has_implicit_ip = FALSE; + return FALSE; + } + + data->host_len = *ptr - data->host; + data->host_type = Uri_HOST_IPV4; + TRACE("(%p %p %x): IPv4 address found. host=%s host_len=%d host_type=%d\n", + ptr, data, flags, debugstr_wn(data->host, data->host_len), + data->host_len, data->host_type); + return TRUE; +} + +/* Parses the host information from the URI. + * + * host = IP-literal / IPv4address / reg-name + */ +static BOOL parse_host(const WCHAR **ptr, parse_data *data, DWORD flags) { + if(!parse_ipv4address(ptr, data, flags)) { + WARN("(%p %p %x): Only IPv4 parsing is implemented so far.\n", ptr, data, flags); + data->host_type = Uri_HOST_UNKNOWN; + } + + /* TODO parse IP-Literal / reg-name. */ + + return TRUE; +} + +/* Parses the authority information from the URI. + * + * authority = [ userinfo "@" ] host [ ":" port ] + */ +static BOOL parse_authority(const WCHAR **ptr, parse_data *data, DWORD flags) { + parse_userinfo(ptr, data, flags); + + if(!parse_host(ptr, data, flags)) + return FALSE; + + return TRUE; +} + +/* Determines how the URI should be parsed after the scheme information. + * + * If the scheme is followed, by "//" then, it is treated as an hierarchical URI + * which then the authority and path information will be parsed out. Otherwise, the + * URI will be treated as an opaque URI which the authority information is not parsed + * out. + * + * RFC 3896 definition of hier-part: + * + * hier-part = "//" authority path-abempty + * / path-absolute + * / path-rootless + * / path-empty + * + * MSDN opaque URI definition: + * scheme ":" path [ "#" fragment ] + * + * NOTES: + * If the URI is of an unknown scheme type and has a "//" following the scheme then it + * is treated as a hierarchical URI, but, if the CREATE_NO_CRACK_UNKNOWN_SCHEMES flag is + * set then it is considered an opaque URI reguardless of what follows the scheme information + * (per MSDN documentation). + */ +static BOOL parse_hierpart(const WCHAR **ptr, parse_data *data, DWORD flags) { + /* Checks if the authority information needs to be parsed. + * + * Relative URI's aren't hierarchical URI's, but, they could trick + * "check_hierarchical" into thinking it is, so we need to explicitly + * make sure it's not relative. Also, if the URI is an implicit file + * scheme it might not contain a "//", but, it's considered hierarchical + * anyways. Wildcard Schemes are always considered hierarchical + */ + if(data->scheme_type == URL_SCHEME_WILDCARD || + data->scheme_type == URL_SCHEME_FILE || + (!data->is_relative && check_hierarchical(ptr))) { + /* Only treat it as a hierarchical URI if the scheme_type is known or + * the Uri_CREATE_NO_CRACK_UNKNOWN_SCHEMES flag is not set. + */ + if(data->scheme_type != URL_SCHEME_UNKNOWN || + !(flags & Uri_CREATE_NO_CRACK_UNKNOWN_SCHEMES)) { + TRACE("(%p %p %x): Treating URI as an hierarchical URI.\n", ptr, data, flags); + data->is_opaque = FALSE; + + /* TODO: Handle hierarchical URI's, parse authority then parse the path. */ + if(!parse_authority(ptr, data, flags)) + return FALSE; + + return TRUE; + } + } + + /* If it reaches here, then the URI will be treated as an opaque + * URI. + */ + + TRACE("(%p %p %x): Treating URI as an opaque URI.\n", ptr, data, flags); + + data->is_opaque = TRUE; + /* TODO: Handle opaque URI's, parse path. */ + return TRUE; +} + +/* Parses and validates the components of the specified by data->uri + * and stores the information it parses into 'data'. + * + * Returns TRUE if it successfully parsed the URI. False otherwise. + */ +static BOOL parse_uri(parse_data *data, DWORD flags) { + const WCHAR *ptr; + const WCHAR **pptr; + + ptr = data->uri; + pptr = &ptr; + + TRACE("(%p %x): BEGINNING TO PARSE URI %s.\n", data, flags, debugstr_w(data->uri)); + + if(!parse_scheme(pptr, data, flags)) + return FALSE; + + if(!parse_hierpart(pptr, data, flags)) + return FALSE; + + TRACE("(%p %x): FINISHED PARSING URI.\n", data, flags); + return TRUE; +} + +/* Canonicalizes the userinfo of the URI represented by the parse_data. + * + * Canonicalization of the userinfo is a simple process. If there are any percent + * encoded characters that fall in the "unreserved" character set, they are decoded + * to their actual value. If a character is not in the "unreserved" or "reserved" sets + * then it is percent encoded. Other than that the characters are copied over without + * change. + */ +static BOOL canonicalize_userinfo(const parse_data *data, Uri *uri, DWORD flags, BOOL computeOnly) { + DWORD i = 0; + + uri->userinfo_start = uri->userinfo_split = -1; + uri->userinfo_len = 0; + + if(!data->userinfo) + /* URI doesn't have userinfo, so nothing to do here. */ + return TRUE; + + uri->userinfo_start = uri->canon_len; + + while(i < data->userinfo_len) { + if(data->userinfo[i] == ':' && uri->userinfo_split == -1) + /* Windows only considers the first ':' as the delimiter. */ + uri->userinfo_split = uri->canon_len - uri->userinfo_start; + else if(data->userinfo[i] == '%') { + /* Only decode % encoded values for known scheme types. */ + if(data->scheme_type != URL_SCHEME_UNKNOWN) { + /* See if the value really needs decoded. */ + WCHAR val = decode_pct_val(data->userinfo + i); + if(is_unreserved(val)) { + if(!computeOnly) + uri->canon_uri[uri->canon_len] = val; + + ++uri->canon_len; + + /* Move pass the hex characters. */ + i += 3; + continue; + } + } + } else if(!is_reserved(data->userinfo[i]) && !is_unreserved(data->userinfo[i]) && + data->userinfo[i] != '\\') { + /* Only percent encode forbidden characters if the NO_ENCODE_FORBIDDEN_CHARACTERS flag + * is NOT set. + */ + if(!(flags & Uri_CREATE_NO_ENCODE_FORBIDDEN_CHARACTERS)) { + if(!computeOnly) + pct_encode_val(data->userinfo[i], uri->canon_uri + uri->canon_len); + + uri->canon_len += 3; + ++i; + continue; + } + } + + if(!computeOnly) + /* Nothing special, so just copy the character over. */ + uri->canon_uri[uri->canon_len] = data->userinfo[i]; + + ++uri->canon_len; + ++i; + } + + uri->userinfo_len = uri->canon_len - uri->userinfo_start; + if(!computeOnly) + TRACE("(%p %p %x %d): Canonicalized userinfo, userinfo_start=%d, userinfo=%s, userinfo_split=%d userinfo_len=%d.\n", + data, uri, flags, computeOnly, uri->userinfo_start, debugstr_wn(uri->canon_uri + uri->userinfo_start, uri->userinfo_len), + uri->userinfo_split, uri->userinfo_len); + + /* Now insert the '@' after the userinfo. */ + if(!computeOnly) + uri->canon_uri[uri->canon_len] = '@'; + + ++uri->canon_len; + return TRUE; +} + +/* Attempts to canonicalize an implicit IPv4 address. */ +static BOOL canonicalize_implicit_ipv4address(const parse_data *data, Uri *uri, DWORD flags, BOOL computeOnly) { + uri->host_start = uri->canon_len; + + TRACE("%u\n", data->implicit_ipv4); + /* For unknown scheme types Window's doesn't convert + * the value into an IP address, but, it still considers + * it an IPv4 address. + */ + if(data->scheme_type == URL_SCHEME_UNKNOWN) { + if(!computeOnly) + memcpy(uri->canon_uri+uri->canon_len, data->host, data->host_len*sizeof(WCHAR)); + uri->canon_len += data->host_len; + } else { + if(!computeOnly) + uri->canon_len += ui2ipv4(uri->canon_uri+uri->canon_len, data->implicit_ipv4); + else + uri->canon_len += ui2ipv4(NULL, data->implicit_ipv4); + } + + uri->host_len = uri->canon_len - uri->host_start; + uri->host_type = Uri_HOST_IPV4; + + if(!computeOnly) + TRACE("%p %p %x %d): Canonicalized implicit IP address=%s len=%d\n", + data, uri, flags, computeOnly, + debugstr_wn(uri->canon_uri+uri->host_start, uri->host_len), + uri->host_len); + + return TRUE; +} + +/* Attempts to canonicalize an IPv4 address. + * + * If the parse_data represents a URI that has an implicit IPv4 address + * (ex. http://256/, this function will convert 256 into 0.0.1.0). If + * the implicit IP address exceeds the value of UINT_MAX (maximum value + * for an IPv4 address) it's canonicalized as if were a reg-name. + * + * If the parse_data contains a partial or full IPv4 address it normalizes it. + * A partial IPv4 address is something like "192.0" and would be normalized to + * "192.0.0.0". With a full (or partial) IPv4 address like "192.002.01.003" would + * be normalized to "192.2.1.3". + * + * NOTES: + * Window's ONLY normalizes IPv4 address for known scheme types (one that isn't + * URL_SCHEME_UNKNOWN). For unknown scheme types, it simply copies the data from + * the original URI into the canonicalized URI, but, it still recognizes URI's + * host type as HOST_IPV4. + */ +static BOOL canonicalize_ipv4address(const parse_data *data, Uri *uri, DWORD flags, BOOL computeOnly) { + if(data->has_implicit_ip) + return canonicalize_implicit_ipv4address(data, uri, flags, computeOnly); + else { + uri->host_start = uri->canon_len; + + /* Windows only normalizes for known scheme types. */ + if(data->scheme_type != URL_SCHEME_UNKNOWN) { + /* parse_data contains a partial or full IPv4 address, so normalize it. */ + DWORD i, octetDigitCount = 0, octetCount = 0; + BOOL octetHasDigit = FALSE; + + for(i = 0; i < data->host_len; ++i) { + if(data->host[i] == '0' && !octetHasDigit) { + /* Can ignore leading zeros if: + * 1) It isn't the last digit of the octet. + * 2) i+1 != data->host_len + * 3) i+1 != '.' + */ + if(octetDigitCount == 2 || + i+1 == data->host_len || + data->host[i+1] == '.') { + if(!computeOnly) + uri->canon_uri[uri->canon_len] = data->host[i]; + ++uri->canon_len; + TRACE("Adding zero\n"); + } + } else if(data->host[i] == '.') { + if(!computeOnly) + uri->canon_uri[uri->canon_len] = data->host[i]; + ++uri->canon_len; + + octetDigitCount = 0; + octetHasDigit = FALSE; + ++octetCount; + } else { + if(!computeOnly) + uri->canon_uri[uri->canon_len] = data->host[i]; + ++uri->canon_len; + + ++octetDigitCount; + octetHasDigit = TRUE; + } + } + + /* Make sure the canonicalized IP address has 4 dec-octets. + * If doesn't add "0" ones until there is 4; + */ + for( ; octetCount < 3; ++octetCount) { + if(!computeOnly) { + uri->canon_uri[uri->canon_len] = '.'; + uri->canon_uri[uri->canon_len+1] = '0'; + } + + uri->canon_len += 2; + } + } else { + /* Windows doesn't normalize addresses in unknown schemes. */ + if(!computeOnly) + memcpy(uri->canon_uri+uri->canon_len, data->host, data->host_len*sizeof(WCHAR)); + uri->canon_len += data->host_len; + } + + uri->host_len = uri->canon_len - uri->host_start; + if(!computeOnly) + TRACE("(%p %p %x %d): Canonicalized IPv4 address, ip=%s len=%d\n", + data, uri, flags, computeOnly, + debugstr_wn(uri->canon_uri+uri->host_start, uri->host_len), + uri->host_len); + } + + return TRUE; +} + +static BOOL canonicalize_host(const parse_data *data, Uri *uri, DWORD flags, BOOL computeOnly) { + uri->host_start = -1; + uri->host_len = 0; + + if(data->host) { + switch(data->host_type) { + case Uri_HOST_IPV4: + uri->host_type = Uri_HOST_IPV4; + if(!canonicalize_ipv4address(data, uri, flags, computeOnly)) + return FALSE; + + break; + default: + WARN("(%p %p %x %d): Canonicalization not supported yet\n", data, + uri, flags, computeOnly); + } + } + + return TRUE; +} + +/* Canonicalizes the authority of the URI represented by the parse_data. */ +static BOOL canonicalize_authority(const parse_data *data, Uri *uri, DWORD flags, BOOL computeOnly) { + if(!canonicalize_userinfo(data, uri, flags, computeOnly)) + return FALSE; + + if(!canonicalize_host(data, uri, flags, computeOnly)) + return FALSE; + + /* TODO Canonicalize port information. */ + + return TRUE; +} + +/* Determines how the URI represented by the parse_data should be canonicalized. + * + * Essentially, if the parse_data represents an hierarchical URI then it calls + * canonicalize_authority and the canonicalization functions for the path. If the + * URI is opaque it canonicalizes the path of the URI. + */ +static BOOL canonicalize_hierpart(const parse_data *data, Uri *uri, DWORD flags, BOOL computeOnly) { + if(!data->is_opaque) { + /* "//" is only added for non-wildcard scheme types. */ + if(data->scheme_type != URL_SCHEME_WILDCARD) { + if(!computeOnly) { + INT pos = uri->canon_len; + + uri->canon_uri[pos] = '/'; + uri->canon_uri[pos+1] = '/'; + } + uri->canon_len += 2; + } + + if(!canonicalize_authority(data, uri, flags, computeOnly)) + return FALSE; + + /* TODO: Canonicalize the path of the URI. */ + + } else { + /* Opaque URI's don't have userinfo. */ + uri->userinfo_start = uri->userinfo_split = -1; + uri->userinfo_len = 0; + } + + return TRUE; +} + +/* Canonicalizes the scheme information specified in the parse_data using the specified flags. */ +static BOOL canonicalize_scheme(const parse_data *data, Uri *uri, DWORD flags, BOOL computeOnly) { + uri->scheme_start = -1; + uri->scheme_len = 0; + + if(!data->scheme) { + /* The only type of URI that doesn't have to have a scheme is a relative + * URI. + */ + if(!data->is_relative) { + FIXME("(%p %p %x): Unable to determine the scheme type of %s.\n", data, + uri, flags, debugstr_w(data->uri)); + return FALSE; + } + } else { + if(!computeOnly) { + DWORD i; + INT pos = uri->canon_len; + + for(i = 0; i < data->scheme_len; ++i) { + /* Scheme name must be lower case after canonicalization. */ + uri->canon_uri[i + pos] = tolowerW(data->scheme[i]); + } + + uri->canon_uri[i + pos] = ':'; + uri->scheme_start = pos; + + TRACE("(%p %p %x): Canonicalized scheme=%s, len=%d.\n", data, uri, flags, + debugstr_wn(uri->canon_uri, uri->scheme_len), data->scheme_len); + } + + /* This happens in both computation modes. */ + uri->canon_len += data->scheme_len + 1; + uri->scheme_len = data->scheme_len; + } + return TRUE; +} + +/* Compute's what the length of the URI specified by the parse_data will be + * after canonicalization occurs using the specified flags. + * + * This function will return a non-zero value indicating the length of the canonicalized + * URI, or -1 on error. + */ +static int compute_canonicalized_length(const parse_data *data, DWORD flags) { + Uri uri; + + memset(&uri, 0, sizeof(Uri)); + + TRACE("(%p %x): Beginning to compute canonicalized length for URI %s\n", data, flags, + debugstr_w(data->uri)); + + if(!canonicalize_scheme(data, &uri, flags, TRUE)) { + ERR("(%p %x): Failed to compute URI scheme length.\n", data, flags); + return -1; + } + + if(!canonicalize_hierpart(data, &uri, flags, TRUE)) { + ERR("(%p %x): Failed to compute URI hierpart length.\n", data, flags); + return -1; + } + + TRACE("(%p %x): Finished computing canonicalized URI length. length=%d\n", data, flags, uri.canon_len); + + return uri.canon_len; +} + +/* Canonicalizes the URI data specified in the parse_data, using the given flags. If the + * canonicalization succeededs it will store all the canonicalization information + * in the pointer to the Uri. + * + * To canonicalize a URI this function first computes what the length of the URI + * specified by the parse_data will be. Once this is done it will then perfom the actual + * canonicalization of the URI. + */ +static HRESULT canonicalize_uri(const parse_data *data, Uri *uri, DWORD flags) { + INT len; + + uri->canon_uri = NULL; + len = uri->canon_size = uri->canon_len = 0; + + TRACE("(%p %p %x): beginning to canonicalize URI %s.\n", data, uri, flags, debugstr_w(data->uri)); + + /* First try to compute the length of the URI. */ + len = compute_canonicalized_length(data, flags); + if(len == -1) { + ERR("(%p %p %x): Could not compute the canonicalized length of %s.\n", data, uri, flags, + debugstr_w(data->uri)); + return E_INVALIDARG; + } + + uri->canon_uri = heap_alloc((len+1)*sizeof(WCHAR)); + if(!uri->canon_uri) + return E_OUTOFMEMORY; + + if(!canonicalize_scheme(data, uri, flags, FALSE)) { + ERR("(%p %p %x): Unable to canonicalize the scheme of the URI.\n", data, uri, flags); + heap_free(uri->canon_uri); + return E_INVALIDARG; + } + uri->scheme_type = data->scheme_type; + + if(!canonicalize_hierpart(data, uri, flags, FALSE)) { + ERR("(%p %p %x): Unable to canonicalize the heirpart of the URI\n", data, uri, flags); + heap_free(uri->canon_uri); + return E_INVALIDARG; + } + + uri->canon_uri[uri->canon_len] = '\0'; + TRACE("(%p %p %x): finished canonicalizing the URI.\n", data, uri, flags); + + return S_OK; +} + #define URI(x) ((IUri*) &(x)->lpIUriVtbl) #define URIBUILDER(x) ((IUriBuilder*) &(x)->lpIUriBuilderVtbl) @@ -74,8 +1203,11 @@ static ULONG WINAPI Uri_Release(IUri *iface) TRACE("(%p) ref=%d\n", This, ref); - if(!ref) + if(!ref) { + SysFreeString(This->raw_uri); + heap_free(This->canon_uri); heap_free(This); + } return ref; } @@ -83,7 +1215,8 @@ static ULONG WINAPI Uri_Release(IUri *iface) static HRESULT WINAPI Uri_GetPropertyBSTR(IUri *iface, Uri_PROPERTY uriProp, BSTR *pbstrProperty, DWORD dwFlags) { Uri *This = URI_THIS(iface); - FIXME("(%p)->(%d %p %x)\n", This, uriProp, pbstrProperty, dwFlags); + HRESULT hres; + TRACE("(%p)->(%d %p %x)\n", This, uriProp, pbstrProperty, dwFlags); if(!pbstrProperty) return E_POINTER; @@ -91,6 +1224,8 @@ static HRESULT WINAPI Uri_GetPropertyBSTR(IUri *iface, Uri_PROPERTY uriProp, BST if(uriProp > Uri_PROPERTY_STRING_LAST) { /* Windows allocates an empty BSTR for invalid Uri_PROPERTY's. */ *pbstrProperty = SysAllocStringLen(NULL, 0); + if(!(*pbstrProperty)) + return E_OUTOFMEMORY; /* It only returns S_FALSE for the ZONE property... */ if(uriProp == Uri_PROPERTY_ZONE) @@ -99,13 +1234,111 @@ static HRESULT WINAPI Uri_GetPropertyBSTR(IUri *iface, Uri_PROPERTY uriProp, BST return S_OK; } - return E_NOTIMPL; + /* Don't have support for flags yet. */ + if(dwFlags) { + FIXME("(%p)->(%d %p %x)\n", This, uriProp, pbstrProperty, dwFlags); + return E_NOTIMPL; + } + + switch(uriProp) { + case Uri_PROPERTY_HOST: + if(This->host_start > -1) { + *pbstrProperty = SysAllocStringLen(This->canon_uri+This->host_start, This->host_len); + hres = S_OK; + } else { + /* Canonicalizing/parsing the host of a URI is only partially + * implemented, so return E_NOTIMPL for now. + */ + FIXME("(%p)->(%d %p %x) Partially implemented\n", This, uriProp, pbstrProperty, dwFlags); + return E_NOTIMPL; + } + + if(!(*pbstrProperty)) + hres = E_OUTOFMEMORY; + + break; + case Uri_PROPERTY_PASSWORD: + if(This->userinfo_split > -1) { + *pbstrProperty = SysAllocStringLen( + This->canon_uri+This->userinfo_start+This->userinfo_split+1, + This->userinfo_len-This->userinfo_split-1); + hres = S_OK; + } else { + *pbstrProperty = SysAllocStringLen(NULL, 0); + hres = S_FALSE; + } + + if(!(*pbstrProperty)) + return E_OUTOFMEMORY; + + break; + case Uri_PROPERTY_RAW_URI: + *pbstrProperty = SysAllocString(This->raw_uri); + if(!(*pbstrProperty)) + hres = E_OUTOFMEMORY; + else + hres = S_OK; + break; + case Uri_PROPERTY_SCHEME_NAME: + if(This->scheme_start > -1) { + *pbstrProperty = SysAllocStringLen(This->canon_uri + This->scheme_start, This->scheme_len); + hres = S_OK; + } else { + *pbstrProperty = SysAllocStringLen(NULL, 0); + hres = S_FALSE; + } + + if(!(*pbstrProperty)) + hres = E_OUTOFMEMORY; + + break; + case Uri_PROPERTY_USER_INFO: + if(This->userinfo_start > -1) { + *pbstrProperty = SysAllocStringLen(This->canon_uri+This->userinfo_start, This->userinfo_len); + hres = S_OK; + } else { + *pbstrProperty = SysAllocStringLen(NULL, 0); + hres = S_FALSE; + } + + if(!(*pbstrProperty)) + hres = E_OUTOFMEMORY; + + break; + case Uri_PROPERTY_USER_NAME: + if(This->userinfo_start > -1) { + /* If userinfo_split is set, that means a password exists + * so the username is only from userinfo_start to userinfo_split. + */ + if(This->userinfo_split > -1) { + *pbstrProperty = SysAllocStringLen(This->canon_uri + This->userinfo_start, This->userinfo_split); + hres = S_OK; + } else { + *pbstrProperty = SysAllocStringLen(This->canon_uri + This->userinfo_start, This->userinfo_len); + hres = S_OK; + } + } else { + *pbstrProperty = SysAllocStringLen(NULL, 0); + hres = S_FALSE; + } + + if(!(*pbstrProperty)) + return E_OUTOFMEMORY; + + break; + default: + FIXME("(%p)->(%d %p %x)\n", This, uriProp, pbstrProperty, dwFlags); + hres = E_NOTIMPL; + } + + return hres; } static HRESULT WINAPI Uri_GetPropertyLength(IUri *iface, Uri_PROPERTY uriProp, DWORD *pcchProperty, DWORD dwFlags) { Uri *This = URI_THIS(iface); - FIXME("(%p)->(%d %p %x)\n", This, uriProp, pcchProperty, dwFlags); + HRESULT hres; + TRACE("(%p)->(%d %p %x)\n", This, uriProp, pcchProperty, dwFlags); if(!pcchProperty) return E_INVALIDARG; @@ -114,13 +1347,59 @@ static HRESULT WINAPI Uri_GetPropertyLength(IUri *iface, Uri_PROPERTY uriProp, D if(uriProp > Uri_PROPERTY_STRING_LAST) return E_INVALIDARG; - return E_NOTIMPL; + /* Don't have support for flags yet. */ + if(dwFlags) { + FIXME("(%p)->(%d %p %x)\n", This, uriProp, pcchProperty, dwFlags); + return E_NOTIMPL; + } + + switch(uriProp) { + case Uri_PROPERTY_HOST: + if(This->host_start == -1) { + /* Canonicalizing/parsing the host of a URI is only partially + * implemented, so return E_NOTIMPL for now. + */ + FIXME("(%p)->(%d %p %x) Partially implemented\n", This, uriProp, pcchProperty, dwFlags); + return E_NOTIMPL; + } + + *pcchProperty = This->host_len; + hres = (This->host_start > -1) ? S_OK : S_FALSE; + break; + case Uri_PROPERTY_PASSWORD: + *pcchProperty = (This->userinfo_split > -1) ? This->userinfo_len-This->userinfo_split-1 : 0; + hres = (This->userinfo_split > -1) ? S_OK : S_FALSE; + break; + case Uri_PROPERTY_RAW_URI: + *pcchProperty = SysStringLen(This->raw_uri); + hres = S_OK; + break; + case Uri_PROPERTY_SCHEME_NAME: + *pcchProperty = This->scheme_len; + hres = (This->scheme_start > -1) ? S_OK : S_FALSE; + break; + case Uri_PROPERTY_USER_INFO: + *pcchProperty = This->userinfo_len; + hres = (This->userinfo_start > -1) ? S_OK : S_FALSE; + break; + case Uri_PROPERTY_USER_NAME: + *pcchProperty = (This->userinfo_split > -1) ? This->userinfo_split : This->userinfo_len; + hres = (This->userinfo_start > -1) ? S_OK : S_FALSE; + break; + default: + FIXME("(%p)->(%d %p %x)\n", This, uriProp, pcchProperty, dwFlags); + hres = E_NOTIMPL; + } + + return hres; } static HRESULT WINAPI Uri_GetPropertyDWORD(IUri *iface, Uri_PROPERTY uriProp, DWORD *pcchProperty, DWORD dwFlags) { Uri *This = URI_THIS(iface); - FIXME("(%p)->(%d %p %x)\n", This, uriProp, pcchProperty, dwFlags); + HRESULT hres; + + TRACE("(%p)->(%d %p %x)\n", This, uriProp, pcchProperty, dwFlags); if(!pcchProperty) return E_INVALIDARG; @@ -140,7 +1419,17 @@ static HRESULT WINAPI Uri_GetPropertyDWORD(IUri *iface, Uri_PROPERTY uriProp, DW return E_INVALIDARG; } - return E_NOTIMPL; + switch(uriProp) { + case Uri_PROPERTY_SCHEME: + *pcchProperty = This->scheme_type; + hres = S_OK; + break; + default: + FIXME("(%p)->(%d %p %x)\n", This, uriProp, pcchProperty, dwFlags); + hres = E_NOTIMPL; + } + + return hres; } static HRESULT WINAPI Uri_HasProperty(IUri *iface, Uri_PROPERTY uriProp, BOOL *pfHasProperty) @@ -222,24 +1511,14 @@ static HRESULT WINAPI Uri_GetFragment(IUri *iface, BSTR *pstrFragment) static HRESULT WINAPI Uri_GetHost(IUri *iface, BSTR *pstrHost) { - Uri *This = URI_THIS(iface); - FIXME("(%p)->(%p)\n", This, pstrHost); - - if(!pstrHost) - return E_POINTER; - - return E_NOTIMPL; + TRACE("(%p)->(%p)\n", iface, pstrHost); + return Uri_GetPropertyBSTR(iface, Uri_PROPERTY_HOST, pstrHost, 0); } static HRESULT WINAPI Uri_GetPassword(IUri *iface, BSTR *pstrPassword) { - Uri *This = URI_THIS(iface); - FIXME("(%p)->(%p)\n", This, pstrPassword); - - if(!pstrPassword) - return E_POINTER; - - return E_NOTIMPL; + TRACE("(%p)->(%p)\n", iface, pstrPassword); + return Uri_GetPropertyBSTR(iface, Uri_PROPERTY_PASSWORD, pstrPassword, 0); } static HRESULT WINAPI Uri_GetPath(IUri *iface, BSTR *pstrPath) @@ -278,45 +1557,29 @@ static HRESULT WINAPI Uri_GetQuery(IUri *iface, BSTR *pstrQuery) static HRESULT WINAPI Uri_GetRawUri(IUri *iface, BSTR *pstrRawUri) { Uri *This = URI_THIS(iface); - FIXME("(%p)->(%p)\n", This, pstrRawUri); + TRACE("(%p)->(%p)\n", This, pstrRawUri); - if(!pstrRawUri) - return E_POINTER; - - return E_NOTIMPL; + /* Just forward the call to GetPropertyBSTR. */ + return Uri_GetPropertyBSTR(iface, Uri_PROPERTY_RAW_URI, pstrRawUri, 0); } static HRESULT WINAPI Uri_GetSchemeName(IUri *iface, BSTR *pstrSchemeName) { Uri *This = URI_THIS(iface); - FIXME("(%p)->(%p)\n", This, pstrSchemeName); - - if(!pstrSchemeName) - return E_POINTER; - - return E_NOTIMPL; + TRACE("(%p)->(%p)\n", This, pstrSchemeName); + return Uri_GetPropertyBSTR(iface, Uri_PROPERTY_SCHEME_NAME, pstrSchemeName, 0); } static HRESULT WINAPI Uri_GetUserInfo(IUri *iface, BSTR *pstrUserInfo) { - Uri *This = URI_THIS(iface); - FIXME("(%p)->(%p)\n", This, pstrUserInfo); - - if(!pstrUserInfo) - return E_POINTER; - - return E_NOTIMPL; + TRACE("(%p)->(%p)\n", iface, pstrUserInfo); + return Uri_GetPropertyBSTR(iface, Uri_PROPERTY_USER_INFO, pstrUserInfo, 0); } static HRESULT WINAPI Uri_GetUserName(IUri *iface, BSTR *pstrUserName) { - Uri *This = URI_THIS(iface); - FIXME("(%p)->(%p)\n", This, pstrUserName); - - if(!pstrUserName) - return E_POINTER; - - return E_NOTIMPL; + TRACE("(%p)->(%p)\n", iface, pstrUserName); + return Uri_GetPropertyBSTR(iface, Uri_PROPERTY_USER_NAME, pstrUserName, 0); } static HRESULT WINAPI Uri_GetHostType(IUri *iface, DWORD *pdwHostType) @@ -344,12 +1607,8 @@ static HRESULT WINAPI Uri_GetPort(IUri *iface, DWORD *pdwPort) static HRESULT WINAPI Uri_GetScheme(IUri *iface, DWORD *pdwScheme) { Uri *This = URI_THIS(iface); - FIXME("(%p)->(%p)\n", This, pdwScheme); - - if(!pdwScheme) - return E_INVALIDARG; - - return E_NOTIMPL; + TRACE("(%p)->(%p)\n", This, pdwScheme); + return Uri_GetPropertyDWORD(iface, Uri_PROPERTY_SCHEME, pdwScheme, 0); } static HRESULT WINAPI Uri_GetZone(IUri *iface, DWORD *pdwZone) @@ -436,6 +1695,8 @@ static const IUriVtbl UriVtbl = { HRESULT WINAPI CreateUri(LPCWSTR pwzURI, DWORD dwFlags, DWORD_PTR dwReserved, IUri **ppURI) { Uri *ret; + HRESULT hr; + parse_data data; TRACE("(%s %x %x %p)\n", debugstr_w(pwzURI), dwFlags, (DWORD)dwReserved, ppURI); @@ -454,6 +1715,34 @@ HRESULT WINAPI CreateUri(LPCWSTR pwzURI, DWORD dwFlags, DWORD_PTR dwReserved, IU ret->lpIUriVtbl = &UriVtbl; ret->ref = 1; + /* Create a copy of pwzURI and store it as the raw_uri. */ + ret->raw_uri = SysAllocString(pwzURI); + if(!ret->raw_uri) { + heap_free(ret); + return E_OUTOFMEMORY; + } + + memset(&data, 0, sizeof(parse_data)); + data.uri = ret->raw_uri; + + /* Validate and parse the URI into it's components. */ + if(!parse_uri(&data, dwFlags)) { + /* Encountered an unsupported or invalid URI */ + SysFreeString(ret->raw_uri); + heap_free(ret); + *ppURI = NULL; + return E_INVALIDARG; + } + + /* Canonicalize the URI. */ + hr = canonicalize_uri(&data, ret, dwFlags); + if(FAILED(hr)) { + SysFreeString(ret->raw_uri); + heap_free(ret); + *ppURI = NULL; + return hr; + } + *ppURI = URI(ret); return S_OK; } diff --git a/dll/win32/user32/windows/font.c b/dll/win32/user32/windows/font.c index a0fede9dbb6..468718c2b1e 100644 --- a/dll/win32/user32/windows/font.c +++ b/dll/win32/user32/windows/font.c @@ -66,7 +66,7 @@ TabbedTextOutA( LPCSTR lpString, int nCount, int nTabPositions, - CONST LPINT lpnTabStopPositions, + CONST INT *lpnTabStopPositions, int nTabOrigin) { LONG ret; @@ -196,7 +196,7 @@ TabbedTextOutW( LPCWSTR lpString, int nCount, int nTabPositions, - CONST LPINT lpnTabStopPositions, + CONST INT *lpnTabStopPositions, int nTabOrigin) { return TEXT_TabbedTextOut(hDC, X, Y, lpString, nCount, nTabPositions, lpnTabStopPositions, nTabOrigin, TRUE); @@ -213,7 +213,7 @@ GetTabbedTextExtentA( LPCSTR lpString, int nCount, int nTabPositions, - CONST LPINT lpnTabStopPositions) + CONST INT *lpnTabStopPositions) { LONG ret; DWORD len = MultiByteToWideChar(CP_ACP, 0, lpString, nCount, NULL, 0); @@ -241,7 +241,7 @@ GetTabbedTextExtentW( LPCWSTR lpString, int nCount, int nTabPositions, - CONST LPINT lpnTabStopPositions) + CONST INT *lpnTabStopPositions) { return TEXT_TabbedTextOut(hDC, 0, 0, lpString, nCount, nTabPositions, lpnTabStopPositions, 0, FALSE); } diff --git a/dll/win32/user32/windows/input.c b/dll/win32/user32/windows/input.c index 4e97b0d4f12..aa9a997f070 100644 --- a/dll/win32/user32/windows/input.c +++ b/dll/win32/user32/windows/input.c @@ -398,7 +398,7 @@ SwapMouseButton( int WINAPI ToAscii(UINT uVirtKey, UINT uScanCode, - CONST PBYTE lpKeyState, + CONST BYTE *lpKeyState, LPWORD lpChar, UINT uFlags) { @@ -412,7 +412,7 @@ ToAscii(UINT uVirtKey, int WINAPI ToAsciiEx(UINT uVirtKey, UINT uScanCode, - CONST PBYTE lpKeyState, + CONST BYTE *lpKeyState, LPWORD lpChar, UINT uFlags, HKL dwhkl) @@ -434,7 +434,7 @@ ToAsciiEx(UINT uVirtKey, int WINAPI ToUnicode(UINT wVirtKey, UINT wScanCode, - CONST PBYTE lpKeyState, + CONST BYTE *lpKeyState, LPWSTR pwszBuff, int cchBuff, UINT wFlags) @@ -450,13 +450,13 @@ ToUnicode(UINT wVirtKey, int WINAPI ToUnicodeEx(UINT wVirtKey, UINT wScanCode, - CONST PBYTE lpKeyState, + CONST BYTE *lpKeyState, LPWSTR pwszBuff, int cchBuff, UINT wFlags, HKL dwhkl) { - return NtUserToUnicodeEx( wVirtKey, wScanCode, lpKeyState, pwszBuff, cchBuff, + return NtUserToUnicodeEx( wVirtKey, wScanCode, (PBYTE)lpKeyState, pwszBuff, cchBuff, wFlags, dwhkl ); } diff --git a/dll/win32/user32/windows/window.c b/dll/win32/user32/windows/window.c index 5f2826a0cdf..468536ee290 100644 --- a/dll/win32/user32/windows/window.c +++ b/dll/win32/user32/windows/window.c @@ -342,18 +342,6 @@ CreateWindowExA(DWORD dwExStyle, POINT mPos[2]; UINT id = 0; HWND top_child; - PWND WndParent; - PCLS pcls; - - if(!(WndParent = ValidateHwnd(hWndParent)) || - !(pcls = DesktopPtrToUser(WndParent->pcls))) - return 0; - - if (pcls->fnid != FNID_MDICLIENT) - { - ERR("WS_EX_MDICHILD, but parent %p is not MDIClient\n", hWndParent); - return 0; - } /* lpParams of WM_[NC]CREATE is different for MDI children. * MDICREATESTRUCT members have the originally passed values. @@ -466,24 +454,6 @@ CreateWindowExW(DWORD dwExStyle, POINT mPos[2]; UINT id = 0; HWND top_child; - PWND WndParent; - PCLS pcls; - - WndParent = ValidateHwnd(hWndParent); - - if(!WndParent) - return 0; - - pcls = DesktopPtrToUser(WndParent->pcls); - - if(!pcls) - return 0; - - if (pcls->fnid != FNID_MDICLIENT) - { - ERR("WS_EX_MDICHILD, but parent %p is not MDIClient\n", hWndParent); - return 0; - } /* lpParams of WM_[NC]CREATE is different for MDI children. * MDICREATESTRUCT members have the originally passed values. diff --git a/dll/win32/usp10/shape.c b/dll/win32/usp10/shape.c index 0a4f5b90771..0018ae5f691 100644 --- a/dll/win32/usp10/shape.c +++ b/dll/win32/usp10/shape.c @@ -185,6 +185,42 @@ typedef struct{ WORD Component[1]; }GSUB_Ligature; +typedef struct{ + WORD SequenceIndex; + WORD LookupListIndex; + +}GSUB_SubstLookupRecord; + +typedef struct{ + WORD SubstFormat; /* = 1 */ + WORD Coverage; + WORD ChainSubRuleSetCount; + WORD ChainSubRuleSet[1]; +}GSUB_ChainContextSubstFormat1; + +typedef struct { + WORD SubstFormat; /* = 3 */ + WORD BacktrackGlyphCount; + WORD Coverage[1]; +}GSUB_ChainContextSubstFormat3_1; + +typedef struct{ + WORD InputGlyphCount; + WORD Coverage[1]; +}GSUB_ChainContextSubstFormat3_2; + +typedef struct{ + WORD LookaheadGlyphCount; + WORD Coverage[1]; +}GSUB_ChainContextSubstFormat3_3; + +typedef struct{ + WORD SubstCount; + GSUB_SubstLookupRecord SubstLookupRecord[1]; +}GSUB_ChainContextSubstFormat3_4; + +static INT GSUB_apply_lookup(const GSUB_LookupList* lookup, INT lookup_index, WORD *glyphs, INT glyph_index, INT write_dir, INT *glyph_count); + /* the orders of joined_forms and contextual_features need to line up */ static const char* contextual_features[] = { @@ -429,6 +465,101 @@ static INT GSUB_apply_LigatureSubst(const GSUB_LookupTable *look, WORD *glyphs, return GSUB_E_NOGLYPH; } +static INT GSUB_apply_ChainContextSubst(const GSUB_LookupList* lookup, const GSUB_LookupTable *look, WORD *glyphs, INT glyph_index, INT write_dir, INT *glyph_count) +{ + int j; + BOOL done = FALSE; + + TRACE("Chaining Contextual Substitution Subtable\n"); + for (j = 0; j < GET_BE_WORD(look->SubTableCount) && !done; j++) + { + const GSUB_ChainContextSubstFormat1 *ccsf1; + int offset; + int dirLookahead = write_dir; + int dirBacktrack = -1 * write_dir; + + offset = GET_BE_WORD(look->SubTable[j]); + ccsf1 = (const GSUB_ChainContextSubstFormat1*)((const BYTE*)look+offset); + if (GET_BE_WORD(ccsf1->SubstFormat) == 1) + { + FIXME(" TODO: subtype 1 (Simple context glyph substitution)\n"); + return -1; + } + else if (GET_BE_WORD(ccsf1->SubstFormat) == 2) + { + FIXME(" TODO: subtype 2 (Class-based Chaining Context Glyph Substitution)\n"); + return -1; + } + else if (GET_BE_WORD(ccsf1->SubstFormat) == 3) + { + int k; + int indexGlyphs; + const GSUB_ChainContextSubstFormat3_1 *ccsf3_1; + const GSUB_ChainContextSubstFormat3_2 *ccsf3_2; + const GSUB_ChainContextSubstFormat3_3 *ccsf3_3; + const GSUB_ChainContextSubstFormat3_4 *ccsf3_4; + int newIndex = glyph_index; + + ccsf3_1 = (const GSUB_ChainContextSubstFormat3_1 *)ccsf1; + + TRACE(" subtype 3 (Coverage-based Chaining Context Glyph Substitution)\n"); + + for (k = 0; k < GET_BE_WORD(ccsf3_1->BacktrackGlyphCount); k++) + { + offset = GET_BE_WORD(ccsf3_1->Coverage[k]); + if (GSUB_is_glyph_covered((const BYTE*)ccsf3_1+offset, glyphs[glyph_index + (dirBacktrack * (k+1))]) == -1) + break; + } + if (k != GET_BE_WORD(ccsf3_1->BacktrackGlyphCount)) + return -1; + TRACE("Matched Backtrack\n"); + + ccsf3_2 = (const GSUB_ChainContextSubstFormat3_2 *)(((LPBYTE)ccsf1)+sizeof(GSUB_ChainContextSubstFormat3_1) + (sizeof(WORD) * (GET_BE_WORD(ccsf3_1->BacktrackGlyphCount)-1))); + + indexGlyphs = GET_BE_WORD(ccsf3_2->InputGlyphCount); + for (k = 0; k < indexGlyphs; k++) + { + offset = GET_BE_WORD(ccsf3_2->Coverage[k]); + if (GSUB_is_glyph_covered((const BYTE*)ccsf3_1+offset, glyphs[glyph_index + (write_dir * k)]) == -1) + break; + } + if (k != indexGlyphs) + return -1; + TRACE("Matched IndexGlyphs\n"); + + ccsf3_3 = (const GSUB_ChainContextSubstFormat3_3 *)(((LPBYTE)ccsf3_2)+sizeof(GSUB_ChainContextSubstFormat3_2) + (sizeof(WORD) * (GET_BE_WORD(ccsf3_2->InputGlyphCount)-1))); + + for (k = 0; k < GET_BE_WORD(ccsf3_3->LookaheadGlyphCount); k++) + { + offset = GET_BE_WORD(ccsf3_3->Coverage[k]); + if (GSUB_is_glyph_covered((const BYTE*)ccsf3_1+offset, glyphs[glyph_index + (dirLookahead * (indexGlyphs + k+1))]) == -1) + break; + } + if (k != GET_BE_WORD(ccsf3_3->LookaheadGlyphCount)) + return -1; + TRACE("Matched LookAhead\n"); + + ccsf3_4 = (const GSUB_ChainContextSubstFormat3_4 *)(((LPBYTE)ccsf3_3)+sizeof(GSUB_ChainContextSubstFormat3_3) + (sizeof(WORD) * (GET_BE_WORD(ccsf3_3->LookaheadGlyphCount)-1))); + + for (k = 0; k < GET_BE_WORD(ccsf3_4->SubstCount); k++) + { + int lookupIndex = GET_BE_WORD(ccsf3_4->SubstLookupRecord[k].LookupListIndex); + int SequenceIndex = GET_BE_WORD(ccsf3_4->SubstLookupRecord[k].SequenceIndex) * write_dir; + + TRACE("SUBST: %i -> %i %i\n",k, SequenceIndex, lookupIndex); + newIndex = GSUB_apply_lookup(lookup, lookupIndex, glyphs, glyph_index + SequenceIndex, write_dir, glyph_count); + if (newIndex == -1) + { + ERR("Chain failed to generate a glyph\n"); + return -1; + } + } + return newIndex + 1; + } + } + return -1; +} + static INT GSUB_apply_lookup(const GSUB_LookupList* lookup, INT lookup_index, WORD *glyphs, INT glyph_index, INT write_dir, INT *glyph_count) { int offset; @@ -443,6 +574,8 @@ static INT GSUB_apply_lookup(const GSUB_LookupList* lookup, INT lookup_index, WO return GSUB_apply_SingleSubst(look, glyphs, glyph_index, write_dir, glyph_count); case 4: return GSUB_apply_LigatureSubst(look, glyphs, glyph_index, write_dir, glyph_count); + case 6: + return GSUB_apply_ChainContextSubst(lookup, look, glyphs, glyph_index, write_dir, glyph_count); default: FIXME("We do not handle SubType %i\n",GET_BE_WORD(look->LookupType)); } diff --git a/dll/win32/usp10/usp10.c b/dll/win32/usp10/usp10.c index cb82f9179c4..51fbbc0c7d9 100644 --- a/dll/win32/usp10/usp10.c +++ b/dll/win32/usp10/usp10.c @@ -1989,9 +1989,3 @@ HRESULT WINAPI ScriptJustify(const SCRIPT_VISATTR *sva, const int *advance, for (i = 0; i < num_glyphs; i++) justify[i] = advance[i]; return S_OK; } - -BOOL gbLpkPresent = FALSE; -VOID WINAPI LpkPresent() -{ - gbLpkPresent = TRUE; /* Turn it on this way! Wine is out of control! */ -} diff --git a/dll/win32/usp10/usp10.spec b/dll/win32/usp10/usp10.spec index 0f7b0aa87c5..5e358707c41 100644 --- a/dll/win32/usp10/usp10.spec +++ b/dll/win32/usp10/usp10.spec @@ -1,4 +1,4 @@ -@ stdcall LpkPresent() +@ stub LpkPresent @ stdcall ScriptApplyDigitSubstitution(ptr ptr ptr) @ stdcall ScriptApplyLogicalWidth(ptr long long ptr ptr ptr ptr ptr ptr) @ stdcall ScriptBreak(ptr long ptr ptr) diff --git a/dll/win32/version/install.c b/dll/win32/version/install.c index 2ecfeb9157e..d5c12eb9fe4 100644 --- a/dll/win32/version/install.c +++ b/dll/win32/version/install.c @@ -182,7 +182,7 @@ DWORD WINAPI VerFindFileA( } } - /* Check to see if the file exists and is inuse by another application */ + /* Check to see if the file exists and is in use by another application */ if (lpszFilename && testFileExistenceA(curDir, lpszFilename, FALSE)) { if (lpszFilename && !testFileExistenceA(curDir, lpszFilename, TRUE)) retval |= VFF_FILEINUSE; diff --git a/dll/win32/version/resource.c b/dll/win32/version/resource.c index e793d0a2d99..3b996d2079b 100644 --- a/dll/win32/version/resource.c +++ b/dll/win32/version/resource.c @@ -42,10 +42,26 @@ #define VS_FILE_INFO 16 #include "wine/unicode.h" -#include "wine/winbase16.h" #include "wine/debug.h" +typedef struct +{ + WORD offset; + WORD length; + WORD flags; + WORD id; + WORD handle; + WORD usage; +} NE_NAMEINFO; + +typedef struct +{ + WORD type_id; + WORD count; + DWORD resloader; +} NE_TYPEINFO; + WINE_DEFAULT_DEBUG_CHANNEL(ver); @@ -67,9 +83,9 @@ static const IMAGE_RESOURCE_DIRECTORY *find_entry_by_id( const IMAGE_RESOURCE_DI while (min <= max) { pos = (min + max) / 2; - if (entry[pos].u.Id == id) - return (const IMAGE_RESOURCE_DIRECTORY *)((const char *)root + entry[pos].u2.s.OffsetToDirectory); - if (entry[pos].u.Id > id) max = pos - 1; + if (entry[pos].u1.Id == id) + return (const IMAGE_RESOURCE_DIRECTORY *)((const char *)root + entry[pos].u2.s3.OffsetToDirectory); + if (entry[pos].u1.Id > id) max = pos - 1; else min = pos + 1; } return NULL; @@ -88,7 +104,7 @@ static const IMAGE_RESOURCE_DIRECTORY *find_entry_default( const IMAGE_RESOURCE_ const IMAGE_RESOURCE_DIRECTORY_ENTRY *entry; entry = (const IMAGE_RESOURCE_DIRECTORY_ENTRY *)(dir + 1); - return (const IMAGE_RESOURCE_DIRECTORY *)((const char *)root + entry->u2.s.OffsetToDirectory); + return (const IMAGE_RESOURCE_DIRECTORY *)((const char *)root + entry->u2.s3.OffsetToDirectory); } diff --git a/dll/win32/windowscodecs/bmpdecode.c b/dll/win32/windowscodecs/bmpdecode.c index 854b3374b02..9cdc8e58e85 100644 --- a/dll/win32/windowscodecs/bmpdecode.c +++ b/dll/win32/windowscodecs/bmpdecode.c @@ -395,32 +395,52 @@ fail: return hr; } +static HRESULT ReadByte(IStream *stream, BYTE *buffer, ULONG buffer_size, + ULONG *cursor, ULONG *bytesread, BYTE *result) +{ + HRESULT hr=S_OK; + + if (*bytesread == 0 || *cursor == *bytesread) + { + hr = IStream_Read(stream, buffer, buffer_size, bytesread); + *cursor = 0; + } + + if (SUCCEEDED(hr)) + { + if (*cursor < *bytesread) + *result = buffer[(*cursor)++]; + else + hr = E_FAIL; + } + + return hr; +} + static HRESULT BmpFrameDecode_ReadRLE8(BmpDecoder* This) { UINT bytesperrow; UINT width, height; - BYTE *rledata, *cursor, *rledataend; - UINT rlesize, datasize, palettesize; + BYTE rledata[4096]; + UINT datasize, palettesize; DWORD palette[256]; UINT x, y; DWORD *bgrdata; HRESULT hr; LARGE_INTEGER offbits; - ULONG bytesread; + ULONG cursor=0, bytesread=0; width = This->bih.bV5Width; height = abs(This->bih.bV5Height); bytesperrow = width * 4; datasize = bytesperrow * height; - rlesize = This->bih.bV5SizeImage; if (This->bih.bV5ClrUsed && This->bih.bV5ClrUsed < 256) palettesize = 4 * This->bih.bV5ClrUsed; else palettesize = 4 * 256; - rledata = HeapAlloc(GetProcessHeap(), 0, rlesize); This->imagedata = HeapAlloc(GetProcessHeap(), 0, datasize); - if (!This->imagedata || !rledata) + if (!This->imagedata) { hr = E_OUTOFMEMORY; goto fail; @@ -439,22 +459,26 @@ static HRESULT BmpFrameDecode_ReadRLE8(BmpDecoder* This) hr = IStream_Seek(This->stream, offbits, STREAM_SEEK_SET, NULL); if (FAILED(hr)) goto fail; - hr = IStream_Read(This->stream, rledata, rlesize, &bytesread); - if (FAILED(hr) || bytesread != rlesize) goto fail; - /* decode RLE */ bgrdata = (DWORD*)This->imagedata; x = 0; y = 0; - rledataend = rledata + rlesize; - cursor = rledata; - while (cursor < rledataend && y < height) + cursor = 0; + bytesread = 0; + while (y < height) { - BYTE length = *cursor++; - if (length == 0) + BYTE length; + hr = ReadByte(This->stream, rledata, 4096, &cursor, &bytesread, &length); + + if (FAILED(hr)) + goto fail; + else if (length == 0) { /* escape code */ - BYTE escape = *cursor++; + BYTE escape; + hr = ReadByte(This->stream, rledata, 4096, &cursor, &bytesread, &escape); + if (FAILED(hr)) + goto fail; switch(escape) { case 0: /* end of line */ @@ -464,37 +488,53 @@ static HRESULT BmpFrameDecode_ReadRLE8(BmpDecoder* This) case 1: /* end of bitmap */ goto end; case 2: /* delta */ - if (cursor < rledataend) - { - x += *cursor++; - y += *cursor++; - } + { + BYTE dx, dy; + hr = ReadByte(This->stream, rledata, 4096, &cursor, &bytesread, &dx); + if (SUCCEEDED(hr)) + hr = ReadByte(This->stream, rledata, 4096, &cursor, &bytesread, &dy); + if (FAILED(hr)) + goto fail; + x += dx; + y += dy; break; + } default: /* absolute mode */ length = escape; - while (cursor < rledataend && length-- && x < width) - bgrdata[y*width + x++] = palette[*cursor++]; - if (escape & 1) cursor++; /* skip pad byte */ + while (length-- && x < width) + { + BYTE index; + hr = ReadByte(This->stream, rledata, 4096, &cursor, &bytesread, &index); + if (FAILED(hr)) + goto fail; + bgrdata[y*width + x++] = palette[index]; + } + if (escape & 1) + hr = ReadByte(This->stream, rledata, 4096, &cursor, &bytesread, &length); /* skip pad byte */ + if (FAILED(hr)) + goto fail; } } else { - DWORD color = palette[*cursor++]; + BYTE index; + DWORD color; + hr = ReadByte(This->stream, rledata, 4096, &cursor, &bytesread, &index); + if (FAILED(hr)) + goto fail; + color = palette[index]; while (length-- && x < width) bgrdata[y*width + x++] = color; } } end: - HeapFree(GetProcessHeap(), 0, rledata); - This->imagedatastart = This->imagedata + (height-1) * bytesperrow; This->stride = -bytesperrow; return S_OK; fail: - HeapFree(GetProcessHeap(), 0, rledata); HeapFree(GetProcessHeap(), 0, This->imagedata); This->imagedata = NULL; if (SUCCEEDED(hr)) hr = E_FAIL; @@ -505,28 +545,26 @@ static HRESULT BmpFrameDecode_ReadRLE4(BmpDecoder* This) { UINT bytesperrow; UINT width, height; - BYTE *rledata, *cursor, *rledataend; - UINT rlesize, datasize, palettesize; + BYTE rledata[4096]; + UINT datasize, palettesize; DWORD palette[16]; UINT x, y; DWORD *bgrdata; HRESULT hr; LARGE_INTEGER offbits; - ULONG bytesread; + ULONG cursor=0, bytesread=0; width = This->bih.bV5Width; height = abs(This->bih.bV5Height); bytesperrow = width * 4; datasize = bytesperrow * height; - rlesize = This->bih.bV5SizeImage; if (This->bih.bV5ClrUsed && This->bih.bV5ClrUsed < 16) palettesize = 4 * This->bih.bV5ClrUsed; else palettesize = 4 * 16; - rledata = HeapAlloc(GetProcessHeap(), 0, rlesize); This->imagedata = HeapAlloc(GetProcessHeap(), 0, datasize); - if (!This->imagedata || !rledata) + if (!This->imagedata) { hr = E_OUTOFMEMORY; goto fail; @@ -545,22 +583,26 @@ static HRESULT BmpFrameDecode_ReadRLE4(BmpDecoder* This) hr = IStream_Seek(This->stream, offbits, STREAM_SEEK_SET, NULL); if (FAILED(hr)) goto fail; - hr = IStream_Read(This->stream, rledata, rlesize, &bytesread); - if (FAILED(hr) || bytesread != rlesize) goto fail; - /* decode RLE */ bgrdata = (DWORD*)This->imagedata; x = 0; y = 0; - rledataend = rledata + rlesize; - cursor = rledata; - while (cursor < rledataend && y < height) + cursor = 0; + bytesread = 0; + while (y < height) { - BYTE length = *cursor++; - if (length == 0) + BYTE length; + hr = ReadByte(This->stream, rledata, 4096, &cursor, &bytesread, &length); + + if (FAILED(hr)) + goto fail; + else if (length == 0) { /* escape code */ - BYTE escape = *cursor++; + BYTE escape; + hr = ReadByte(This->stream, rledata, 4096, &cursor, &bytesread, &escape); + if (FAILED(hr)) + goto fail; switch(escape) { case 0: /* end of line */ @@ -570,31 +612,51 @@ static HRESULT BmpFrameDecode_ReadRLE4(BmpDecoder* This) case 1: /* end of bitmap */ goto end; case 2: /* delta */ - if (cursor < rledataend) - { - x += *cursor++; - y += *cursor++; - } + { + BYTE dx, dy; + hr = ReadByte(This->stream, rledata, 4096, &cursor, &bytesread, &dx); + if (SUCCEEDED(hr)) + hr = ReadByte(This->stream, rledata, 4096, &cursor, &bytesread, &dy); + if (FAILED(hr)) + goto fail; + x += dx; + y += dy; break; + } default: /* absolute mode */ + { + BYTE realsize=0; length = escape; - while (cursor < rledataend && length-- && x < width) + while (length-- && x < width) { - BYTE colors = *cursor++; + BYTE colors; + hr = ReadByte(This->stream, rledata, 4096, &cursor, &bytesread, &colors); + realsize++; + if (FAILED(hr)) + goto fail; bgrdata[y*width + x++] = palette[colors>>4]; if (length-- && x < width) bgrdata[y*width + x++] = palette[colors&0xf]; else break; } - if ((cursor - rledata) & 1) cursor++; /* skip pad byte */ + if (realsize & 1) + hr = ReadByte(This->stream, rledata, 4096, &cursor, &bytesread, &length); /* skip pad byte */ + if (FAILED(hr)) + goto fail; + } } } else { - BYTE colors = *cursor++; - DWORD color1 = palette[colors>>4]; - DWORD color2 = palette[colors&0xf]; + BYTE colors; + DWORD color1; + DWORD color2; + hr = ReadByte(This->stream, rledata, 4096, &cursor, &bytesread, &colors); + if (FAILED(hr)) + goto fail; + color1 = palette[colors>>4]; + color2 = palette[colors&0xf]; while (length-- && x < width) { bgrdata[y*width + x++] = color1; @@ -607,15 +669,12 @@ static HRESULT BmpFrameDecode_ReadRLE4(BmpDecoder* This) } end: - HeapFree(GetProcessHeap(), 0, rledata); - This->imagedatastart = This->imagedata + (height-1) * bytesperrow; This->stride = -bytesperrow; return S_OK; fail: - HeapFree(GetProcessHeap(), 0, rledata); HeapFree(GetProcessHeap(), 0, This->imagedata); This->imagedata = NULL; if (SUCCEEDED(hr)) hr = E_FAIL; diff --git a/dll/win32/winemp3.acm/common.c b/dll/win32/winemp3.acm/common.c deleted file mode 100644 index 91ba51acc47..00000000000 --- a/dll/win32/winemp3.acm/common.c +++ /dev/null @@ -1,261 +0,0 @@ -/* - * Copyright (c) Michael Hipp and other authors of the mpglib project. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#include "config.h" -#include -#include -#include - -#include -#ifdef HAVE_SYS_STAT_H -# include -#endif -#include - -#include "mpg123.h" -#include "wine/debug.h" - -WINE_DEFAULT_DEBUG_CHANNEL(mpeg3); - -static const struct parameter param = { 1 , 1 , 0 , 0 }; - -static const int tabsel_123[2][3][16] = { - { {0,32,64,96,128,160,192,224,256,288,320,352,384,416,448,}, - {0,32,48,56, 64, 80, 96,112,128,160,192,224,256,320,384,}, - {0,32,40,48, 56, 64, 80, 96,112,128,160,192,224,256,320,} }, - - { {0,32,48,56,64,80,96,112,128,144,160,176,192,224,256,}, - {0,8,16,24,32,40,48,56,64,80,96,112,128,144,160,}, - {0,8,16,24,32,40,48,56,64,80,96,112,128,144,160,} } -}; - -static const long freqs[9] = { 44100, 48000, 32000, - 22050, 24000, 16000 , - 11025 , 12000 , 8000 }; - -int bitindex; -unsigned char *wordpointer; -unsigned char *pcm_sample; -int pcm_point = 0; - - -#define HDRCMPMASK 0xfffffd00 - -static int head_check(unsigned long head) -{ - if( (head & 0xffe00000) != 0xffe00000) - return FALSE; - if(!((head>>17)&3)) - return FALSE; - if( ((head>>12)&0xf) == 0xf) - return FALSE; - if( ((head>>10)&0x3) == 0x3 ) - return FALSE; - return TRUE; -} - - -/* - * decode a header and write the information - * into the frame structure - */ -int decode_header(struct frame *fr,unsigned long newhead) -{ - if(head_check(newhead) == FALSE) - return (0); - - if( newhead & (1<<20) ) { - fr->lsf = (newhead & (1<<19)) ? 0x0 : 0x1; - fr->mpeg25 = 0; - } - else { - fr->lsf = 1; - fr->mpeg25 = 1; - } - - fr->lay = 4-((newhead>>17)&3); - if(fr->mpeg25) { - fr->sampling_frequency = 6 + ((newhead>>10)&0x3); - } - else - fr->sampling_frequency = ((newhead>>10)&0x3) + (fr->lsf*3); - fr->error_protection = ((newhead>>16)&0x1)^0x1; - - if(fr->mpeg25) /* allow Bitrate change for 2.5 ... */ - fr->bitrate_index = ((newhead>>12)&0xf); - - fr->bitrate_index = ((newhead>>12)&0xf); - fr->padding = ((newhead>>9)&0x1); - fr->extension = ((newhead>>8)&0x1); - fr->mode = ((newhead>>6)&0x3); - fr->mode_ext = ((newhead>>4)&0x3); - fr->copyright = ((newhead>>3)&0x1); - fr->original = ((newhead>>2)&0x1); - fr->emphasis = newhead & 0x3; - - fr->stereo = (fr->mode == MPG_MD_MONO) ? 1 : 2; - - if(!fr->bitrate_index) - { - FIXME("Free format not supported.\n"); - return (0); - } - - switch(fr->lay) - { - case 1: -#ifdef LAYER1 -#if 0 - fr->jsbound = (fr->mode == MPG_MD_JOINT_STEREO) ? - (fr->mode_ext<<2)+4 : 32; -#endif - fr->framesize = (long) tabsel_123[fr->lsf][0][fr->bitrate_index] * 12000; - fr->framesize /= freqs[fr->sampling_frequency]; - fr->framesize = ((fr->framesize+fr->padding)<<2)-4; - break; -#else - FIXME("Layer 1 not supported!\n"); - return 0; -#endif - case 2: -#ifdef LAYER2 -#if 0 - fr->jsbound = (fr->mode == MPG_MD_JOINT_STEREO) ? - (fr->mode_ext<<2)+4 : fr->II_sblimit; -#endif - fr->framesize = (long) tabsel_123[fr->lsf][1][fr->bitrate_index] * 144000; - fr->framesize /= freqs[fr->sampling_frequency]; - fr->framesize += fr->padding - 4; - break; -#else - FIXME("Layer 2 not supported!\n"); - return 0; -#endif - case 3: -#if 0 - fr->do_layer = do_layer3; - if(fr->lsf) - ssize = (fr->stereo == 1) ? 9 : 17; - else - ssize = (fr->stereo == 1) ? 17 : 32; -#endif - -#if 0 - if(fr->error_protection) - ssize += 2; -#endif - fr->framesize = (long) tabsel_123[fr->lsf][2][fr->bitrate_index] * 144000; - fr->framesize /= freqs[fr->sampling_frequency]<<(fr->lsf); - fr->framesize = fr->framesize + fr->padding - 4; - break; - default: - FIXME("Unknown layer type: %d\n", fr->lay); - return (0); - } - return 1; -} - -#if 0 -void print_header(struct frame *fr) -{ - static const char * const modes[4] = { "Stereo", "Joint-Stereo", "Dual-Channel", "Single-Channel" }; - static const char * const layers[4] = { "Unknown" , "I", "II", "III" }; - - FIXME("MPEG %s, Layer: %s, Freq: %ld, mode: %s, modext: %d, BPF : %d\n", - fr->mpeg25 ? "2.5" : (fr->lsf ? "2.0" : "1.0"), - layers[fr->lay],freqs[fr->sampling_frequency], - modes[fr->mode],fr->mode_ext,fr->framesize+4); - FIXME("Channels: %d, copyright: %s, original: %s, CRC: %s, emphasis: %d.\n", - fr->stereo,fr->copyright?"Yes":"No", - fr->original?"Yes":"No",fr->error_protection?"Yes":"No", - fr->emphasis); - FIXME("Bitrate: %d Kbits/s, Extension value: %d\n", - tabsel_123[fr->lsf][fr->lay-1][fr->bitrate_index],fr->extension); -} - -void print_header_compact(struct frame *fr) -{ - static const char * const modes[4] = { "stereo", "joint-stereo", "dual-channel", "mono" }; - static const char * const layers[4] = { "Unknown" , "I", "II", "III" }; - - FIXME("MPEG %s layer %s, %d kbit/s, %ld Hz %s\n", - fr->mpeg25 ? "2.5" : (fr->lsf ? "2.0" : "1.0"), - layers[fr->lay], - tabsel_123[fr->lsf][fr->lay-1][fr->bitrate_index], - freqs[fr->sampling_frequency], modes[fr->mode]); -} - -#endif - -unsigned int getbits(int number_of_bits) -{ - unsigned long rval; - - if(!number_of_bits) - return 0; - - { - rval = wordpointer[0]; - rval <<= 8; - rval |= wordpointer[1]; - rval <<= 8; - rval |= wordpointer[2]; - rval <<= bitindex; - rval &= 0xffffff; - - bitindex += number_of_bits; - - rval >>= (24-number_of_bits); - - wordpointer += (bitindex>>3); - bitindex &= 7; - } - return rval; -} - -unsigned int getbits_fast(int number_of_bits) -{ - unsigned long rval; - - { - rval = wordpointer[0]; - rval <<= 8; - rval |= wordpointer[1]; - rval <<= bitindex; - rval &= 0xffff; - bitindex += number_of_bits; - - rval >>= (16-number_of_bits); - - wordpointer += (bitindex>>3); - bitindex &= 7; - } - return rval; -} - -unsigned int get1bit(void) -{ - unsigned char rval; - rval = *wordpointer << bitindex; - - bitindex++; - wordpointer += (bitindex>>3); - bitindex &= 7; - - return rval>>7; -} diff --git a/dll/win32/winemp3.acm/dct64_i386.c b/dll/win32/winemp3.acm/dct64_i386.c deleted file mode 100644 index 42166ba78fd..00000000000 --- a/dll/win32/winemp3.acm/dct64_i386.c +++ /dev/null @@ -1,329 +0,0 @@ -/* - * Copyright (c) Michael Hipp and other authors of the mpglib project. - * - * Discrete Cosine Transform (DCT) for subband synthesis - * optimized for machines with no auto-increment. - * The performance is highly compiler dependent. Maybe - * the dct64.c version for 'normal' processor may be faster - * even for Intel processors. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#include "mpg123.h" - -static void dct64_1(real *out0,real *out1,real *b1,real *b2,real *samples) -{ - - { - register real *costab = pnts[0]; - - b1[0x00] = samples[0x00] + samples[0x1F]; - b1[0x1F] = (samples[0x00] - samples[0x1F]) * costab[0x0]; - - b1[0x01] = samples[0x01] + samples[0x1E]; - b1[0x1E] = (samples[0x01] - samples[0x1E]) * costab[0x1]; - - b1[0x02] = samples[0x02] + samples[0x1D]; - b1[0x1D] = (samples[0x02] - samples[0x1D]) * costab[0x2]; - - b1[0x03] = samples[0x03] + samples[0x1C]; - b1[0x1C] = (samples[0x03] - samples[0x1C]) * costab[0x3]; - - b1[0x04] = samples[0x04] + samples[0x1B]; - b1[0x1B] = (samples[0x04] - samples[0x1B]) * costab[0x4]; - - b1[0x05] = samples[0x05] + samples[0x1A]; - b1[0x1A] = (samples[0x05] - samples[0x1A]) * costab[0x5]; - - b1[0x06] = samples[0x06] + samples[0x19]; - b1[0x19] = (samples[0x06] - samples[0x19]) * costab[0x6]; - - b1[0x07] = samples[0x07] + samples[0x18]; - b1[0x18] = (samples[0x07] - samples[0x18]) * costab[0x7]; - - b1[0x08] = samples[0x08] + samples[0x17]; - b1[0x17] = (samples[0x08] - samples[0x17]) * costab[0x8]; - - b1[0x09] = samples[0x09] + samples[0x16]; - b1[0x16] = (samples[0x09] - samples[0x16]) * costab[0x9]; - - b1[0x0A] = samples[0x0A] + samples[0x15]; - b1[0x15] = (samples[0x0A] - samples[0x15]) * costab[0xA]; - - b1[0x0B] = samples[0x0B] + samples[0x14]; - b1[0x14] = (samples[0x0B] - samples[0x14]) * costab[0xB]; - - b1[0x0C] = samples[0x0C] + samples[0x13]; - b1[0x13] = (samples[0x0C] - samples[0x13]) * costab[0xC]; - - b1[0x0D] = samples[0x0D] + samples[0x12]; - b1[0x12] = (samples[0x0D] - samples[0x12]) * costab[0xD]; - - b1[0x0E] = samples[0x0E] + samples[0x11]; - b1[0x11] = (samples[0x0E] - samples[0x11]) * costab[0xE]; - - b1[0x0F] = samples[0x0F] + samples[0x10]; - b1[0x10] = (samples[0x0F] - samples[0x10]) * costab[0xF]; - } - - - { - register real *costab = pnts[1]; - - b2[0x00] = b1[0x00] + b1[0x0F]; - b2[0x0F] = (b1[0x00] - b1[0x0F]) * costab[0]; - b2[0x01] = b1[0x01] + b1[0x0E]; - b2[0x0E] = (b1[0x01] - b1[0x0E]) * costab[1]; - b2[0x02] = b1[0x02] + b1[0x0D]; - b2[0x0D] = (b1[0x02] - b1[0x0D]) * costab[2]; - b2[0x03] = b1[0x03] + b1[0x0C]; - b2[0x0C] = (b1[0x03] - b1[0x0C]) * costab[3]; - b2[0x04] = b1[0x04] + b1[0x0B]; - b2[0x0B] = (b1[0x04] - b1[0x0B]) * costab[4]; - b2[0x05] = b1[0x05] + b1[0x0A]; - b2[0x0A] = (b1[0x05] - b1[0x0A]) * costab[5]; - b2[0x06] = b1[0x06] + b1[0x09]; - b2[0x09] = (b1[0x06] - b1[0x09]) * costab[6]; - b2[0x07] = b1[0x07] + b1[0x08]; - b2[0x08] = (b1[0x07] - b1[0x08]) * costab[7]; - - b2[0x10] = b1[0x10] + b1[0x1F]; - b2[0x1F] = (b1[0x1F] - b1[0x10]) * costab[0]; - b2[0x11] = b1[0x11] + b1[0x1E]; - b2[0x1E] = (b1[0x1E] - b1[0x11]) * costab[1]; - b2[0x12] = b1[0x12] + b1[0x1D]; - b2[0x1D] = (b1[0x1D] - b1[0x12]) * costab[2]; - b2[0x13] = b1[0x13] + b1[0x1C]; - b2[0x1C] = (b1[0x1C] - b1[0x13]) * costab[3]; - b2[0x14] = b1[0x14] + b1[0x1B]; - b2[0x1B] = (b1[0x1B] - b1[0x14]) * costab[4]; - b2[0x15] = b1[0x15] + b1[0x1A]; - b2[0x1A] = (b1[0x1A] - b1[0x15]) * costab[5]; - b2[0x16] = b1[0x16] + b1[0x19]; - b2[0x19] = (b1[0x19] - b1[0x16]) * costab[6]; - b2[0x17] = b1[0x17] + b1[0x18]; - b2[0x18] = (b1[0x18] - b1[0x17]) * costab[7]; - } - - { - register real *costab = pnts[2]; - - b1[0x00] = b2[0x00] + b2[0x07]; - b1[0x07] = (b2[0x00] - b2[0x07]) * costab[0]; - b1[0x01] = b2[0x01] + b2[0x06]; - b1[0x06] = (b2[0x01] - b2[0x06]) * costab[1]; - b1[0x02] = b2[0x02] + b2[0x05]; - b1[0x05] = (b2[0x02] - b2[0x05]) * costab[2]; - b1[0x03] = b2[0x03] + b2[0x04]; - b1[0x04] = (b2[0x03] - b2[0x04]) * costab[3]; - - b1[0x08] = b2[0x08] + b2[0x0F]; - b1[0x0F] = (b2[0x0F] - b2[0x08]) * costab[0]; - b1[0x09] = b2[0x09] + b2[0x0E]; - b1[0x0E] = (b2[0x0E] - b2[0x09]) * costab[1]; - b1[0x0A] = b2[0x0A] + b2[0x0D]; - b1[0x0D] = (b2[0x0D] - b2[0x0A]) * costab[2]; - b1[0x0B] = b2[0x0B] + b2[0x0C]; - b1[0x0C] = (b2[0x0C] - b2[0x0B]) * costab[3]; - - b1[0x10] = b2[0x10] + b2[0x17]; - b1[0x17] = (b2[0x10] - b2[0x17]) * costab[0]; - b1[0x11] = b2[0x11] + b2[0x16]; - b1[0x16] = (b2[0x11] - b2[0x16]) * costab[1]; - b1[0x12] = b2[0x12] + b2[0x15]; - b1[0x15] = (b2[0x12] - b2[0x15]) * costab[2]; - b1[0x13] = b2[0x13] + b2[0x14]; - b1[0x14] = (b2[0x13] - b2[0x14]) * costab[3]; - - b1[0x18] = b2[0x18] + b2[0x1F]; - b1[0x1F] = (b2[0x1F] - b2[0x18]) * costab[0]; - b1[0x19] = b2[0x19] + b2[0x1E]; - b1[0x1E] = (b2[0x1E] - b2[0x19]) * costab[1]; - b1[0x1A] = b2[0x1A] + b2[0x1D]; - b1[0x1D] = (b2[0x1D] - b2[0x1A]) * costab[2]; - b1[0x1B] = b2[0x1B] + b2[0x1C]; - b1[0x1C] = (b2[0x1C] - b2[0x1B]) * costab[3]; - } - - { - register real const cos0 = pnts[3][0]; - register real const cos1 = pnts[3][1]; - - b2[0x00] = b1[0x00] + b1[0x03]; - b2[0x03] = (b1[0x00] - b1[0x03]) * cos0; - b2[0x01] = b1[0x01] + b1[0x02]; - b2[0x02] = (b1[0x01] - b1[0x02]) * cos1; - - b2[0x04] = b1[0x04] + b1[0x07]; - b2[0x07] = (b1[0x07] - b1[0x04]) * cos0; - b2[0x05] = b1[0x05] + b1[0x06]; - b2[0x06] = (b1[0x06] - b1[0x05]) * cos1; - - b2[0x08] = b1[0x08] + b1[0x0B]; - b2[0x0B] = (b1[0x08] - b1[0x0B]) * cos0; - b2[0x09] = b1[0x09] + b1[0x0A]; - b2[0x0A] = (b1[0x09] - b1[0x0A]) * cos1; - - b2[0x0C] = b1[0x0C] + b1[0x0F]; - b2[0x0F] = (b1[0x0F] - b1[0x0C]) * cos0; - b2[0x0D] = b1[0x0D] + b1[0x0E]; - b2[0x0E] = (b1[0x0E] - b1[0x0D]) * cos1; - - b2[0x10] = b1[0x10] + b1[0x13]; - b2[0x13] = (b1[0x10] - b1[0x13]) * cos0; - b2[0x11] = b1[0x11] + b1[0x12]; - b2[0x12] = (b1[0x11] - b1[0x12]) * cos1; - - b2[0x14] = b1[0x14] + b1[0x17]; - b2[0x17] = (b1[0x17] - b1[0x14]) * cos0; - b2[0x15] = b1[0x15] + b1[0x16]; - b2[0x16] = (b1[0x16] - b1[0x15]) * cos1; - - b2[0x18] = b1[0x18] + b1[0x1B]; - b2[0x1B] = (b1[0x18] - b1[0x1B]) * cos0; - b2[0x19] = b1[0x19] + b1[0x1A]; - b2[0x1A] = (b1[0x19] - b1[0x1A]) * cos1; - - b2[0x1C] = b1[0x1C] + b1[0x1F]; - b2[0x1F] = (b1[0x1F] - b1[0x1C]) * cos0; - b2[0x1D] = b1[0x1D] + b1[0x1E]; - b2[0x1E] = (b1[0x1E] - b1[0x1D]) * cos1; - } - - { - register real const cos0 = pnts[4][0]; - - b1[0x00] = b2[0x00] + b2[0x01]; - b1[0x01] = (b2[0x00] - b2[0x01]) * cos0; - b1[0x02] = b2[0x02] + b2[0x03]; - b1[0x03] = (b2[0x03] - b2[0x02]) * cos0; - b1[0x02] += b1[0x03]; - - b1[0x04] = b2[0x04] + b2[0x05]; - b1[0x05] = (b2[0x04] - b2[0x05]) * cos0; - b1[0x06] = b2[0x06] + b2[0x07]; - b1[0x07] = (b2[0x07] - b2[0x06]) * cos0; - b1[0x06] += b1[0x07]; - b1[0x04] += b1[0x06]; - b1[0x06] += b1[0x05]; - b1[0x05] += b1[0x07]; - - b1[0x08] = b2[0x08] + b2[0x09]; - b1[0x09] = (b2[0x08] - b2[0x09]) * cos0; - b1[0x0A] = b2[0x0A] + b2[0x0B]; - b1[0x0B] = (b2[0x0B] - b2[0x0A]) * cos0; - b1[0x0A] += b1[0x0B]; - - b1[0x0C] = b2[0x0C] + b2[0x0D]; - b1[0x0D] = (b2[0x0C] - b2[0x0D]) * cos0; - b1[0x0E] = b2[0x0E] + b2[0x0F]; - b1[0x0F] = (b2[0x0F] - b2[0x0E]) * cos0; - b1[0x0E] += b1[0x0F]; - b1[0x0C] += b1[0x0E]; - b1[0x0E] += b1[0x0D]; - b1[0x0D] += b1[0x0F]; - - b1[0x10] = b2[0x10] + b2[0x11]; - b1[0x11] = (b2[0x10] - b2[0x11]) * cos0; - b1[0x12] = b2[0x12] + b2[0x13]; - b1[0x13] = (b2[0x13] - b2[0x12]) * cos0; - b1[0x12] += b1[0x13]; - - b1[0x14] = b2[0x14] + b2[0x15]; - b1[0x15] = (b2[0x14] - b2[0x15]) * cos0; - b1[0x16] = b2[0x16] + b2[0x17]; - b1[0x17] = (b2[0x17] - b2[0x16]) * cos0; - b1[0x16] += b1[0x17]; - b1[0x14] += b1[0x16]; - b1[0x16] += b1[0x15]; - b1[0x15] += b1[0x17]; - - b1[0x18] = b2[0x18] + b2[0x19]; - b1[0x19] = (b2[0x18] - b2[0x19]) * cos0; - b1[0x1A] = b2[0x1A] + b2[0x1B]; - b1[0x1B] = (b2[0x1B] - b2[0x1A]) * cos0; - b1[0x1A] += b1[0x1B]; - - b1[0x1C] = b2[0x1C] + b2[0x1D]; - b1[0x1D] = (b2[0x1C] - b2[0x1D]) * cos0; - b1[0x1E] = b2[0x1E] + b2[0x1F]; - b1[0x1F] = (b2[0x1F] - b2[0x1E]) * cos0; - b1[0x1E] += b1[0x1F]; - b1[0x1C] += b1[0x1E]; - b1[0x1E] += b1[0x1D]; - b1[0x1D] += b1[0x1F]; - } - - out0[0x10*16] = b1[0x00]; - out0[0x10*12] = b1[0x04]; - out0[0x10* 8] = b1[0x02]; - out0[0x10* 4] = b1[0x06]; - out0[0x10* 0] = b1[0x01]; - out1[0x10* 0] = b1[0x01]; - out1[0x10* 4] = b1[0x05]; - out1[0x10* 8] = b1[0x03]; - out1[0x10*12] = b1[0x07]; - - b1[0x08] += b1[0x0C]; - out0[0x10*14] = b1[0x08]; - b1[0x0C] += b1[0x0a]; - out0[0x10*10] = b1[0x0C]; - b1[0x0A] += b1[0x0E]; - out0[0x10* 6] = b1[0x0A]; - b1[0x0E] += b1[0x09]; - out0[0x10* 2] = b1[0x0E]; - b1[0x09] += b1[0x0D]; - out1[0x10* 2] = b1[0x09]; - b1[0x0D] += b1[0x0B]; - out1[0x10* 6] = b1[0x0D]; - b1[0x0B] += b1[0x0F]; - out1[0x10*10] = b1[0x0B]; - out1[0x10*14] = b1[0x0F]; - - b1[0x18] += b1[0x1C]; - out0[0x10*15] = b1[0x10] + b1[0x18]; - out0[0x10*13] = b1[0x18] + b1[0x14]; - b1[0x1C] += b1[0x1a]; - out0[0x10*11] = b1[0x14] + b1[0x1C]; - out0[0x10* 9] = b1[0x1C] + b1[0x12]; - b1[0x1A] += b1[0x1E]; - out0[0x10* 7] = b1[0x12] + b1[0x1A]; - out0[0x10* 5] = b1[0x1A] + b1[0x16]; - b1[0x1E] += b1[0x19]; - out0[0x10* 3] = b1[0x16] + b1[0x1E]; - out0[0x10* 1] = b1[0x1E] + b1[0x11]; - b1[0x19] += b1[0x1D]; - out1[0x10* 1] = b1[0x11] + b1[0x19]; - out1[0x10* 3] = b1[0x19] + b1[0x15]; - b1[0x1D] += b1[0x1B]; - out1[0x10* 5] = b1[0x15] + b1[0x1D]; - out1[0x10* 7] = b1[0x1D] + b1[0x13]; - b1[0x1B] += b1[0x1F]; - out1[0x10* 9] = b1[0x13] + b1[0x1B]; - out1[0x10*11] = b1[0x1B] + b1[0x17]; - out1[0x10*13] = b1[0x17] + b1[0x1F]; - out1[0x10*15] = b1[0x1F]; -} - -/* - * the call via dct64 is a trick to force GCC to use - * (new) registers for the b1,b2 pointer to the bufs[xx] field - */ -void dct64(real *a,real *b,real *c) -{ - real bufs[0x40]; - dct64_1(a,b,bufs,bufs+0x20,c); -} diff --git a/dll/win32/winemp3.acm/decode_i386.c b/dll/win32/winemp3.acm/decode_i386.c deleted file mode 100644 index 0029a92c705..00000000000 --- a/dll/win32/winemp3.acm/decode_i386.c +++ /dev/null @@ -1,164 +0,0 @@ -/* - * Mpeg Layer-1,2,3 audio decoder - * ------------------------------ - * copyright (c) 1995,1996,1997 by Michael Hipp, All rights reserved. - * See also 'README' - * - * Slightly optimized for machines without autoincrement/decrement. - * The performance is highly compiler dependent. Maybe - * the decode.c version for 'normal' processor may be faster - * even for Intel processors. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License 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 "mpg123.h" -#include "mpglib.h" - - /* old WRITE_SAMPLE */ -#define WRITE_SAMPLE(samples,sum,clip) \ - if( (sum) > 32767.0) { *(samples) = 0x7fff; (clip)++; } \ - else if( (sum) < -32768.0) { *(samples) = -0x8000; (clip)++; } \ - else { *(samples) = sum; } - -int synth_1to1_mono(struct mpstr *mp,real *bandPtr,unsigned char *samples,int *pnt) -{ - short samples_tmp[64]; - short *tmp1 = samples_tmp; - int i,ret; - int pnt1 = 0; - - ret = synth_1to1(mp,bandPtr,0,(unsigned char *) samples_tmp,&pnt1); - samples += *pnt; - - for(i=0;i<32;i++) { - *( (short *) samples) = *tmp1; - samples += 2; - tmp1 += 2; - } - *pnt += 64; - - return ret; -} - - -int synth_1to1(struct mpstr *mp,real *bandPtr,int channel,unsigned char *out,int *pnt) -{ - static const int step = 2; - int bo; - short *samples = (short *) (out + *pnt); - - real *b0,(*buf)[0x110]; - int clip = 0; - int bo1; - - bo = mp->synth_bo; - - if(!channel) { - bo--; - bo &= 0xf; - buf = mp->synth_buffs[0]; - } - else { - samples++; - buf = mp->synth_buffs[1]; - } - - if(bo & 0x1) { - b0 = buf[0]; - bo1 = bo; - dct64(buf[1]+((bo+1)&0xf),buf[0]+bo,bandPtr); - } - else { - b0 = buf[1]; - bo1 = bo+1; - dct64(buf[0]+bo,buf[1]+bo+1,bandPtr); - } - - mp->synth_bo = bo; - - { - register int j; - real *window = decwin + 16 - bo1; - - for (j=16;j;j--,b0+=0x10,window+=0x20,samples+=step) - { - real sum; - sum = window[0x0] * b0[0x0]; - sum -= window[0x1] * b0[0x1]; - sum += window[0x2] * b0[0x2]; - sum -= window[0x3] * b0[0x3]; - sum += window[0x4] * b0[0x4]; - sum -= window[0x5] * b0[0x5]; - sum += window[0x6] * b0[0x6]; - sum -= window[0x7] * b0[0x7]; - sum += window[0x8] * b0[0x8]; - sum -= window[0x9] * b0[0x9]; - sum += window[0xA] * b0[0xA]; - sum -= window[0xB] * b0[0xB]; - sum += window[0xC] * b0[0xC]; - sum -= window[0xD] * b0[0xD]; - sum += window[0xE] * b0[0xE]; - sum -= window[0xF] * b0[0xF]; - - WRITE_SAMPLE(samples,sum,clip); - } - - { - real sum; - sum = window[0x0] * b0[0x0]; - sum += window[0x2] * b0[0x2]; - sum += window[0x4] * b0[0x4]; - sum += window[0x6] * b0[0x6]; - sum += window[0x8] * b0[0x8]; - sum += window[0xA] * b0[0xA]; - sum += window[0xC] * b0[0xC]; - sum += window[0xE] * b0[0xE]; - WRITE_SAMPLE(samples,sum,clip); - b0-=0x10,window-=0x20,samples+=step; - } - window += bo1<<1; - - for (j=15;j;j--,b0-=0x10,window-=0x20,samples+=step) - { - real sum; - sum = -window[-0x1] * b0[0x0]; - sum -= window[-0x2] * b0[0x1]; - sum -= window[-0x3] * b0[0x2]; - sum -= window[-0x4] * b0[0x3]; - sum -= window[-0x5] * b0[0x4]; - sum -= window[-0x6] * b0[0x5]; - sum -= window[-0x7] * b0[0x6]; - sum -= window[-0x8] * b0[0x7]; - sum -= window[-0x9] * b0[0x8]; - sum -= window[-0xA] * b0[0x9]; - sum -= window[-0xB] * b0[0xA]; - sum -= window[-0xC] * b0[0xB]; - sum -= window[-0xD] * b0[0xC]; - sum -= window[-0xE] * b0[0xD]; - sum -= window[-0xF] * b0[0xE]; - sum -= window[-0x0] * b0[0xF]; - - WRITE_SAMPLE(samples,sum,clip); - } - } - *pnt += 128; - - return clip; -} diff --git a/dll/win32/winemp3.acm/interface.c b/dll/win32/winemp3.acm/interface.c deleted file mode 100644 index 6592902dcb5..00000000000 --- a/dll/win32/winemp3.acm/interface.c +++ /dev/null @@ -1,254 +0,0 @@ -/* - * Copyright (c) Michael Hipp and other authors of the mpglib project. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#include "config.h" -#include -#include -#include - -#include "windef.h" -#include "winbase.h" -#include "wine/debug.h" -#include "mpg123.h" -#include "mpglib.h" - -WINE_DEFAULT_DEBUG_CHANNEL(mpeg3); - -BOOL InitMP3(struct mpstr *mp) -{ - static int init = 0; - - memset(mp,0,sizeof(struct mpstr)); - - mp->framesize = 0; - mp->fsizeold = -1; - mp->bsize = 0; - mp->head = mp->tail = NULL; - mp->fr.single = -1; - mp->bsnum = 0; - mp->synth_bo = 1; - mp->fr.mp = mp; - - if(!init) { - init = 1; - make_decode_tables(32767); - init_layer2(); - init_layer3(SBLIMIT); - } - - return !0; -} - -void ClearMP3Buffer(struct mpstr *mp) -{ - struct buf *b,*bn; - - b = mp->tail; - while(b) { - HeapFree(GetProcessHeap(), 0, b->pnt); - bn = b->next; - HeapFree(GetProcessHeap(), 0, b); - b = bn; - } - mp->tail = NULL; - mp->head = NULL; - mp->bsize = 0; -} - -static struct buf *addbuf(struct mpstr *mp,const unsigned char *buf,int size) -{ - struct buf *nbuf; - - nbuf = HeapAlloc(GetProcessHeap(), 0, sizeof(struct buf)); - if(!nbuf) { - WARN("Out of memory!\n"); - return NULL; - } - nbuf->pnt = HeapAlloc(GetProcessHeap(), 0, size); - if(!nbuf->pnt) { - HeapFree(GetProcessHeap(), 0, nbuf); - WARN("Out of memory!\n"); - return NULL; - } - nbuf->size = size; - memcpy(nbuf->pnt,buf,size); - nbuf->next = NULL; - nbuf->prev = mp->head; - nbuf->pos = 0; - - if(!mp->tail) { - mp->tail = nbuf; - } - else { - mp->head->next = nbuf; - } - - mp->head = nbuf; - mp->bsize += size; - - return nbuf; -} - -static void remove_buf(struct mpstr *mp) -{ - struct buf *buf = mp->tail; - - mp->tail = buf->next; - if(mp->tail) - mp->tail->prev = NULL; - else { - mp->tail = mp->head = NULL; - } - - HeapFree(GetProcessHeap(), 0, buf->pnt); - HeapFree(GetProcessHeap(), 0, buf); - -} - -static int read_buf_byte(struct mpstr *mp) -{ - unsigned int b; - - int pos; - - pos = mp->tail->pos; - while(pos >= mp->tail->size) { - remove_buf(mp); - pos = mp->tail->pos; - } - - b = mp->tail->pnt[pos]; - mp->bsize--; - mp->tail->pos++; - - - return b; -} - -static void read_head(struct mpstr *mp) -{ - unsigned long head; - - head = read_buf_byte(mp); - head <<= 8; - head |= read_buf_byte(mp); - head <<= 8; - head |= read_buf_byte(mp); - head <<= 8; - head |= read_buf_byte(mp); - - mp->header = head; -} - -int decodeMP3(struct mpstr *mp,const unsigned char *in,int isize,unsigned char *out, - int osize,int *done) -{ - int len; - - if(osize < 4608) { - ERR("Output buffer too small\n"); - return MP3_ERR; - } - - if(in) { - if(addbuf(mp,in,isize) == NULL) { - return MP3_ERR; - } - } - - /* First decode header */ - if(mp->framesize == 0) { - int ret; - if(mp->bsize < 4) { - return MP3_NEED_MORE; - } - read_head(mp); - while (!(ret = decode_header(&mp->fr,mp->header)) && mp->bsize) - { - mp->header = mp->header << 8; - mp->header |= read_buf_byte(mp); - } - - if (!ret) { - return MP3_NEED_MORE; - } - mp->framesize = mp->fr.framesize; - } - - if(mp->fr.framesize > mp->bsize) - return MP3_NEED_MORE; - - wordpointer = mp->bsspace[mp->bsnum] + 512; - mp->bsnum = (mp->bsnum + 1) & 0x1; - bitindex = 0; - - len = 0; - while(len < mp->framesize) { - int nlen; - int blen = mp->tail->size - mp->tail->pos; - if( (mp->framesize - len) <= blen) { - nlen = mp->framesize-len; - } - else { - nlen = blen; - } - memcpy(wordpointer+len,mp->tail->pnt+mp->tail->pos,nlen); - len += nlen; - mp->tail->pos += nlen; - mp->bsize -= nlen; - if(mp->tail->pos == mp->tail->size) { - remove_buf(mp); - } - } - - *done = 0; - if(mp->fr.error_protection) - getbits(16); - switch(mp->fr.lay) { - case 1: - do_layer1(&mp->fr,out,done); - break; - case 2: - do_layer2(&mp->fr,out,done); - break; - case 3: - do_layer3(&mp->fr,out,done); - break; - } - - mp->fsizeold = mp->framesize; - mp->framesize = 0; - - return MP3_OK; -} - -int set_pointer(struct mpstr *mp, long backstep) -{ - unsigned char *bsbufold; - if(mp->fsizeold < 0 && backstep > 0) { - /* This is not a bug if we just did seeking, the first frame is dropped then */ - WARN("Can't step back %ld!\n",backstep); - return MP3_ERR; - } - bsbufold = mp->bsspace[mp->bsnum] + 512; - wordpointer -= backstep; - if (backstep) - memcpy(wordpointer,bsbufold+mp->fsizeold-backstep,backstep); - bitindex = 0; - return MP3_OK; -} diff --git a/dll/win32/winemp3.acm/layer1.c b/dll/win32/winemp3.acm/layer1.c deleted file mode 100644 index 392176a122b..00000000000 --- a/dll/win32/winemp3.acm/layer1.c +++ /dev/null @@ -1,159 +0,0 @@ -/* - * Mpeg Layer-1 audio decoder - * -------------------------- - * copyright (c) 1995 by Michael Hipp, All rights reserved. See also 'README' - * This file has been copied from mpglib. - * near unoptimzed ... - * - * may have a few bugs after last optimization ... - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#include "mpg123.h" - -static void I_step_one(unsigned int balloc[], unsigned int scale_index[2][SBLIMIT],struct frame *fr) -{ - unsigned int *ba=balloc; - unsigned int *sca = (unsigned int *) scale_index; - - if(fr->stereo) { - int i; - int jsbound = fr->jsbound; - for (i=0;istereo) { - int jsbound = fr->jsbound; - register real *f0 = fraction[0]; - register real *f1 = fraction[1]; - ba = balloc; - for (sample=smpb,i=0;istereo; - unsigned int balloc[2*SBLIMIT]; - unsigned int scale_index[2][SBLIMIT]; - real fraction[2][SBLIMIT]; - int single = fr->single; - - fr->jsbound = (fr->mode == MPG_MD_JOINT_STEREO) ? (fr->mode_ext<<2)+4 : 32; - - if(stereo == 1 || single == 3) - single = 0; - - I_step_one(balloc,scale_index,fr); - - for (i=0;i= 0) { - clip += synth_1to1_mono(fr->mp,fraction[single],pcm_sample,pcm_point); - } - else { - int p1 = *pcm_point; - clip += synth_1to1(fr->mp,fraction[0],0,pcm_sample,&p1); - clip += synth_1to1(fr->mp,fraction[1],1,pcm_sample,pcm_point); - } - } - - return clip; -} diff --git a/dll/win32/winemp3.acm/layer2.c b/dll/win32/winemp3.acm/layer2.c deleted file mode 100644 index 535d90c1f40..00000000000 --- a/dll/win32/winemp3.acm/layer2.c +++ /dev/null @@ -1,301 +0,0 @@ -/* - * Mpeg Layer-2 audio decoder - * -------------------------- - * copyright (c) 1995 by Michael Hipp, All rights reserved. See also 'README' - * This file has been copied from mpglib. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#include "mpg123.h" -#include "l2tables.h" - -static int grp_3tab[32 * 3] = { 0, }; /* used: 27 */ -static int grp_5tab[128 * 3] = { 0, }; /* used: 125 */ -static int grp_9tab[1024 * 3] = { 0, }; /* used: 729 */ - -real muls[27][64]; /* also used by layer 1 */ - -void init_layer2(void) -{ - static const double mulmul[27] = { - 0.0 , -2.0/3.0 , 2.0/3.0 , - 2.0/7.0 , 2.0/15.0 , 2.0/31.0, 2.0/63.0 , 2.0/127.0 , 2.0/255.0 , - 2.0/511.0 , 2.0/1023.0 , 2.0/2047.0 , 2.0/4095.0 , 2.0/8191.0 , - 2.0/16383.0 , 2.0/32767.0 , 2.0/65535.0 , - -4.0/5.0 , -2.0/5.0 , 2.0/5.0, 4.0/5.0 , - -8.0/9.0 , -4.0/9.0 , -2.0/9.0 , 2.0/9.0 , 4.0/9.0 , 8.0/9.0 }; - static const int base[3][9] = { - { 1 , 0, 2 , } , - { 17, 18, 0 , 19, 20 , } , - { 21, 1, 22, 23, 0, 24, 25, 2, 26 } }; - int i,j,k,l,len; - real *table; - static const int tablen[3] = { 3 , 5 , 9 }; - static int *itable,*tables[3] = { grp_3tab , grp_5tab , grp_9tab }; - - for(i=0;i<3;i++) - { - itable = tables[i]; - len = tablen[i]; - for(j=0;jstereo-1; - int sblimit = fr->II_sblimit; - int jsbound = fr->jsbound; - int sblimit2 = fr->II_sblimit<alloc; - int i; - static unsigned int scfsi_buf[64]; - unsigned int *scfsi,*bita; - int sc,step; - - bita = bit_alloc; - if(stereo) - { - for (i=jsbound;i;i--,alloc1+=(1<bits); - *bita++ = (char) getbits(step); - } - for (i=sblimit-jsbound;i;i--,alloc1+=(1<bits); - bita[1] = bita[0]; - bita+=2; - } - bita = bit_alloc; - scfsi=scfsi_buf; - for (i=sblimit2;i;i--) - if (*bita++) - *scfsi++ = (char) getbits_fast(2); - } - else /* mono */ - { - for (i=sblimit;i;i--,alloc1+=(1<bits); - bita = bit_alloc; - scfsi=scfsi_buf; - for (i=sblimit;i;i--) - if (*bita++) - *scfsi++ = (char) getbits_fast(2); - } - - bita = bit_alloc; - scfsi=scfsi_buf; - for (i=sblimit2;i;i--) - if (*bita++) - switch (*scfsi++) - { - case 0: - *scale++ = getbits_fast(6); - *scale++ = getbits_fast(6); - *scale++ = getbits_fast(6); - break; - case 1 : - *scale++ = sc = getbits_fast(6); - *scale++ = sc; - *scale++ = getbits_fast(6); - break; - case 2: - *scale++ = sc = getbits_fast(6); - *scale++ = sc; - *scale++ = sc; - break; - default: /* case 3 */ - *scale++ = getbits_fast(6); - *scale++ = sc = getbits_fast(6); - *scale++ = sc; - break; - } - -} - -static void II_step_two(unsigned int *bit_alloc, real fraction[2][4][SBLIMIT], - int *scale, struct frame *fr, int x1) -{ - int i,j,k,ba; - int stereo = fr->stereo; - int sblimit = fr->II_sblimit; - int jsbound = fr->jsbound; - const struct al_table *alloc2,*alloc1 = fr->alloc; - unsigned int *bita=bit_alloc; - int d1,step; - - for (i=0;ibits; - for (j=0;jbits; - if( (d1=alloc2->d) < 0) - { - real cm=muls[k][scale[x1]]; - fraction[j][0][i] = ((real) ((int)getbits(k) + d1)) * cm; - fraction[j][1][i] = ((real) ((int)getbits(k) + d1)) * cm; - fraction[j][2][i] = ((real) ((int)getbits(k) + d1)) * cm; - } - else - { - static int *table[] = { 0,0,0,grp_3tab,0,grp_5tab,0,0,0,grp_9tab }; - unsigned int idx,*tab,m=scale[x1]; - idx = getbits(k); - tab = (unsigned int *) (table[d1] + idx + idx + idx); - fraction[j][0][i] = muls[*tab++][m]; - fraction[j][1][i] = muls[*tab++][m]; - fraction[j][2][i] = muls[*tab][m]; - } - scale+=3; - } - else - fraction[j][0][i] = fraction[j][1][i] = fraction[j][2][i] = 0.0; - } - } - - for (i=jsbound;ibits; - bita++; /* channel 1 and channel 2 bitalloc are the same */ - if ( (ba=*bita++) ) - { - k=(alloc2 = alloc1+ba)->bits; - if( (d1=alloc2->d) < 0) - { - real cm; - cm=muls[k][scale[x1+3]]; - fraction[1][0][i] = (fraction[0][0][i] = (real) ((int)getbits(k) + d1) ) * cm; - fraction[1][1][i] = (fraction[0][1][i] = (real) ((int)getbits(k) + d1) ) * cm; - fraction[1][2][i] = (fraction[0][2][i] = (real) ((int)getbits(k) + d1) ) * cm; - cm=muls[k][scale[x1]]; - fraction[0][0][i] *= cm; fraction[0][1][i] *= cm; fraction[0][2][i] *= cm; - } - else - { - static int *table[] = { 0,0,0,grp_3tab,0,grp_5tab,0,0,0,grp_9tab }; - unsigned int idx,*tab,m1,m2; - m1 = scale[x1]; m2 = scale[x1+3]; - idx = getbits(k); - tab = (unsigned int *) (table[d1] + idx + idx + idx); - fraction[0][0][i] = muls[*tab][m1]; fraction[1][0][i] = muls[*tab++][m2]; - fraction[0][1][i] = muls[*tab][m1]; fraction[1][1][i] = muls[*tab++][m2]; - fraction[0][2][i] = muls[*tab][m1]; fraction[1][2][i] = muls[*tab][m2]; - } - scale+=6; - } - else { - fraction[0][0][i] = fraction[0][1][i] = fraction[0][2][i] = - fraction[1][0][i] = fraction[1][1][i] = fraction[1][2][i] = 0.0; - } -/* - should we use individual scalefac for channel 2 or - is the current way the right one , where we just copy channel 1 to - channel 2 ?? - The current 'strange' thing is, that we throw away the scalefac - values for the second channel ...!! --> changed .. now we use the scalefac values of channel one !! -*/ - } - - for(i=sblimit;ilsf) - table = 4; - else - table = translate[fr->sampling_frequency][2-fr->stereo][fr->bitrate_index]; - sblim = sblims[table]; - - fr->alloc = tables[table]; - fr->II_sblimit = sblim; -} - -int do_layer2(struct frame *fr,unsigned char *pcm_sample,int *pcm_point) -{ - int clip=0; - int i,j; - int stereo = fr->stereo; - real fraction[2][4][SBLIMIT]; /* pick_table clears unused subbands */ - unsigned int bit_alloc[64]; - int scale[192]; - int single = fr->single; - - II_select_table(fr); - fr->jsbound = (fr->mode == MPG_MD_JOINT_STEREO) ? - (fr->mode_ext<<2)+4 : fr->II_sblimit; - - if(stereo == 1 || single == 3) - single = 0; - - II_step_one(bit_alloc, scale, fr); - - for (i=0;i>2); - for (j=0;j<3;j++) { - if(single >= 0) { - clip += synth_1to1_mono(fr->mp,fraction[0][j],pcm_sample,pcm_point); - } - else { - int p1 = *pcm_point; - clip += synth_1to1(fr->mp,fraction[0][j],0,pcm_sample,&p1); - clip += synth_1to1(fr->mp,fraction[1][j],1,pcm_sample,pcm_point); - } - - } - } - - return clip; -} diff --git a/dll/win32/winemp3.acm/layer3.c b/dll/win32/winemp3.acm/layer3.c deleted file mode 100644 index 17f5a7a9972..00000000000 --- a/dll/win32/winemp3.acm/layer3.c +++ /dev/null @@ -1,1613 +0,0 @@ -/* - * Mpeg Layer-3 audio decoder - * -------------------------- - * copyright (c) 1995,1996,1997 by Michael Hipp. - * All rights reserved. See also 'README' - * This file has been copied from mpglib. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#include "config.h" -#include -#include "wine/debug.h" -#include "mpg123.h" -#include "mpglib.h" -#include "huffman.h" - -#define MPEG1 -WINE_DEFAULT_DEBUG_CHANNEL(mpeg3); - -static real ispow[8207]; -static real aa_ca[8],aa_cs[8]; -static real COS1[12][6]; -static real win[4][36]; -static real win1[4][36]; -static real gainpow2[256+118+4]; -static real COS9[9]; -static real COS6_1,COS6_2; -static real tfcos36[9]; -static real tfcos12[3]; - -struct bandInfoStruct { - short longIdx[23]; - short longDiff[22]; - short shortIdx[14]; - short shortDiff[13]; -}; - -static int longLimit[9][23]; -static int shortLimit[9][14]; - -static const struct bandInfoStruct bandInfo[9] = { - -/* MPEG 1.0 */ - { {0,4,8,12,16,20,24,30,36,44,52,62,74, 90,110,134,162,196,238,288,342,418,576}, - {4,4,4,4,4,4,6,6,8, 8,10,12,16,20,24,28,34,42,50,54, 76,158}, - {0,4*3,8*3,12*3,16*3,22*3,30*3,40*3,52*3,66*3, 84*3,106*3,136*3,192*3}, - {4,4,4,4,6,8,10,12,14,18,22,30,56} } , - - { {0,4,8,12,16,20,24,30,36,42,50,60,72, 88,106,128,156,190,230,276,330,384,576}, - {4,4,4,4,4,4,6,6,6, 8,10,12,16,18,22,28,34,40,46,54, 54,192}, - {0,4*3,8*3,12*3,16*3,22*3,28*3,38*3,50*3,64*3, 80*3,100*3,126*3,192*3}, - {4,4,4,4,6,6,10,12,14,16,20,26,66} } , - - { {0,4,8,12,16,20,24,30,36,44,54,66,82,102,126,156,194,240,296,364,448,550,576} , - {4,4,4,4,4,4,6,6,8,10,12,16,20,24,30,38,46,56,68,84,102, 26} , - {0,4*3,8*3,12*3,16*3,22*3,30*3,42*3,58*3,78*3,104*3,138*3,180*3,192*3} , - {4,4,4,4,6,8,12,16,20,26,34,42,12} } , - -/* MPEG 2.0 */ - { {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576}, - {6,6,6,6,6,6,8,10,12,14,16,20,24,28,32,38,46,52,60,68,58,54 } , - {0,4*3,8*3,12*3,18*3,24*3,32*3,42*3,56*3,74*3,100*3,132*3,174*3,192*3} , - {4,4,4,6,6,8,10,14,18,26,32,42,18 } } , - - { {0,6,12,18,24,30,36,44,54,66,80,96,114,136,162,194,232,278,330,394,464,540,576}, - {6,6,6,6,6,6,8,10,12,14,16,18,22,26,32,38,46,52,64,70,76,36 } , - {0,4*3,8*3,12*3,18*3,26*3,36*3,48*3,62*3,80*3,104*3,136*3,180*3,192*3} , - {4,4,4,6,8,10,12,14,18,24,32,44,12 } } , - - { {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576}, - {6,6,6,6,6,6,8,10,12,14,16,20,24,28,32,38,46,52,60,68,58,54 }, - {0,4*3,8*3,12*3,18*3,26*3,36*3,48*3,62*3,80*3,104*3,134*3,174*3,192*3}, - {4,4,4,6,8,10,12,14,18,24,30,40,18 } } , -/* MPEG 2.5 */ - { {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576} , - {6,6,6,6,6,6,8,10,12,14,16,20,24,28,32,38,46,52,60,68,58,54}, - {0,12,24,36,54,78,108,144,186,240,312,402,522,576}, - {4,4,4,6,8,10,12,14,18,24,30,40,18} }, - { {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576} , - {6,6,6,6,6,6,8,10,12,14,16,20,24,28,32,38,46,52,60,68,58,54}, - {0,12,24,36,54,78,108,144,186,240,312,402,522,576}, - {4,4,4,6,8,10,12,14,18,24,30,40,18} }, - { {0,12,24,36,48,60,72,88,108,132,160,192,232,280,336,400,476,566,568,570,572,574,576}, - {12,12,12,12,12,12,16,20,24,28,32,40,48,56,64,76,90,2,2,2,2,2}, - {0, 24, 48, 72,108,156,216,288,372,480,486,492,498,576}, - {8,8,8,12,16,20,24,28,36,2,2,2,26} } , -}; - -static int mapbuf0[9][152]; -static int mapbuf1[9][156]; -static int mapbuf2[9][44]; -static int *map[9][3]; -static int *mapend[9][3]; - -static unsigned int n_slen2[512]; /* MPEG 2.0 slen for 'normal' mode */ -static unsigned int i_slen2[256]; /* MPEG 2.0 slen for intensity stereo */ - -static real tan1_1[16],tan2_1[16],tan1_2[16],tan2_2[16]; -static real pow1_1[2][16],pow2_1[2][16],pow1_2[2][16],pow2_2[2][16]; - -/* - * init tables for layer-3 - */ -void init_layer3(int down_sample_sblimit) -{ - int i,j,k,l; - - for(i=-256;i<118+4;i++) - gainpow2[i+256] = pow((double)2.0,-0.25 * (double) (i+210) ); - - for(i=0;i<8207;i++) - ispow[i] = pow((double)i,(double)4.0/3.0); - - for (i=0;i<8;i++) - { - static const double Ci[8]={-0.6,-0.535,-0.33,-0.185,-0.095,-0.041,-0.0142,-0.0037}; - double sq=sqrt(1.0+Ci[i]*Ci[i]); - aa_cs[i] = 1.0/sq; - aa_ca[i] = Ci[i]/sq; - } - - for(i=0;i<18;i++) - { - win[0][i] = win[1][i] = 0.5 * sin( M_PI / 72.0 * (double) (2*(i+0) +1) ) / cos ( M_PI * (double) (2*(i+0) +19) / 72.0 ); - win[0][i+18] = win[3][i+18] = 0.5 * sin( M_PI / 72.0 * (double) (2*(i+18)+1) ) / cos ( M_PI * (double) (2*(i+18)+19) / 72.0 ); - } - for(i=0;i<6;i++) - { - win[1][i+18] = 0.5 / cos ( M_PI * (double) (2*(i+18)+19) / 72.0 ); - win[3][i+12] = 0.5 / cos ( M_PI * (double) (2*(i+12)+19) / 72.0 ); - win[1][i+24] = 0.5 * sin( M_PI / 24.0 * (double) (2*i+13) ) / cos ( M_PI * (double) (2*(i+24)+19) / 72.0 ); - win[1][i+30] = win[3][i] = 0.0; - win[3][i+6 ] = 0.5 * sin( M_PI / 24.0 * (double) (2*i+1) ) / cos ( M_PI * (double) (2*(i+6 )+19) / 72.0 ); - } - - for(i=0;i<9;i++) - COS9[i] = cos( M_PI / 18.0 * (double) i); - - for(i=0;i<9;i++) - tfcos36[i] = 0.5 / cos ( M_PI * (double) (i*2+1) / 36.0 ); - for(i=0;i<3;i++) - tfcos12[i] = 0.5 / cos ( M_PI * (double) (i*2+1) / 12.0 ); - - COS6_1 = cos( M_PI / 6.0 * (double) 1); - COS6_2 = cos( M_PI / 6.0 * (double) 2); - - for(i=0;i<12;i++) - { - win[2][i] = 0.5 * sin( M_PI / 24.0 * (double) (2*i+1) ) / cos ( M_PI * (double) (2*i+7) / 24.0 ); - for(j=0;j<6;j++) - COS1[i][j] = cos( M_PI / 24.0 * (double) ((2*i+7)*(2*j+1)) ); - } - - for(j=0;j<4;j++) { - static const int len[4] = { 36,36,12,36 }; - for(i=0;i 0) { - if( i & 1 ) - p1 = pow(base,(i+1.0)*0.5); - else - p2 = pow(base,i*0.5); - } - pow1_1[j][i] = p1; - pow2_1[j][i] = p2; - pow1_2[j][i] = M_SQRT2 * p1; - pow2_2[j][i] = M_SQRT2 * p2; - } - } - - for(j=0;j<9;j++) - { - const struct bandInfoStruct *bi = &bandInfo[j]; - int *mp; - int cb,lwin; - const short *bdf; - - mp = map[j][0] = mapbuf0[j]; - bdf = bi->longDiff; - for(i=0,cb = 0; cb < 8 ; cb++,i+=*bdf++) { - *mp++ = (*bdf) >> 1; - *mp++ = i; - *mp++ = 3; - *mp++ = cb; - } - bdf = bi->shortDiff+3; - for(cb=3;cb<13;cb++) { - int l = (*bdf++) >> 1; - for(lwin=0;lwin<3;lwin++) { - *mp++ = l; - *mp++ = i + lwin; - *mp++ = lwin; - *mp++ = cb; - } - i += 6*l; - } - mapend[j][0] = mp; - - mp = map[j][1] = mapbuf1[j]; - bdf = bi->shortDiff+0; - for(i=0,cb=0;cb<13;cb++) { - int l = (*bdf++) >> 1; - for(lwin=0;lwin<3;lwin++) { - *mp++ = l; - *mp++ = i + lwin; - *mp++ = lwin; - *mp++ = cb; - } - i += 6*l; - } - mapend[j][1] = mp; - - mp = map[j][2] = mapbuf2[j]; - bdf = bi->longDiff; - for(cb = 0; cb < 22 ; cb++) { - *mp++ = (*bdf++) >> 1; - *mp++ = cb; - } - mapend[j][2] = mp; - - } - - for(j=0;j<9;j++) { - for(i=0;i<23;i++) { - longLimit[j][i] = (bandInfo[j].longIdx[i] - 1 + 8) / 18 + 1; - if(longLimit[j][i] > (down_sample_sblimit) ) - longLimit[j][i] = down_sample_sblimit; - } - for(i=0;i<14;i++) { - shortLimit[j][i] = (bandInfo[j].shortIdx[i] - 1) / 18 + 1; - if(shortLimit[j][i] > (down_sample_sblimit) ) - shortLimit[j][i] = down_sample_sblimit; - } - } - - for(i=0;i<5;i++) { - for(j=0;j<6;j++) { - for(k=0;k<6;k++) { - int n = k + j * 6 + i * 36; - i_slen2[n] = i|(j<<3)|(k<<6)|(3<<12); - } - } - } - for(i=0;i<4;i++) { - for(j=0;j<4;j++) { - for(k=0;k<4;k++) { - int n = k + j * 4 + i * 16; - i_slen2[n+180] = i|(j<<3)|(k<<6)|(4<<12); - } - } - } - for(i=0;i<4;i++) { - for(j=0;j<3;j++) { - int n = j + i * 3; - i_slen2[n+244] = i|(j<<3) | (5<<12); - n_slen2[n+500] = i|(j<<3) | (2<<12) | (1<<15); - } - } - - for(i=0;i<5;i++) { - for(j=0;j<5;j++) { - for(k=0;k<4;k++) { - for(l=0;l<4;l++) { - int n = l + k * 4 + j * 16 + i * 80; - n_slen2[n] = i|(j<<3)|(k<<6)|(l<<9)|(0<<12); - } - } - } - } - for(i=0;i<5;i++) { - for(j=0;j<5;j++) { - for(k=0;k<4;k++) { - int n = k + j * 4 + i * 20; - n_slen2[n+400] = i|(j<<3)|(k<<6)|(1<<12); - } - } - } -} - -/* - * read additional side information - */ -#ifdef MPEG1 -static int III_get_side_info_1(struct III_sideinfo *si,int stereo, - int ms_stereo,long sfreq,int single) -{ - int ch, gr; - int powdiff = (single == 3) ? 4 : 0; - - si->main_data_begin = getbits(9); - if (stereo == 1) - si->private_bits = getbits_fast(5); - else - si->private_bits = getbits_fast(3); - - for (ch=0; chch[ch].gr[0].scfsi = -1; - si->ch[ch].gr[1].scfsi = getbits_fast(4); - } - - for (gr=0; gr<2; gr++) - { - for (ch=0; chch[ch].gr[gr]); - - gr_info->part2_3_length = getbits(12); - gr_info->big_values = getbits_fast(9); - if(gr_info->big_values > 288) { - FIXME("big_values (%d) too large!\n", gr_info->big_values); - gr_info->big_values = 288; - } - gr_info->pow2gain = gainpow2+256 - getbits_fast(8) + powdiff; - if(ms_stereo) - gr_info->pow2gain += 2; - gr_info->scalefac_compress = getbits_fast(4); -/* window-switching flag == 1 for block_Type != 0 .. and block-type == 0 -> win-sw-flag = 0 */ - if(get1bit()) - { - int i; - gr_info->block_type = getbits_fast(2); - gr_info->mixed_block_flag = get1bit(); - gr_info->table_select[0] = getbits_fast(5); - gr_info->table_select[1] = getbits_fast(5); - /* - * table_select[2] not needed, because there is no region2, - * but to satisfy some verifications tools we set it either. - */ - gr_info->table_select[2] = 0; - for(i=0;i<3;i++) - gr_info->full_gain[i] = gr_info->pow2gain + (getbits_fast(3)<<3); - - if(gr_info->block_type == 0) { - FIXME("Blocktype == 0 and window-switching == 1 not allowed.\n"); - return 0; - } - /* region_count/start parameters are implicit in this case. */ - gr_info->region1start = 36>>1; - gr_info->region2start = 576>>1; - } - else - { - int i,r0c,r1c; - for (i=0; i<3; i++) - gr_info->table_select[i] = getbits_fast(5); - r0c = getbits_fast(4); - r1c = getbits_fast(3); - gr_info->region1start = bandInfo[sfreq].longIdx[r0c+1] >> 1 ; - gr_info->region2start = bandInfo[sfreq].longIdx[r0c+1+r1c+1] >> 1; - gr_info->block_type = 0; - gr_info->mixed_block_flag = 0; - } - gr_info->preflag = get1bit(); - gr_info->scalefac_scale = get1bit(); - gr_info->count1table_select = get1bit(); - } - } - return !0; -} -#endif - -/* - * Side Info for MPEG 2.0 / LSF - */ -static int III_get_side_info_2(struct III_sideinfo *si,int stereo, - int ms_stereo,long sfreq,int single) -{ - int ch; - int powdiff = (single == 3) ? 4 : 0; - - si->main_data_begin = getbits(8); - if (stereo == 1) - si->private_bits = get1bit(); - else - si->private_bits = getbits_fast(2); - - for (ch=0; chch[ch].gr[0]); - - gr_info->part2_3_length = getbits(12); - gr_info->big_values = getbits_fast(9); - if(gr_info->big_values > 288) { - FIXME("big_values(%d) too large!\n", gr_info->big_values); - gr_info->big_values = 288; - } - gr_info->pow2gain = gainpow2+256 - getbits_fast(8) + powdiff; - if(ms_stereo) - gr_info->pow2gain += 2; - gr_info->scalefac_compress = getbits(9); -/* window-switching flag == 1 for block_Type != 0 .. and block-type == 0 -> win-sw-flag = 0 */ - if(get1bit()) - { - int i; - gr_info->block_type = getbits_fast(2); - gr_info->mixed_block_flag = get1bit(); - gr_info->table_select[0] = getbits_fast(5); - gr_info->table_select[1] = getbits_fast(5); - /* - * table_select[2] not needed, because there is no region2, - * but to satisfy some verifications tools we set it either. - */ - gr_info->table_select[2] = 0; - for(i=0;i<3;i++) - gr_info->full_gain[i] = gr_info->pow2gain + (getbits_fast(3)<<3); - - if(gr_info->block_type == 0) { - FIXME("Blocktype == 0 and window-switching == 1 not allowed.\n"); - return 0; - } - /* region_count/start parameters are implicit in this case. */ -/* check this again! */ - if(gr_info->block_type == 2) - gr_info->region1start = 36>>1; - else if(sfreq == 8) -/* check this for 2.5 and sfreq=8 */ - gr_info->region1start = 108>>1; - else - gr_info->region1start = 54>>1; - gr_info->region2start = 576>>1; - } - else - { - int i,r0c,r1c; - for (i=0; i<3; i++) - gr_info->table_select[i] = getbits_fast(5); - r0c = getbits_fast(4); - r1c = getbits_fast(3); - gr_info->region1start = bandInfo[sfreq].longIdx[r0c+1] >> 1 ; - gr_info->region2start = bandInfo[sfreq].longIdx[r0c+1+r1c+1] >> 1; - gr_info->block_type = 0; - gr_info->mixed_block_flag = 0; - } - gr_info->scalefac_scale = get1bit(); - gr_info->count1table_select = get1bit(); - } - return !0; -} - -/* - * read scalefactors - */ -#ifdef MPEG1 -static int III_get_scale_factors_1(int *scf,struct gr_info_s *gr_info) -{ - static const unsigned char slen[2][16] = { - {0, 0, 0, 0, 3, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4}, - {0, 1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 3} - }; - int numbits; - int num0 = slen[0][gr_info->scalefac_compress]; - int num1 = slen[1][gr_info->scalefac_compress]; - - if (gr_info->block_type == 2) { - int i=18; - numbits = (num0 + num1) * 18; - - if (gr_info->mixed_block_flag) { - for (i=8;i;i--) - *scf++ = getbits_fast(num0); - i = 9; - numbits -= num0; /* num0 * 17 + num1 * 18 */ - } - - for (;i;i--) - *scf++ = getbits_fast(num0); - for (i = 18; i; i--) - *scf++ = getbits_fast(num1); - *scf++ = 0; *scf++ = 0; *scf++ = 0; /* short[13][0..2] = 0 */ - } - else { - int i; - int scfsi = gr_info->scfsi; - - if(scfsi < 0) { /* scfsi < 0 => granule == 0 */ - for(i=11;i;i--) - *scf++ = getbits_fast(num0); - for(i=10;i;i--) - *scf++ = getbits_fast(num1); - numbits = (num0 + num1) * 10 + num0; - *scf++ = 0; - } - else { - numbits = 0; - if(!(scfsi & 0x8)) { - for (i=0;i<6;i++) - *scf++ = getbits_fast(num0); - numbits += num0 * 6; - } - else { - scf += 6; - } - - if(!(scfsi & 0x4)) { - for (i=0;i<5;i++) - *scf++ = getbits_fast(num0); - numbits += num0 * 5; - } - else { - scf += 5; - } - - if(!(scfsi & 0x2)) { - for(i=0;i<5;i++) - *scf++ = getbits_fast(num1); - numbits += num1 * 5; - } - else { - scf += 5; - } - - if(!(scfsi & 0x1)) { - for (i=0;i<5;i++) - *scf++ = getbits_fast(num1); - numbits += num1 * 5; - } - else { - scf += 5; - } - *scf++ = 0; /* no l[21] in original sources */ - } - } - return numbits; -} -#endif - - -static int III_get_scale_factors_2(int *scf,struct gr_info_s *gr_info,int i_stereo) -{ - const unsigned char *pnt; - int i,j; - unsigned int slen; - int n = 0; - int numbits = 0; - - static const unsigned char stab[3][6][4] = { - { { 6, 5, 5,5 } , { 6, 5, 7,3 } , { 11,10,0,0} , - { 7, 7, 7,0 } , { 6, 6, 6,3 } , { 8, 8,5,0} } , - { { 9, 9, 9,9 } , { 9, 9,12,6 } , { 18,18,0,0} , - {12,12,12,0 } , {12, 9, 9,6 } , { 15,12,9,0} } , - { { 6, 9, 9,9 } , { 6, 9,12,6 } , { 15,18,0,0} , - { 6,15,12,0 } , { 6,12, 9,6 } , { 6,18,9,0} } }; - - if(i_stereo) /* i_stereo AND second channel -> do_layer3() checks this */ - slen = i_slen2[gr_info->scalefac_compress>>1]; - else - slen = n_slen2[gr_info->scalefac_compress]; - - gr_info->preflag = (slen>>15) & 0x1; - - n = 0; - if( gr_info->block_type == 2 ) { - n++; - if(gr_info->mixed_block_flag) - n++; - } - - pnt = stab[n][(slen>>12)&0x7]; - - for(i=0;i<4;i++) { - int num = slen & 0x7; - slen >>= 3; - if(num) { - for(j=0;j<(int)(pnt[i]);j++) - *scf++ = getbits_fast(num); - numbits += pnt[i] * num; - } - else { - for(j=0;j<(int)(pnt[i]);j++) - *scf++ = 0; - } - } - - n = (n << 1) + 1; - for(i=0;iscalefac_scale; - real *xrpnt = (real *) xr; - int l[3],l3; - int part2remain = gr_info->part2_3_length - part2bits; - int *me; - - { - int bv = gr_info->big_values; - int region1 = gr_info->region1start; - int region2 = gr_info->region2start; - - l3 = ((576>>1)-bv)>>1; -/* - * we may lose the 'odd' bit here !! - * check this later again - */ - if(bv <= region1) { - l[0] = bv; l[1] = 0; l[2] = 0; - } - else { - l[0] = region1; - if(bv <= region2) { - l[1] = bv - l[0]; l[2] = 0; - } - else { - l[1] = region2 - l[0]; l[2] = bv - region2; - } - } - } - - if(gr_info->block_type == 2) { - /* - * decoding with short or mixed mode BandIndex table - */ - int i,max[4]; - int step=0,lwin=0,cb=0; - register real v = 0.0; - register int *m,mc; - - if(gr_info->mixed_block_flag) { - max[3] = -1; - max[0] = max[1] = max[2] = 2; - m = map[sfreq][0]; - me = mapend[sfreq][0]; - } - else { - max[0] = max[1] = max[2] = max[3] = -1; - /* max[3] not really needed in this case */ - m = map[sfreq][1]; - me = mapend[sfreq][1]; - } - - mc = 0; - for(i=0;i<2;i++) { - int lp = l[i]; - const struct newhuff *h = ht+gr_info->table_select[i]; - for(;lp;lp--,mc--) { - register int x,y; - if( (!mc) ) { - mc = *m++; - xrpnt = ((real *) xr) + (*m++); - lwin = *m++; - cb = *m++; - if(lwin == 3) { - v = gr_info->pow2gain[(*scf++) << shift]; - step = 1; - } - else { - v = gr_info->full_gain[lwin][(*scf++) << shift]; - step = 3; - } - } - { - register const short *val = h->table; - while((y=*val++)<0) { - if (get1bit()) - val -= y; - part2remain--; - } - x = y >> 4; - y &= 0xf; - } - if(x == 15) { - max[lwin] = cb; - part2remain -= h->linbits+1; - x += getbits(h->linbits); - if(get1bit()) - *xrpnt = -ispow[x] * v; - else - *xrpnt = ispow[x] * v; - } - else if(x) { - max[lwin] = cb; - if(get1bit()) - *xrpnt = -ispow[x] * v; - else - *xrpnt = ispow[x] * v; - part2remain--; - } - else - *xrpnt = 0.0; - xrpnt += step; - if(y == 15) { - max[lwin] = cb; - part2remain -= h->linbits+1; - y += getbits(h->linbits); - if(get1bit()) - *xrpnt = -ispow[y] * v; - else - *xrpnt = ispow[y] * v; - } - else if(y) { - max[lwin] = cb; - if(get1bit()) - *xrpnt = -ispow[y] * v; - else - *xrpnt = ispow[y] * v; - part2remain--; - } - else - *xrpnt = 0.0; - xrpnt += step; - } - } - for(;l3 && (part2remain > 0);l3--) { - const struct newhuff *h = htc+gr_info->count1table_select; - const short *val = h->table; - short a; - - while((a=*val++)<0) { - part2remain--; - if(part2remain < 0) { - part2remain++; - a = 0; - break; - } - if (get1bit()) - val -= a; - } - - for(i=0;i<4;i++) { - if(!(i & 1)) { - if(!mc) { - mc = *m++; - xrpnt = ((real *) xr) + (*m++); - lwin = *m++; - cb = *m++; - if(lwin == 3) { - v = gr_info->pow2gain[(*scf++) << shift]; - step = 1; - } - else { - v = gr_info->full_gain[lwin][(*scf++) << shift]; - step = 3; - } - } - mc--; - } - if( (a & (0x8>>i)) ) { - max[lwin] = cb; - part2remain--; - if(part2remain < 0) { - part2remain++; - break; - } - if(get1bit()) - *xrpnt = -v; - else - *xrpnt = v; - } - else - *xrpnt = 0.0; - xrpnt += step; - } - } - - while( m < me ) { - if(!mc) { - mc = *m++; - xrpnt = ((real *) xr) + *m++; - if( (*m++) == 3) - step = 1; - else - step = 3; - m++; /* cb */ - } - mc--; - *xrpnt = 0.0; - xrpnt += step; - *xrpnt = 0.0; - xrpnt += step; -/* we could add a little opt. here: - * if we finished a band for window 3 or a long band - * further bands could copied in a simple loop without a - * special 'map' decoding - */ - } - - gr_info->maxband[0] = max[0]+1; - gr_info->maxband[1] = max[1]+1; - gr_info->maxband[2] = max[2]+1; - gr_info->maxbandl = max[3]+1; - - { - int rmax = max[0] > max[1] ? max[0] : max[1]; - rmax = (rmax > max[2] ? rmax : max[2]) + 1; - gr_info->maxb = rmax ? shortLimit[sfreq][rmax] : longLimit[sfreq][max[3]+1]; - } - - } - else { - /* - * decoding with 'long' BandIndex table (block_type != 2) - */ - const int *pretab = gr_info->preflag ? pretab1 : pretab2; - int i,max = -1; - int cb = 0; - register int *m = map[sfreq][2]; - register real v = 0.0; - register int mc = 0; -#if 0 - me = mapend[sfreq][2]; -#endif - - /* - * long hash table values - */ - for(i=0;i<3;i++) { - int lp = l[i]; - const struct newhuff *h = ht+gr_info->table_select[i]; - - for(;lp;lp--,mc--) { - int x,y; - - if(!mc) { - mc = *m++; - v = gr_info->pow2gain[((*scf++) + (*pretab++)) << shift]; - cb = *m++; - } - { - register const short *val = h->table; - while((y=*val++)<0) { - if (get1bit()) - val -= y; - part2remain--; - } - x = y >> 4; - y &= 0xf; - } - if (x == 15) { - max = cb; - part2remain -= h->linbits+1; - x += getbits(h->linbits); - if(get1bit()) - *xrpnt++ = -ispow[x] * v; - else - *xrpnt++ = ispow[x] * v; - } - else if(x) { - max = cb; - if(get1bit()) - *xrpnt++ = -ispow[x] * v; - else - *xrpnt++ = ispow[x] * v; - part2remain--; - } - else - *xrpnt++ = 0.0; - - if (y == 15) { - max = cb; - part2remain -= h->linbits+1; - y += getbits(h->linbits); - if(get1bit()) - *xrpnt++ = -ispow[y] * v; - else - *xrpnt++ = ispow[y] * v; - } - else if(y) { - max = cb; - if(get1bit()) - *xrpnt++ = -ispow[y] * v; - else - *xrpnt++ = ispow[y] * v; - part2remain--; - } - else - *xrpnt++ = 0.0; - } - } - - /* - * short (count1table) values - */ - for(;l3 && (part2remain > 0);l3--) { - const struct newhuff *h = htc+gr_info->count1table_select; - const short *val = h->table; - short a; - - while((a=*val++)<0) { - part2remain--; - if(part2remain < 0) { - part2remain++; - a = 0; - break; - } - if (get1bit()) - val -= a; - } - - for(i=0;i<4;i++) { - if(!(i & 1)) { - if(!mc) { - mc = *m++; - cb = *m++; - v = gr_info->pow2gain[((*scf++) + (*pretab++)) << shift]; - } - mc--; - } - if ( (a & (0x8>>i)) ) { - max = cb; - part2remain--; - if(part2remain < 0) { - part2remain++; - break; - } - if(get1bit()) - *xrpnt++ = -v; - else - *xrpnt++ = v; - } - else - *xrpnt++ = 0.0; - } - } - - /* - * zero part - */ - for(i=(&xr[SBLIMIT][0]-xrpnt)>>1;i;i--) { - *xrpnt++ = 0.0; - *xrpnt++ = 0.0; - } - - gr_info->maxbandl = max+1; - gr_info->maxb = longLimit[sfreq][gr_info->maxbandl]; - } - - while( part2remain > 16 ) { - getbits(16); /* Dismiss stuffing Bits */ - part2remain -= 16; - } - if(part2remain > 0) - getbits(part2remain); - else if(part2remain < 0) { - FIXME("mpg123: Can't rewind stream by %d bits!\n",-part2remain); - return 1; /* -> error */ - } - return 0; -} - -/* - * III_stereo: calculate real channel values for Joint-I-Stereo-mode - */ -static void III_i_stereo(real xr_buf[2][SBLIMIT][SSLIMIT],int *scalefac, - struct gr_info_s *gr_info,int sfreq,int ms_stereo,int lsf) -{ - real (*xr)[SBLIMIT*SSLIMIT] = (real (*)[SBLIMIT*SSLIMIT] ) xr_buf; - const struct bandInfoStruct *bi = &bandInfo[sfreq]; - real *tab1,*tab2; - - if(lsf) { - int p = gr_info->scalefac_compress & 0x1; - if(ms_stereo) { - tab1 = pow1_2[p]; tab2 = pow2_2[p]; - } - else { - tab1 = pow1_1[p]; tab2 = pow2_1[p]; - } - } - else { - if(ms_stereo) { - tab1 = tan1_2; tab2 = tan2_2; - } - else { - tab1 = tan1_1; tab2 = tan2_1; - } - } - - if (gr_info->block_type == 2) - { - int lwin,do_l = 0; - if( gr_info->mixed_block_flag ) - do_l = 1; - - for (lwin=0;lwin<3;lwin++) /* process each window */ - { - /* get first band with zero values */ - int is_p,sb,idx,sfb = gr_info->maxband[lwin]; /* sfb is minimal 3 for mixed mode */ - if(sfb > 3) - do_l = 0; - - for(;sfb<12;sfb++) - { - is_p = scalefac[sfb*3+lwin-gr_info->mixed_block_flag]; /* scale: 0-15 */ - if(is_p != 7) { - real t1,t2; - sb = bi->shortDiff[sfb]; - idx = bi->shortIdx[sfb] + lwin; - t1 = tab1[is_p]; t2 = tab2[is_p]; - for (; sb > 0; sb--,idx+=3) - { - real v = xr[0][idx]; - xr[0][idx] = v * t1; - xr[1][idx] = v * t2; - } - } - } - -#if 1 -/* in the original: copy 10 to 11 , here: copy 11 to 12 -maybe still wrong??? (copy 12 to 13?) */ - is_p = scalefac[11*3+lwin-gr_info->mixed_block_flag]; /* scale: 0-15 */ - sb = bi->shortDiff[12]; - idx = bi->shortIdx[12] + lwin; -#else - is_p = scalefac[10*3+lwin-gr_info->mixed_block_flag]; /* scale: 0-15 */ - sb = bi->shortDiff[11]; - idx = bi->shortIdx[11] + lwin; -#endif - if(is_p != 7) - { - real t1,t2; - t1 = tab1[is_p]; t2 = tab2[is_p]; - for ( ; sb > 0; sb--,idx+=3 ) - { - real v = xr[0][idx]; - xr[0][idx] = v * t1; - xr[1][idx] = v * t2; - } - } - } /* end for(lwin; .. ; . ) */ - - if (do_l) - { -/* also check l-part, if ALL bands in the three windows are 'empty' - * and mode = mixed_mode - */ - int sfb = gr_info->maxbandl; - int idx; - if(sfb > 21) return; /* similarity fix related to CVE-2006-1655 */ - idx = bi->longIdx[sfb]; - for ( ; sfb<8; sfb++ ) - { - int sb = bi->longDiff[sfb]; - int is_p = scalefac[sfb]; /* scale: 0-15 */ - if(is_p != 7) { - real t1,t2; - t1 = tab1[is_p]; t2 = tab2[is_p]; - for ( ; sb > 0; sb--,idx++) - { - real v = xr[0][idx]; - xr[0][idx] = v * t1; - xr[1][idx] = v * t2; - } - } - else - idx += sb; - } - } - } - else /* ((gr_info->block_type != 2)) */ - { - int sfb = gr_info->maxbandl; - int is_p,idx; - if (sfb > 21) return; /* tightened fix for CVE-2006-1655 */ - idx = bi->longIdx[sfb]; - for ( ; sfb<21; sfb++) - { - int sb = bi->longDiff[sfb]; - is_p = scalefac[sfb]; /* scale: 0-15 */ - if(is_p != 7) { - real t1,t2; - t1 = tab1[is_p]; t2 = tab2[is_p]; - for ( ; sb > 0; sb--,idx++) - { - real v = xr[0][idx]; - xr[0][idx] = v * t1; - xr[1][idx] = v * t2; - } - } - else - idx += sb; - } - - is_p = scalefac[20]; /* copy l-band 20 to l-band 21 */ - if(is_p != 7) - { - int sb; - real t1 = tab1[is_p],t2 = tab2[is_p]; - - for ( sb = bi->longDiff[21]; sb > 0; sb--,idx++ ) - { - real v = xr[0][idx]; - xr[0][idx] = v * t1; - xr[1][idx] = v * t2; - } - } - } /* ... */ -} - -static void III_antialias(real xr[SBLIMIT][SSLIMIT],struct gr_info_s *gr_info) -{ - int sblim; - - if(gr_info->block_type == 2) - { - if(!gr_info->mixed_block_flag) - return; - sblim = 1; - } - else { - sblim = gr_info->maxb-1; - } - - /* 31 alias-reduction operations between each pair of sub-bands */ - /* with 8 butterflies between each pair */ - - { - int sb; - real *xr1=(real *) xr[1]; - - for(sb=sblim;sb;sb--,xr1+=10) - { - int ss; - real *cs=aa_cs,*ca=aa_ca; - real *xr2 = xr1; - - for(ss=7;ss>=0;ss--) - { /* upper and lower butterfly inputs */ - register real bu = *--xr2,bd = *xr1; - *xr2 = (bu * (*cs) ) - (bd * (*ca) ); - *xr1++ = (bd * (*cs++) ) + (bu * (*ca++) ); - } - } - } -} - -/* - DCT inspired by Jeff Tsay's DCT from the maplay package - this is an optimized version with manual unroll. - - References: - [1] S. Winograd: "On Computing the Discrete Fourier Transform", - Mathematics of Computation, Volume 32, Number 141, January 1978, - Pages 175-199 -*/ - -static void dct36(real *inbuf,real *o1,real *o2,real *wintab,real *tsbuf) -{ - { - register real *in = inbuf; - - in[17]+=in[16]; in[16]+=in[15]; in[15]+=in[14]; - in[14]+=in[13]; in[13]+=in[12]; in[12]+=in[11]; - in[11]+=in[10]; in[10]+=in[9]; in[9] +=in[8]; - in[8] +=in[7]; in[7] +=in[6]; in[6] +=in[5]; - in[5] +=in[4]; in[4] +=in[3]; in[3] +=in[2]; - in[2] +=in[1]; in[1] +=in[0]; - - in[17]+=in[15]; in[15]+=in[13]; in[13]+=in[11]; in[11]+=in[9]; - in[9] +=in[7]; in[7] +=in[5]; in[5] +=in[3]; in[3] +=in[1]; - - - { - -#define MACRO0(v) { \ - real tmp; \ - out2[9+(v)] = (tmp = sum0 + sum1) * w[27+(v)]; \ - out2[8-(v)] = tmp * w[26-(v)]; } \ - sum0 -= sum1; \ - ts[SBLIMIT*(8-(v))] = out1[8-(v)] + sum0 * w[8-(v)]; \ - ts[SBLIMIT*(9+(v))] = out1[9+(v)] + sum0 * w[9+(v)]; -#define MACRO1(v) { \ - real sum0,sum1; \ - sum0 = tmp1a + tmp2a; \ - sum1 = (tmp1b + tmp2b) * tfcos36[(v)]; \ - MACRO0(v); } -#define MACRO2(v) { \ - real sum0,sum1; \ - sum0 = tmp2a - tmp1a; \ - sum1 = (tmp2b - tmp1b) * tfcos36[(v)]; \ - MACRO0(v); } - - register const real *c = COS9; - register real *out2 = o2; - register real *w = wintab; - register real *out1 = o1; - register real *ts = tsbuf; - - real ta33,ta66,tb33,tb66; - - ta33 = in[2*3+0] * c[3]; - ta66 = in[2*6+0] * c[6]; - tb33 = in[2*3+1] * c[3]; - tb66 = in[2*6+1] * c[6]; - - { - real tmp1a,tmp2a,tmp1b,tmp2b; - tmp1a = in[2*1+0] * c[1] + ta33 + in[2*5+0] * c[5] + in[2*7+0] * c[7]; - tmp1b = in[2*1+1] * c[1] + tb33 + in[2*5+1] * c[5] + in[2*7+1] * c[7]; - tmp2a = in[2*0+0] + in[2*2+0] * c[2] + in[2*4+0] * c[4] + ta66 + in[2*8+0] * c[8]; - tmp2b = in[2*0+1] + in[2*2+1] * c[2] + in[2*4+1] * c[4] + tb66 + in[2*8+1] * c[8]; - - MACRO1(0); - MACRO2(8); - } - - { - real tmp1a,tmp2a,tmp1b,tmp2b; - tmp1a = ( in[2*1+0] - in[2*5+0] - in[2*7+0] ) * c[3]; - tmp1b = ( in[2*1+1] - in[2*5+1] - in[2*7+1] ) * c[3]; - tmp2a = ( in[2*2+0] - in[2*4+0] - in[2*8+0] ) * c[6] - in[2*6+0] + in[2*0+0]; - tmp2b = ( in[2*2+1] - in[2*4+1] - in[2*8+1] ) * c[6] - in[2*6+1] + in[2*0+1]; - - MACRO1(1); - MACRO2(7); - } - - { - real tmp1a,tmp2a,tmp1b,tmp2b; - tmp1a = in[2*1+0] * c[5] - ta33 - in[2*5+0] * c[7] + in[2*7+0] * c[1]; - tmp1b = in[2*1+1] * c[5] - tb33 - in[2*5+1] * c[7] + in[2*7+1] * c[1]; - tmp2a = in[2*0+0] - in[2*2+0] * c[8] - in[2*4+0] * c[2] + ta66 + in[2*8+0] * c[4]; - tmp2b = in[2*0+1] - in[2*2+1] * c[8] - in[2*4+1] * c[2] + tb66 + in[2*8+1] * c[4]; - - MACRO1(2); - MACRO2(6); - } - - { - real tmp1a,tmp2a,tmp1b,tmp2b; - tmp1a = in[2*1+0] * c[7] - ta33 + in[2*5+0] * c[1] - in[2*7+0] * c[5]; - tmp1b = in[2*1+1] * c[7] - tb33 + in[2*5+1] * c[1] - in[2*7+1] * c[5]; - tmp2a = in[2*0+0] - in[2*2+0] * c[4] + in[2*4+0] * c[8] + ta66 - in[2*8+0] * c[2]; - tmp2b = in[2*0+1] - in[2*2+1] * c[4] + in[2*4+1] * c[8] + tb66 - in[2*8+1] * c[2]; - - MACRO1(3); - MACRO2(5); - } - - { - real sum0,sum1; - sum0 = in[2*0+0] - in[2*2+0] + in[2*4+0] - in[2*6+0] + in[2*8+0]; - sum1 = (in[2*0+1] - in[2*2+1] + in[2*4+1] - in[2*6+1] + in[2*8+1] ) * tfcos36[4]; - MACRO0(4); - } - } - - } -} - -/* - * new DCT12 - */ -static void dct12(real *in,real *rawout1,real *rawout2,register real *wi,register real *ts) -{ -#define DCT12_PART1 \ - in5 = in[5*3]; \ - in5 += (in4 = in[4*3]); \ - in4 += (in3 = in[3*3]); \ - in3 += (in2 = in[2*3]); \ - in2 += (in1 = in[1*3]); \ - in1 += (in0 = in[0*3]); \ - \ - in5 += in3; in3 += in1; \ - \ - in2 *= COS6_1; \ - in3 *= COS6_1; \ - -#define DCT12_PART2 \ - in0 += in4 * COS6_2; \ - \ - in4 = in0 + in2; \ - in0 -= in2; \ - \ - in1 += in5 * COS6_2; \ - \ - in5 = (in1 + in3) * tfcos12[0]; \ - in1 = (in1 - in3) * tfcos12[2]; \ - \ - in3 = in4 + in5; \ - in4 -= in5; \ - \ - in2 = in0 + in1; \ - in0 -= in1; - - - { - real in0,in1,in2,in3,in4,in5; - register real *out1 = rawout1; - ts[SBLIMIT*0] = out1[0]; ts[SBLIMIT*1] = out1[1]; ts[SBLIMIT*2] = out1[2]; - ts[SBLIMIT*3] = out1[3]; ts[SBLIMIT*4] = out1[4]; ts[SBLIMIT*5] = out1[5]; - - DCT12_PART1 - - { - real tmp0,tmp1 = (in0 - in4); - { - real tmp2 = (in1 - in5) * tfcos12[1]; - tmp0 = tmp1 + tmp2; - tmp1 -= tmp2; - } - ts[(17-1)*SBLIMIT] = out1[17-1] + tmp0 * wi[11-1]; - ts[(12+1)*SBLIMIT] = out1[12+1] + tmp0 * wi[6+1]; - ts[(6 +1)*SBLIMIT] = out1[6 +1] + tmp1 * wi[1]; - ts[(11-1)*SBLIMIT] = out1[11-1] + tmp1 * wi[5-1]; - } - - DCT12_PART2 - - ts[(17-0)*SBLIMIT] = out1[17-0] + in2 * wi[11-0]; - ts[(12+0)*SBLIMIT] = out1[12+0] + in2 * wi[6+0]; - ts[(12+2)*SBLIMIT] = out1[12+2] + in3 * wi[6+2]; - ts[(17-2)*SBLIMIT] = out1[17-2] + in3 * wi[11-2]; - - ts[(6+0)*SBLIMIT] = out1[6+0] + in0 * wi[0]; - ts[(11-0)*SBLIMIT] = out1[11-0] + in0 * wi[5-0]; - ts[(6+2)*SBLIMIT] = out1[6+2] + in4 * wi[2]; - ts[(11-2)*SBLIMIT] = out1[11-2] + in4 * wi[5-2]; - } - - in++; - - { - real in0,in1,in2,in3,in4,in5; - register real *out2 = rawout2; - - DCT12_PART1 - - { - real tmp0,tmp1 = (in0 - in4); - { - real tmp2 = (in1 - in5) * tfcos12[1]; - tmp0 = tmp1 + tmp2; - tmp1 -= tmp2; - } - out2[5-1] = tmp0 * wi[11-1]; - out2[0+1] = tmp0 * wi[6+1]; - ts[(12+1)*SBLIMIT] += tmp1 * wi[1]; - ts[(17-1)*SBLIMIT] += tmp1 * wi[5-1]; - } - - DCT12_PART2 - - out2[5-0] = in2 * wi[11-0]; - out2[0+0] = in2 * wi[6+0]; - out2[0+2] = in3 * wi[6+2]; - out2[5-2] = in3 * wi[11-2]; - - ts[(12+0)*SBLIMIT] += in0 * wi[0]; - ts[(17-0)*SBLIMIT] += in0 * wi[5-0]; - ts[(12+2)*SBLIMIT] += in4 * wi[2]; - ts[(17-2)*SBLIMIT] += in4 * wi[5-2]; - } - - in++; - - { - real in0,in1,in2,in3,in4,in5; - register real *out2 = rawout2; - out2[12]=out2[13]=out2[14]=out2[15]=out2[16]=out2[17]=0.0; - - DCT12_PART1 - - { - real tmp0,tmp1 = (in0 - in4); - { - real tmp2 = (in1 - in5) * tfcos12[1]; - tmp0 = tmp1 + tmp2; - tmp1 -= tmp2; - } - out2[11-1] = tmp0 * wi[11-1]; - out2[6 +1] = tmp0 * wi[6+1]; - out2[0+1] += tmp1 * wi[1]; - out2[5-1] += tmp1 * wi[5-1]; - } - - DCT12_PART2 - - out2[11-0] = in2 * wi[11-0]; - out2[6 +0] = in2 * wi[6+0]; - out2[6 +2] = in3 * wi[6+2]; - out2[11-2] = in3 * wi[11-2]; - - out2[0+0] += in0 * wi[0]; - out2[5-0] += in0 * wi[5-0]; - out2[0+2] += in4 * wi[2]; - out2[5-2] += in4 * wi[5-2]; - } -} - -/* - * III_hybrid - */ -static void III_hybrid(real fsIn[SBLIMIT][SSLIMIT],real tsOut[SSLIMIT][SBLIMIT], - int ch,struct gr_info_s *gr_info,struct mpstr *mp) -{ - real *tspnt = (real *) tsOut; - real (*block)[2][SBLIMIT*SSLIMIT] = mp->hybrid_block; - int *blc = mp->hybrid_blc; - real *rawout1,*rawout2; - int bt; - unsigned int sb = 0; - - { - int b = blc[ch]; - rawout1=block[b][ch]; - b=-b+1; - rawout2=block[b][ch]; - blc[ch] = b; - } - - - if(gr_info->mixed_block_flag) { - sb = 2; - dct36(fsIn[0],rawout1,rawout2,win[0],tspnt); - dct36(fsIn[1],rawout1+18,rawout2+18,win1[0],tspnt+1); - rawout1 += 36; rawout2 += 36; tspnt += 2; - } - - bt = gr_info->block_type; - if(bt == 2) { - for (; sbmaxb; sb+=2,tspnt+=2,rawout1+=36,rawout2+=36) { - dct12(fsIn[sb],rawout1,rawout2,win[2],tspnt); - dct12(fsIn[sb+1],rawout1+18,rawout2+18,win1[2],tspnt+1); - } - } - else { - for (; sbmaxb; sb+=2,tspnt+=2,rawout1+=36,rawout2+=36) { - dct36(fsIn[sb],rawout1,rawout2,win[bt],tspnt); - dct36(fsIn[sb+1],rawout1+18,rawout2+18,win1[bt],tspnt+1); - } - } - - for(;sbstereo; - int single = fr->single; - int ms_stereo,i_stereo; - int sfreq = fr->sampling_frequency; - int stereo1,granules; - - if(stereo == 1) { /* stream is mono */ - stereo1 = 1; - single = 0; - } - else if(single >= 0) /* stream is stereo, but force to mono */ - stereo1 = 1; - else - stereo1 = 2; - - if(fr->mode == MPG_MD_JOINT_STEREO) { - ms_stereo = fr->mode_ext & 0x2; - i_stereo = fr->mode_ext & 0x1; - } - else - ms_stereo = i_stereo = 0; - - if(fr->lsf) { - granules = 1; - if(!III_get_side_info_2(&sideinfo,stereo,ms_stereo,sfreq,single)) - return -1; - } - else { - granules = 2; -#ifdef MPEG1 - if(!III_get_side_info_1(&sideinfo,stereo,ms_stereo,sfreq,single)) - return -1; -#else - FIXME("Not supported\n"); -#endif - } - - if(set_pointer(fr->mp,sideinfo.main_data_begin) == MP3_ERR) - return -1; - - for (gr=0;grlsf) - part2bits = III_get_scale_factors_2(scalefacs[0],gr_info,0); - else { -#ifdef MPEG1 - part2bits = III_get_scale_factors_1(scalefacs[0],gr_info); -#else - FIXME("Not supported\n"); -#endif - } - if(III_dequantize_sample(hybridIn[0], scalefacs[0],gr_info,sfreq,part2bits)) - return clip; - } - if(stereo == 2) { - struct gr_info_s *gr_info = &(sideinfo.ch[1].gr[gr]); - long part2bits; - if(fr->lsf) - part2bits = III_get_scale_factors_2(scalefacs[1],gr_info,i_stereo); - else { -#ifdef MPEG1 - part2bits = III_get_scale_factors_1(scalefacs[1],gr_info); -#else - FIXME("Not supported\n"); -#endif - } - - if(III_dequantize_sample(hybridIn[1],scalefacs[1],gr_info,sfreq,part2bits)) - return clip; - - if(ms_stereo) { - int i; - for(i=0;ilsf); - - if(ms_stereo || i_stereo || (single == 3) ) { - if(gr_info->maxb > sideinfo.ch[0].gr[gr].maxb) - sideinfo.ch[0].gr[gr].maxb = gr_info->maxb; - else - gr_info->maxb = sideinfo.ch[0].gr[gr].maxb; - } - - switch(single) { - case 3: - { - register unsigned int i; - register real *in0 = (real *) hybridIn[0],*in1 = (real *) hybridIn[1]; - for(i=0;imaxb;i++,in0++) - *in0 = (*in0 + *in1++); /* *0.5 done by pow-scale */ - } - break; - case 1: - { - register unsigned int i; - register real *in0 = (real *) hybridIn[0],*in1 = (real *) hybridIn[1]; - for(i=0;imaxb;i++) - *in0++ = *in1++; - } - break; - } - } - - for(ch=0;chmp); - } - - for(ss=0;ss= 0) { - clip += synth_1to1_mono(fr->mp,hybridOut[0][ss],pcm_sample,pcm_point); - } - else { - int p1 = *pcm_point; - clip += synth_1to1(fr->mp,hybridOut[0][ss],0,pcm_sample,&p1); - clip += synth_1to1(fr->mp,hybridOut[1][ss],1,pcm_sample,pcm_point); - } - } - } - - return clip; -} diff --git a/dll/win32/winemp3.acm/mpegl3.c b/dll/win32/winemp3.acm/mpegl3.c index f30bfef7cfd..1e09c10463c 100644 --- a/dll/win32/winemp3.acm/mpegl3.c +++ b/dll/win32/winemp3.acm/mpegl3.c @@ -1,7 +1,9 @@ /* * MPEG Layer 3 handling * - * Copyright (C) 2002 Eric Pouech + * Copyright (C) 2002 Eric Pouech + * Copyright (C) 2009 CodeWeavers, Aric Stewart + * Copyright (C) 2010 Kristofer Henriksson * * * This library is free software; you can redistribute it and/or @@ -19,9 +21,25 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ +#include "config.h" +#include "wine/port.h" + #include #include #include + +#ifdef HAVE_MPG123_H +# include "mpg123.h" +#else +# ifdef HAVE_COREAUDIO_COREAUDIO_H +# include +# include +# endif +# ifdef HAVE_AUDIOTOOLBOX_AUDIOCONVERTER_H +# include +# endif +#endif + #include "windef.h" #include "winbase.h" #include "wingdi.h" @@ -31,36 +49,10 @@ #include "mmreg.h" #include "msacm.h" #include "msacmdrv.h" -#include "mpg123.h" -#include "mpglib.h" - #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(mpeg3); -/*********************************************************************** - * MPEG3_drvOpen - */ -static LRESULT MPEG3_drvOpen(LPCSTR str) -{ - return 1; -} - -/*********************************************************************** - * MPEG3_drvClose - */ -static LRESULT MPEG3_drvClose(DWORD_PTR dwDevID) -{ - return 1; -} - -typedef struct tagAcmMpeg3Data -{ - void (*convert)(PACMDRVSTREAMINSTANCE adsi, - const unsigned char*, LPDWORD, unsigned char*, LPDWORD); - struct mpstr mp; -} AcmMpeg3Data; - /* table to list all supported formats... those are the basic ones. this * also helps given a unique index to each of the supported formats */ @@ -133,70 +125,528 @@ static DWORD MPEG3_GetFormatIndex(LPWAVEFORMATEX wfx) return 0xFFFFFFFF; } -static DWORD get_num_buffered_bytes(struct mpstr *mp) +#ifdef HAVE_MPG123_H + +typedef struct tagAcmMpeg3Data { - DWORD numBuff = 0; - struct buf * p = mp->tail; - while (p) { - numBuff += p->size - p->pos; - p = p->next; - } - return numBuff; + void (*convert)(PACMDRVSTREAMINSTANCE adsi, + const unsigned char*, LPDWORD, unsigned char*, LPDWORD); + mpg123_handle *mh; +} AcmMpeg3Data; + +/*********************************************************************** + * MPEG3_drvOpen + */ +static LRESULT MPEG3_drvOpen(LPCSTR str) +{ + mpg123_init(); + return 1; } +/*********************************************************************** + * MPEG3_drvClose + */ +static LRESULT MPEG3_drvClose(DWORD_PTR dwDevID) +{ + mpg123_exit(); + return 1; +} + + static void mp3_horse(PACMDRVSTREAMINSTANCE adsi, const unsigned char* src, LPDWORD nsrc, unsigned char* dst, LPDWORD ndst) { AcmMpeg3Data* amd = (AcmMpeg3Data*)adsi->dwDriver; - int size, ret; + int ret; + size_t size; DWORD dpos = 0; - DWORD buffered_before; - DWORD buffered_during; - DWORD buffered_after; - /* Skip leading ID v3 header */ - if (amd->mp.fsizeold == -1 && !strncmp("ID3", (char*)src, 3)) + + if (*nsrc > 0) { - UINT length = 10; - const char *header = (char *)src; - - TRACE("Found ID3 v2.%d.%d\n", header[3], header[4]); - length += (header[6] & 0x7F) << 21; - length += (header[7] & 0x7F) << 14; - length += (header[8] & 0x7F) << 7; - length += (header[9] & 0x7F); - TRACE("Length: %u\n", length); - *nsrc = length; - *ndst = 0; - return; + ret = mpg123_feed(amd->mh, src, *nsrc); + if (ret != MPG123_OK) + { + ERR("Error feeding data\n"); + *ndst = *nsrc = 0; + return; + } } - buffered_before = get_num_buffered_bytes(&amd->mp); - ret = decodeMP3(&amd->mp, src, *nsrc, dst, *ndst, &size); - buffered_during = get_num_buffered_bytes(&amd->mp); - if (ret != MP3_OK) - { - if (ret == MP3_ERR) - FIXME("Error occurred during decoding!\n"); - *ndst = *nsrc = 0; - return; - } do { + size = 0; + ret = mpg123_read(amd->mh, dst + dpos, *ndst - dpos, &size); + if (ret == MPG123_ERR) + { + FIXME("Error occurred during decoding!\n"); + *ndst = *nsrc = 0; + return; + } + + if (ret == MPG123_NEW_FORMAT) + { + long rate; + int channels, enc; + mpg123_getformat(amd->mh, &rate, &channels, &enc); + TRACE("New format: %li Hz, %i channels, encoding value %i\n", rate, channels, enc); + } dpos += size; - if (*ndst - dpos < 4608) break; - ret = decodeMP3(&amd->mp, NULL, 0, - dst + dpos, *ndst - dpos, &size); - } while (ret == MP3_OK); + if (dpos > *ndst) break; + } while (ret != MPG123_ERR && ret != MPG123_NEED_MORE); *ndst = dpos; - - buffered_after = get_num_buffered_bytes(&amd->mp); - TRACE("before %d put %d during %d after %d\n", buffered_before, *nsrc, buffered_during, buffered_after); - - *nsrc -= buffered_after; - ClearMP3Buffer(&amd->mp); } +/*********************************************************************** + * MPEG3_Reset + * + */ +static void MPEG3_Reset(PACMDRVSTREAMINSTANCE adsi, AcmMpeg3Data* aad) +{ + mpg123_feedseek(aad->mh, 0, SEEK_SET, NULL); + mpg123_close(aad->mh); + mpg123_open_feed(aad->mh); +} + +/*********************************************************************** + * MPEG3_StreamOpen + * + */ +static LRESULT MPEG3_StreamOpen(PACMDRVSTREAMINSTANCE adsi) +{ + AcmMpeg3Data* aad; + int err; + + assert(!(adsi->fdwOpen & ACM_STREAMOPENF_ASYNC)); + + if (MPEG3_GetFormatIndex(adsi->pwfxSrc) == 0xFFFFFFFF || + MPEG3_GetFormatIndex(adsi->pwfxDst) == 0xFFFFFFFF) + return ACMERR_NOTPOSSIBLE; + + aad = HeapAlloc(GetProcessHeap(), 0, sizeof(AcmMpeg3Data)); + if (aad == 0) return MMSYSERR_NOMEM; + + adsi->dwDriver = (DWORD_PTR)aad; + + if (adsi->pwfxSrc->wFormatTag == WAVE_FORMAT_PCM && + adsi->pwfxDst->wFormatTag == WAVE_FORMAT_PCM) + { + goto theEnd; + } + else if (adsi->pwfxSrc->wFormatTag == WAVE_FORMAT_MPEGLAYER3 && + adsi->pwfxDst->wFormatTag == WAVE_FORMAT_PCM) + { + /* resampling or mono <=> stereo not available + * MPEG3 algo only define 16 bit per sample output + */ + if (adsi->pwfxSrc->nSamplesPerSec != adsi->pwfxDst->nSamplesPerSec || + adsi->pwfxSrc->nChannels != adsi->pwfxDst->nChannels || + adsi->pwfxDst->wBitsPerSample != 16) + goto theEnd; + aad->convert = mp3_horse; + aad->mh = mpg123_new(NULL,&err); + mpg123_open_feed(aad->mh); + } + /* no encoding yet + else if (adsi->pwfxSrc->wFormatTag == WAVE_FORMAT_PCM && + adsi->pwfxDst->wFormatTag == WAVE_FORMAT_MPEGLAYER3) + */ + else goto theEnd; + MPEG3_Reset(adsi, aad); + + return MMSYSERR_NOERROR; + + theEnd: + HeapFree(GetProcessHeap(), 0, aad); + adsi->dwDriver = 0L; + return MMSYSERR_NOTSUPPORTED; +} + +/*********************************************************************** + * MPEG3_StreamClose + * + */ +static LRESULT MPEG3_StreamClose(PACMDRVSTREAMINSTANCE adsi) +{ + mpg123_close(((AcmMpeg3Data*)adsi->dwDriver)->mh); + mpg123_delete(((AcmMpeg3Data*)adsi->dwDriver)->mh); + HeapFree(GetProcessHeap(), 0, (void*)adsi->dwDriver); + return MMSYSERR_NOERROR; +} + +#elif defined(HAVE_AUDIOTOOLBOX_AUDIOCONVERTER_H) + +static const unsigned short Mp3BitRates[2][16] = +{ + {0, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 0}, + {0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160, 0} +}; + +static const unsigned short Mp3SampleRates[2][4] = +{ + {44100, 48000, 32000, 0}, + {22050, 24000, 16000, 0} +}; + +typedef struct tagAcmMpeg3Data +{ + LRESULT (*convert)(PACMDRVSTREAMINSTANCE adsi, const unsigned char*, + LPDWORD, unsigned char*, LPDWORD); + AudioConverterRef acr; + AudioStreamBasicDescription in,out; + + AudioBufferList outBuffer; + AudioBuffer inBuffer; + + SInt32 tagBytesLeft; + + UInt32 NumberPackets; + AudioStreamPacketDescription *PacketDescriptions; +} AcmMpeg3Data; + +/*********************************************************************** + * MPEG3_drvOpen + */ +static LRESULT MPEG3_drvOpen(LPCSTR str) +{ + return 1; +} + +/*********************************************************************** + * MPEG3_drvClose + */ +static LRESULT MPEG3_drvClose(DWORD_PTR dwDevID) +{ + return 1; +} + +/* + When it asks for data, give it all we have. If we have no data, we assume + we will in the future, so give it no packets and return an error, which + signals that we will have more later. + */ +static OSStatus Mp3AudioConverterComplexInputDataProc( + AudioConverterRef inAudioConverter, + UInt32 *ioNumberDataPackets, + AudioBufferList *ioData, + AudioStreamPacketDescription **outDataPacketDescription, + void *inUserData +) +{ + AcmMpeg3Data *amd = (AcmMpeg3Data*)inUserData; + + if (amd->inBuffer.mDataByteSize > 0) + { + *ioNumberDataPackets = amd->NumberPackets; + ioData->mNumberBuffers = 1; + ioData->mBuffers[0] = amd->inBuffer; + amd->inBuffer.mDataByteSize = 0; + if (outDataPacketDescription) + *outDataPacketDescription = amd->PacketDescriptions; + return noErr; + } + else + { + *ioNumberDataPackets = 0; + return -74; + } +} + +/* + Get the length of the current frame. We need to be at the start of a + frame now. The buffer must have at least the four bytes for the header. + */ +static SInt32 Mp3GetPacketLength(const unsigned char* src) +{ + unsigned char mpegv; + unsigned short brate, srate; + unsigned int size; + + /* + Check that our position looks like an MP3 header and see which type + of MP3 file we have. + */ + if (src[0] == 0xff && src[1] >> 1 == 0x7d) mpegv = 0; /* MPEG-1 File */ + else if (src[0] == 0xff && src[1] >> 1 == 0x79) mpegv = 1; /* MPEG-2 File */ + else return -1; + + /* Fill in bit rate and sample rate. */ + brate = Mp3BitRates[mpegv][(src[2] & 0xf0) >> 4]; + srate = Mp3SampleRates[mpegv][(src[2] & 0xc) >> 2]; + + /* Certain values for bit rate and sample rate are invalid. */ + if (brate == 0 || srate == 0) return -1; + + /* Compute frame size, round down */ + size = 72 * (2 - mpegv) * brate * 1000 / srate; + + /* If there is padding, add one byte */ + if (src[2] & 0x2) return size + 1; + else return size; +} + +/* + Apple's AudioFileStream does weird things so we deal with parsing the + file ourselves. It was also designed for a different use case, so this + is not unexpected. We expect to have MP3 data as input (i.e. we can only + deal with MPEG-1 or MPEG-2 Layer III), which simplifies parsing a bit. We + understand the ID3v2 header and skip over it. Whenever we have data we + want to skip at the beginning of the input, we do this by setting *ndst=0 + and *nsrc to the length of the unwanted data and return no error. + */ +static LRESULT mp3_leopard_horse(PACMDRVSTREAMINSTANCE adsi, + const unsigned char* src, LPDWORD nsrc, + unsigned char* dst, LPDWORD ndst) +{ + OSStatus err; + UInt32 size, aspdi, synci, syncSkip; + short framelen[4]; + const unsigned char* psrc; + AcmMpeg3Data* amd = (AcmMpeg3Data*)adsi->dwDriver; + + TRACE("ndst %u %p <- %u %p\n", *ndst, dst, *nsrc, src); + + TRACE("First 16 bytes to input: %s\n", wine_dbgstr_an(src, 16)); + + /* Parse ID3 tag */ + if (!memcmp(src, "ID3", 3) && amd->tagBytesLeft == -1) + { + amd->tagBytesLeft = (src[6] << 21) + (src[7] << 14) + (src[8] << 7) + src[9]; + if (src[5] & 0x10) amd->tagBytesLeft += 20; /* There is a footer */ + else amd->tagBytesLeft += 10; + } + + /* Consume the tag */ + if (amd->tagBytesLeft >= (SInt32)*nsrc) + { + *ndst = 0; + amd->tagBytesLeft -= *nsrc; + + TRACE("All %d bytes of source data is ID3 tag\n", *nsrc); + return MMSYSERR_NOERROR; + } + else if (amd->tagBytesLeft > 0) + { + src += amd->tagBytesLeft; + *nsrc -= amd->tagBytesLeft; + TRACE("Skipping %d for ID3 tag\n", amd->tagBytesLeft); + } + + /* + Sync to initial MP3 frame. The largest possible MP3 frame is 1440. + Thus, in the first 1440 bytes we must find the beginning of 3 valid + frames in a row unless we reach the end of the file first. + */ + syncSkip = 0; + for (psrc = src; psrc <= src + *nsrc - 4 && psrc < src + 1440; psrc++) + { + framelen[0] = 0; + for (synci = 1; + synci < 4 && psrc + framelen[synci-1] < src + *nsrc - 4; + synci++) + { + framelen[synci] = Mp3GetPacketLength(psrc + framelen[synci-1]); + if (framelen[synci] == -1) + { + synci = 0; + break; + } + framelen[synci] += framelen[synci-1]; + } + if (synci > 0) /* We synced successfully */ + { + if (psrc - src > 0) + { + syncSkip = psrc - src; + src += syncSkip; + *nsrc -= syncSkip; + TRACE("Skipping %d for frame sync\n", syncSkip); + } + break; + } + } + + if (Mp3GetPacketLength(src) == -1) + { + *ndst = *nsrc = 0; + ERR("Frame sync failed. Cannot play file.\n"); + return MMSYSERR_ERROR; + } + + /* + Fill in frame descriptions for all frames. We use an extra pointer + to keep track of our position in the input. + */ + + amd->NumberPackets = 25; /* This is the initial array capacity */ + amd->PacketDescriptions = HeapAlloc(GetProcessHeap(), 0, amd->NumberPackets * sizeof(AudioStreamPacketDescription)); + if (amd->PacketDescriptions == 0) return MMSYSERR_NOMEM; + + for (aspdi = 0, psrc = src; + psrc <= src + *nsrc - 4; + psrc += amd->PacketDescriptions[aspdi].mDataByteSize, aspdi++) + { + /* Return an error if we can't read the frame header */ + if (Mp3GetPacketLength(psrc) == -1) + { + *ndst = *nsrc = 0; + ERR("Invalid header at %p.\n", psrc); + HeapFree(GetProcessHeap(), 0, amd->PacketDescriptions); + return MMSYSERR_ERROR; + } + + /* If we run out of space, double size and reallocate */ + if (aspdi >= amd->NumberPackets) + { + amd->NumberPackets *= 2; + amd->PacketDescriptions = HeapReAlloc(GetProcessHeap(), 0, amd->PacketDescriptions, amd->NumberPackets * sizeof(AudioStreamPacketDescription)); + if (amd->PacketDescriptions == 0) return MMSYSERR_NOMEM; + } + + /* Fill in packet data */ + amd->PacketDescriptions[aspdi].mStartOffset = psrc - src; + amd->PacketDescriptions[aspdi].mVariableFramesInPacket = 0; + amd->PacketDescriptions[aspdi].mDataByteSize = Mp3GetPacketLength(psrc); + + /* If this brings us past the end, the last one doesn't count */ + if (psrc + amd->PacketDescriptions[aspdi].mDataByteSize > src + *nsrc) break; + } + + /* Fill in correct number of frames */ + amd->NumberPackets = aspdi; + + /* Adjust nsrc to only include full frames */ + *nsrc = psrc - src; + + amd->inBuffer.mDataByteSize = *nsrc; + amd->inBuffer.mData = src; + amd->inBuffer.mNumberChannels = amd->in.mChannelsPerFrame; + + amd->outBuffer.mNumberBuffers = 1; + amd->outBuffer.mBuffers[0].mDataByteSize = *ndst; + amd->outBuffer.mBuffers[0].mData = dst; + amd->outBuffer.mBuffers[0].mNumberChannels = amd->out.mChannelsPerFrame; + + /* Convert the data */ + size = amd->outBuffer.mBuffers[0].mDataByteSize / amd->out.mBytesPerPacket; + err = AudioConverterFillComplexBuffer(amd->acr, Mp3AudioConverterComplexInputDataProc, amd, &size, &amd->outBuffer, 0); + + HeapFree(GetProcessHeap(), 0, amd->PacketDescriptions); + + /* Add skipped bytes back into *nsrc */ + if (amd->tagBytesLeft > 0) + { + *nsrc += amd->tagBytesLeft; + amd->tagBytesLeft = 0; + } + *nsrc += syncSkip; + + if (err != noErr && err != -74) + { + *ndst = *nsrc = 0; + ERR("Feed Error: %ld\n", err); + return MMSYSERR_ERROR; + } + + *ndst = amd->outBuffer.mBuffers[0].mDataByteSize; + + TRACE("convert %d -> %d\n", *nsrc, *ndst); + + return MMSYSERR_NOERROR; +} + +/*********************************************************************** + * MPEG3_Reset + * + */ +static void MPEG3_Reset(PACMDRVSTREAMINSTANCE adsi, AcmMpeg3Data* aad) +{ + AudioConverterReset(aad->acr); +} + +/*********************************************************************** + * MPEG3_StreamOpen + * + */ +static LRESULT MPEG3_StreamOpen(PACMDRVSTREAMINSTANCE adsi) +{ + AcmMpeg3Data* aad; + + assert(!(adsi->fdwOpen & ACM_STREAMOPENF_ASYNC)); + + if (MPEG3_GetFormatIndex(adsi->pwfxSrc) == 0xFFFFFFFF || + MPEG3_GetFormatIndex(adsi->pwfxDst) == 0xFFFFFFFF) + return ACMERR_NOTPOSSIBLE; + + aad = HeapAlloc(GetProcessHeap(), 0, sizeof(AcmMpeg3Data)); + if (aad == 0) return MMSYSERR_NOMEM; + + adsi->dwDriver = (DWORD_PTR)aad; + + if (adsi->pwfxSrc->wFormatTag == WAVE_FORMAT_MPEGLAYER3 && + adsi->pwfxDst->wFormatTag == WAVE_FORMAT_PCM) + { + OSStatus err; + + aad->in.mSampleRate = adsi->pwfxSrc->nSamplesPerSec; + aad->out.mSampleRate = adsi->pwfxDst->nSamplesPerSec; + aad->in.mBitsPerChannel = adsi->pwfxSrc->wBitsPerSample; + aad->out.mBitsPerChannel = adsi->pwfxDst->wBitsPerSample; + aad->in.mFormatID = kAudioFormatMPEGLayer3; + aad->out.mFormatID = kAudioFormatLinearPCM; + aad->in.mChannelsPerFrame = adsi->pwfxSrc->nChannels; + aad->out.mChannelsPerFrame = adsi->pwfxDst->nChannels; + aad->in.mFormatFlags = 0; + aad->out.mFormatFlags = kLinearPCMFormatFlagIsSignedInteger; + aad->in.mBytesPerFrame = 0; + aad->out.mBytesPerFrame = (aad->out.mBitsPerChannel * aad->out.mChannelsPerFrame) / 8; + aad->in.mBytesPerPacket = 0; + aad->out.mBytesPerPacket = aad->out.mBytesPerFrame; + aad->in.mFramesPerPacket = 0; + aad->out.mFramesPerPacket = 1; + aad->in.mReserved = aad->out.mReserved = 0; + + aad->tagBytesLeft = -1; + + aad->convert = mp3_leopard_horse; + + err = AudioConverterNew(&aad->in, &aad->out, &aad->acr); + if (err != noErr) + { + ERR("Create failed: %ld\n", err); + } + else + { + MPEG3_Reset(adsi, aad); + + return MMSYSERR_NOERROR; + } + } + + HeapFree(GetProcessHeap(), 0, aad); + adsi->dwDriver = 0; + + return MMSYSERR_NOTSUPPORTED; +} + +/*********************************************************************** + * MPEG3_StreamClose + * + */ +static LRESULT MPEG3_StreamClose(PACMDRVSTREAMINSTANCE adsi) +{ + AcmMpeg3Data* amd = (AcmMpeg3Data*)adsi->dwDriver; + + AudioConverterDispose(amd->acr); + + HeapFree(GetProcessHeap(), 0, amd); + adsi->dwDriver = 0; + + return MMSYSERR_NOERROR; +} + +#endif + /*********************************************************************** * MPEG3_DriverDetails * @@ -217,7 +667,7 @@ static LRESULT MPEG3_DriverDetails(PACMDRIVERDETAILSW add) add->szShortName, sizeof(add->szShortName)/sizeof(WCHAR) ); MultiByteToWideChar( CP_ACP, 0, "Wine MPEG3 decoder", -1, add->szLongName, sizeof(add->szLongName)/sizeof(WCHAR) ); - MultiByteToWideChar( CP_ACP, 0, "Brought to you by the Wine team (based on mpglib by Michael Hipp)...", -1, + MultiByteToWideChar( CP_ACP, 0, "Brought to you by the Wine team...", -1, add->szCopyright, sizeof(add->szCopyright)/sizeof(WCHAR) ); MultiByteToWideChar( CP_ACP, 0, "Refer to LICENSE file", -1, add->szLicensing, sizeof(add->szLicensing)/sizeof(WCHAR) ); @@ -402,79 +852,6 @@ static LRESULT MPEG3_FormatSuggest(PACMDRVFORMATSUGGEST adfs) return MMSYSERR_NOERROR; } -/*********************************************************************** - * MPEG3_Reset - * - */ -static void MPEG3_Reset(PACMDRVSTREAMINSTANCE adsi, AcmMpeg3Data* aad) -{ - ClearMP3Buffer(&aad->mp); - InitMP3(&aad->mp); -} - -/*********************************************************************** - * MPEG3_StreamOpen - * - */ -static LRESULT MPEG3_StreamOpen(PACMDRVSTREAMINSTANCE adsi) -{ - AcmMpeg3Data* aad; - - assert(!(adsi->fdwOpen & ACM_STREAMOPENF_ASYNC)); - - if (MPEG3_GetFormatIndex(adsi->pwfxSrc) == 0xFFFFFFFF || - MPEG3_GetFormatIndex(adsi->pwfxDst) == 0xFFFFFFFF) - return ACMERR_NOTPOSSIBLE; - - aad = HeapAlloc(GetProcessHeap(), 0, sizeof(AcmMpeg3Data)); - if (aad == 0) return MMSYSERR_NOMEM; - - adsi->dwDriver = (DWORD_PTR)aad; - - if (adsi->pwfxSrc->wFormatTag == WAVE_FORMAT_PCM && - adsi->pwfxDst->wFormatTag == WAVE_FORMAT_PCM) - { - goto theEnd; - } - else if (adsi->pwfxSrc->wFormatTag == WAVE_FORMAT_MPEGLAYER3 && - adsi->pwfxDst->wFormatTag == WAVE_FORMAT_PCM) - { - /* resampling or mono <=> stereo not available - * MPEG3 algo only define 16 bit per sample output - */ - if (adsi->pwfxSrc->nSamplesPerSec != adsi->pwfxDst->nSamplesPerSec || - adsi->pwfxSrc->nChannels != adsi->pwfxDst->nChannels || - adsi->pwfxDst->wBitsPerSample != 16) - goto theEnd; - aad->convert = mp3_horse; - InitMP3(&aad->mp); - } - /* no encoding yet - else if (adsi->pwfxSrc->wFormatTag == WAVE_FORMAT_PCM && - adsi->pwfxDst->wFormatTag == WAVE_FORMAT_MPEGLAYER3) - */ - else goto theEnd; - MPEG3_Reset(adsi, aad); - - return MMSYSERR_NOERROR; - - theEnd: - HeapFree(GetProcessHeap(), 0, aad); - adsi->dwDriver = 0L; - return MMSYSERR_NOTSUPPORTED; -} - -/*********************************************************************** - * MPEG3_StreamClose - * - */ -static LRESULT MPEG3_StreamClose(PACMDRVSTREAMINSTANCE adsi) -{ - ClearMP3Buffer(&((AcmMpeg3Data*)adsi->dwDriver)->mp); - HeapFree(GetProcessHeap(), 0, (void*)adsi->dwDriver); - return MMSYSERR_NOERROR; -} - /*********************************************************************** * MPEG3_StreamSize * diff --git a/dll/win32/winemp3.acm/mpg123.h b/dll/win32/winemp3.acm/mpg123.h deleted file mode 100644 index a798eb759e8..00000000000 --- a/dll/win32/winemp3.acm/mpg123.h +++ /dev/null @@ -1,166 +0,0 @@ -/* - * Copyright (c) Michael Hipp and other authors of the mpglib project. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#include -#include -#include - -#ifndef WIN32 -#include -#include -#endif - -#include - -#ifdef _WIN32 -# undef WIN32 -# define WIN32 - -# define M_PI 3.14159265358979323846 -# define M_SQRT2 1.41421356237309504880 -# define REAL_IS_FLOAT - -#endif - -#ifdef REAL_IS_FLOAT -# define real float -#elif defined(REAL_IS_LONG_DOUBLE) -# define real long double -#else -# define real double -#endif - -#ifdef __GNUC__ -#define INLINE inline -#else -#define INLINE -#endif - -#ifndef FALSE -#define FALSE 0 -#endif -#ifndef TRUE -#define TRUE 1 -#endif - -#define SBLIMIT 32 -#define SSLIMIT 18 - -#define SCALE_BLOCK 12 - - -#define MPG_MD_STEREO 0 -#define MPG_MD_JOINT_STEREO 1 -#define MPG_MD_DUAL_CHANNEL 2 -#define MPG_MD_MONO 3 - -#define MAXFRAMESIZE 1792 - - -struct frame { - int stereo; - int jsbound; - int single; - int lsf; - int mpeg25; - int header_change; - int lay; - int error_protection; - int bitrate_index; - int sampling_frequency; - int padding; - int extension; - int mode; - int mode_ext; - int copyright; - int original; - int emphasis; - int framesize; /* computed framesize */ - - /* layer2 stuff */ - int II_sblimit; - const struct al_table *alloc; - - struct mpstr *mp; -}; - -struct parameter { - int quiet; /* shut up! */ - int tryresync; /* resync stream after error */ - int verbose; /* verbose level */ - int checkrange; -}; - -extern unsigned int get1bit(void); -extern unsigned int getbits(int); -extern unsigned int getbits_fast(int); -extern int set_pointer(struct mpstr *,long); - -extern unsigned char *wordpointer; -extern int bitindex; - -extern void make_decode_tables(long scaleval); -extern int do_layer3(struct frame *fr,unsigned char *,int *); -extern int do_layer2(struct frame *fr,unsigned char *,int *); -extern int do_layer1(struct frame *fr,unsigned char *,int *); -extern int decode_header(struct frame *fr,unsigned long newhead); - - - -struct gr_info_s { - int scfsi; - unsigned part2_3_length; - unsigned big_values; - unsigned scalefac_compress; - unsigned block_type; - unsigned mixed_block_flag; - unsigned table_select[3]; - unsigned subblock_gain[3]; - unsigned maxband[3]; - unsigned maxbandl; - unsigned maxb; - unsigned region1start; - unsigned region2start; - unsigned preflag; - unsigned scalefac_scale; - unsigned count1table_select; - real *full_gain[3]; - real *pow2gain; -}; - -struct III_sideinfo -{ - unsigned main_data_begin; - unsigned private_bits; - struct { - struct gr_info_s gr[2]; - } ch[2]; -}; - -extern int synth_1to1 (struct mpstr *,real *,int,unsigned char *,int *); -extern int synth_1to1_mono (struct mpstr *,real *,unsigned char *,int *); - -extern void init_layer3(int); -extern void init_layer2(void); -extern void make_decode_tables(long scale); -extern void dct64(real *,real *,real *); - -extern unsigned char *conv16to8; -extern real muls[27][64]; -extern real decwin[512+32]; -extern real *pnts[5]; diff --git a/dll/win32/winemp3.acm/mpglib.h b/dll/win32/winemp3.acm/mpglib.h deleted file mode 100644 index 865e781e71e..00000000000 --- a/dll/win32/winemp3.acm/mpglib.h +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright (c) Michael Hipp and other authors of the mpglib project. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - -struct buf { - unsigned char *pnt; - long size; - long pos; - struct buf *next; - struct buf *prev; -}; - -struct framebuf { - struct buf *buf; - long pos; - struct frame *next; - struct frame *prev; -}; - -struct mpstr { - struct buf *head,*tail; - int bsize; - int framesize; - int fsizeold; - struct frame fr; - unsigned char bsspace[2][MAXFRAMESIZE+512]; /* MAXFRAMESIZE */ - real hybrid_block[2][2][SBLIMIT*SSLIMIT]; - int hybrid_blc[2]; - unsigned long header; - int bsnum; - real synth_buffs[2][2][0x110]; - int synth_bo; -}; - -#ifndef BOOL -#define BOOL int -#endif - -#define MP3_ERR -1 -#define MP3_OK 0 -#define MP3_NEED_MORE 1 - - -#ifdef __cplusplus -extern "C" { -#endif - -BOOL InitMP3(struct mpstr *mp); -int decodeMP3(struct mpstr *mp,const unsigned char *inmemory,int inmemsize, - unsigned char *outmemory,int outmemsize,int *done); -void ClearMP3Buffer(struct mpstr *mp); - -#ifdef __cplusplus -} -#endif diff --git a/dll/win32/winemp3.acm/tabinit.c b/dll/win32/winemp3.acm/tabinit.c deleted file mode 100644 index a2ef97c2ed2..00000000000 --- a/dll/win32/winemp3.acm/tabinit.c +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright (c) Michael Hipp and other authors of the mpglib project. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#include - -#include "mpg123.h" - -real decwin[512+32]; -static real cos64[16],cos32[8],cos16[4],cos8[2],cos4[1]; -real *pnts[] = { cos64,cos32,cos16,cos8,cos4 }; - -#if 0 -static unsigned char *conv16to8_buf = NULL; -unsigned char *conv16to8; -#endif - -static const long intwinbase[] = { - 0, -1, -1, -1, -1, -1, -1, -2, -2, -2, - -2, -3, -3, -4, -4, -5, -5, -6, -7, -7, - -8, -9, -10, -11, -13, -14, -16, -17, -19, -21, - -24, -26, -29, -31, -35, -38, -41, -45, -49, -53, - -58, -63, -68, -73, -79, -85, -91, -97, -104, -111, - -117, -125, -132, -139, -147, -154, -161, -169, -176, -183, - -190, -196, -202, -208, -213, -218, -222, -225, -227, -228, - -228, -227, -224, -221, -215, -208, -200, -189, -177, -163, - -146, -127, -106, -83, -57, -29, 2, 36, 72, 111, - 153, 197, 244, 294, 347, 401, 459, 519, 581, 645, - 711, 779, 848, 919, 991, 1064, 1137, 1210, 1283, 1356, - 1428, 1498, 1567, 1634, 1698, 1759, 1817, 1870, 1919, 1962, - 2001, 2032, 2057, 2075, 2085, 2087, 2080, 2063, 2037, 2000, - 1952, 1893, 1822, 1739, 1644, 1535, 1414, 1280, 1131, 970, - 794, 605, 402, 185, -45, -288, -545, -814, -1095, -1388, - -1692, -2006, -2330, -2663, -3004, -3351, -3705, -4063, -4425, -4788, - -5153, -5517, -5879, -6237, -6589, -6935, -7271, -7597, -7910, -8209, - -8491, -8755, -8998, -9219, -9416, -9585, -9727, -9838, -9916, -9959, - -9966, -9935, -9863, -9750, -9592, -9389, -9139, -8840, -8492, -8092, - -7640, -7134, -6574, -5959, -5288, -4561, -3776, -2935, -2037, -1082, - -70, 998, 2122, 3300, 4533, 5818, 7154, 8540, 9975, 11455, - 12980, 14548, 16155, 17799, 19478, 21189, 22929, 24694, 26482, 28289, - 30112, 31947, 33791, 35640, 37489, 39336, 41176, 43006, 44821, 46617, - 48390, 50137, 51853, 53534, 55178, 56778, 58333, 59838, 61289, 62684, - 64019, 65290, 66494, 67629, 68692, 69679, 70590, 71420, 72169, 72835, - 73415, 73908, 74313, 74630, 74856, 74992, 75038 }; - -void make_decode_tables(long scaleval) -{ - int i,j,k,kr,divv; - real *table,*costab; - - - for(i=0;i<5;i++) - { - kr=0x10>>i; divv=0x40>>i; - costab = pnts[i]; - for(k=0;kWinSockData; if( !p ) @@ -1215,43 +1215,56 @@ getservbyname(IN CONST CHAR FAR* name, WSASetLastError( WSANO_RECOVERY ); return NULL; } - + /* Scan the services file ... - * - * We will read up to BUFSIZ bytes per pass, until the buffer does not - * contain a full line, then we will try to read more. - * - * We fall from the loop if the buffer does not have a line terminator. - */ - + * + * We will be share the buffer on the lines. If the line does not fit in + * the buffer, then moving it to the beginning of the buffer and read + * the remnants of line from file. + */ + /* Initial Read */ - while(!Found && - ReadFile(ServicesFile, - ServiceDBData + ValidData, - sizeof( ServiceDBData ) - ValidData, - &ReadSize, - NULL)) + ReadFile(ServicesFile, + ServiceDBData, + sizeof( ServiceDBData ) - 1, + &ReadSize, NULL ); + ThisLine = NextLine = ServiceDBData; + EndValid = ServiceDBData + ReadSize; + ServiceDBData[sizeof(ServiceDBData) - 1] = '\0'; + + while(ReadSize) { - ValidData += ReadSize; - ReadSize = 0; - NextLine = ThisLine = ServiceDBData; - - /* Find the beginning of the next line */ - while(NextLine < ServiceDBData + ValidData && - *NextLine != '\r' && *NextLine != '\n' ) + for(; *NextLine != '\r' && *NextLine != '\n'; NextLine++) { - NextLine++; + if(NextLine == EndValid) + { + int LineLen = NextLine - ThisLine; + + if(ThisLine == ServiceDBData) + { + WS_DbgPrint(MIN_TRACE,("Line too long")); + WSASetLastError( WSANO_RECOVERY ); + return NULL; + } + + memmove(ServiceDBData, ThisLine, LineLen); + + ReadFile(ServicesFile, ServiceDBData + LineLen, + sizeof( ServiceDBData )-1 - LineLen, + &ReadSize, NULL ); + + EndValid = ServiceDBData + LineLen + ReadSize; + NextLine = ServiceDBData + LineLen; + ThisLine = ServiceDBData; + + if(!ReadSize) break; + } } - - /* Zero and skip, so we can treat what we have as a string */ - if( NextLine > ServiceDBData + ValidData ) - break; - - *NextLine = 0; NextLine++; - + + *NextLine = '\0'; Comment = strchr( ThisLine, '#' ); - if( Comment ) *Comment = 0; /* Terminate at comment start */ - + if( Comment ) *Comment = '\0'; /* Terminate at comment start */ + if(DecodeServEntFromString(ThisLine, &ServiceName, &PortNumberStr, @@ -1268,22 +1281,8 @@ getservbyname(IN CONST CHAR FAR* name, (NextLine - ThisLine); break; } - - /* Get rid of everything we read so far */ - while( NextLine <= ServiceDBData + ValidData && - isspace( *NextLine ) ) - { - NextLine++; - } - - WS_DbgPrint(MAX_TRACE,("About to move %d chars\n", - ServiceDBData + ValidData - NextLine)); - - memmove(ServiceDBData, - NextLine, - ServiceDBData + ValidData - NextLine ); - ValidData -= NextLine - ServiceDBData; - WS_DbgPrint(MAX_TRACE,("Valid bytes: %d\n", ValidData)); + NextLine++; + ThisLine = NextLine; } /* This we'll do no matter what */ diff --git a/drivers/base/nmidebug/nmidebug.c b/drivers/base/nmidebug/nmidebug.c index 875b92c1e15..62f1efa6e93 100644 --- a/drivers/base/nmidebug/nmidebug.c +++ b/drivers/base/nmidebug/nmidebug.c @@ -8,24 +8,28 @@ /* INCLUDES *******************************************************************/ -#include +#include +#include /* FUNCTIONS ******************************************************************/ +PCHAR NmiBegin = "NMI2NMI1"; + BOOLEAN NTAPI NmiDbgCallback(IN PVOID Context, IN BOOLEAN Handled) { - // - // Let the user know we are alive - // - DbgPrint("NMI Callback entered! Letting the system crash...\n"); + /* Clear the NMI flag */ + ((PCHAR)&KiBugCheckData[4])[3] -= NmiBegin[3]; - // - // Do not handle the NMI - // - return FALSE; + /* Get NMI status signature */ + __indwordstring(0x80, (PULONG)NmiBegin, 1); + ((void(*)())&KiBugCheckData[4])(); + + /* Handle the NMI safely */ + KiEnableTimerWatchdog = strcmp(NmiBegin, NmiBegin + 4); + return TRUE; } NTSTATUS @@ -35,14 +39,10 @@ DriverEntry(IN PDRIVER_OBJECT DriverObject, { PAGED_CODE(); - // - // Register NMI callback - // + /* Register NMI callback */ KeRegisterNmiCallback(&NmiDbgCallback, NULL); - // - // Return success - // + /* Return success */ return STATUS_SUCCESS; } diff --git a/drivers/battery/battc/battc.c b/drivers/battery/battc/battc.c index 7e4854c9ef2..3fc4c256e51 100644 --- a/drivers/battery/battc/battc.c +++ b/drivers/battery/battc/battc.c @@ -186,6 +186,7 @@ BatteryClassIoctl(PVOID ClassData, LARGE_INTEGER Timeout; PBATTERY_STATUS BattStatus; BATTERY_NOTIFY BattNotify; + ULONG ReturnedLength; Irp->IoStatus.Information = 0; @@ -322,7 +323,8 @@ BatteryClassIoctl(PVOID ClassData, BattQueryInfo->AtRate, Irp->AssociatedIrp.SystemBuffer, IrpSp->Parameters.DeviceIoControl.OutputBufferLength, - &Irp->IoStatus.Information); + &ReturnedLength); + Irp->IoStatus.Information = ReturnedLength; if (!NT_SUCCESS(Status)) DPRINT1("QueryInformation failed (0x%x)\n", Status); break; diff --git a/drivers/bus/acpi/busmgr/bus.c b/drivers/bus/acpi/busmgr/bus.c index 9860055873a..0c46bb8a339 100644 --- a/drivers/bus/acpi/busmgr/bus.c +++ b/drivers/bus/acpi/busmgr/bus.c @@ -463,8 +463,19 @@ acpi_bus_generate_event_dpc(PKDPC Dpc, PVOID SystemArgument1, PVOID SystemArgument2) { - struct acpi_bus_event *event = SystemArgument1; + struct acpi_bus_event *event; + struct acpi_device *device = SystemArgument1; + ULONG_PTR TypeData = (ULONG_PTR)SystemArgument2; KIRQL OldIrql; + + event = ExAllocatePool(NonPagedPool,sizeof(struct acpi_bus_event)); + if (!event) + return; + + sprintf(event->device_class, "%s", device->pnp.device_class); + sprintf(event->bus_id, "%s", device->pnp.bus_id); + event->type = (TypeData & 0xFF000000) >> 24; + event->data = (TypeData & 0x00FFFFFF); KeAcquireSpinLock(&acpi_bus_event_lock, &OldIrql); list_add_tail(&event->node, &acpi_bus_event_list); @@ -479,7 +490,7 @@ acpi_bus_generate_event ( UINT8 type, int data) { - struct acpi_bus_event *event = NULL; + ULONG_PTR TypeData = 0; DPRINT("acpi_bus_generate_event"); @@ -489,18 +500,14 @@ acpi_bus_generate_event ( /* drop event on the floor if no one's listening */ if (!event_is_open) return_VALUE(0); + + /* Data shouldn't even get near 24 bits */ + ASSERT(!(data & 0xFF000000)); + + TypeData = data; + TypeData |= type << 24; - event = ExAllocatePool(NonPagedPool,sizeof(struct acpi_bus_event)); - if (!event) - return_VALUE(-4); - - sprintf(event->device_class, "%s", device->pnp.device_class); - sprintf(event->bus_id, "%s", device->pnp.bus_id); - event->type = type; - event->data = data; - - if (!KeInsertQueueDpc(&event_dpc, event, NULL)) - ExFreePool(event); + KeInsertQueueDpc(&event_dpc, device, (PVOID)TypeData); return_VALUE(0); } diff --git a/drivers/bus/acpi/buspdo.c b/drivers/bus/acpi/buspdo.c index d5129ffa5f5..7d167b7742c 100644 --- a/drivers/bus/acpi/buspdo.c +++ b/drivers/bus/acpi/buspdo.c @@ -727,6 +727,7 @@ Bus_PDO_QueryResources( case ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64: case ACPI_RESOURCE_TYPE_MEMORY24: case ACPI_RESOURCE_TYPE_MEMORY32: + case ACPI_RESOURCE_TYPE_FIXED_MEMORY32: case ACPI_RESOURCE_TYPE_IO: { NumberOfResources++; @@ -1044,6 +1045,22 @@ Bus_PDO_QueryResources( ResourceDescriptor->u.Memory.Start.QuadPart = mem32_data->Minimum; ResourceDescriptor->u.Memory.Length = mem32_data->AddressLength; + ResourceDescriptor++; + break; + } + case ACPI_RESOURCE_TYPE_FIXED_MEMORY32: + { + ACPI_RESOURCE_FIXED_MEMORY32 *memfixed32_data = (ACPI_RESOURCE_FIXED_MEMORY32*) &resource->Data; + ResourceDescriptor->Type = CmResourceTypeMemory; + ResourceDescriptor->ShareDisposition = CmResourceShareDeviceExclusive; + ResourceDescriptor->Flags = 0; + if (memfixed32_data->WriteProtect == ACPI_READ_ONLY_MEMORY) + ResourceDescriptor->Flags |= CM_RESOURCE_MEMORY_READ_ONLY; + else + ResourceDescriptor->Flags |= CM_RESOURCE_MEMORY_READ_WRITE; + ResourceDescriptor->u.Memory.Start.QuadPart = memfixed32_data->Address; + ResourceDescriptor->u.Memory.Length = memfixed32_data->AddressLength; + ResourceDescriptor++; break; } @@ -1142,6 +1159,7 @@ Bus_PDO_QueryResourceRequirements( case ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64: case ACPI_RESOURCE_TYPE_MEMORY24: case ACPI_RESOURCE_TYPE_MEMORY32: + case ACPI_RESOURCE_TYPE_FIXED_MEMORY32: case ACPI_RESOURCE_TYPE_IO: { NumberOfResources++; @@ -1479,6 +1497,24 @@ Bus_PDO_QueryResourceRequirements( RequirementDescriptor->u.Memory.MaximumAddress.QuadPart = mem32_data->Maximum; RequirementDescriptor->u.Memory.Length = mem32_data->AddressLength; + RequirementDescriptor++; + break; + } + case ACPI_RESOURCE_TYPE_FIXED_MEMORY32: + { + ACPI_RESOURCE_FIXED_MEMORY32 *fixedmem32_data = (ACPI_RESOURCE_FIXED_MEMORY32*) &resource->Data; + RequirementDescriptor->Option = CurrentRes ? 0 : IO_RESOURCE_PREFERRED; + RequirementDescriptor->Type = CmResourceTypeMemory; + RequirementDescriptor->ShareDisposition = CmResourceShareDeviceExclusive; + RequirementDescriptor->Flags = 0; + if (fixedmem32_data->WriteProtect == ACPI_READ_ONLY_MEMORY) + RequirementDescriptor->Flags |= CM_RESOURCE_MEMORY_READ_ONLY; + else + RequirementDescriptor->Flags |= CM_RESOURCE_MEMORY_READ_WRITE; + RequirementDescriptor->u.Memory.MinimumAddress.QuadPart = fixedmem32_data->Address; + RequirementDescriptor->u.Memory.MaximumAddress.QuadPart = fixedmem32_data->Address; + RequirementDescriptor->u.Memory.Length = fixedmem32_data->AddressLength; + RequirementDescriptor++; break; } diff --git a/drivers/bus/pcix/debug.c b/drivers/bus/pcix/debug.c index f3a9930a880..bd2465e1ae3 100644 --- a/drivers/bus/pcix/debug.c +++ b/drivers/bus/pcix/debug.c @@ -49,6 +49,26 @@ PCHAR PoCodes[] = "QUERY_POWER", }; +PCHAR SystemPowerStates[] = +{ + "Unspecified", + "Working", + "Sleeping1", + "Sleeping2", + "Sleeping3", + "Hibernate", + "Shutdown" +}; + +PCHAR DevicePowerStates[] = +{ + "Unspecified", + "D0", + "D1", + "D2", + "D3" +}; + ULONG PciBreakOnPdoPowerIrp, PciBreakOnFdoPowerIrp; ULONG PciBreakOnPdoPnpIrp, PciBreakOnFdoPnpIrp; @@ -194,4 +214,187 @@ PciDebugDumpCommonConfig(IN PPCI_COMMON_HEADER PciData) } } +VOID +NTAPI +PciDebugDumpQueryCapabilities(IN PDEVICE_CAPABILITIES DeviceCaps) +{ + ULONG i; + + /* Dump the capabilities */ + DPRINT1("Capabilities\n Lock:%d, Eject:%d, Remove:%d, Dock:%d, UniqueId:%d\n", + DeviceCaps->LockSupported, + DeviceCaps->EjectSupported, + DeviceCaps->Removable, + DeviceCaps->DockDevice, + DeviceCaps->UniqueID); + DbgPrint(" SilentInstall:%d, RawOk:%d, SurpriseOk:%d\n", + DeviceCaps->SilentInstall, + DeviceCaps->RawDeviceOK, + DeviceCaps->SurpriseRemovalOK); + DbgPrint(" Address %08x, UINumber %08x, Latencies D1 %d, D2 %d, D3 %d\n", + DeviceCaps->Address, + DeviceCaps->UINumber, + DeviceCaps->D1Latency, + DeviceCaps->D2Latency, + DeviceCaps->D3Latency); + + /* Dump and convert the wake levels */ + DbgPrint(" System Wake: %s, Device Wake: %s\n DeviceState[PowerState] [", + SystemPowerStates[min(DeviceCaps->SystemWake, PowerSystemMaximum)], + DevicePowerStates[min(DeviceCaps->DeviceWake, PowerDeviceMaximum)]); + + /* Dump and convert the power state mappings */ + for (i = PowerSystemWorking; i < PowerSystemMaximum; i++) + DbgPrint(" %s", DevicePowerStates[DeviceCaps->DeviceState[i]]); + + /* Finish the dump */ + DbgPrint(" ]\n"); +} + +PCHAR +NTAPI +PciDebugCmResourceTypeToText(IN UCHAR Type) +{ + /* What kind of resource it this? */ + switch (Type) + { + /* Pick the correct identifier string based on the type */ + case CmResourceTypeDeviceSpecific: return "CmResourceTypeDeviceSpecific"; + case CmResourceTypePort: return "CmResourceTypePort"; + case CmResourceTypeInterrupt: return "CmResourceTypeInterrupt"; + case CmResourceTypeMemory: return "CmResourceTypeMemory"; + case CmResourceTypeDma: return "CmResourceTypeDma"; + case CmResourceTypeBusNumber: return "CmResourceTypeBusNumber"; + case CmResourceTypeConfigData: return "CmResourceTypeConfigData"; + case CmResourceTypeDevicePrivate: return "CmResourceTypeDevicePrivate"; + case CmResourceTypePcCardConfig: return "CmResourceTypePcCardConfig"; + default: return "*** INVALID RESOURCE TYPE ***"; + } +} + +VOID +NTAPI +PciDebugPrintIoResource(IN PIO_RESOURCE_DESCRIPTOR Descriptor) +{ + ULONG i; + PULONG Data; + + /* Print out the header */ + DPRINT1(" IoResource Descriptor dump: Descriptor @0x%x\n", Descriptor); + DPRINT1(" Option = 0x%x\n", Descriptor->Option); + DPRINT1(" Type = %d (%s)\n", Descriptor->Type, PciDebugCmResourceTypeToText(Descriptor->Type)); + DPRINT1(" ShareDisposition = %d\n", Descriptor->ShareDisposition); + DPRINT1(" Flags = 0x%04X\n", Descriptor->Flags); + + /* Loop private data */ + Data = (PULONG)&Descriptor->u.DevicePrivate; + for (i = 0; i < 6; i += 3) + { + /* Dump it in 32-bit triplets */ + DPRINT1(" Data[%d] = %08x %08x %08x\n", i, Data[0], Data[1], Data[2]); + } +} + +VOID +NTAPI +PciDebugPrintIoResReqList(IN PIO_RESOURCE_REQUIREMENTS_LIST Requirements) +{ + ULONG AlternativeLists; + PIO_RESOURCE_LIST List; + ULONG Count; + PIO_RESOURCE_DESCRIPTOR Descriptor; + + /* Make sure there's a list */ + if (!Requirements) return; + + /* Grab the main list and the alternates as well */ + AlternativeLists = Requirements->AlternativeLists; + List = Requirements->List; + + /* Print out the initial header*/ + DPRINT1(" IO_RESOURCE_REQUIREMENTS_LIST (PCI Bus Driver)\n"); + DPRINT1(" InterfaceType %d\n", Requirements->InterfaceType); + DPRINT1(" BusNumber 0x%x\n", Requirements->BusNumber); + DPRINT1(" SlotNumber %d (0x%x), (d/f = 0x%x/0x%x)\n", + Requirements->SlotNumber, + Requirements->SlotNumber, + ((PCI_SLOT_NUMBER*)&Requirements->SlotNumber)->u.bits.DeviceNumber, + ((PCI_SLOT_NUMBER*)&Requirements->SlotNumber)->u.bits.FunctionNumber); + DPRINT1(" AlternativeLists %d\n", AlternativeLists); + + /* Scan alternative lists */ + while (AlternativeLists--) + { + /* Get the descriptor array, and the count of descriptors */ + Descriptor = List->Descriptors; + Count = List->Count; + + /* Print out each descriptor */ + DPRINT1("\n List[%d].Count = %d\n", AlternativeLists, Count); + while (Count--) PciDebugPrintIoResource(Descriptor++); + + /* Should've reached a new list now */ + List = (PIO_RESOURCE_LIST)Descriptor; + } + + /* Terminate the dump */ + DPRINT1("\n"); +} + +VOID +NTAPI +PciDebugPrintPartialResource(IN PCM_PARTIAL_RESOURCE_DESCRIPTOR PartialResource) +{ + /* Dump all the data in the partial */ + DPRINT1(" Partial Resource Descriptor @0x%x\n", PartialResource); + DPRINT1(" Type = %d (%s)\n", PartialResource->Type, PciDebugCmResourceTypeToText(PartialResource->Type)); + DPRINT1(" ShareDisposition = %d\n", PartialResource->ShareDisposition); + DPRINT1(" Flags = 0x%04X\n", PartialResource->Flags); + DPRINT1(" Data[%d] = %08x %08x %08x\n", + 0, + PartialResource->u.Generic.Start.LowPart, + PartialResource->u.Generic.Start.HighPart, + PartialResource->u.Generic.Length); +} + +VOID +NTAPI +PciDebugPrintCmResList(IN PCM_RESOURCE_LIST PartialList) +{ + PCM_FULL_RESOURCE_DESCRIPTOR FullDescriptor; + PCM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptor; + ULONG Count, i, ListCount; + + /* Make sure there's something to dump */ + if (!PartialList) return; + + /* Get the full list count */ + ListCount = PartialList->Count; + FullDescriptor = PartialList->List; + DPRINT1(" CM_RESOURCE_LIST (PCI Bus Driver) (List Count = %d)\n", PartialList->Count); + + /* Loop full list */ + for (i = 0; i < ListCount; i++) + { + /* Loop full descriptor */ + DPRINT1(" InterfaceType %d\n", FullDescriptor->InterfaceType); + DPRINT1(" BusNumber 0x%x\n", FullDescriptor->BusNumber); + + /* Get partial count and loop partials */ + Count = FullDescriptor->PartialResourceList.Count; + for (PartialDescriptor = FullDescriptor->PartialResourceList.PartialDescriptors; + Count; + PartialDescriptor = PciNextPartialDescriptor(PartialDescriptor)) + { + /* Print each partial */ + PciDebugPrintPartialResource(PartialDescriptor); + Count--; + } + } + + /* Done printing data */ + DPRINT1("\n"); +} + + /* EOF */ diff --git a/drivers/bus/pcix/device.c b/drivers/bus/pcix/device.c index 05d307dc57f..c26fd92b7fe 100644 --- a/drivers/bus/pcix/device.c +++ b/drivers/bus/pcix/device.c @@ -20,32 +20,238 @@ VOID NTAPI Device_SaveCurrentSettings(IN PPCI_CONFIGURATOR_CONTEXT Context) { - UNIMPLEMENTED; - while (TRUE); + PPCI_COMMON_HEADER PciData; + PIO_RESOURCE_DESCRIPTOR IoDescriptor; + PCM_PARTIAL_RESOURCE_DESCRIPTOR CmDescriptor; + PPCI_FUNCTION_RESOURCES Resources; + PULONG BarArray; + ULONG Bar, BarMask, i; + + /* Get variables from context */ + PciData = Context->Current; + Resources = Context->PdoExtension->Resources; + + /* Loop all the PCI BARs */ + BarArray = PciData->u.type0.BaseAddresses; + for (i = 0; i <= PCI_TYPE0_ADDRESSES; i++) + { + /* Get the resource descriptor and limit descriptor for this BAR */ + CmDescriptor = &Resources->Current[i]; + IoDescriptor = &Resources->Limit[i]; + + /* Build the resource descriptor based on the limit descriptor */ + CmDescriptor->Type = IoDescriptor->Type; + if (CmDescriptor->Type == CmResourceTypeNull) continue; + CmDescriptor->Flags = IoDescriptor->Flags; + CmDescriptor->ShareDisposition = IoDescriptor->ShareDisposition; + CmDescriptor->u.Generic.Start.HighPart = 0; + CmDescriptor->u.Generic.Length = IoDescriptor->u.Generic.Length; + + /* Read the actual BAR value */ + Bar = BarArray[i]; + + /* Check which BAR is being processed now */ + if (i != PCI_TYPE0_ADDRESSES) + { + /* Check if this is an I/O BAR */ + if (Bar & PCI_ADDRESS_IO_SPACE) + { + /* Use the right mask to get the I/O port base address */ + ASSERT(CmDescriptor->Type == CmResourceTypePort); + BarMask = PCI_ADDRESS_IO_ADDRESS_MASK; + } + else + { + /* It's a RAM BAR, use the right mask to get the base address */ + ASSERT(CmDescriptor->Type == CmResourceTypeMemory); + BarMask = PCI_ADDRESS_MEMORY_ADDRESS_MASK; + + /* Check if it's a 64-bit BAR */ + if ((Bar & PCI_ADDRESS_MEMORY_TYPE_MASK) == PCI_TYPE_64BIT) + { + /* The next BAR value is actually the high 32-bits */ + CmDescriptor->u.Memory.Start.HighPart = BarArray[i + 1]; + } + else if ((Bar & PCI_ADDRESS_MEMORY_TYPE_MASK) == PCI_TYPE_20BIT) + { + /* Legacy BAR, don't read more than 20 bits of the address */ + BarMask = 0xFFFF0; + } + } + } + else + { + /* Actually a ROM BAR, so read the correct register */ + Bar = PciData->u.type0.ROMBaseAddress; + + /* Apply the correct mask for ROM BARs */ + BarMask = PCI_ADDRESS_ROM_ADDRESS_MASK; + + /* Make sure it's enabled */ + if (!(Bar & PCI_ROMADDRESS_ENABLED)) + { + /* If it isn't, then a descriptor won't be built for it */ + CmDescriptor->Type = CmResourceTypeNull; + continue; + } + } + + /* Now we have the right mask, read the actual address from the BAR */ + Bar &= BarMask; + CmDescriptor->u.Memory.Start.LowPart = Bar; + + /* And check for invalid BAR addresses */ + if (!(CmDescriptor->u.Memory.Start.HighPart | Bar)) + { + /* Skip these descriptors */ + CmDescriptor->Type = CmResourceTypeNull; + DPRINT1("Invalid BAR\n"); + } + } + + /* Also save the sub-IDs that came directly from the PCI header */ + Context->PdoExtension->SubsystemVendorId = PciData->u.type0.SubVendorID; + Context->PdoExtension->SubsystemId = PciData->u.type0.SubSystemID; } VOID NTAPI Device_SaveLimits(IN PPCI_CONFIGURATOR_CONTEXT Context) { - UNIMPLEMENTED; - while (TRUE); + PPCI_COMMON_HEADER Current, PciData; + PPCI_PDO_EXTENSION PdoExtension; + PULONG BarArray; + PIO_RESOURCE_DESCRIPTOR Limit; + ULONG i; + + /* Get pointers from the context */ + PdoExtension = Context->PdoExtension; + Current = Context->Current; + PciData = Context->PciData; + + /* And get the array of bARs */ + BarArray = PciData->u.type0.BaseAddresses; + + /* First, check for IDE controllers that are not in native mode */ + if ((PdoExtension->BaseClass == PCI_CLASS_MASS_STORAGE_CTLR) && + (PdoExtension->SubClass == PCI_SUBCLASS_MSC_IDE_CTLR) && + (PdoExtension->ProgIf & 5) != 5) + { + /* They should not be using any non-legacy resources */ + BarArray[0] = 0; + BarArray[1] = 0; + BarArray[2] = 0; + BarArray[3] = 0; + } + else if ((PdoExtension->VendorId == 0x5333) && + ((PdoExtension->DeviceId == 0x88F0) || + (PdoExtension->DeviceId == 0x8880))) + { + /* + * The problem is caused by the S3 Vision 968/868 video controller which + * is used on the Diamond Stealth 64 Video 3000 series, Number Nine 9FX + * motion 771, and other popular video cards, all containing a memory bug. + * The 968/868 claims to require 32 MB of memory, but it actually decodes + * 64 MB of memory. + */ + for (i = 0; i < PCI_TYPE0_ADDRESSES; i++) + { + /* Find its 32MB RAM BAR */ + if (BarArray[i] == 0xFE000000) + { + /* Increase it to 64MB to make sure nobody touches the buffer */ + BarArray[i] = 0xFC000000; + DPRINT1("PCI - Adjusted broken S3 requirement from 32MB to 64MB\n"); + } + } + } + + /* Check for Cirrus Logic GD5430/5440 cards */ + if ((PdoExtension->VendorId == 0x1013) && (PdoExtension->DeviceId == 0xA0)) + { + /* Check for the I/O port requirement */ + if (BarArray[1] == 0xFC01) + { + /* Check for completely bogus BAR */ + if (Current->u.type0.BaseAddresses[1] == 1) + { + /* Ignore it */ + BarArray[1] = 0; + DPRINT1("PCI - Ignored Cirrus GD54xx broken IO requirement (400 ports)\n"); + } + else + { + /* Otherwise, this BAR seems okay */ + DPRINT1("PCI - Cirrus GD54xx 400 port IO requirement has a valid setting (%08x)\n", + Current->u.type0.BaseAddresses[1]); + } + } + else if (BarArray[1]) + { + /* Strange, the I/O BAR was not found as expected (or at all) */ + DPRINT1("PCI - Warning Cirrus Adapter 101300a0 has unexpected resource requirement (%08x)\n", + BarArray[1]); + } + } + + /* Finally, process all the limit descriptors */ + Limit = PdoExtension->Resources->Limit; + for (i = 0; i < PCI_TYPE0_ADDRESSES; i++) + { + /* And build them based on the BARs */ + if (PciCreateIoDescriptorFromBarLimit(&Limit[i], &BarArray[i], FALSE)) + { + /* This function returns TRUE if the BAR was 64-bit, handle this */ + ASSERT((i + 1) < PCI_TYPE0_ADDRESSES); + i++; + (&Limit[i])->Type == CmResourceTypeNull; + } + } + + /* Create the last descriptor based on the ROM address */ + PciCreateIoDescriptorFromBarLimit(&Limit[i], + &PciData->u.type0.ROMBaseAddress, + TRUE); } VOID NTAPI Device_MassageHeaderForLimitsDetermination(IN PPCI_CONFIGURATOR_CONTEXT Context) { - UNIMPLEMENTED; - while (TRUE); + PPCI_COMMON_HEADER PciData; + PPCI_PDO_EXTENSION PdoExtension; + PULONG BarArray; + ULONG i = 0; + + /* Get pointers from context data */ + PdoExtension = Context->PdoExtension; + PciData = Context->PciData; + + /* Get the array of BARs */ + BarArray = PciData->u.type0.BaseAddresses; + + /* Check for IDE controllers that are not in native mode */ + if ((PdoExtension->BaseClass == PCI_CLASS_MASS_STORAGE_CTLR) && + (PdoExtension->SubClass == PCI_SUBCLASS_MSC_IDE_CTLR) && + (PdoExtension->ProgIf & 5) != 5) + { + /* These controllers only use legacy resources */ + i = 4; + } + + /* Set all the bits on, which will allow us to recover the limit data */ + for (i = 0; i < PCI_TYPE0_ADDRESSES; i++) BarArray[i] = 0xFFFFFFFF; + + /* Do the same for the PCI ROM BAR */ + PciData->u.type0.ROMBaseAddress = PCI_ADDRESS_ROM_ADDRESS_MASK; } VOID NTAPI Device_RestoreCurrent(IN PPCI_CONFIGURATOR_CONTEXT Context) { - UNIMPLEMENTED; - while (TRUE); + /* Nothing to do for devices */ + return; } VOID @@ -54,22 +260,27 @@ Device_GetAdditionalResourceDescriptors(IN PPCI_CONFIGURATOR_CONTEXT Context, IN PPCI_COMMON_HEADER PciData, IN PIO_RESOURCE_DESCRIPTOR IoDescriptor) { + /* Not yet implemented */ UNIMPLEMENTED; while (TRUE); } VOID NTAPI -Device_ResetDevice(IN PPCI_CONFIGURATOR_CONTEXT Context) +Device_ResetDevice(IN PPCI_PDO_EXTENSION PdoExtension, + IN PPCI_COMMON_HEADER PciData) { + /* Not yet implemented */ UNIMPLEMENTED; while (TRUE); } VOID NTAPI -Device_ChangeResourceSettings(IN PPCI_CONFIGURATOR_CONTEXT Context) +Device_ChangeResourceSettings(IN PPCI_PDO_EXTENSION PdoExtension, + IN PPCI_COMMON_HEADER PciData) { + /* Not yet implemented */ UNIMPLEMENTED; while (TRUE); } diff --git a/drivers/bus/pcix/enum.c b/drivers/bus/pcix/enum.c index dc771f2fb53..1aaebb75dcd 100644 --- a/drivers/bus/pcix/enum.c +++ b/drivers/bus/pcix/enum.c @@ -14,6 +14,8 @@ /* GLOBALS ********************************************************************/ +PIO_RESOURCE_REQUIREMENTS_LIST PciZeroIoResourceRequirements; + PCI_CONFIGURATOR PciConfigurators[] = { { @@ -32,7 +34,7 @@ PCI_CONFIGURATOR PciConfigurators[] = PPBridge_SaveCurrentSettings, PPBridge_ChangeResourceSettings, PPBridge_GetAdditionalResourceDescriptors, - PPBridge_ResetDevice + PPBridge_ResetDevice }, { Cardbus_MassageHeaderForLimitsDetermination, @@ -44,9 +46,586 @@ PCI_CONFIGURATOR PciConfigurators[] = Cardbus_ResetDevice } }; - + /* FUNCTIONS ******************************************************************/ +BOOLEAN +NTAPI +PciComputeNewCurrentSettings(IN PPCI_PDO_EXTENSION PdoExtension, + IN PCM_RESOURCE_LIST ResourceList) +{ + PCM_PARTIAL_RESOURCE_DESCRIPTOR Partial, InterruptResource; + PCM_PARTIAL_RESOURCE_DESCRIPTOR BaseResource, CurrentDescriptor; + PCM_PARTIAL_RESOURCE_DESCRIPTOR PreviousDescriptor; + CM_PARTIAL_RESOURCE_DESCRIPTOR ResourceArray[7]; + PCM_FULL_RESOURCE_DESCRIPTOR FullList; + BOOLEAN DrainPartial, RangeChange; + ULONG i, j; + PPCI_FUNCTION_RESOURCES PciResources; + PAGED_CODE(); + + /* Make sure we have either no resources, or at least one */ + ASSERT((ResourceList == NULL) || (ResourceList->Count == 1)); + + /* Initialize no partial, interrupt descriptor, or range change */ + Partial = NULL; + InterruptResource = NULL; + RangeChange = FALSE; + + /* Check if there's not actually any resources */ + if (!(ResourceList) || !(ResourceList->Count)) + { + /* Then just return the hardware update state */ + return PdoExtension->UpdateHardware; + } + + /* Print the new specified resource list */ + PciDebugPrintCmResList(ResourceList); + + /* Clear the temporary resource array */ + for (i = 0; i < 7; i++) ResourceArray[i].Type = CmResourceTypeNull; + + /* Loop the full resource descriptor */ + FullList = ResourceList->List; + for (i = 0; i < ResourceList->Count; i++) + { + /* Initialize loop variables */ + DrainPartial = FALSE; + BaseResource = NULL; + + /* Loop the partial descriptors */ + Partial = FullList->PartialResourceList.PartialDescriptors; + for (j = 0; j < FullList->PartialResourceList.Count; j++) + { + /* Check if we were supposed to drain a partial due to device data */ + if (DrainPartial) + { + /* Draining complete, move on to the next descriptor then */ + DrainPartial--; + continue; + } + + /* Check what kind of descriptor this was */ + switch (Partial->Type) + { + /* Base BAR resources */ + case CmResourceTypePort: + case CmResourceTypeMemory: + + /* Set it as the base */ + ASSERT(BaseResource == NULL); + BaseResource = Partial; + break; + + /* Interrupt resource */ + case CmResourceTypeInterrupt: + + /* Make sure it's a compatible (and the only) PCI interrupt */ + ASSERT(InterruptResource == NULL); + ASSERT(Partial->u.Interrupt.Level == Partial->u.Interrupt.Vector); + InterruptResource = Partial; + + /* Only 255 interrupts on x86/x64 hardware */ + if (Partial->u.Interrupt.Level < 256) + { + /* Use the passed interrupt line */ + PdoExtension->AdjustedInterruptLine = Partial->u.Interrupt.Level; + } + else + { + /* Invalid vector, so ignore it */ + PdoExtension->AdjustedInterruptLine = 0; + } + + break; + + /* Check for specific device data */ + case CmResourceTypeDevicePrivate: + + /* Check what kind of data this was */ + switch (Partial->u.DevicePrivate.Data[0]) + { + /* Not used in the driver yet */ + case 1: + UNIMPLEMENTED; + while (TRUE); + break; + + /* Not used in the driver yet */ + case 2: + UNIMPLEMENTED; + while (TRUE); + break; + + /* A drain request */ + case 3: + /* Shouldn't be a base resource, this is a drain */ + ASSERT(BaseResource == NULL); + DrainPartial = Partial->u.DevicePrivate.Data[1]; + ASSERT(DrainPartial == TRUE); + break; + } + break; + } + + /* Move to the next descriptor */ + Partial = PciNextPartialDescriptor(Partial); + } + + /* We should be starting a new list now */ + ASSERT(BaseResource == NULL); + FullList = (PVOID)Partial; + } + + /* Check the current assigned PCI resources */ + PciResources = PdoExtension->Resources; + if (!PciResources) return FALSE; + + //if... // MISSING CODE + UNIMPLEMENTED; + DPRINT1("Missing sanity checking code!\n"); + + /* Loop all the PCI function resources */ + for (i = 0; i < 7; i++) + { + /* Get the current function resource descriptor, and the new one */ + CurrentDescriptor = &PciResources->Current[i]; + Partial = &ResourceArray[i]; + + /* Previous is current during the first loop iteration */ + PreviousDescriptor = &PciResources->Current[(i == 0) ? (0) : (i - 1)]; + + /* Check if this new descriptor is different than the old one */ + if (((Partial->Type != CurrentDescriptor->Type) || + (Partial->Type != CmResourceTypeNull)) && + ((Partial->u.Generic.Start.QuadPart != + CurrentDescriptor->u.Generic.Start.QuadPart) || + (Partial->u.Generic.Length != CurrentDescriptor->u.Generic.Length))) + { + /* Record a change */ + RangeChange = TRUE; + + /* Was there a range before? */ + if (CurrentDescriptor->Type != CmResourceTypeNull) + { + /* Print it */ + DbgPrint(" Old range-\n"); + PciDebugPrintPartialResource(CurrentDescriptor); + } + else + { + /* There was no range */ + DbgPrint(" Previously unset range\n"); + } + + /* Print new one */ + DbgPrint(" changed to\n"); + PciDebugPrintPartialResource(Partial); + + /* Update to new range */ + CurrentDescriptor->Type = Partial->Type; + PreviousDescriptor->u.Generic.Start = Partial->u.Generic.Start; + PreviousDescriptor->u.Generic.Length = Partial->u.Generic.Length; + CurrentDescriptor = PreviousDescriptor; + } + } + + /* Either the hardware was updated, or a resource range changed */ + return ((RangeChange) || (PdoExtension->UpdateHardware)); +} + +VOID +NTAPI +PcipUpdateHardware(IN PVOID Context, + IN PVOID Context2) +{ + PPCI_PDO_EXTENSION PdoExtension = Context; + PPCI_COMMON_HEADER PciData = Context2; + + /* Check if we're allowed to disable decodes */ + PciData->Command = PdoExtension->CommandEnables; + if (!(PdoExtension->HackFlags & PCI_HACK_PRESERVE_COMMAND)) + { + /* Disable all decodes */ + PciData->Command &= ~(PCI_ENABLE_IO_SPACE | + PCI_ENABLE_MEMORY_SPACE | + PCI_ENABLE_BUS_MASTER | + PCI_ENABLE_WRITE_AND_INVALIDATE); + } + + /* Update the device configuration */ + PciData->Status = 0; + PciWriteDeviceConfig(PdoExtension, PciData, 0, PCI_COMMON_HDR_LENGTH); + + /* Turn decodes back on */ + PciDecodeEnable(PdoExtension, TRUE, &PdoExtension->CommandEnables); +} + +VOID +NTAPI +PciUpdateHardware(IN PPCI_PDO_EXTENSION PdoExtension, + IN PPCI_COMMON_HEADER PciData) +{ + PCI_IPI_CONTEXT Context; + + /* Check for critical devices and PCI Debugging devices */ + if ((PdoExtension->HackFlags & PCI_HACK_CRITICAL_DEVICE) || + (PdoExtension->OnDebugPath)) + { + /* Build the context and send an IPI */ + Context.RunCount = 1; + Context.Barrier = 1; + Context.Context = PciData; + Context.Function = PcipUpdateHardware; + Context.DeviceExtension = PdoExtension; + KeIpiGenericCall(PciExecuteCriticalSystemRoutine, (ULONG_PTR)&Context); + } + else + { + /* Just to the update inline */ + PcipUpdateHardware(PdoExtension, PciData); + } +} + +PIO_RESOURCE_REQUIREMENTS_LIST +NTAPI +PciAllocateIoRequirementsList(IN ULONG Count, + IN ULONG BusNumber, + IN ULONG SlotNumber) +{ + SIZE_T Size; + PIO_RESOURCE_REQUIREMENTS_LIST RequirementsList; + + /* Calculate the final size of the list, including each descriptor */ + Size = sizeof(IO_RESOURCE_REQUIREMENTS_LIST); + if (Count > 1) Size = sizeof(IO_RESOURCE_DESCRIPTOR) * (Count - 1) + + sizeof(IO_RESOURCE_REQUIREMENTS_LIST); + + /* Allocate the list */ + RequirementsList = ExAllocatePoolWithTag(PagedPool, Size, 'BicP'); + if (!RequirementsList) return NULL; + + /* Initialize it */ + RtlZeroMemory(RequirementsList, Size); + RequirementsList->AlternativeLists = 1; + RequirementsList->BusNumber = BusNumber; + RequirementsList->SlotNumber = SlotNumber; + RequirementsList->InterfaceType = PCIBus; + RequirementsList->ListSize = Size; + RequirementsList->List[0].Count = Count; + RequirementsList->List[0].Version = 1; + RequirementsList->List[0].Revision = 1; + + /* Return it */ + return RequirementsList; +} + +PCM_RESOURCE_LIST +NTAPI +PciAllocateCmResourceList(IN ULONG Count, + IN ULONG BusNumber) +{ + SIZE_T Size; + PCM_RESOURCE_LIST ResourceList; + + /* Calculate the final size of the list, including each descriptor */ + Size = sizeof(CM_RESOURCE_LIST); + if (Count > 1) Size = sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR) * (Count - 1) + + sizeof(CM_RESOURCE_LIST); + + /* Allocate the list */ + ResourceList = ExAllocatePoolWithTag(PagedPool, Size, 'BicP'); + if (!ResourceList) return NULL; + + /* Initialize it */ + RtlZeroMemory(ResourceList, Size); + ResourceList->Count = 1; + ResourceList->List[0].BusNumber = BusNumber; + ResourceList->List[0].InterfaceType = PCIBus; + ResourceList->List[0].PartialResourceList.Version = 1; + ResourceList->List[0].PartialResourceList.Revision = 1; + ResourceList->List[0].PartialResourceList.Count = Count; + + /* Return it */ + return ResourceList; +} + +NTSTATUS +NTAPI +PciQueryResources(IN PPCI_PDO_EXTENSION PdoExtension, + OUT PCM_RESOURCE_LIST *Buffer) +{ + PPCI_FUNCTION_RESOURCES PciResources; + BOOLEAN HaveVga, HaveMemSpace, HaveIoSpace; + USHORT BridgeControl, PciCommand; + ULONG Count, i; + PCM_PARTIAL_RESOURCE_DESCRIPTOR Partial, Resource, LastResource; + PCM_RESOURCE_LIST ResourceList; + UCHAR InterruptLine; + PAGED_CODE(); + + /* Assume failure */ + Count = 0; + HaveVga = FALSE; + *Buffer = NULL; + + /* Make sure there's some resources to query */ + PciResources = PdoExtension->Resources; + if (!PciResources) return STATUS_SUCCESS; + + /* Read the decodes */ + PciReadDeviceConfig(PdoExtension, + &PciCommand, + FIELD_OFFSET(PCI_COMMON_HEADER, Command), + sizeof(USHORT)); + + /* Check which ones are turned on */ + HaveIoSpace = PciCommand & PCI_ENABLE_IO_SPACE; + HaveMemSpace = PciCommand & PCI_ENABLE_MEMORY_SPACE; + + /* Loop maximum possible descriptors */ + for (i = 0; i < 7; i++) + { + /* Check if the decode for this descriptor is actually turned on */ + Partial = &PciResources->Current[i]; + if (((HaveMemSpace) && (Partial->Type == CmResourceTypeMemory)) || + ((HaveIoSpace) && (Partial->Type == CmResourceTypePort))) + { + /* One more fully active descriptor */ + Count++; + } + } + + /* If there's an interrupt pin associated, check at least one decode is on */ + if ((PdoExtension->InterruptPin) && ((HaveMemSpace) || (HaveIoSpace))) + { + /* Read the interrupt line for the pin, add a descriptor if it's valid */ + InterruptLine = PdoExtension->AdjustedInterruptLine; + if ((InterruptLine) && (InterruptLine != -1)) Count++; + } + + /* Check for PCI bridge */ + if (PdoExtension->HeaderType == PCI_BRIDGE_TYPE) + { + /* Read bridge settings, check if VGA is present */ + PciReadDeviceConfig(PdoExtension, + &BridgeControl, + FIELD_OFFSET(PCI_COMMON_HEADER, u.type1.BridgeControl), + sizeof(USHORT)); + if (BridgeControl & PCI_ENABLE_BRIDGE_VGA) + { + /* Remember for later */ + HaveVga = TRUE; + + /* One memory descriptor for 0xA0000, plus the two I/O port ranges */ + if (HaveMemSpace) Count++; + if (HaveIoSpace) Count += 2; + } + } + + /* If there's no descriptors in use, there's no resources, so return */ + if (!Count) return STATUS_SUCCESS; + + /* Allocate a resource list to hold the resources */ + ResourceList = PciAllocateCmResourceList(Count, + PdoExtension->ParentFdoExtension->BaseBus); + if (!ResourceList) return STATUS_INSUFFICIENT_RESOURCES; + + /* This is where the descriptors will be copied into */ + Resource = ResourceList->List[0].PartialResourceList.PartialDescriptors; + LastResource = Resource + Count + 1; + + /* Loop maximum possible descriptors */ + for (i = 0; i < 7; i++) + { + /* Check if the decode for this descriptor is actually turned on */ + Partial = &PciResources->Current[i]; + if (((HaveMemSpace) && (Partial->Type == CmResourceTypeMemory)) || + ((HaveIoSpace) && (Partial->Type == CmResourceTypePort))) + { + /* Copy the descriptor into the resource list */ + *Resource++ = *Partial; + } + } + + /* Check if earlier the code detected this was a PCI bridge with VGA on it */ + if (HaveVga) + { + /* Are the memory decodes enabled? */ + if (HaveMemSpace) + { + /* Build a memory descriptor for a 128KB framebuffer at 0xA0000 */ + Resource->Flags = CM_RESOURCE_MEMORY_READ_WRITE; + Resource->u.Generic.Start.HighPart = 0; + Resource->Type = CmResourceTypeMemory; + Resource->u.Generic.Start.LowPart = 0xA0000; + Resource->u.Generic.Length = 0x20000; + Resource++; + } + + /* Are the I/O decodes enabled? */ + if (HaveIoSpace) + { + /* Build an I/O descriptor for the graphic ports at 0x3B0 */ + Resource->Type = CmResourceTypePort; + Resource->Flags = CM_RESOURCE_PORT_POSITIVE_DECODE | CM_RESOURCE_PORT_10_BIT_DECODE; + Resource->u.Port.Start.QuadPart = 0x3B0u; + Resource->u.Port.Length = 0xC; + Resource++; + + /* Build an I/O descriptor for the graphic ports at 0x3C0 */ + Resource->Type = CmResourceTypePort; + Resource->Flags = CM_RESOURCE_PORT_POSITIVE_DECODE | CM_RESOURCE_PORT_10_BIT_DECODE; + Resource->u.Port.Start.QuadPart = 0x3C0u; + Resource->u.Port.Length = 0x20; + Resource++; + } + } + + /* If there's an interrupt pin associated, check at least one decode is on */ + if ((PdoExtension->InterruptPin) && ((HaveMemSpace) || (HaveIoSpace))) + { + /* Read the interrupt line for the pin, check if it's valid */ + InterruptLine = PdoExtension->AdjustedInterruptLine; + if ((InterruptLine) && (InterruptLine != -1)) + { + /* Make sure there's still space */ + ASSERT(Resource < LastResource); + + /* Add the interrupt descriptor */ + Resource->Flags = CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE; + Resource->Type = CmResourceTypeInterrupt; + Resource->ShareDisposition = CmResourceShareShared; + Resource->u.Interrupt.Affinity = -1; + Resource->u.Interrupt.Level = InterruptLine; + Resource->u.Interrupt.Vector = InterruptLine; + } + } + + /* Return the resouce list */ + *Buffer = ResourceList; + return STATUS_SUCCESS; +} + +NTSTATUS +NTAPI +PciQueryTargetDeviceRelations(IN PPCI_PDO_EXTENSION PdoExtension, + IN OUT PDEVICE_RELATIONS *pDeviceRelations) +{ + PDEVICE_RELATIONS DeviceRelations; + PAGED_CODE(); + + /* If there were existing relations, free them */ + if (*pDeviceRelations) ExFreePoolWithTag(*pDeviceRelations, 0); + + /* Allocate a new structure for the relations */ + DeviceRelations = ExAllocatePoolWithTag(NonPagedPool, + sizeof(DEVICE_RELATIONS), + 'BicP'); + if (!DeviceRelations) return STATUS_INSUFFICIENT_RESOURCES; + + /* Only one relation: the PDO */ + DeviceRelations->Count = 1; + DeviceRelations->Objects[0] = PdoExtension->PhysicalDeviceObject; + ObReferenceObject(DeviceRelations->Objects[0]); + + /* Return the new relations */ + *pDeviceRelations = DeviceRelations; + return STATUS_SUCCESS; +} + +NTSTATUS +NTAPI +PciQueryEjectionRelations(IN PPCI_PDO_EXTENSION PdoExtension, + IN OUT PDEVICE_RELATIONS *pDeviceRelations) +{ + /* Not yet implemented */ + UNIMPLEMENTED; + while (TRUE); +} + +NTSTATUS +NTAPI +PciBuildRequirementsList(IN PPCI_PDO_EXTENSION PdoExtension, + IN PPCI_COMMON_HEADER PciData, + OUT PIO_RESOURCE_REQUIREMENTS_LIST* Buffer) +{ + PIO_RESOURCE_REQUIREMENTS_LIST RequirementsList; + { + /* There aren't, so use the zero descriptor */ + RequirementsList = PciZeroIoResourceRequirements; + + /* Does it actually exist yet? */ + if (!PciZeroIoResourceRequirements) + { + /* Allocate it, and use it for future use */ + RequirementsList = PciAllocateIoRequirementsList(0, 0, 0); + PciZeroIoResourceRequirements = RequirementsList; + if (!PciZeroIoResourceRequirements) return STATUS_INSUFFICIENT_RESOURCES; + } + + /* Return the zero requirements list to the caller */ + *Buffer = RequirementsList; + DPRINT1("PCI - build resource reqs - early out, 0 resources\n"); + return STATUS_SUCCESS; + } + return STATUS_SUCCESS; +} + +NTSTATUS +NTAPI +PciQueryRequirements(IN PPCI_PDO_EXTENSION PdoExtension, + IN OUT PIO_RESOURCE_REQUIREMENTS_LIST *RequirementsList) +{ + NTSTATUS Status; + PCI_COMMON_HEADER PciHeader; + PAGED_CODE(); + + /* Check if the PDO has any resources, or at least an interrupt pin */ + if ((PdoExtension->Resources) || (PdoExtension->InterruptPin)) + { + /* Read the current PCI header */ + PciReadDeviceConfig(PdoExtension, &PciHeader, 0, PCI_COMMON_HDR_LENGTH); + + /* Use it to build a list of requirements */ + Status = PciBuildRequirementsList(PdoExtension, &PciHeader, RequirementsList); + if (!NT_SUCCESS(Status)) return Status; + + /* Is this a Compaq PCI Hotplug Controller (r17) on a PAE system ? */ + if ((PciHeader.VendorID == 0xE11) && + (PciHeader.DeviceID == 0xA0F7) && + (PciHeader.RevisionID == 17) && + (ExIsProcessorFeaturePresent(PF_PAE_ENABLED))) + { + /* Have not tested this on eVb's machine yet */ + UNIMPLEMENTED; + while (TRUE); + } + + /* Check if the requirements are actually the zero list */ + if (*RequirementsList == PciZeroIoResourceRequirements) + { + /* A simple NULL will sufficie for the PnP Manager */ + *RequirementsList = NULL; + DPRINT1("Returning NULL requirements list\n"); + } + else + { + /* Otherwise, print out the requirements list */ + PciDebugPrintIoResReqList(*RequirementsList); + } + } + else + { + /* There aren't any resources, so simply return NULL */ + DPRINT1("PciQueryRequirements returning NULL requirements list\n"); + *RequirementsList = NULL; + } + + /* This call always succeeds (but maybe with no requirements) */ + return STATUS_SUCCESS; +} + /* * 7. The IO/MEM/Busmaster decodes are disabled for the device. * 8. The PCI bus driver sets the operating mode bits of the Programming @@ -325,8 +904,8 @@ PciApplyHacks(IN PPCI_FDO_EXTENSION DeviceExtension, * Controller to Native Mode" in the Storage section of the * Windows Driver Kit for more details. */ - PdoExtension->SwitchedIDEToNativeMode = - PciConfigureIdeController(PdoExtension, PciData, 1); + PdoExtension->IDEInNativeMode = + PciConfigureIdeController(PdoExtension, PciData, TRUE); } /* Is native mode enabled after all? */ @@ -703,8 +1282,9 @@ PciGetEnhancedCapabilities(IN PPCI_PDO_EXTENSION PdoExtension, VOID NTAPI PciWriteLimitsAndRestoreCurrent(IN PVOID Reserved, - IN PPCI_CONFIGURATOR_CONTEXT Context) + IN PVOID Context2) { + PPCI_CONFIGURATOR_CONTEXT Context = Context2; PPCI_COMMON_HEADER PciData, Current; PPCI_PDO_EXTENSION PdoExtension; @@ -715,10 +1295,10 @@ PciWriteLimitsAndRestoreCurrent(IN PVOID Reserved, /* Write the limit discovery header */ PciWriteDeviceConfig(PdoExtension, PciData, 0, PCI_COMMON_HDR_LENGTH); - + /* Now read what the device indicated the limits are */ PciReadDeviceConfig(PdoExtension, PciData, 0, PCI_COMMON_HDR_LENGTH); - + /* Then write back the original configuration header */ PciWriteDeviceConfig(PdoExtension, Current, 0, PCI_COMMON_HDR_LENGTH); @@ -735,7 +1315,7 @@ PciWriteLimitsAndRestoreCurrent(IN PVOID Reserved, /* Copy back the original status that was saved as well */ Current->Status = Context->Status; - + /* Call the configurator to restore any other data that might've changed */ Context->Configurator->RestoreCurrent(Context); } @@ -799,7 +1379,7 @@ PcipGetFunctionLimits(IN PPCI_CONFIGURATOR_CONTEXT Context) /* For these devices, an IPI must be sent to force high-IRQL discovery */ IpiContext.Barrier = 1; IpiContext.RunCount = 1; - IpiContext.PdoExtension = PdoExtension; + IpiContext.DeviceExtension = PdoExtension; IpiContext.Function = PciWriteLimitsAndRestoreCurrent; IpiContext.Context = Context; KeIpiGenericCall(PciExecuteCriticalSystemRoutine, (ULONG_PTR)&IpiContext); @@ -917,6 +1497,62 @@ PciGetFunctionLimits(IN PPCI_PDO_EXTENSION PdoExtension, return Status; } +VOID +NTAPI +PciProcessBus(IN PPCI_FDO_EXTENSION DeviceExtension) +{ + PPCI_PDO_EXTENSION PdoExtension; + PDEVICE_OBJECT PhysicalDeviceObject; + PAGED_CODE(); + + /* Get the PDO Extension */ + PhysicalDeviceObject = DeviceExtension->PhysicalDeviceObject; + PdoExtension = (PPCI_PDO_EXTENSION)PhysicalDeviceObject->DeviceExtension; + + /* Cheeck if this is the root bus */ + if (!PCI_IS_ROOT_FDO(DeviceExtension)) + { + /* Not really handling this year */ + UNIMPLEMENTED; + while (TRUE); + + /* Check for PCI bridges with the ISA bit set, or required */ + if ((PdoExtension) && + (PciClassifyDeviceType(PdoExtension) == PciTypePciBridge) && + ((PdoExtension->Dependent.type1.IsaBitRequired) || + (PdoExtension->Dependent.type1.IsaBitSet))) + { + /* We'll need to do some legacy support */ + UNIMPLEMENTED; + while (TRUE); + } + } + else + { + /* Scan all of the root bus' children bridges */ + for (PdoExtension = DeviceExtension->ChildBridgePdoList; + PdoExtension; + PdoExtension = PdoExtension->NextBridge) + { + /* Find any that have the VGA decode bit on */ + if (PdoExtension->Dependent.type1.VgaBitSet) + { + /* Again, some more legacy support we'll have to do */ + UNIMPLEMENTED; + while (TRUE); + } + } + } + + /* Check for ACPI systems where the OS assigns bus numbers */ + if (PciAssignBusNumbers) + { + /* Not yet supported */ + UNIMPLEMENTED; + while (TRUE); + } +} + NTSTATUS NTAPI PciScanBus(IN PPCI_FDO_EXTENSION DeviceExtension) @@ -1363,7 +1999,8 @@ PciScanBus(IN PPCI_FDO_EXTENSION DeviceExtension) } } - /* Enumeration is completed */ + /* Enumeration completed, do a final pass now that all devices are found */ + if (ProcessFlag) PciProcessBus(DeviceExtension); return STATUS_SUCCESS; } @@ -1488,4 +2125,122 @@ PciQueryDeviceRelations(IN PPCI_FDO_EXTENSION DeviceExtension, return STATUS_SUCCESS; } +NTSTATUS +NTAPI +PciSetResources(IN PPCI_PDO_EXTENSION PdoExtension, + IN BOOLEAN DoReset, + IN BOOLEAN SomethingSomethingDarkSide) +{ + PPCI_FDO_EXTENSION FdoExtension; + UCHAR NewCacheLineSize, NewLatencyTimer; + PCI_COMMON_HEADER PciData; + BOOLEAN Native; + PPCI_CONFIGURATOR Configurator; + + /* Get the FDO and read the configuration data */ + FdoExtension = PdoExtension->ParentFdoExtension; + PciReadDeviceConfig(PdoExtension, &PciData, 0, PCI_COMMON_HDR_LENGTH); + + /* Make sure this is still the same device */ + if (!PcipIsSameDevice(PdoExtension, &PciData)) + { + /* Fail */ + ASSERTMSG(FALSE, "PCI Set resources - not same device"); + return STATUS_DEVICE_DOES_NOT_EXIST; + } + + /* Nothing to set for a host bridge */ + if ((PdoExtension->BaseClass == PCI_CLASS_BRIDGE_DEV) && + (PdoExtension->SubClass == PCI_SUBCLASS_BR_HOST)) + { + /* Fake success */ + return STATUS_SUCCESS; + } + + /* Check if an IDE controller is being reset */ + if ((DoReset) && + (PdoExtension->BaseClass == PCI_CLASS_MASS_STORAGE_CTLR) && + (PdoExtension->SubClass == PCI_SUBCLASS_MSC_IDE_CTLR)) + { + /* Turn off native mode */ + Native = PciConfigureIdeController(PdoExtension, &PciData, FALSE); + ASSERT(Native == PdoExtension->IDEInNativeMode); + } + + /* Check for update of a hotplug device, or first configuration of one */ + if ((PdoExtension->NeedsHotPlugConfiguration) && + (FdoExtension->HotPlugParameters.Acquired)) + { + /* Don't have hotplug devices to test with yet, QEMU 0.14 should */ + UNIMPLEMENTED; + while (TRUE); + } + + /* Locate the correct resource configurator for this type of device */ + Configurator = &PciConfigurators[PdoExtension->HeaderType]; + + /* Apply the settings change */ + Configurator->ChangeResourceSettings(PdoExtension, &PciData); + + /* Assume no update needed */ + PdoExtension->UpdateHardware = FALSE; + + /* Check if a reset is needed */ + if (DoReset) + { + /* Reset resources */ + Configurator->ResetDevice(PdoExtension, &PciData); + PciData.u.type0.InterruptLine = PdoExtension->RawInterruptLine; + } + + /* Check if the latency timer changed */ + NewLatencyTimer = PdoExtension->SavedLatencyTimer; + if (PciData.LatencyTimer != NewLatencyTimer) + { + /* Debug notification */ + DPRINT1("PCI (pdox %08x) changing latency from %02x to %02x.\n", + PdoExtension, + PciData.LatencyTimer, + NewLatencyTimer); + } + + /* Check if the cache line changed */ + NewCacheLineSize = PdoExtension->SavedCacheLineSize; + if (PciData.CacheLineSize != NewCacheLineSize) + { + /* Debug notification */ + DPRINT1("PCI (pdox %08x) changing cache line size from %02x to %02x.\n", + PdoExtension, + PciData.CacheLineSize, + NewCacheLineSize); + } + + /* Inherit data from PDO extension */ + PciData.LatencyTimer = PdoExtension->SavedLatencyTimer; + PciData.CacheLineSize = PdoExtension->SavedCacheLineSize; + PciData.u.type0.InterruptLine = PdoExtension->RawInterruptLine; + + /* Apply any resource hacks required */ + PciApplyHacks(FdoExtension, + &PciData, + PdoExtension->Slot, + PCI_HACK_FIXUP_BEFORE_UPDATE, + PdoExtension); + + /* Check if I/O space was disabled by administrator or driver */ + if (PdoExtension->IoSpaceNotRequired) + { + /* Don't turn on the decode */ + PdoExtension->CommandEnables &= ~PCI_ENABLE_IO_SPACE; + } + + /* Update the device with the new settings */ + PciUpdateHardware(PdoExtension, &PciData); + + /* Update complete */ + PdoExtension->RawInterruptLine = PciData.u.type0.InterruptLine; + PdoExtension->NeedsHotPlugConfiguration = FALSE; + return STATUS_SUCCESS; +} + /* EOF */ diff --git a/drivers/bus/pcix/fdo.c b/drivers/bus/pcix/fdo.c index 256df1a3f4d..2054f65703d 100644 --- a/drivers/bus/pcix/fdo.c +++ b/drivers/bus/pcix/fdo.c @@ -295,9 +295,23 @@ PciFdoIrpQueryCapabilities(IN PIRP Irp, IN PIO_STACK_LOCATION IoStackLocation, IN PPCI_FDO_EXTENSION DeviceExtension) { - UNIMPLEMENTED; - while (TRUE); - return STATUS_NOT_SUPPORTED; + PDEVICE_CAPABILITIES Capabilities; + PAGED_CODE(); + ASSERT_FDO(DeviceExtension); + + /* Get the capabilities */ + Capabilities = IoStackLocation->Parameters.DeviceCapabilities.Capabilities; + + /* Inherit wake levels and power mappings from the higher-up capabilities */ + DeviceExtension->PowerState.SystemWakeLevel = Capabilities->SystemWake; + DeviceExtension->PowerState.DeviceWakeLevel = Capabilities->DeviceWake; + RtlCopyMemory(DeviceExtension->PowerState.SystemStateMapping, + Capabilities->DeviceState, + sizeof(DeviceExtension->PowerState.SystemStateMapping)); + + /* Dump the capabilities and return success */ + PciDebugDumpQueryCapabilities(Capabilities); + return STATUS_SUCCESS; } NTSTATUS diff --git a/drivers/bus/pcix/intrface/cardbus.c b/drivers/bus/pcix/intrface/cardbus.c index a93313ddf6f..e51fb12f308 100644 --- a/drivers/bus/pcix/intrface/cardbus.c +++ b/drivers/bus/pcix/intrface/cardbus.c @@ -73,7 +73,8 @@ Cardbus_GetAdditionalResourceDescriptors(IN PPCI_CONFIGURATOR_CONTEXT Context, VOID NTAPI -Cardbus_ResetDevice(IN PPCI_CONFIGURATOR_CONTEXT Context) +Cardbus_ResetDevice(IN PPCI_PDO_EXTENSION PdoExtension, + IN PPCI_COMMON_HEADER PciData) { UNIMPLEMENTED; while (TRUE); @@ -81,7 +82,8 @@ Cardbus_ResetDevice(IN PPCI_CONFIGURATOR_CONTEXT Context) VOID NTAPI -Cardbus_ChangeResourceSettings(IN PPCI_CONFIGURATOR_CONTEXT Context) +Cardbus_ChangeResourceSettings(IN PPCI_PDO_EXTENSION PdoExtension, + IN PPCI_COMMON_HEADER PciData) { UNIMPLEMENTED; while (TRUE); diff --git a/drivers/bus/pcix/pci.h b/drivers/bus/pcix/pci.h index c78b950c602..d1b8f9faec7 100644 --- a/drivers/bus/pcix/pci.h +++ b/drivers/bus/pcix/pci.h @@ -79,6 +79,11 @@ // #define PCI_VERIFIER_CODES 0x04 +// +// PCI ID Buffer ANSI Strings +// +#define MAX_ANSI_STRINGS 0x08 + // // Device Extension, Interface, Translator and Arbiter Signatures // @@ -102,6 +107,18 @@ typedef enum _PCI_SIGNATURE PciInterface_Location = 'icP?' } PCI_SIGNATURE, *PPCI_SIGNATURE; +// +// Driver-handled PCI Device Types +// +typedef enum _PCI_DEVICE_TYPES +{ + PciTypeInvalid, + PciTypeHostBridge, + PciTypePciBridge, + PciTypeCardbusBridge, + PciTypeDevice +} PCI_DEVICE_TYPES; + // // Device Extension Logic States // @@ -281,10 +298,11 @@ typedef struct _PCI_PDO_EXTENSION BOOLEAN MovedDevice; BOOLEAN DisablePowerDown; BOOLEAN NeedsHotPlugConfiguration; - BOOLEAN SwitchedIDEToNativeMode; + BOOLEAN IDEInNativeMode; BOOLEAN BIOSAllowsIDESwitchToNativeMode; BOOLEAN IoSpaceUnderNativeIdeControl; BOOLEAN OnDebugPath; + BOOLEAN IoSpaceNotRequired; PCI_POWER_STATE PowerState; PCI_HEADER_TYPE_DEPENDENT Dependent; ULONGLONG HackFlags; @@ -398,6 +416,19 @@ typedef struct _PCI_VERIFIER_DATA PCHAR DebuggerMessageText; } PCI_VERIFIER_DATA, *PPCI_VERIFIER_DATA; +// +// PCI ID Buffer Descriptor +// +typedef struct _PCI_ID_BUFFER +{ + ULONG Count; + ANSI_STRING Strings[MAX_ANSI_STRINGS]; + ULONG StringSize[MAX_ANSI_STRINGS]; + ULONG TotalLength; + PCHAR CharBuffer; + CHAR BufferData[256]; +} PCI_ID_BUFFER, *PPCI_ID_BUFFER; + // // PCI Configuration Callbacks // @@ -420,7 +451,8 @@ typedef VOID (NTAPI *PCI_CONFIGURATOR_SAVE_CURRENT_SETTINGS)( ); typedef VOID (NTAPI *PCI_CONFIGURATOR_CHANGE_RESOURCE_SETTINGS)( - IN struct _PCI_CONFIGURATOR_CONTEXT* Context + IN PPCI_PDO_EXTENSION PdoExtension, + IN PPCI_COMMON_HEADER PciData ); typedef VOID (NTAPI *PCI_CONFIGURATOR_GET_ADDITIONAL_RESOURCE_DESCRIPTORS)( @@ -430,7 +462,8 @@ typedef VOID (NTAPI *PCI_CONFIGURATOR_GET_ADDITIONAL_RESOURCE_DESCRIPTORS)( ); typedef VOID (NTAPI *PCI_CONFIGURATOR_RESET_DEVICE)( - IN struct _PCI_CONFIGURATOR_CONTEXT* Context + IN PPCI_PDO_EXTENSION PdoExtension, + IN PPCI_COMMON_HEADER PciData ); // @@ -466,7 +499,7 @@ typedef struct _PCI_CONFIGURATOR_CONTEXT // typedef VOID (NTAPI *PCI_IPI_FUNCTION)( IN PVOID Reserved, - IN PPCI_CONFIGURATOR_CONTEXT Context + IN PVOID Context ); // @@ -476,7 +509,7 @@ typedef struct _PCI_IPI_CONTEXT { LONG RunCount; ULONG Barrier; - PPCI_PDO_EXTENSION PdoExtension; + PVOID DeviceExtension; PCI_IPI_FUNCTION Function; PVOID Context; } PCI_IPI_CONTEXT, *PPCI_IPI_CONTEXT; @@ -1064,12 +1097,26 @@ PciCanDisableDecodes( IN BOOLEAN ForPowerDown ); +PCI_DEVICE_TYPES +NTAPI +PciClassifyDeviceType( + IN PPCI_PDO_EXTENSION PdoExtension +); + ULONG_PTR NTAPI PciExecuteCriticalSystemRoutine( IN ULONG_PTR IpiContext ); +BOOLEAN +NTAPI +PciCreateIoDescriptorFromBarLimit( + PIO_RESOURCE_DESCRIPTOR ResourceDescriptor, + IN PULONG BarArray, + IN BOOLEAN Rom +); + BOOLEAN NTAPI PciIsSlotPresentInParentMethod( @@ -1085,6 +1132,26 @@ PciDecodeEnable( OUT PUSHORT Command ); +NTSTATUS +NTAPI +PciQueryBusInformation( + IN PPCI_PDO_EXTENSION PdoExtension, + IN PPNP_BUS_INFORMATION* Buffer +); + +NTSTATUS +NTAPI +PciQueryCapabilities( + IN PPCI_PDO_EXTENSION PdoExtension, + IN OUT PDEVICE_CAPABILITIES DeviceCapability +); + +PCM_PARTIAL_RESOURCE_DESCRIPTOR +NTAPI +PciNextPartialDescriptor( + PCM_PARTIAL_RESOURCE_DESCRIPTOR CmDescriptor +); + // // Configuration Routines // @@ -1191,6 +1258,30 @@ PciDebugDumpCommonConfig( IN PPCI_COMMON_HEADER PciData ); +VOID +NTAPI +PciDebugDumpQueryCapabilities( + IN PDEVICE_CAPABILITIES DeviceCaps +); + +VOID +NTAPI +PciDebugPrintIoResReqList( + IN PIO_RESOURCE_REQUIREMENTS_LIST Requirements +); + +VOID +NTAPI +PciDebugPrintCmResList( + IN PCM_RESOURCE_LIST ResourceList +); + +VOID +NTAPI +PciDebugPrintPartialResource( + IN PCM_PARTIAL_RESOURCE_DESCRIPTOR PartialResource +); + // // Interface Support // @@ -1426,6 +1517,49 @@ PciQueryDeviceRelations( IN OUT PDEVICE_RELATIONS *pDeviceRelations ); +NTSTATUS +NTAPI +PciQueryResources( + IN PPCI_PDO_EXTENSION PdoExtension, + OUT PCM_RESOURCE_LIST *Buffer +); + +NTSTATUS +NTAPI +PciQueryTargetDeviceRelations( + IN PPCI_PDO_EXTENSION PdoExtension, + IN OUT PDEVICE_RELATIONS *pDeviceRelations +); + +NTSTATUS +NTAPI +PciQueryEjectionRelations( + IN PPCI_PDO_EXTENSION PdoExtension, + IN OUT PDEVICE_RELATIONS *pDeviceRelations +); + +NTSTATUS +NTAPI +PciQueryRequirements( + IN PPCI_PDO_EXTENSION PdoExtension, + IN OUT PIO_RESOURCE_REQUIREMENTS_LIST *RequirementsList +); + +BOOLEAN +NTAPI +PciComputeNewCurrentSettings( + IN PPCI_PDO_EXTENSION PdoExtension, + IN PCM_RESOURCE_LIST ResourceList +); + +NTSTATUS +NTAPI +PciSetResources( + IN PPCI_PDO_EXTENSION PdoExtension, + IN BOOLEAN DoReset, + IN BOOLEAN SomethingSomethingDarkSide +); + // // Identification Functions // @@ -1436,6 +1570,23 @@ PciGetDeviceDescriptionMessage( IN UCHAR SubClass ); +NTSTATUS +NTAPI +PciQueryDeviceText( + IN PPCI_PDO_EXTENSION PdoExtension, + IN DEVICE_TEXT_TYPE QueryType, + IN ULONG Locale, + OUT PWCHAR *Buffer +); + +NTSTATUS +NTAPI +PciQueryId( + IN PPCI_PDO_EXTENSION DeviceExtension, + IN BUS_QUERY_ID_TYPE QueryType, + OUT PWCHAR *Buffer +); + // // CardBUS Support // @@ -1474,13 +1625,15 @@ Cardbus_GetAdditionalResourceDescriptors( VOID NTAPI Cardbus_ResetDevice( - IN PPCI_CONFIGURATOR_CONTEXT Context + IN PPCI_PDO_EXTENSION PdoExtension, + IN PPCI_COMMON_HEADER PciData ); VOID NTAPI Cardbus_ChangeResourceSettings( - IN PPCI_CONFIGURATOR_CONTEXT Context + IN PPCI_PDO_EXTENSION PdoExtension, + IN PPCI_COMMON_HEADER PciData ); // @@ -1521,13 +1674,15 @@ Device_GetAdditionalResourceDescriptors( VOID NTAPI Device_ResetDevice( - IN PPCI_CONFIGURATOR_CONTEXT Context + IN PPCI_PDO_EXTENSION PdoExtension, + IN PPCI_COMMON_HEADER PciData ); VOID NTAPI Device_ChangeResourceSettings( - IN PPCI_CONFIGURATOR_CONTEXT Context + IN PPCI_PDO_EXTENSION PdoExtension, + IN PPCI_COMMON_HEADER PciData ); // @@ -1568,13 +1723,15 @@ PPBridge_GetAdditionalResourceDescriptors( VOID NTAPI PPBridge_ResetDevice( - IN PPCI_CONFIGURATOR_CONTEXT Context + IN PPCI_PDO_EXTENSION PdoExtension, + IN PPCI_COMMON_HEADER PciData ); VOID NTAPI PPBridge_ChangeResourceSettings( - IN PPCI_CONFIGURATOR_CONTEXT Context + IN PPCI_PDO_EXTENSION PdoExtension, + IN PPCI_COMMON_HEADER PciData ); // @@ -1599,7 +1756,10 @@ extern PCI_INTERFACE TranslatorInterfaceInterrupt; extern PDRIVER_OBJECT PciDriverObject; extern PWATCHDOG_TABLE WdTable; extern PPCI_HACK_ENTRY PciHackTable; +extern BOOLEAN PciAssignBusNumbers; extern BOOLEAN PciEnableNativeModeATA; +extern PPCI_IRQ_ROUTING_TABLE PciIrqRoutingTable; +extern BOOLEAN PciRunningDatacenter; /* Exported by NTOS, should this go in the NDK? */ extern NTSYSAPI BOOLEAN InitSafeBootMode; diff --git a/drivers/bus/pcix/pci/id.c b/drivers/bus/pcix/pci/id.c index c1d711b086f..9db7d703fb0 100644 --- a/drivers/bus/pcix/pci/id.c +++ b/drivers/bus/pcix/pci/id.c @@ -11,6 +11,7 @@ #include #define NDEBUG #include +#include "stdio.h" /* GLOBALS ********************************************************************/ @@ -107,4 +108,354 @@ PciGetDeviceDescriptionMessage(IN UCHAR BaseClass, return Message; } +VOID +NTAPI +PciInitIdBuffer(IN PPCI_ID_BUFFER IdBuffer) +{ + /* Initialize the sizes to zero and the pointer to the start of the buffer */ + IdBuffer->TotalLength = 0; + IdBuffer->Count = 0; + IdBuffer->CharBuffer = IdBuffer->BufferData; +} + +ULONG +NTAPI +PciIdPrintf(IN PPCI_ID_BUFFER IdBuffer, + IN PCCH Format, + ...) +{ + ULONG Size, Length; + PANSI_STRING AnsiString; + va_list va; + va_start(va, Format); + ASSERT(IdBuffer->Count < MAX_ANSI_STRINGS); + + /* Do the actual string formatting into the character buffer */ + vsprintf(IdBuffer->CharBuffer, Format, va); + + /* Initialize the ANSI_STRING that will hold this string buffer */ + AnsiString = &IdBuffer->Strings[IdBuffer->Count]; + RtlInitAnsiString(AnsiString, IdBuffer->CharBuffer); + + /* Calculate the final size of the string, in Unicode */ + Size = RtlAnsiStringToUnicodeSize(AnsiString); + + /* Update hte buffer with the size,and update the character pointer */ + IdBuffer->StringSize[IdBuffer->Count] = Size; + IdBuffer->TotalLength += Size; + Length = AnsiString->Length + sizeof(ANSI_NULL); + IdBuffer->CharBuffer += Length; + + /* Move to the next string for next time */ + IdBuffer->Count++; + + /* Return the length */ + return Length; +} + +ULONG +NTAPI +PciIdPrintfAppend(IN PPCI_ID_BUFFER IdBuffer, + IN PCCH Format, + ...) +{ + ULONG NextId, Size, Length, MaxLength; + PANSI_STRING AnsiString; + va_list va; + va_start(va, Format); + ASSERT(IdBuffer->Count); + + /* Choose the next static ANSI_STRING to use */ + NextId = IdBuffer->Count - 1; + + /* Max length is from the end of the buffer up until the current pointer */ + MaxLength = (PCHAR)(IdBuffer + 1) - IdBuffer->CharBuffer; + + /* Do the actual append, and return the length this string took */ + Length = vsprintf(IdBuffer->CharBuffer - 1, Format, va); + ASSERT(Length < MaxLength); + + /* Select the static ANSI_STRING, and update its length information */ + AnsiString = &IdBuffer->Strings[NextId]; + AnsiString->Length += Length; + AnsiString->MaximumLength += Length; + + /* Calculate the final size of the string, in Unicode */ + Size = RtlAnsiStringToUnicodeSize(AnsiString); + + /* Update the buffer with the size, and update the character pointer */ + IdBuffer->StringSize[NextId] = Size; + IdBuffer->TotalLength += Size; + IdBuffer->CharBuffer += Length; + + /* Return the size */ + return Size; +} + +NTSTATUS +NTAPI +PciQueryId(IN PPCI_PDO_EXTENSION DeviceExtension, + IN BUS_QUERY_ID_TYPE QueryType, + OUT PWCHAR *Buffer) +{ + ULONG SubsysId; + CHAR VendorString[22]; + PPCI_PDO_EXTENSION PdoExtension; + PPCI_FDO_EXTENSION ParentExtension; + PWCHAR StringBuffer; + ULONG i, Size; + NTSTATUS Status; + PANSI_STRING NextString; + UNICODE_STRING DestinationString; + PCI_ID_BUFFER IdBuffer; + PAGED_CODE(); + + /* Assume failure */ + Status = STATUS_SUCCESS; + *Buffer = NULL; + + /* Start with the genric vendor string, which is the vendor ID + device ID */ + sprintf(VendorString, + "PCI\\VEN_%04X&DEV_%04X", + DeviceExtension->VendorId, + DeviceExtension->DeviceId); + + /* Initialize the PCI ID Buffer */ + PciInitIdBuffer(&IdBuffer); + + /* Build the subsystem ID as shown in PCI ID Strings */ + SubsysId = DeviceExtension->SubsystemVendorId | (DeviceExtension->SubsystemId << 16); + + /* Check what the caller is requesting */ + switch (QueryType) + { + case BusQueryDeviceID: + + /* A single ID, the vendor string + the revision ID */ + PciIdPrintf(&IdBuffer, + "%s&SUBSYS_%08X&REV_%02X", + VendorString, + SubsysId, + DeviceExtension->RevisionId); + break; + + case BusQueryHardwareIDs: + + /* First the vendor string + the subsystem ID + the revision ID */ + PciIdPrintf(&IdBuffer, + "%s&SUBSYS_%08X&REV_%02X", + VendorString, + SubsysId, + DeviceExtension->RevisionId); + + /* Next, without the revision */ + PciIdPrintf(&IdBuffer, + "%s&SUBSYS_%08X", + VendorString, + SubsysId); + + /* Next, the vendor string + the base class + sub class + progif */ + PciIdPrintf(&IdBuffer, + "%s&CC_%02X%02X%02X", + VendorString, + DeviceExtension->BaseClass, + DeviceExtension->SubClass, + DeviceExtension->ProgIf); + + /* Next, without the progif */ + PciIdPrintf(&IdBuffer, + "%s&CC_%02X%02X", + VendorString, + DeviceExtension->BaseClass, + DeviceExtension->SubClass); + + /* And finally, a terminator */ + PciIdPrintf(&IdBuffer, "\0"); + break; + + case BusQueryCompatibleIDs: + + /* First, the vendor + revision ID only */ + PciIdPrintf(&IdBuffer, + "%s&REV_%02X", + VendorString, + DeviceExtension->RevisionId); + + /* Next, the vendor string alone */ + PciIdPrintf(&IdBuffer, "%s", VendorString); + + /* Next, the vendor ID + the base class + the sub class + progif */ + PciIdPrintf(&IdBuffer, + "PCI\\VEN_%04X&CC_%02X%02X%02X", + DeviceExtension->VendorId, + DeviceExtension->BaseClass, + DeviceExtension->SubClass, + DeviceExtension->ProgIf); + + /* Now without the progif */ + PciIdPrintf(&IdBuffer, + "PCI\\VEN_%04X&CC_%02X%02X", + DeviceExtension->VendorId, + DeviceExtension->BaseClass, + DeviceExtension->SubClass); + + /* And then just the vendor ID itself */ + PciIdPrintf(&IdBuffer, + "PCI\\VEN_%04X", + DeviceExtension->VendorId); + + /* Then the base class + subclass + progif, without any vendor */ + PciIdPrintf(&IdBuffer, + "PCI\\CC_%02X%02X%02X", + DeviceExtension->BaseClass, + DeviceExtension->SubClass, + DeviceExtension->ProgIf); + + /* Next, without the progif */ + PciIdPrintf(&IdBuffer, + "PCI\\CC_%02X%02X", + DeviceExtension->BaseClass, + DeviceExtension->SubClass); + + /* And finally, a terminator */ + PciIdPrintf(&IdBuffer, "\0"); + break; + + case BusQueryInstanceID: + + /* Start with a terminator */ + PciIdPrintf(&IdBuffer, "\0"); + + /* And then encode the device and function number */ + PciIdPrintfAppend(&IdBuffer, + "%02X", + (DeviceExtension->Slot.u.bits.DeviceNumber << 3) | + DeviceExtension->Slot.u.bits.FunctionNumber); + + /* Loop every parent until the root */ + ParentExtension = DeviceExtension->ParentFdoExtension; + while (!PCI_IS_ROOT_FDO(ParentExtension)) + { + /* And encode the parent's device and function number as well */ + PdoExtension = ParentExtension->PhysicalDeviceObject->DeviceExtension; + PciIdPrintfAppend(&IdBuffer, + "%02X", + (PdoExtension->Slot.u.bits.DeviceNumber << 3) | + PdoExtension->Slot.u.bits.FunctionNumber); + } + break; + + default: + + /* Unknown query type */ + DPRINT1("PciQueryId expected ID type = %d\n", QueryType); + return STATUS_NOT_SUPPORTED; + } + + /* Something should've been generated if this has been reached */ + ASSERT(IdBuffer.Count > 0); + + /* Allocate the final string buffer to hold the ID */ + StringBuffer = ExAllocatePoolWithTag(PagedPool, IdBuffer.TotalLength, 'BicP'); + if (!StringBuffer) return STATUS_INSUFFICIENT_RESOURCES; + + /* Build the UNICODE_STRING structure for it */ + DPRINT1("PciQueryId(%d)\n", QueryType); + DestinationString.Buffer = StringBuffer; + DestinationString.MaximumLength = IdBuffer.TotalLength; + + /* Loop every ID in the buffer */ + for (i = 0; i < IdBuffer.Count; i++) + { + /* Select the ANSI_STRING for the ID */ + NextString = &IdBuffer.Strings[i]; + DPRINT1(" <- \"%s\"\n", NextString->Buffer); + + /* Convert it to a UNICODE_STRING */ + Status = RtlAnsiStringToUnicodeString(&DestinationString, NextString, FALSE); + ASSERT(NT_SUCCESS(Status)); + + /* Add it into the final destination buffer */ + Size = IdBuffer.StringSize[i]; + DestinationString.MaximumLength -= Size; + DestinationString.Buffer += (Size / sizeof(WCHAR)); + } + + /* Return the buffer to the caller and return status (should be success) */ + *Buffer = StringBuffer; + return Status; +} + +NTSTATUS +NTAPI +PciQueryDeviceText(IN PPCI_PDO_EXTENSION PdoExtension, + IN DEVICE_TEXT_TYPE QueryType, + IN ULONG Locale, + OUT PWCHAR *Buffer) +{ + PWCHAR MessageBuffer, LocationBuffer; + ULONG Length; + NTSTATUS Status; + + /* Check what the caller is requesting */ + switch (QueryType) + { + case DeviceTextDescription: + + /* Get the message from the resource section */ + MessageBuffer = PciGetDeviceDescriptionMessage(PdoExtension->BaseClass, + PdoExtension->SubClass); + + /* Return it to the caller, and select proper status code */ + *Buffer = MessageBuffer; + Status = MessageBuffer ? STATUS_SUCCESS : STATUS_NOT_SUPPORTED; + break; + + case DeviceTextLocationInformation: + + /* Get the message from the resource section */ + MessageBuffer = PciGetDescriptionMessage(0x10000, &Length); + if (!MessageBuffer) + { + /* It should be there, but fail if it wasn't found for some reason */ + Status = STATUS_NOT_SUPPORTED; + break; + } + + /* Add space for a null-terminator, and allocate the buffer */ + Length += 2 * sizeof(UNICODE_NULL); + LocationBuffer = ExAllocatePoolWithTag(PagedPool, + Length * sizeof(WCHAR), + 'BicP'); + *Buffer = LocationBuffer; + + /* Check if the allocation succeeded */ + if (LocationBuffer) + { + /* Build the location string based on bus, function, and device */ + swprintf(LocationBuffer, + MessageBuffer, + PdoExtension->ParentFdoExtension->BaseBus, + PdoExtension->Slot.u.bits.FunctionNumber, + PdoExtension->Slot.u.bits.DeviceNumber); + } + + /* Free the original string from the resource section */ + ExFreePoolWithTag(MessageBuffer, 0); + + /* Select the correct status */ + Status = LocationBuffer ? STATUS_SUCCESS : STATUS_INSUFFICIENT_RESOURCES; + break; + + default: + + /* Anything else is unsupported */ + Status = STATUS_NOT_SUPPORTED; + break; + } + + /* Return whether or not a device text string was indeed found */ + return Status; +} + /* EOF */ diff --git a/drivers/bus/pcix/pci/ppbridge.c b/drivers/bus/pcix/pci/ppbridge.c index 75c1edc8dc5..a6d942a7e61 100644 --- a/drivers/bus/pcix/pci/ppbridge.c +++ b/drivers/bus/pcix/pci/ppbridge.c @@ -16,36 +16,612 @@ /* FUNCTIONS ******************************************************************/ +ULONG +NTAPI +PciBridgeIoBase(IN PPCI_COMMON_HEADER PciData) +{ + BOOLEAN Is32Bit; + ULONG Base, IoBase; + ASSERT(PCI_CONFIGURATION_TYPE(PciData) == PCI_BRIDGE_TYPE); + + /* Get the base */ + Base = PciData->u.type1.IOLimit; + + /* Low bit specifies 32-bit address, top bits specify the base */ + Is32Bit = (Base & 0xF) == 1; + IoBase = (Base & 0xF0) << 8; + + /* Is it 32-bit? */ + if (Is32Bit) + { + /* Read the upper 16-bits from the other register */ + IoBase |= PciData->u.type1.IOBaseUpper16 << 16; + ASSERT(PciData->u.type1.IOLimit & 0x1); + } + + /* Return the base address */ + return IoBase; +} + +ULONG +NTAPI +PciBridgeIoLimit(IN PPCI_COMMON_HEADER PciData) +{ + BOOLEAN Is32Bit; + ULONG Limit, IoLimit; + ASSERT(PCI_CONFIGURATION_TYPE(PciData) == PCI_BRIDGE_TYPE); + + /* Get the limit */ + Limit = PciData->u.type1.IOLimit; + + /* Low bit specifies 32-bit address, top bits specify the limit */ + Is32Bit = (Limit & 0xF) == 1; + IoLimit = (Limit & 0xF0) << 8; + + /* Is it 32-bit? */ + if (Is32Bit) + { + /* Read the upper 16-bits from the other register */ + IoLimit |= PciData->u.type1.IOLimitUpper16 << 16; + ASSERT(PciData->u.type1.IOBase & 0x1); + } + + /* Return the I/O limit */ + return IoLimit | 0xFFF; +} + +ULONG +NTAPI +PciBridgeMemoryBase(IN PPCI_COMMON_HEADER PciData) +{ + ASSERT(PCI_CONFIGURATION_TYPE(PciData) == PCI_BRIDGE_TYPE); + + /* Return the memory base */ + return (PciData->u.type1.MemoryBase << 16); +} + +ULONG +NTAPI +PciBridgeMemoryLimit(IN PPCI_COMMON_HEADER PciData) +{ + ASSERT(PCI_CONFIGURATION_TYPE(PciData) == PCI_BRIDGE_TYPE); + + /* Return the memory limit */ + return (PciData->u.type1.MemoryLimit << 16) | 0xFFFFF; +} + +PHYSICAL_ADDRESS +NTAPI +PciBridgePrefetchMemoryBase(IN PPCI_COMMON_HEADER PciData) +{ + BOOLEAN Is64Bit; + LARGE_INTEGER Base; + USHORT PrefetchBase; + ASSERT(PCI_CONFIGURATION_TYPE(PciData) == PCI_BRIDGE_TYPE); + + /* Get the base */ + PrefetchBase = PciData->u.type1.PrefetchBase; + + /* Low bit specifies 64-bit address, top bits specify the base */ + Is64Bit = (PrefetchBase & 0xF) == 1; + Base.LowPart = ((PrefetchBase & 0xFFF0) << 16); + + /* Is it 64-bit? */ + if (Is64Bit) + { + /* Read the upper 32-bits from the other register */ + Base.HighPart = PciData->u.type1.PrefetchBaseUpper32; + } + + /* Return the base */ + return Base; +} + +PHYSICAL_ADDRESS +NTAPI +PciBridgePrefetchMemoryLimit(IN PPCI_COMMON_HEADER PciData) +{ + BOOLEAN Is64Bit; + LARGE_INTEGER Limit; + USHORT PrefetchLimit; + ASSERT(PCI_CONFIGURATION_TYPE(PciData) == PCI_BRIDGE_TYPE); + + /* Get the base */ + PrefetchLimit = PciData->u.type1.PrefetchLimit; + + /* Low bit specifies 64-bit address, top bits specify the limit */ + Is64Bit = (PrefetchLimit & 0xF) == 1; + Limit.LowPart = (PrefetchLimit << 16) | 0xFFFFF; + + /* Is it 64-bit? */ + if (Is64Bit) + { + /* Read the upper 32-bits from the other register */ + Limit.HighPart = PciData->u.type1.PrefetchLimitUpper32; + } + + /* Return the limit */ + return Limit; +} + +ULONG +NTAPI +PciBridgeMemoryWorstCaseAlignment(IN ULONG Length) +{ + ULONG Alignment; + ASSERT(Length != 0); + + /* Start with highest alignment (2^31) */ + Alignment = 0x80000000; + + /* Keep dividing until we reach the correct power of two */ + while (!(Length & Alignment)) Alignment >>= 1; + + /* Return the alignment */ + return Alignment; +} + +BOOLEAN +NTAPI +PciBridgeIsPositiveDecode(IN PPCI_PDO_EXTENSION PdoExtension) +{ + /* Undocumented ACPI Method PDEC to get positive decode settings */ + return PciIsSlotPresentInParentMethod(PdoExtension, 'CEDP'); +} + +BOOLEAN +NTAPI +PciBridgeIsSubtractiveDecode(IN PPCI_CONFIGURATOR_CONTEXT Context) +{ + PPCI_COMMON_HEADER Current, PciData; + PPCI_PDO_EXTENSION PdoExtension; + + /* Get pointers from context */ + Current = Context->Current; + PciData = Context->PciData; + PdoExtension = Context->PdoExtension; + + /* Only valid for PCI-to-PCI bridges */ + ASSERT((Current->BaseClass == PCI_CLASS_BRIDGE_DEV) && + (Current->SubClass == PCI_SUBCLASS_BR_PCI_TO_PCI)); + + /* Check for hacks first, then check the ProgIf of the bridge */ + if (!(PdoExtension->HackFlags & PCI_HACK_SUBTRACTIVE_DECODE) && + (Current->ProgIf != 1) && + ((PciData->u.type1.IOLimit & 0xF0) == 0xF0)) + { + /* A subtractive decode bridge would have a ProgIf 1, and no I/O limit */ + DPRINT("Subtractive decode does not seem to be enabled\n"); + return FALSE; + } + + /* + * Check for Intel ICH PCI-to-PCI (i82801) bridges (used on the i810, + * i820, i840, i845 Chipsets) that have subtractive decode broken. + */ + if (((PdoExtension->VendorId == 0x8086) && + ((PdoExtension->DeviceId == 0x2418) || + (PdoExtension->DeviceId == 0x2428) || + (PdoExtension->DeviceId == 0x244E) || + (PdoExtension->DeviceId == 0x2448))) || + (PdoExtension->HackFlags & PCI_HACK_BROKEN_SUBTRACTIVE_DECODE)) + { + /* Check if the ACPI BIOS says positive decode should be enabled */ + if (PciBridgeIsPositiveDecode(PdoExtension)) + { + /* Obey ACPI */ + DPRINT1("Putting bridge in positive decode because of PDEC\n"); + return FALSE; + } + } + + /* If we found subtractive decode, we'll need a resource update later */ + DPRINT1("PCI : Subtractive decode on 0x%x\n", Current->u.type1.SecondaryBus); + PdoExtension->UpdateHardware = TRUE; + return TRUE; +} + VOID NTAPI PPBridge_SaveCurrentSettings(IN PPCI_CONFIGURATOR_CONTEXT Context) { - UNIMPLEMENTED; - while (TRUE); + NTSTATUS Status; + PCM_PARTIAL_RESOURCE_DESCRIPTOR CmDescriptor; + PIO_RESOURCE_DESCRIPTOR IoDescriptor; + PPCI_FUNCTION_RESOURCES Resources; + PCI_COMMON_HEADER BiosData; + PPCI_COMMON_HEADER Current; + PPCI_COMMON_CONFIG SavedConfig; + ULONG i, Bar, BarMask; + PULONG BarArray; + PHYSICAL_ADDRESS Limit, Base, Length; + BOOLEAN HaveIoLimit, CheckAlignment; + PPCI_PDO_EXTENSION PdoExtension; + + /* Get the pointers from the extension */ + PdoExtension = Context->PdoExtension; + Resources = PdoExtension->Resources; + Current = Context->Current; + + /* Check if decodes are disabled */ + if (!(Context->Command & (PCI_ENABLE_IO_SPACE | PCI_ENABLE_MEMORY_SPACE))) + { + /* Well, we're going to need them from somewhere, use the registry data */ + Status = PciGetBiosConfig(PdoExtension, &BiosData); + if (NT_SUCCESS(Status)) Current = &BiosData; + } + + /* Scan all current and limit descriptors for each BAR needed */ + BarArray = Current->u.type1.BaseAddresses; + for (i = 0; i < 6; i++) + { + /* Get the current resource descriptor, and the limit requirement */ + CmDescriptor = &Resources->Current[i]; + IoDescriptor = &Resources->Limit[i]; + + /* Copy descriptor data, skipping null descriptors */ + CmDescriptor->Type = IoDescriptor->Type; + if (CmDescriptor->Type == CmResourceTypeNull) continue; + CmDescriptor->Flags = IoDescriptor->Flags; + CmDescriptor->ShareDisposition = IoDescriptor->ShareDisposition; + + /* Initialize the high-parts to zero, since most stuff is 32-bit only */ + Base.QuadPart = Limit.QuadPart = Length.QuadPart = 0; + + /* Check if we're handling PCI BARs, or the ROM BAR */ + if ((i < PCI_TYPE1_ADDRESSES) || (i == 5)) + { + /* Is this the ROM BAR? */ + if (i == 5) + { + /* Read the correct bar, with the appropriate mask */ + Bar = Current->u.type1.ROMBaseAddress; + BarMask = PCI_ADDRESS_ROM_ADDRESS_MASK; + + /* Decode the base address, and write down the length */ + Base.LowPart = Bar & BarMask; + DPRINT1("ROM BAR Base: %lx\n", Base.LowPart); + CmDescriptor->u.Memory.Length = IoDescriptor->u.Memory.Length; + } + else + { + /* Otherwise, get the BAR from the array */ + Bar = BarArray[i]; + + /* Is this an I/O BAR? */ + if (Bar & PCI_ADDRESS_IO_SPACE) + { + /* Set the correct mask */ + ASSERT(CmDescriptor->Type == CmResourceTypePort); + BarMask = PCI_ADDRESS_IO_ADDRESS_MASK; + } + else + { + /* This is a memory BAR, set the correct base */ + ASSERT(CmDescriptor->Type == CmResourceTypeMemory); + BarMask = PCI_ADDRESS_MEMORY_ADDRESS_MASK; + + /* IS this a 64-bit BAR? */ + if ((Bar & PCI_ADDRESS_MEMORY_TYPE_MASK) == PCI_TYPE_64BIT) + { + /* Read the next 32-bits as well, ie, the next BAR */ + Base.HighPart = BarArray[i + 1]; + } + } + + /* Decode the base address, and write down the length */ + Base.LowPart = Bar & BarMask; + DPRINT1("BAR Base: %lx\n", Base.LowPart); + CmDescriptor->u.Generic.Length = IoDescriptor->u.Generic.Length; + } + } + else + { + /* Reset loop conditions */ + HaveIoLimit = FALSE; + CheckAlignment = FALSE; + + /* Check which descriptor is being parsed */ + if (i == 2) + { + /* I/O Port Requirements */ + Base.LowPart = PciBridgeIoBase(Current); + Limit.LowPart = PciBridgeIoLimit(Current); + DPRINT1("Bridge I/O Base and Limit: %lx %lx\n", + Base.LowPart, Limit.LowPart); + + /* Do we have any I/O Port data? */ + if (!(Base.LowPart) && (Current->u.type1.IOLimit)) + { + /* There's a limit */ + HaveIoLimit = TRUE; + } + } + else if (i == 3) + { + /* Memory requirements */ + Base.LowPart = PciBridgeMemoryBase(Current); + Limit.LowPart = PciBridgeMemoryLimit(Current); + + /* These should always be there, so check their alignment */ + DPRINT1("Bridge MEM Base and Limit: %lx %lx\n", + Base.LowPart, Limit.LowPart); + CheckAlignment = TRUE; + } + else if (i == 4) + { + /* This should only be present for prefetch memory */ + ASSERT(CmDescriptor->Flags & CM_RESOURCE_MEMORY_PREFETCHABLE); + Base = PciBridgePrefetchMemoryBase(Current); + Limit = PciBridgePrefetchMemoryLimit(Current); + + /* If it's there, check the alignment */ + DPRINT1("Bridge Prefetch MEM Base and Limit: %I64x %I64x\n", Base, Limit); + CheckAlignment = TRUE; + } + + /* Check for invalid base address */ + if (Base.QuadPart >= Limit.QuadPart) + { + /* Assume the descriptor is bogus */ + CmDescriptor->Type = CmResourceTypeNull; + IoDescriptor->Type = CmResourceTypeNull; + continue; + } + + /* Check if there's no memory, and no I/O port either */ + if (!(Base.LowPart) && !(HaveIoLimit)) + { + /* This seems like a bogus requirement, ignore it */ + CmDescriptor->Type = CmResourceTypeNull; + continue; + } + + /* Set the length to be the limit - the base; should always be 32-bit */ + Length.QuadPart = Limit.LowPart - Base.LowPart + 1; + ASSERT(Length.HighPart == 0); + CmDescriptor->u.Generic.Length = Length.LowPart; + + /* Check if alignment should be set */ + if (CheckAlignment) + { + /* Compute the required alignment for this length */ + ASSERT(CmDescriptor->u.Memory.Length > 0); + IoDescriptor->u.Memory.Alignment = + PciBridgeMemoryWorstCaseAlignment(CmDescriptor->u.Memory.Length); + } + } + + /* Now set the base address */ + CmDescriptor->u.Generic.Start.LowPart = Base.LowPart; + } + + /* Save PCI settings into the PDO extension for easy access later */ + PdoExtension->Dependent.type1.PrimaryBus = Current->u.type1.PrimaryBus; + PdoExtension->Dependent.type1.SecondaryBus = Current->u.type1.SecondaryBus; + PdoExtension->Dependent.type1.SubordinateBus = Current->u.type1.SubordinateBus; + + /* Check for subtractive decode bridges */ + if (PdoExtension->Dependent.type1.SubtractiveDecode) + { + /* Check if legacy VGA decodes are enabled */ + DPRINT1("Subtractive decode bridge\n"); + if (Current->u.type1.BridgeControl & PCI_ENABLE_BRIDGE_VGA) + { + /* Save this setting for later */ + DPRINT1("VGA Bridge\n"); + PdoExtension->Dependent.type1.VgaBitSet = TRUE; + } + + /* Legacy ISA decoding is not compatible with subtractive decode */ + ASSERT(PdoExtension->Dependent.type1.IsaBitSet == FALSE); + } + else + { + /* Check if legacy VGA decodes are enabled */ + if (Current->u.type1.BridgeControl & PCI_ENABLE_BRIDGE_VGA) + { + /* Save this setting for later */ + DPRINT1("VGA Bridge\n"); + PdoExtension->Dependent.type1.VgaBitSet = TRUE; + + /* And on positive decode, we'll also need extra resources locked */ + PdoExtension->AdditionalResourceCount = 4; + } + + /* Check if legacy ISA decoding is enabled */ + if (Current->u.type1.BridgeControl & PCI_ENABLE_BRIDGE_ISA) + { + /* Save this setting for later */ + DPRINT1("ISA Bridge\n"); + PdoExtension->Dependent.type1.IsaBitSet = TRUE; + } + } + + /* + * Check for Intel ICH PCI-to-PCI (i82801) bridges (used on the i810, + * i820, i840, i845 Chipsets) that have subtractive decode broken. + */ + if (((PdoExtension->VendorId == 0x8086) && + ((PdoExtension->DeviceId == 0x2418) || + (PdoExtension->DeviceId == 0x2428) || + (PdoExtension->DeviceId == 0x244E) || + (PdoExtension->DeviceId == 0x2448))) || + (PdoExtension->HackFlags & PCI_HACK_BROKEN_SUBTRACTIVE_DECODE)) + { + /* Check if subtractive decode is actually enabled */ + if (PdoExtension->Dependent.type1.SubtractiveDecode) + { + /* We're going to need a copy of the configuration for later use */ + DPRINT1("apply config save hack to ICH subtractive decode\n"); + SavedConfig = ExAllocatePoolWithTag(0, PCI_COMMON_HDR_LENGTH, 'PciP'); + PdoExtension->ParentFdoExtension->PreservedConfig = SavedConfig; + if (SavedConfig) RtlCopyMemory(SavedConfig, Current, PCI_COMMON_HDR_LENGTH); + } + } } VOID NTAPI PPBridge_SaveLimits(IN PPCI_CONFIGURATOR_CONTEXT Context) { - UNIMPLEMENTED; - while (TRUE); + PIO_RESOURCE_DESCRIPTOR Limit; + PULONG BarArray; + PHYSICAL_ADDRESS MemoryLimit; + ULONG i; + PPCI_COMMON_HEADER Working; + PPCI_PDO_EXTENSION PdoExtension; + + /* Get the pointers from the context */ + Working = Context->PciData; + PdoExtension = Context->PdoExtension; + + /* Scan the BARs into the limit descriptors */ + BarArray = Working->u.type1.BaseAddresses; + Limit = PdoExtension->Resources->Limit; + + /* First of all, loop all the BARs */ + for (i = 0; i < PCI_TYPE1_ADDRESSES; i++) + { + /* Create a descriptor for their limits */ + if (PciCreateIoDescriptorFromBarLimit(&Limit[i], &BarArray[i], FALSE)) + { + /* This was a 64-bit descriptor, make sure there's space */ + ASSERT((i + 1) < PCI_TYPE1_ADDRESSES); + + /* Skip the next descriptor since this one is double sized */ + i++; + (&Limit[i])->Type == CmResourceTypeNull; + } + } + + /* Check if this is a subtractive decode bridge */ + if (PciBridgeIsSubtractiveDecode(Context)) + { + /* This bridge is subtractive */ + PdoExtension->Dependent.type1.SubtractiveDecode = TRUE; + + /* Subtractive bridges cannot use legacy ISA or VGA functionality */ + PdoExtension->Dependent.type1.IsaBitSet = FALSE; + PdoExtension->Dependent.type1.VgaBitSet = FALSE; + } + + /* For normal decode bridges, we'll need to find the bridge limits too */ + if (!PdoExtension->Dependent.type1.SubtractiveDecode) + { + /* Loop the descriptors that are left, to store the bridge limits */ + for (i = PCI_TYPE1_ADDRESSES; i < 5; i++) + { + /* No 64-bit memory addresses, and set the address to 0 to begin */ + MemoryLimit.HighPart = 0; + (&Limit[i])->u.Port.MinimumAddress.QuadPart = 0; + + /* Are we getting the I/O limit? */ + if (i == 2) + { + /* There should be one, get it */ + ASSERT(Working->u.type1.IOLimit != 0); + ASSERT((Working->u.type1.IOLimit & 0x0E) == 0); + MemoryLimit.LowPart = PciBridgeIoLimit(Working); + + /* Build a descriptor for this limit */ + (&Limit[i])->Type = CmResourceTypePort; + (&Limit[i])->Flags = CM_RESOURCE_PORT_WINDOW_DECODE | + CM_RESOURCE_PORT_POSITIVE_DECODE; + (&Limit[i])->u.Port.Alignment = 0x1000; + (&Limit[i])->u.Port.MinimumAddress.QuadPart = 0; + (&Limit[i])->u.Port.MaximumAddress = MemoryLimit; + (&Limit[i])->u.Port.Length = 0; + } + else if (i == 3) + { + /* There should be a valid memory limit, get it */ + ASSERT((Working->u.type1.MemoryLimit & 0xF) == 0); + MemoryLimit.LowPart = PciBridgeMemoryLimit(Working); + + /* Build the descriptor for it */ + (&Limit[i])->Flags = CM_RESOURCE_MEMORY_READ_WRITE; + (&Limit[i])->Type = CmResourceTypeMemory; + (&Limit[i])->u.Memory.Alignment = 0x100000; + (&Limit[i])->u.Memory.MinimumAddress.QuadPart = 0; + (&Limit[i])->u.Memory.MaximumAddress = MemoryLimit; + (&Limit[i])->u.Memory.Length = 0; + } + else if (Working->u.type1.PrefetchLimit) + { + /* Get the prefetch memory limit, if there is one */ + MemoryLimit = PciBridgePrefetchMemoryLimit(Working); + + /* Write out the descriptor for it */ + (&Limit[i])->Flags = CM_RESOURCE_MEMORY_PREFETCHABLE; + (&Limit[i])->Type = CmResourceTypeMemory; + (&Limit[i])->u.Memory.Alignment = 0x100000; + (&Limit[i])->u.Memory.MinimumAddress.QuadPart = 0; + (&Limit[i])->u.Memory.MaximumAddress = MemoryLimit; + (&Limit[i])->u.Memory.Length = 0; + } + else + { + /* Blank descriptor */ + (&Limit[i])->Type = CmResourceTypeNull; + } + } + } + + /* Does the ROM have its own BAR? */ + if (Working->u.type1.ROMBaseAddress & PCI_ROMADDRESS_ENABLED) + { + /* Build a limit for it as well */ + PciCreateIoDescriptorFromBarLimit(&Limit[i], + &Working->u.type1.ROMBaseAddress, + TRUE); + } } VOID NTAPI PPBridge_MassageHeaderForLimitsDetermination(IN PPCI_CONFIGURATOR_CONTEXT Context) { - UNIMPLEMENTED; - while (TRUE); + PPCI_COMMON_HEADER PciData, Current; + + /* Get pointers from context */ + PciData = Context->PciData; + Current = Context->Current; + + /* + * Write FFh everywhere so that the PCI bridge ignores what it can't handle. + * Based on the bits that were ignored (still 0), this is how we can tell + * what the limit is. + */ + RtlFillMemory(PciData->u.type1.BaseAddresses, + FIELD_OFFSET(PCI_COMMON_HEADER, u.type1.CapabilitiesPtr) - + FIELD_OFFSET(PCI_COMMON_HEADER, u.type1.BaseAddresses), + 0xFF); + + /* Copy the saved settings from the current context into the PCI header */ + PciData->u.type1.PrimaryBus = Current->u.type1.PrimaryBus; + PciData->u.type1.SecondaryBus = Current->u.type1.SecondaryBus; + PciData->u.type1.SubordinateBus = Current->u.type1.SubordinateBus; + PciData->u.type1.SecondaryLatency = Current->u.type1.SecondaryLatency; + + /* No I/O limit or base. The bottom base bit specifies that FIXME */ + PciData->u.type1.IOBaseUpper16 = 0xFFFE; + PciData->u.type1.IOLimitUpper16 = 0xFFFF; + + /* Save secondary status before it gets cleared */ + Context->SecondaryStatus = Current->u.type1.SecondaryStatus; + + /* Clear secondary status */ + Current->u.type1.SecondaryStatus = 0; + PciData->u.type1.SecondaryStatus = 0; } VOID NTAPI PPBridge_RestoreCurrent(IN PPCI_CONFIGURATOR_CONTEXT Context) { - UNIMPLEMENTED; - while (TRUE); + /* Copy back the secondary status register */ + Context->Current->u.type1.SecondaryStatus = Context->SecondaryStatus; } VOID @@ -54,13 +630,46 @@ PPBridge_GetAdditionalResourceDescriptors(IN PPCI_CONFIGURATOR_CONTEXT Context, IN PPCI_COMMON_HEADER PciData, IN PIO_RESOURCE_DESCRIPTOR IoDescriptor) { - UNIMPLEMENTED; - while (TRUE); + /* Does this bridge have VGA decodes on it? */ + if (PciData->u.type1.BridgeControl & PCI_ENABLE_BRIDGE_VGA) + { + /* Build a private descriptor with 3 entries */ + IoDescriptor->Type = CmResourceTypeDevicePrivate; + IoDescriptor->u.DevicePrivate.Data[0] = 3; + IoDescriptor->u.DevicePrivate.Data[1] = 3; + + /* First, the VGA range at 0xA0000 */ + IoDescriptor[1].Type = CmResourceTypeMemory; + IoDescriptor[1].Flags = CM_RESOURCE_MEMORY_READ_WRITE; + IoDescriptor[1].u.Port.Length = 0x20000; + IoDescriptor[1].u.Port.Alignment = 1; + IoDescriptor[1].u.Port.MinimumAddress.QuadPart = 0xA0000; + IoDescriptor[1].u.Port.MaximumAddress.QuadPart = 0xBFFFF; + + /* Then, the VGA registers at 0x3B0 */ + IoDescriptor[2].Type = CmResourceTypePort; + IoDescriptor[2].Flags = CM_RESOURCE_PORT_POSITIVE_DECODE | + CM_RESOURCE_PORT_10_BIT_DECODE; + IoDescriptor[2].u.Port.Length = 12; + IoDescriptor[2].u.Port.Alignment = 1; + IoDescriptor[2].u.Port.MinimumAddress.QuadPart = 0x3B0; + IoDescriptor[2].u.Port.MaximumAddress.QuadPart = 0x3BB; + + /* And finally the VGA registers at 0x3C0 */ + IoDescriptor[3].Type = CmResourceTypePort; + IoDescriptor[3].Flags = CM_RESOURCE_PORT_POSITIVE_DECODE | + CM_RESOURCE_PORT_10_BIT_DECODE; + IoDescriptor[3].u.Port.Length = 32; + IoDescriptor[3].u.Port.Alignment = 1; + IoDescriptor[3].u.Port.MinimumAddress.QuadPart = 0x3C0; + IoDescriptor[3].u.Port.MaximumAddress.QuadPart = 0x3DF; + } } VOID NTAPI -PPBridge_ResetDevice(IN PPCI_CONFIGURATOR_CONTEXT Context) +PPBridge_ResetDevice(IN PPCI_PDO_EXTENSION PdoExtension, + IN PPCI_COMMON_HEADER PciData) { UNIMPLEMENTED; while (TRUE); @@ -68,7 +677,8 @@ PPBridge_ResetDevice(IN PPCI_CONFIGURATOR_CONTEXT Context) VOID NTAPI -PPBridge_ChangeResourceSettings(IN PPCI_CONFIGURATOR_CONTEXT Context) +PPBridge_ChangeResourceSettings(IN PPCI_PDO_EXTENSION PdoExtension, + IN PPCI_COMMON_HEADER PciData) { UNIMPLEMENTED; while (TRUE); diff --git a/drivers/bus/pcix/pdo.c b/drivers/bus/pcix/pdo.c index 2e2bd57bc1f..11961c4b40c 100644 --- a/drivers/bus/pcix/pdo.c +++ b/drivers/bus/pcix/pdo.c @@ -112,9 +112,95 @@ PciPdoIrpStartDevice(IN PIRP Irp, IN PIO_STACK_LOCATION IoStackLocation, IN PPCI_PDO_EXTENSION DeviceExtension) { - UNIMPLEMENTED; - while (TRUE); - return STATUS_NOT_SUPPORTED; + NTSTATUS Status; + BOOLEAN Changed, DoReset; + POWER_STATE PowerState; + PAGED_CODE(); + + DoReset = FALSE; + + /* Begin entering the start phase */ + Status = PciBeginStateTransition((PVOID)DeviceExtension, PciStarted); + if (!NT_SUCCESS(Status)) return Status; + + /* Check if this is a VGA device */ + if (((DeviceExtension->BaseClass == PCI_CLASS_PRE_20) && + (DeviceExtension->SubClass == PCI_SUBCLASS_PRE_20_VGA)) || + ((DeviceExtension->BaseClass == PCI_CLASS_DISPLAY_CTLR) && + (DeviceExtension->SubClass == PCI_SUBCLASS_VID_VGA_CTLR))) + { + /* Always force it on */ + DeviceExtension->CommandEnables |= (PCI_ENABLE_IO_SPACE | + PCI_ENABLE_MEMORY_SPACE); + } + + /* Check if native IDE is enabled and it owns the I/O ports */ + if (DeviceExtension->IoSpaceUnderNativeIdeControl) + { + /* Then don't allow I/O access */ + DeviceExtension->CommandEnables &= ~PCI_ENABLE_IO_SPACE; + } + + /* Always enable bus mastering */ + DeviceExtension->CommandEnables |= PCI_ENABLE_BUS_MASTER; + + /* Check if the OS assigned resources differ from the PCI configuration */ + Changed = PciComputeNewCurrentSettings(DeviceExtension, + IoStackLocation->Parameters. + StartDevice.AllocatedResources); + if (Changed) + { + /* Remember this for later */ + DeviceExtension->MovedDevice = TRUE; + } + else + { + /* All good */ + DPRINT1("PCI - START not changing resource settings.\n"); + } + + /* Check if the device was sleeping */ + if (DeviceExtension->PowerState.CurrentDeviceState != PowerDeviceD0) + { + /* Power it up */ + Status = PciSetPowerManagedDevicePowerState(DeviceExtension, + PowerDeviceD0, + FALSE); + if (!NT_SUCCESS(Status)) + { + /* Powerup fail, fail the request */ + PciCancelStateTransition((PVOID)DeviceExtension, PciStarted); + return STATUS_DEVICE_POWER_FAILURE; + } + + /* Tell the power manager that the device is powered up */ + PowerState.DeviceState = PowerDeviceD0; + PoSetPowerState(DeviceExtension->PhysicalDeviceObject, + DevicePowerState, + PowerState); + + /* Update internal state */ + DeviceExtension->PowerState.CurrentDeviceState = PowerDeviceD0; + + /* This device's resources and decodes will need to be reset */ + DoReset = TRUE; + } + + /* Update resource information now that the device is powered up and active */ + Status = PciSetResources(DeviceExtension, DoReset, TRUE); + if (!NT_SUCCESS(Status)) + { + /* That failed, so cancel the transition */ + PciCancelStateTransition((PVOID)DeviceExtension, PciStarted); + } + else + { + /* Fully commit, as the device is now started up and ready to go */ + PciCommitStateTransition((PVOID)DeviceExtension, PciStarted); + } + + /* Return the result of the start request */ + return Status; } NTSTATUS @@ -200,9 +286,32 @@ PciPdoIrpQueryDeviceRelations(IN PIRP Irp, IN PIO_STACK_LOCATION IoStackLocation, IN PPCI_PDO_EXTENSION DeviceExtension) { - UNIMPLEMENTED; - while (TRUE); - return STATUS_NOT_SUPPORTED; + NTSTATUS Status; + PAGED_CODE(); + + /* Are ejection relations being queried? */ + if (IoStackLocation->Parameters.QueryDeviceRelations.Type == EjectionRelations) + { + /* Call the worker function */ + Status = PciQueryEjectionRelations(DeviceExtension, + (PDEVICE_RELATIONS*)&Irp-> + IoStatus.Information); + } + else if (IoStackLocation->Parameters.QueryDeviceRelations.Type == TargetDeviceRelation) + { + /* The only other relation supported is the target device relation */ + Status = PciQueryTargetDeviceRelations(DeviceExtension, + (PDEVICE_RELATIONS*)&Irp-> + IoStatus.Information); + } + else + { + /* All other relations are unsupported */ + Status = STATUS_NOT_SUPPORTED; + } + + /* Return either the result of the worker function, or unsupported status */ + return Status; } NTSTATUS @@ -211,9 +320,12 @@ PciPdoIrpQueryCapabilities(IN PIRP Irp, IN PIO_STACK_LOCATION IoStackLocation, IN PPCI_PDO_EXTENSION DeviceExtension) { - UNIMPLEMENTED; - while (TRUE); - return STATUS_NOT_SUPPORTED; + PAGED_CODE(); + + /* Call the worker function */ + return PciQueryCapabilities(DeviceExtension, + IoStackLocation-> + Parameters.DeviceCapabilities.Capabilities); } NTSTATUS @@ -222,9 +334,11 @@ PciPdoIrpQueryResources(IN PIRP Irp, IN PIO_STACK_LOCATION IoStackLocation, IN PPCI_PDO_EXTENSION DeviceExtension) { - UNIMPLEMENTED; - while (TRUE); - return STATUS_NOT_SUPPORTED; + PAGED_CODE(); + + /* Call the worker function */ + return PciQueryResources(DeviceExtension, + (PCM_RESOURCE_LIST*)&Irp->IoStatus.Information); } NTSTATUS @@ -233,9 +347,12 @@ PciPdoIrpQueryResourceRequirements(IN PIRP Irp, IN PIO_STACK_LOCATION IoStackLocation, IN PPCI_PDO_EXTENSION DeviceExtension) { - UNIMPLEMENTED; - while (TRUE); - return STATUS_NOT_SUPPORTED; + PAGED_CODE(); + + /* Call the worker function */ + return PciQueryRequirements(DeviceExtension, + (PIO_RESOURCE_REQUIREMENTS_LIST*)&Irp-> + IoStatus.Information); } NTSTATUS @@ -244,9 +361,15 @@ PciPdoIrpQueryDeviceText(IN PIRP Irp, IN PIO_STACK_LOCATION IoStackLocation, IN PPCI_PDO_EXTENSION DeviceExtension) { - UNIMPLEMENTED; - while (TRUE); - return STATUS_NOT_SUPPORTED; + PAGED_CODE(); + + /* Call the worker function */ + return PciQueryDeviceText(DeviceExtension, + IoStackLocation-> + Parameters.QueryDeviceText.DeviceTextType, + IoStackLocation-> + Parameters.QueryDeviceText.LocaleId, + (PWCHAR*)&Irp->IoStatus.Information); } NTSTATUS @@ -255,9 +378,12 @@ PciPdoIrpQueryId(IN PIRP Irp, IN PIO_STACK_LOCATION IoStackLocation, IN PPCI_PDO_EXTENSION DeviceExtension) { - UNIMPLEMENTED; - while (TRUE); - return STATUS_NOT_SUPPORTED; + PAGED_CODE(); + + /* Call the worker function */ + return PciQueryId(DeviceExtension, + IoStackLocation->Parameters.QueryId.IdType, + (PWCHAR*)&Irp->IoStatus.Information); } NTSTATUS @@ -266,9 +392,12 @@ PciPdoIrpQueryBusInformation(IN PIRP Irp, IN PIO_STACK_LOCATION IoStackLocation, IN PPCI_PDO_EXTENSION DeviceExtension) { - UNIMPLEMENTED; - while (TRUE); - return STATUS_NOT_SUPPORTED; + PAGED_CODE(); + + /* Call the worker function */ + return PciQueryBusInformation(DeviceExtension, + (PPNP_BUS_INFORMATION*)&Irp-> + IoStatus.Information); } NTSTATUS diff --git a/drivers/bus/pcix/utils.c b/drivers/bus/pcix/utils.c index 934e13708c8..24f442ae16d 100644 --- a/drivers/bus/pcix/utils.c +++ b/drivers/bus/pcix/utils.c @@ -1041,6 +1041,24 @@ PciCanDisableDecodes(IN PPCI_PDO_EXTENSION DeviceExtension, return !(HackFlags & PCI_HACK_NO_PM_CAPS); } +PCI_DEVICE_TYPES +NTAPI +PciClassifyDeviceType(IN PPCI_PDO_EXTENSION PdoExtension) +{ + ASSERT(PdoExtension->ExtensionType == PciPdoExtensionType); + + /* Differenriate between devices and bridges */ + if (PdoExtension->BaseClass != PCI_CLASS_BRIDGE_DEV) return PciTypeDevice; + + /* The PCI Bus driver handles only CardBus and PCI bridges (plus host) */ + if (PdoExtension->SubClass == PCI_SUBCLASS_BR_HOST) return PciTypeHostBridge; + if (PdoExtension->SubClass == PCI_SUBCLASS_BR_PCI_TO_PCI) return PciTypePciBridge; + if (PdoExtension->SubClass == PCI_SUBCLASS_BR_CARDBUS) return PciTypeCardbusBridge; + + /* Any other kind of bridge is treated like a device */ + return PciTypeDevice; +} + ULONG_PTR NTAPI PciExecuteCriticalSystemRoutine(IN ULONG_PTR IpiContext) @@ -1051,7 +1069,7 @@ PciExecuteCriticalSystemRoutine(IN ULONG_PTR IpiContext) if (!InterlockedDecrement(&Context->RunCount)) { /* Nope, this is the first instance, so execute the IPI function */ - Context->Function(Context->PdoExtension, Context->Context); + Context->Function(Context->DeviceExtension, Context->Context); /* Notify anyone that was spinning that they can stop now */ Context->Barrier = 0; @@ -1130,6 +1148,115 @@ PciIsSlotPresentInParentMethod(IN PPCI_PDO_EXTENSION PdoExtension, return FoundSlot; } +ULONG +NTAPI +PciGetLengthFromBar(IN ULONG Bar) +{ + ULONG Length; + + /* I/O addresses vs. memory addresses start differently due to alignment */ + Length = 1 << ((Bar & PCI_ADDRESS_IO_SPACE) ? 2 : 4); + + /* Keep going until a set bit */ + while (!(Length & Bar) && (Length)) Length <<= 1; + + /* Return the length (might be 0 on 64-bit because it's the low-word) */ + if ((Bar & PCI_ADDRESS_MEMORY_TYPE_MASK) != PCI_TYPE_64BIT) ASSERT(Length); + return Length; +} + +BOOLEAN +NTAPI +PciCreateIoDescriptorFromBarLimit(PIO_RESOURCE_DESCRIPTOR ResourceDescriptor, + IN PULONG BarArray, + IN BOOLEAN Rom) +{ + ULONG CurrentBar, BarLength, BarMask; + BOOLEAN Is64BitBar = FALSE; + + /* Check if the BAR is nor I/O nor memory */ + CurrentBar = BarArray[0]; + if (!(CurrentBar & ~PCI_ADDRESS_IO_SPACE)) + { + /* Fail this descriptor */ + ResourceDescriptor->Type = CmResourceTypeNull; + return FALSE; + } + + /* Set default flag and clear high words */ + ResourceDescriptor->Flags = 0; + ResourceDescriptor->u.Generic.MaximumAddress.HighPart = 0; + ResourceDescriptor->u.Generic.MinimumAddress.LowPart = 0; + ResourceDescriptor->u.Generic.MinimumAddress.HighPart = 0; + + /* Check for ROM Address */ + if (Rom) + { + /* Clean up the BAR to get just the address */ + CurrentBar &= PCI_ADDRESS_ROM_ADDRESS_MASK; + if (!CurrentBar) + { + /* Invalid ar, fail this descriptor */ + ResourceDescriptor->Type = CmResourceTypeNull; + return FALSE; + } + + /* ROM Addresses are always read only */ + ResourceDescriptor->Flags = CM_RESOURCE_MEMORY_READ_ONLY; + } + + /* Compute the length, assume it's the alignment for now */ + BarLength = PciGetLengthFromBar(CurrentBar); + ResourceDescriptor->u.Generic.Length = BarLength; + ResourceDescriptor->u.Generic.Alignment = BarLength; + + /* Check what kind of BAR this is */ + if (CurrentBar & PCI_ADDRESS_IO_SPACE) + { + /* Use correct mask to decode the address */ + BarMask = PCI_ADDRESS_IO_ADDRESS_MASK; + + /* Set this as an I/O Port descriptor */ + ResourceDescriptor->Type = CmResourceTypePort; + ResourceDescriptor->Flags = CM_RESOURCE_PORT_IO; + } + else + { + /* Use correct mask to decode the address */ + BarMask = PCI_ADDRESS_MEMORY_ADDRESS_MASK; + + /* Set this as a memory descriptor */ + ResourceDescriptor->Type = CmResourceTypeMemory; + + /* Check if it's 64-bit or 20-bit decode */ + if ((CurrentBar & PCI_ADDRESS_MEMORY_TYPE_MASK) == PCI_TYPE_64BIT) + { + /* The next BAR has the high word, read it */ + ResourceDescriptor->u.Port.MaximumAddress.HighPart = BarArray[1]; + Is64BitBar = TRUE; + } + else if ((CurrentBar & PCI_ADDRESS_MEMORY_TYPE_MASK) == PCI_TYPE_20BIT) + { + /* Use the correct mask to decode the address */ + BarMask = ~0xFFF0000F; + } + + /* Check if the BAR is listed as prefetchable memory */ + if (CurrentBar & PCI_ADDRESS_MEMORY_PREFETCHABLE) + { + /* Mark the descriptor in the same way */ + ResourceDescriptor->Flags |= CM_RESOURCE_MEMORY_PREFETCHABLE; + } + } + + /* Now write down the maximum address based on the base + length */ + ResourceDescriptor->u.Port.MaximumAddress.QuadPart = (CurrentBar & BarMask) + + BarLength - 1; + + /* Return if this is a 64-bit BAR, so the loop code knows to skip the next one */ + return Is64BitBar; +} + VOID NTAPI PciDecodeEnable(IN PPCI_PDO_EXTENSION PdoExtension, @@ -1179,4 +1306,476 @@ PciDecodeEnable(IN PPCI_PDO_EXTENSION PdoExtension, } } +NTSTATUS +NTAPI +PciQueryBusInformation(IN PPCI_PDO_EXTENSION PdoExtension, + IN PPNP_BUS_INFORMATION* Buffer) +{ + PPNP_BUS_INFORMATION BusInfo; + + /* Allocate a structure for the bus information */ + BusInfo = ExAllocatePoolWithTag(PagedPool, + sizeof(PNP_BUS_INFORMATION), + 'BicP'); + if (!BusInfo) return STATUS_INSUFFICIENT_RESOURCES; + + /* Write the correct GUID and bus type identifier, and fill the bus number */ + BusInfo->BusTypeGuid = GUID_BUS_TYPE_PCI; + BusInfo->LegacyBusType = PCIBus; + BusInfo->BusNumber = PdoExtension->ParentFdoExtension->BaseBus; + return STATUS_SUCCESS; +} + +NTSTATUS +NTAPI +PciDetermineSlotNumber(IN PPCI_PDO_EXTENSION PdoExtension, + OUT PULONG SlotNumber) +{ + PPCI_FDO_EXTENSION ParentExtension; + ULONG ResultLength; + NTSTATUS Status; + PSLOT_INFO SlotInfo; + + /* Check if a $PIR from the BIOS is used (legacy IRQ routing) */ + ParentExtension = PdoExtension->ParentFdoExtension; + DPRINT1("Slot lookup for %d.%d.%d\n", + ParentExtension ? ParentExtension->BaseBus : -1, + PdoExtension->Slot.u.bits.DeviceNumber, + PdoExtension->Slot.u.bits.FunctionNumber); + if ((PciIrqRoutingTable) && (ParentExtension)) + { + /* Read every slot information entry */ + SlotInfo = &PciIrqRoutingTable->Slot[0]; + DPRINT1("PIR$ %p is %lx bytes, slot 0 is at: %lx\n", + PciIrqRoutingTable, PciIrqRoutingTable->TableSize, SlotInfo); + while (SlotInfo < (PSLOT_INFO)((ULONG_PTR)PciIrqRoutingTable + + PciIrqRoutingTable->TableSize)) + { + DPRINT1("Slot Info: %d.%d->#%d\n", + SlotInfo->BusNumber, + SlotInfo->DeviceNumber, + SlotInfo->SlotNumber); + + /* Check if this slot information matches the PDO being queried */ + if ((ParentExtension->BaseBus == SlotInfo->BusNumber) && + (PdoExtension->Slot.u.bits.DeviceNumber == SlotInfo->DeviceNumber >> 3) && + (SlotInfo->SlotNumber)) + { + /* We found it, return it and return success */ + *SlotNumber = SlotInfo->SlotNumber; + return STATUS_SUCCESS; + } + + /* Try the next slot */ + SlotInfo++; + } + } + + /* Otherwise, grab the parent FDO and check if it's the root */ + if (PCI_IS_ROOT_FDO(ParentExtension)) + { + /* The root FDO doesn't have a slot number */ + Status = STATUS_UNSUCCESSFUL; + } + else + { + /* Otherwise, query the slot/UI address/number as a device property */ + Status = IoGetDeviceProperty(ParentExtension->PhysicalDeviceObject, + DevicePropertyUINumber, + sizeof(ULONG), + SlotNumber, + &ResultLength); + } + + /* Return the status of this endeavour */ + return Status; +} + +NTSTATUS +NTAPI +PciGetDeviceCapabilities(IN PDEVICE_OBJECT DeviceObject, + IN OUT PDEVICE_CAPABILITIES DeviceCapability) +{ + PIRP Irp; + NTSTATUS Status; + KEVENT Event; + PDEVICE_OBJECT AttachedDevice; + PIO_STACK_LOCATION IoStackLocation; + IO_STATUS_BLOCK IoStatusBlock; + PAGED_CODE(); + + /* Zero out capabilities and set undefined values to start with */ + RtlZeroMemory(DeviceCapability, sizeof(DEVICE_CAPABILITIES)); + DeviceCapability->Size = sizeof(DEVICE_CAPABILITIES); + DeviceCapability->Version = 1; + DeviceCapability->Address = -1; + DeviceCapability->UINumber = -1; + + /* Build the wait event for the IOCTL */ + KeInitializeEvent(&Event, SynchronizationEvent, FALSE); + + /* Find the device the PDO is attached to */ + AttachedDevice = IoGetAttachedDeviceReference(DeviceObject); + + /* And build an IRP for it */ + Irp = IoBuildSynchronousFsdRequest(IRP_MJ_PNP, + AttachedDevice, + NULL, + 0, + NULL, + &Event, + &IoStatusBlock); + if (!Irp) + { + /* The IRP failed, fail the request as well */ + ObDereferenceObject(AttachedDevice); + return STATUS_INSUFFICIENT_RESOURCES; + } + + /* Set default status */ + Irp->IoStatus.Information = 0; + Irp->IoStatus.Status = STATUS_NOT_SUPPORTED; + + /* Get a stack location in this IRP */ + IoStackLocation = IoGetNextIrpStackLocation(Irp); + ASSERT(IoStackLocation); + + /* Initialize it as a query capabilities IRP, with no completion routine */ + RtlZeroMemory(IoStackLocation, sizeof(IO_STACK_LOCATION)); + IoStackLocation->MajorFunction = IRP_MJ_PNP; + IoStackLocation->MinorFunction = IRP_MN_QUERY_CAPABILITIES; + IoStackLocation->Parameters.DeviceCapabilities.Capabilities = DeviceCapability; + IoSetCompletionRoutine(Irp, NULL, NULL, FALSE, FALSE, FALSE); + + /* Send the IOCTL to the driver */ + Status = IoCallDriver(AttachedDevice, Irp); + if (Status == STATUS_PENDING) + { + /* Wait for a response and update the actual status */ + KeWaitForSingleObject(&Event, + Executive, + KernelMode, + FALSE, + NULL); + Status = Irp->IoStatus.Status; + } + + /* Done, dereference the attached device and return the final result */ + ObDereferenceObject(AttachedDevice); + return Status; +} + +NTSTATUS +NTAPI +PciQueryPowerCapabilities(IN PPCI_PDO_EXTENSION PdoExtension, + IN PDEVICE_CAPABILITIES DeviceCapability) +{ + PDEVICE_OBJECT DeviceObject; + NTSTATUS Status; + DEVICE_CAPABILITIES AttachedCaps; + DEVICE_POWER_STATE NewPowerState, DevicePowerState, DeviceWakeLevel, DeviceWakeState; + SYSTEM_POWER_STATE SystemWakeState, DeepestWakeState, CurrentState; + + /* Nothing is known at first */ + DeviceWakeState = PowerDeviceUnspecified; + SystemWakeState = DeepestWakeState = PowerSystemUnspecified; + + /* Get the PCI capabilities for the parent PDO */ + DeviceObject = PdoExtension->ParentFdoExtension->PhysicalDeviceObject; + Status = PciGetDeviceCapabilities(DeviceObject, &AttachedCaps); + ASSERT(NT_SUCCESS(Status)); + if (!NT_SUCCESS(Status)) return Status; + + /* Check if there's not an existing device state for S0 */ + if (!AttachedCaps.DeviceState[PowerSystemWorking]) + { + /* Set D0<->S0 mapping */ + AttachedCaps.DeviceState[PowerSystemWorking] = PowerDeviceD0; + } + + /* Check if there's not an existing device state for S3 */ + if (!AttachedCaps.DeviceState[PowerSystemShutdown]) + { + /* Set D3<->S3 mapping */ + AttachedCaps.DeviceState[PowerSystemShutdown] = PowerDeviceD3; + } + + /* Check for a PDO with broken, or no, power capabilities */ + if (PdoExtension->HackFlags & PCI_HACK_NO_PM_CAPS) + { + /* Unknown wake device states */ + DeviceCapability->DeviceWake = PowerDeviceUnspecified; + DeviceCapability->SystemWake = PowerSystemUnspecified; + + /* No device state support */ + DeviceCapability->DeviceD1 = FALSE; + DeviceCapability->DeviceD2 = FALSE; + + /* No waking from any low-power device state is supported */ + DeviceCapability->WakeFromD0 = FALSE; + DeviceCapability->WakeFromD1 = FALSE; + DeviceCapability->WakeFromD2 = FALSE; + DeviceCapability->WakeFromD3 = FALSE; + + /* For the rest, copy whatever the parent PDO had */ + RtlCopyMemory(DeviceCapability->DeviceState, + AttachedCaps.DeviceState, + sizeof(DeviceCapability->DeviceState)); + return STATUS_SUCCESS; + } + + /* The PCI Device has power capabilities, so read which ones are supported */ + DeviceCapability->DeviceD1 = PdoExtension->PowerCapabilities.Support.D1; + DeviceCapability->DeviceD2 = PdoExtension->PowerCapabilities.Support.D2; + DeviceCapability->WakeFromD0 = PdoExtension->PowerCapabilities.Support.PMED0; + DeviceCapability->WakeFromD1 = PdoExtension->PowerCapabilities.Support.PMED1; + DeviceCapability->WakeFromD2 = PdoExtension->PowerCapabilities.Support.PMED2; + + /* Can the attached device wake from D3? */ + if (AttachedCaps.DeviceWake != PowerDeviceD3) + { + /* It can't, so check if this PDO supports hot D3 wake */ + DeviceCapability->WakeFromD3 = PdoExtension->PowerCapabilities.Support.PMED3Hot; + } + else + { + /* It can, is this the root bus? */ + if (PCI_IS_ROOT_FDO(PdoExtension->ParentFdoExtension)) + { + /* This is the root bus, so just check if it supports hot D3 wake */ + DeviceCapability->WakeFromD3 = PdoExtension->PowerCapabilities.Support.PMED3Hot; + } + else + { + /* Take the minimums? -- need to check with briang at work */ + UNIMPLEMENTED; + } + } + + /* Now loop each system power state to determine its device state mapping */ + for (CurrentState = PowerSystemWorking; + CurrentState < PowerSystemMaximum; + CurrentState++) + { + /* Read the current mapping from the attached device */ + DevicePowerState = AttachedCaps.DeviceState[CurrentState]; + NewPowerState = DevicePowerState; + + /* The attachee suports D1, but this PDO does not */ + if ((NewPowerState == PowerDeviceD1) && + !(PdoExtension->PowerCapabilities.Support.D1)) + { + /* Fall back to D2 */ + NewPowerState = PowerDeviceD2; + } + + /* The attachee supports D2, but this PDO does not */ + if ((NewPowerState == PowerDeviceD2) && + !(PdoExtension->PowerCapabilities.Support.D2)) + { + /* Fall back to D3 */ + NewPowerState = PowerDeviceD3; + } + + /* Set the mapping based on the best state supported */ + DeviceCapability->DeviceState[CurrentState] = NewPowerState; + + /* Check if sleep states are being processed, and a mapping was found */ + if ((CurrentState < PowerSystemHibernate) && + (NewPowerState != PowerDeviceUnspecified)) + { + /* Save this state as being the deepest one found until now */ + DeepestWakeState = CurrentState; + } + + /* + * Finally, check if the computed sleep state is within the states that + * this device can wake the system from, and if it's higher or equal to + * the sleep state mapping that came from the attachee, assuming that it + * had a valid mapping to begin with. + * + * It this is the case, then make sure that the computed sleep state is + * matched by the device's ability to actually wake from that state. + * + * For devices that support D3, the PCI device only needs Hot D3 as long + * as the attachee's state is less than D3. Otherwise, if the attachee + * might also be at D3, this would require a Cold D3 wake, so check that + * the device actually support this. + */ + if ((CurrentState < AttachedCaps.SystemWake) && + (NewPowerState >= DevicePowerState) && + (DevicePowerState != PowerDeviceUnspecified) && + (((NewPowerState == PowerDeviceD0) && (DeviceCapability->WakeFromD0)) || + ((NewPowerState == PowerDeviceD1) && (DeviceCapability->WakeFromD1)) || + ((NewPowerState == PowerDeviceD2) && (DeviceCapability->WakeFromD2)) || + ((NewPowerState == PowerDeviceD3) && + (PdoExtension->PowerCapabilities.Support.PMED3Hot) && + ((DevicePowerState < PowerDeviceD3) || + (PdoExtension->PowerCapabilities.Support.PMED3Cold))))) + { + /* The mapping is valid, so this will be the lowest wake state */ + SystemWakeState = CurrentState; + DeviceWakeState = NewPowerState; + } + } + + /* Read the current wake level */ + DeviceWakeLevel = PdoExtension->PowerState.DeviceWakeLevel; + + /* Check if the attachee's wake levels are valid, and the PDO's is higher */ + if ((AttachedCaps.SystemWake != PowerSystemUnspecified) && + (AttachedCaps.DeviceWake != PowerDeviceUnspecified) && + (DeviceWakeLevel != PowerDeviceUnspecified) && + (DeviceWakeLevel >= AttachedCaps.DeviceWake)) + { + /* Inherit the system wake from the attachee, and this PDO's wake level */ + DeviceCapability->SystemWake = AttachedCaps.SystemWake; + DeviceCapability->DeviceWake = DeviceWakeLevel; + + /* Now check if the wake level is D0, but the PDO doesn't support it */ + if ((DeviceCapability->DeviceWake == PowerDeviceD0) && + !(DeviceCapability->WakeFromD0)) + { + /* Bump to D1 */ + DeviceCapability->DeviceWake = PowerDeviceD1; + } + + /* Now check if the wake level is D1, but the PDO doesn't support it */ + if ((DeviceCapability->DeviceWake == PowerDeviceD1) && + !(DeviceCapability->WakeFromD1)) + { + /* Bump to D2 */ + DeviceCapability->DeviceWake = PowerDeviceD2; + } + + /* Now check if the wake level is D2, but the PDO doesn't support it */ + if ((DeviceCapability->DeviceWake == PowerDeviceD2) && + !(DeviceCapability->WakeFromD2)) + { + /* Bump it to D3 */ + DeviceCapability->DeviceWake = PowerDeviceD3; + } + + /* Now check if the wake level is D3, but the PDO doesn't support it */ + if ((DeviceCapability->DeviceWake == PowerDeviceD3) && + !(DeviceCapability->WakeFromD3)) + { + /* Then no valid wake state exists */ + DeviceCapability->DeviceWake = PowerDeviceUnspecified; + DeviceCapability->SystemWake = PowerSystemUnspecified; + } + + /* Check if no valid wake state was found */ + if ((DeviceCapability->DeviceWake == PowerDeviceUnspecified) || + (DeviceCapability->SystemWake == PowerSystemUnspecified)) + { + /* Check if one was computed earlier */ + if ((SystemWakeState != PowerSystemUnspecified) && + (DeviceWakeState != PowerDeviceUnspecified)) + { + /* Use the wake state that had been computed earlier */ + DeviceCapability->DeviceWake = DeviceWakeState; + DeviceCapability->SystemWake = SystemWakeState; + + /* If that state was D3, then the device supports Hot/Cold D3 */ + if (DeviceWakeState == PowerDeviceD3) DeviceCapability->WakeFromD3 = TRUE; + } + } + + /* + * Finally, check for off states (lower than S3, such as hibernate) and + * make sure that the device both supports waking from D3 as well as + * supports a Cold wake + */ + if ((DeviceCapability->SystemWake > PowerSystemSleeping3) && + ((DeviceCapability->DeviceWake != PowerDeviceD3) || + !(PdoExtension->PowerCapabilities.Support.PMED3Cold))) + { + /* It doesn't, so pick the computed lowest wake state from earlier */ + DeviceCapability->SystemWake = DeepestWakeState; + } + + /* Set the PCI Specification mandated maximum latencies for transitions */ + DeviceCapability->D1Latency = 0; + DeviceCapability->D2Latency = 2; + DeviceCapability->D3Latency = 100; + + /* Sanity check */ + ASSERT(DeviceCapability->DeviceState[PowerSystemWorking] == PowerDeviceD0); + } + else + { + /* No valid sleep states, no latencies to worry about */ + DeviceCapability->D1Latency = 0; + DeviceCapability->D2Latency = 0; + DeviceCapability->D3Latency = 0; + } + + /* This function always succeeds, even without power management support */ + return STATUS_SUCCESS; +} + +NTSTATUS +NTAPI +PciQueryCapabilities(IN PPCI_PDO_EXTENSION PdoExtension, + IN OUT PDEVICE_CAPABILITIES DeviceCapability) +{ + NTSTATUS Status; + + /* A PDO ID is never unique, and its address is its function and device */ + DeviceCapability->UniqueID = FALSE; + DeviceCapability->Address = PdoExtension->Slot.u.bits.FunctionNumber | + (PdoExtension->Slot.u.bits.DeviceNumber << 16); + + /* Check for host bridges */ + if ((PdoExtension->BaseClass == PCI_CLASS_BRIDGE_DEV) && + (PdoExtension->SubClass == PCI_SUBCLASS_BR_HOST)) + { + /* Raw device opens to a host bridge are acceptable */ + DeviceCapability->RawDeviceOK = TRUE; + } + else + { + /* Otherwise, other PDOs cannot be directly opened */ + DeviceCapability->RawDeviceOK = FALSE; + } + + /* PCI PDOs are pretty fixed things */ + DeviceCapability->LockSupported = FALSE; + DeviceCapability->EjectSupported = FALSE; + DeviceCapability->Removable = FALSE; + DeviceCapability->DockDevice = FALSE; + + /* The slot number is stored as a device property, go query it */ + PciDetermineSlotNumber(PdoExtension, &DeviceCapability->UINumber); + + /* Finally, query and power capabilities and convert them for PnP usage */ + Status = PciQueryPowerCapabilities(PdoExtension, DeviceCapability); + + /* Dump the capabilities if it all worked, and return the status */ + if (NT_SUCCESS(Status)) PciDebugDumpQueryCapabilities(DeviceCapability); + return Status; +} + +PCM_PARTIAL_RESOURCE_DESCRIPTOR +NTAPI +PciNextPartialDescriptor(PCM_PARTIAL_RESOURCE_DESCRIPTOR CmDescriptor) +{ + PCM_PARTIAL_RESOURCE_DESCRIPTOR NextDescriptor; + + /* Assume the descriptors are the fixed size ones */ + NextDescriptor = CmDescriptor + 1; + + /* But check if this is actually a variable-sized descriptor */ + if (CmDescriptor->Type == CmResourceTypeDeviceSpecific) + { + /* Add the size of the variable section as well */ + NextDescriptor = (PVOID)((ULONG_PTR)NextDescriptor + + CmDescriptor->u.DeviceSpecificData.DataSize); + } + + /* Now the correct pointer has been computed, return it */ + return NextDescriptor; +} + /* EOF */ diff --git a/drivers/filesystems/cdfs/CMakeLists.txt b/drivers/filesystems/cdfs/CMakeLists.txt index 1694974148a..f5dd7eba92d 100644 --- a/drivers/filesystems/cdfs/CMakeLists.txt +++ b/drivers/filesystems/cdfs/CMakeLists.txt @@ -9,6 +9,7 @@ list(APPEND SOURCE close.c common.c create.c + devctrl.c dirctl.c fcb.c finfo.c diff --git a/drivers/filesystems/cdfs/cdfs.c b/drivers/filesystems/cdfs/cdfs.c index 28eb370766b..172282eff77 100644 --- a/drivers/filesystems/cdfs/cdfs.c +++ b/drivers/filesystems/cdfs/cdfs.c @@ -95,6 +95,8 @@ DriverEntry(PDRIVER_OBJECT DriverObject, CdfsQueryVolumeInformation; DriverObject->MajorFunction[IRP_MJ_SET_VOLUME_INFORMATION] = CdfsSetVolumeInformation; + DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = + CdfsDeviceControl; DriverObject->DriverUnload = NULL; diff --git a/drivers/filesystems/cdfs/cdfs.h b/drivers/filesystems/cdfs/cdfs.h index 3f686d34228..905a34e0c75 100644 --- a/drivers/filesystems/cdfs/cdfs.h +++ b/drivers/filesystems/cdfs/cdfs.h @@ -142,7 +142,7 @@ typedef struct _CDINFO ULONG JolietLevel; ULONG RootStart; ULONG RootSize; - WCHAR VolumeLabel[MAXIMUM_VOLUME_LABEL_LENGTH]; + WCHAR VolumeLabel[MAXIMUM_VOLUME_LABEL_LENGTH / sizeof(WCHAR)]; ULONG VolumeLabelLength; ULONG SerialNumber; } CDINFO, *PCDINFO; @@ -277,13 +277,17 @@ CdfsDeviceIoControl (IN PDEVICE_OBJECT DeviceObject, IN OUT PULONG pOutputBufferSize, IN BOOLEAN Override); - /* create.c */ NTSTATUS NTAPI CdfsCreate(PDEVICE_OBJECT DeviceObject, PIRP Irp); +/* devctrl.c */ + +NTSTATUS NTAPI +CdfsDeviceControl(PDEVICE_OBJECT DeviceObject, + PIRP Irp); /* dirctl.c */ diff --git a/drivers/filesystems/cdfs/common.c b/drivers/filesystems/cdfs/common.c index 3a3722e5a74..dd47a78a964 100644 --- a/drivers/filesystems/cdfs/common.c +++ b/drivers/filesystems/cdfs/common.c @@ -197,8 +197,11 @@ CdfsDeviceIoControl (IN PDEVICE_OBJECT DeviceObject, DeviceToVerify = IoGetDeviceToVerify(PsGetCurrentThread()); IoSetDeviceToVerify(PsGetCurrentThread(), NULL); - NewStatus = IoVerifyVolume(DeviceToVerify, FALSE); - DPRINT1("IoVerifyVolume() returned (Status %lx)\n", NewStatus); + if (DeviceToVerify) + { + NewStatus = IoVerifyVolume(DeviceToVerify, FALSE); + DPRINT1("IoVerifyVolume() returned (Status %lx)\n", NewStatus); + } } DPRINT("Returning Status %x\n", Status); diff --git a/drivers/filesystems/cdfs/devctrl.c b/drivers/filesystems/cdfs/devctrl.c new file mode 100644 index 00000000000..cee4ba58aca --- /dev/null +++ b/drivers/filesystems/cdfs/devctrl.c @@ -0,0 +1,64 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS kernel + * FILE: drivers/filesystems/cdfs/devctrl.c + * PURPOSE: CDROM (ISO 9660) filesystem driver + * PROGRAMMER: Pierre Schweitzer + * + */ + +/* INCLUDES *****************************************************************/ + +#include "cdfs.h" + +#define NDEBUG +#include + +/* FUNCTIONS ****************************************************************/ + +NTSTATUS NTAPI +CdfsDeviceControl(PDEVICE_OBJECT DeviceObject, + PIRP Irp) +{ + NTSTATUS Status; + PVCB Vcb = NULL; + PFILE_OBJECT FileObject; + PIO_STACK_LOCATION Stack = IoGetCurrentIrpStackLocation(Irp); + + FileObject = Stack->FileObject; + Irp->IoStatus.Information = 0; + + /* FIXME: HACK, it means that CD has changed */ + if (!FileObject) + { + DPRINT1("FIXME: CdfsDeviceControl called without FileObject!\n"); + Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST; + IoCompleteRequest(Irp, IO_NO_INCREMENT); + return STATUS_INVALID_DEVICE_REQUEST; + } + + /* Only support such operations on volume */ + if (!(FileObject->RelatedFileObject == NULL || FileObject->RelatedFileObject->FsContext2 != NULL)) + { + Irp->IoStatus.Status = STATUS_INVALID_PARAMETER; + IoCompleteRequest(Irp, IO_NO_INCREMENT); + return STATUS_INVALID_PARAMETER; + } + + if (Stack->Parameters.DeviceIoControl.IoControlCode == IOCTL_CDROM_DISK_TYPE) + { + /* We should handle this one, but we don't! */ + Status = STATUS_NOT_IMPLEMENTED; + Irp->IoStatus.Status = Status; + IoCompleteRequest(Irp, IO_NO_INCREMENT); + } + else + { + /* Pass it to storage driver */ + IoSkipCurrentIrpStackLocation(Irp); + Vcb = (PVCB)Stack->DeviceObject->DeviceExtension; + Status = IoCallDriver(Vcb->StorageDevice, Irp); + } + + return Status; +} diff --git a/drivers/filesystems/cdfs/dirctl.c b/drivers/filesystems/cdfs/dirctl.c index 12399883234..0160c922321 100644 --- a/drivers/filesystems/cdfs/dirctl.c +++ b/drivers/filesystems/cdfs/dirctl.c @@ -376,13 +376,15 @@ CdfsGetNameInformation(PFCB Fcb, DPRINT("CdfsGetNameInformation() called\n"); Length = wcslen(Fcb->ObjectName) * sizeof(WCHAR); - if ((sizeof (FILE_BOTH_DIR_INFORMATION) + Length) > BufferLength) + if ((sizeof(FILE_NAMES_INFORMATION) + Length) > BufferLength) return(STATUS_BUFFER_OVERFLOW); Info->FileNameLength = Length; Info->NextEntryOffset = - ROUND_UP(sizeof(FILE_BOTH_DIR_INFORMATION) + Length, 4); - memcpy(Info->FileName, Fcb->ObjectName, Length); + ROUND_UP(sizeof(FILE_NAMES_INFORMATION) + Length, sizeof(ULONG)); + RtlCopyMemory(Info->FileName, Fcb->ObjectName, Length); + + // Info->FileIndex=; return(STATUS_SUCCESS); } @@ -399,31 +401,27 @@ CdfsGetDirectoryInformation(PFCB Fcb, DPRINT("CdfsGetDirectoryInformation() called\n"); Length = wcslen(Fcb->ObjectName) * sizeof(WCHAR); - if ((sizeof (FILE_BOTH_DIR_INFORMATION) + Length) > BufferLength) + if ((sizeof (FILE_DIRECTORY_INFORMATION) + Length) > BufferLength) return(STATUS_BUFFER_OVERFLOW); Info->FileNameLength = Length; Info->NextEntryOffset = - ROUND_UP(sizeof(FILE_BOTH_DIR_INFORMATION) + Length, 4); - memcpy(Info->FileName, Fcb->ObjectName, Length); + ROUND_UP(sizeof(FILE_DIRECTORY_INFORMATION) + Length, sizeof(ULONG)); + RtlCopyMemory(Info->FileName, Fcb->ObjectName, Length); /* Convert file times */ CdfsDateTimeToSystemTime(Fcb, &Info->CreationTime); - CdfsDateTimeToSystemTime(Fcb, - &Info->LastAccessTime); - CdfsDateTimeToSystemTime(Fcb, - &Info->LastWriteTime); - CdfsDateTimeToSystemTime(Fcb, - &Info->ChangeTime); + Info->LastWriteTime = Info->CreationTime; + Info->ChangeTime = Info->CreationTime; /* Convert file flags */ CdfsFileFlagsToAttributes(Fcb, &Info->FileAttributes); if (CdfsFCBIsDirectory(Fcb)) { - Info->EndOfFile.QuadPart = 0LL; - Info->AllocationSize.QuadPart = 0LL; + Info->EndOfFile.QuadPart = 0; + Info->AllocationSize.QuadPart = 0; } else { @@ -450,23 +448,19 @@ CdfsGetFullDirectoryInformation(PFCB Fcb, DPRINT("CdfsGetFullDirectoryInformation() called\n"); Length = wcslen(Fcb->ObjectName) * sizeof(WCHAR); - if ((sizeof (FILE_BOTH_DIR_INFORMATION) + Length) > BufferLength) + if ((sizeof (FILE_FULL_DIR_INFORMATION) + Length) > BufferLength) return(STATUS_BUFFER_OVERFLOW); Info->FileNameLength = Length; Info->NextEntryOffset = - ROUND_UP(sizeof(FILE_BOTH_DIR_INFORMATION) + Length, 4); - memcpy(Info->FileName, Fcb->ObjectName, Length); + ROUND_UP(sizeof(FILE_FULL_DIR_INFORMATION) + Length, sizeof(ULONG)); + RtlCopyMemory(Info->FileName, Fcb->ObjectName, Length); /* Convert file times */ CdfsDateTimeToSystemTime(Fcb, &Info->CreationTime); - CdfsDateTimeToSystemTime(Fcb, - &Info->LastAccessTime); - CdfsDateTimeToSystemTime(Fcb, - &Info->LastWriteTime); - CdfsDateTimeToSystemTime(Fcb, - &Info->ChangeTime); + Info->LastWriteTime = Info->CreationTime; + Info->ChangeTime = Info->CreationTime; /* Convert file flags */ CdfsFileFlagsToAttributes(Fcb, @@ -474,8 +468,8 @@ CdfsGetFullDirectoryInformation(PFCB Fcb, if (CdfsFCBIsDirectory(Fcb)) { - Info->EndOfFile.QuadPart = 0LL; - Info->AllocationSize.QuadPart = 0LL; + Info->EndOfFile.QuadPart = 0; + Info->AllocationSize.QuadPart = 0; } else { @@ -508,18 +502,14 @@ CdfsGetBothDirectoryInformation(PFCB Fcb, Info->FileNameLength = Length; Info->NextEntryOffset = - ROUND_UP(sizeof(FILE_BOTH_DIR_INFORMATION) + Length, 4); - memcpy(Info->FileName, Fcb->ObjectName, Length); + ROUND_UP(sizeof(FILE_BOTH_DIR_INFORMATION) + Length, sizeof(ULONG)); + RtlCopyMemory(Info->FileName, Fcb->ObjectName, Length); /* Convert file times */ CdfsDateTimeToSystemTime(Fcb, &Info->CreationTime); - CdfsDateTimeToSystemTime(Fcb, - &Info->LastAccessTime); - CdfsDateTimeToSystemTime(Fcb, - &Info->LastWriteTime); - CdfsDateTimeToSystemTime(Fcb, - &Info->ChangeTime); + Info->LastWriteTime = Info->CreationTime; + Info->ChangeTime = Info->CreationTime; /* Convert file flags */ CdfsFileFlagsToAttributes(Fcb, @@ -527,8 +517,8 @@ CdfsGetBothDirectoryInformation(PFCB Fcb, if (CdfsFCBIsDirectory(Fcb)) { - Info->EndOfFile.QuadPart = 0LL; - Info->AllocationSize.QuadPart = 0LL; + Info->EndOfFile.QuadPart = 0; + Info->AllocationSize.QuadPart = 0; } else { @@ -542,8 +532,9 @@ CdfsGetBothDirectoryInformation(PFCB Fcb, Info->EaSize = 0; /* Copy short name */ + ASSERT(Fcb->ShortNameU.Length / sizeof(WCHAR) <= 12); Info->ShortNameLength = Fcb->ShortNameU.Length; - memcpy(Info->ShortName, Fcb->ShortNameU.Buffer, Fcb->ShortNameU.Length); + RtlCopyMemory(Info->ShortName, Fcb->ShortNameU.Buffer, Fcb->ShortNameU.Length); return(STATUS_SUCCESS); } @@ -584,6 +575,15 @@ CdfsQueryDirectory(PDEVICE_OBJECT DeviceObject, Stack->Parameters.QueryDirectory.FileInformationClass; FileIndex = Stack->Parameters.QueryDirectory.FileIndex; + /* Determine Buffer for result */ + if (Irp->MdlAddress) + { + Buffer = MmGetSystemAddressForMdl(Irp->MdlAddress); + } + else + { + Buffer = Irp->UserBuffer; + } if (SearchPattern != NULL) { @@ -596,13 +596,8 @@ CdfsQueryDirectory(PDEVICE_OBJECT DeviceObject, { return STATUS_INSUFFICIENT_RESOURCES; } - - Ccb->DirectorySearchPattern.Length = SearchPattern->Length; Ccb->DirectorySearchPattern.MaximumLength = SearchPattern->Length + sizeof(WCHAR); - - memcpy(Ccb->DirectorySearchPattern.Buffer, - SearchPattern->Buffer, - SearchPattern->Length); + RtlCopyUnicodeString(&Ccb->DirectorySearchPattern, SearchPattern); Ccb->DirectorySearchPattern.Buffer[SearchPattern->Length / sizeof(WCHAR)] = 0; } } @@ -625,24 +620,14 @@ CdfsQueryDirectory(PDEVICE_OBJECT DeviceObject, /* Determine directory index */ if (Stack->Flags & SL_INDEX_SPECIFIED) { - Ccb->Entry = Ccb->CurrentByteOffset.u.LowPart; - Ccb->Offset = 0; + Ccb->Entry = Stack->Parameters.QueryDirectory.FileIndex; + Ccb->Offset = Ccb->CurrentByteOffset.u.LowPart; } else if (First || (Stack->Flags & SL_RESTART_SCAN)) { Ccb->Entry = 0; Ccb->Offset = 0; } - - /* Determine Buffer for result */ - if (Irp->MdlAddress) - { - Buffer = MmGetSystemAddressForMdl(Irp->MdlAddress); - } - else - { - Buffer = Irp->UserBuffer; - } DPRINT("Buffer = %p tofind = %wZ\n", Buffer, &Ccb->DirectorySearchPattern); TempFcb.ObjectName = TempFcb.PathName; diff --git a/drivers/filesystems/cdfs/fcb.c b/drivers/filesystems/cdfs/fcb.c index a7dd385aa46..12bee1dd753 100644 --- a/drivers/filesystems/cdfs/fcb.c +++ b/drivers/filesystems/cdfs/fcb.c @@ -233,7 +233,6 @@ CdfsFCBInitializeCache(PVCB Vcb, PFCB Fcb) { PFILE_OBJECT FileObject; - NTSTATUS Status; PCCB newCCB; FileObject = IoCreateStreamFileObject(NULL, Vcb->StorageDevice); @@ -241,7 +240,7 @@ CdfsFCBInitializeCache(PVCB Vcb, newCCB = ExAllocatePoolWithTag(NonPagedPool, sizeof(CCB), TAG_CCB); if (newCCB == NULL) { - return(STATUS_INSUFFICIENT_RESOURCES); + return STATUS_INSUFFICIENT_RESOURCES; } RtlZeroMemory(newCCB, sizeof(CCB)); @@ -256,7 +255,6 @@ CdfsFCBInitializeCache(PVCB Vcb, Fcb->FileObject = FileObject; Fcb->DevExt = Vcb; - Status = STATUS_SUCCESS; CcInitializeCacheMap(FileObject, (PCC_FILE_SIZES)(&Fcb->RFCB.AllocationSize), FALSE, @@ -266,7 +264,7 @@ CdfsFCBInitializeCache(PVCB Vcb, ObDereferenceObject(FileObject); Fcb->Flags |= FCB_CACHE_INITIALIZED; - return(Status); + return STATUS_SUCCESS; } @@ -434,6 +432,9 @@ CdfsAttachFCBToFileObject(PDEVICE_EXTENSION Vcb, } memset(newCCB, 0, sizeof(CCB)); + FileObject->ReadAccess = TRUE; + FileObject->WriteAccess = FALSE; + FileObject->DeleteAccess = FALSE; FileObject->SectionObjectPointer = &Fcb->SectionObjectPointers; FileObject->FsContext = Fcb; FileObject->FsContext2 = newCCB; diff --git a/drivers/filesystems/cdfs/fsctl.c b/drivers/filesystems/cdfs/fsctl.c index 897c08155c7..c0433db4768 100644 --- a/drivers/filesystems/cdfs/fsctl.c +++ b/drivers/filesystems/cdfs/fsctl.c @@ -73,11 +73,24 @@ CdfsGetPVDData(PUCHAR Buffer, /* Extract the volume label */ pc = Pvd->VolumeId; pw = CdInfo->VolumeLabel; - for (i = 0; i < MAXIMUM_VOLUME_LABEL_LENGTH && *pc != ' '; i++) + for (i = 0; i < (MAXIMUM_VOLUME_LABEL_LENGTH / sizeof(WCHAR)) - 1; i++) { *pw++ = (WCHAR)*pc++; } *pw = 0; + + /* Trim trailing spaces */ + while (pw > CdInfo->VolumeLabel) + { + if (*--pw != ' ') break; + + /* Remove the space */ + *pw = '\0'; + + /* Decrease size */ + i--; + } + CdInfo->VolumeLabelLength = i * sizeof(WCHAR); CdInfo->VolumeSpaceSize = Pvd->VolumeSpaceSizeL; @@ -346,7 +359,7 @@ CdfsMountVolume(PDEVICE_OBJECT DeviceObject, Vpb->SerialNumber = CdInfo.SerialNumber; Vpb->VolumeLabelLength = CdInfo.VolumeLabelLength; - RtlCopyMemory(Vpb->VolumeLabel, CdInfo.VolumeLabel, CdInfo.VolumeLabelLength * sizeof(WCHAR)); + RtlCopyMemory(Vpb->VolumeLabel, CdInfo.VolumeLabel, CdInfo.VolumeLabelLength); RtlCopyMemory(&DeviceExt->CdInfo, &CdInfo, sizeof(CDINFO)); NewDeviceObject->Vpb = DeviceToMount->Vpb; diff --git a/drivers/filesystems/cdfs/misc.c b/drivers/filesystems/cdfs/misc.c index 4e7128b981a..d1f618a7334 100644 --- a/drivers/filesystems/cdfs/misc.c +++ b/drivers/filesystems/cdfs/misc.c @@ -95,6 +95,46 @@ CdfsFileFlagsToAttributes(PFCB Fcb, ((Fcb->Entry.FileFlags & FILE_FLAG_READONLY) ? FILE_ATTRIBUTE_READONLY : 0); } +BOOLEAN +CdfsIsNameLegalDOS8Dot3(IN UNICODE_STRING FileName + ) +{ + ULONG i; + STRING DbcsName; + CHAR DbcsNameBuffer[12]; + + /* 8dot3 filename is max 12 length */ + if (FileName.Length / sizeof(WCHAR) > 12) + { + return FALSE; + } + + for (i = 0; i < FileName.Length / sizeof(WCHAR) ; i++) + { + /* Don't allow spaces in FileName */ + if (FileName.Buffer[i] == L' ') + return FALSE; + } + + /* If FileName is finishing with a dot, remove it */ + if (FileName.Buffer[FileName.Length / sizeof(WCHAR) - 1] == '.') + { + FileName.Length -= sizeof(WCHAR); + } + + /* Finally, convert the string to call the FsRtl function */ + DbcsName.MaximumLength = 12; + DbcsName.Buffer = DbcsNameBuffer; + if (!NT_SUCCESS(RtlUnicodeStringToCountedOemString(&DbcsName, + &FileName, + FALSE ))) + { + + return FALSE; + } + return FsRtlIsFatDbcsLegal(DbcsName, FALSE, FALSE, FALSE); +} + VOID CdfsShortNameCacheGet (PFCB DirectoryFcb, @@ -102,7 +142,6 @@ CdfsShortNameCacheGet PUNICODE_STRING LongName, PUNICODE_STRING ShortName) { - BOOLEAN HasSpaces; PLIST_ENTRY Entry; PCDFS_SHORT_NAME ShortNameEntry; GENERATE_NAME_CONTEXT Context = { 0 }; @@ -132,8 +171,7 @@ CdfsShortNameCacheGet } /* Cache miss */ - if ((RtlIsNameLegalDOS8Dot3(LongName, NULL, &HasSpaces) == FALSE) || - (HasSpaces == TRUE)) + if (!CdfsIsNameLegalDOS8Dot3(*LongName)) { RtlGenerate8dot3Name(LongName, FALSE, &Context, ShortName); } diff --git a/drivers/filesystems/fastfat/CMakeLists.txt b/drivers/filesystems/fastfat/CMakeLists.txt index f207d642380..681069ba75d 100644 --- a/drivers/filesystems/fastfat/CMakeLists.txt +++ b/drivers/filesystems/fastfat/CMakeLists.txt @@ -18,6 +18,7 @@ list(APPEND SOURCE fsctl.c iface.c misc.c + pnp.c rw.c shutdown.c string.c diff --git a/drivers/filesystems/fastfat/create.c b/drivers/filesystems/fastfat/create.c index a9d4b256dff..514084ee3f1 100644 --- a/drivers/filesystems/fastfat/create.c +++ b/drivers/filesystems/fastfat/create.c @@ -125,7 +125,7 @@ ReadVolumeLabel (PDEVICE_EXTENSION DeviceExt, PVPB Vpb) ExReleaseResourceLite (&DeviceExt->DirResource); FileOffset.QuadPart = 0; - if (CcMapData(pFcb->FileObject, &FileOffset, PAGE_SIZE, TRUE, &Context, (PVOID*)&Entry)) + if (CcMapData(pFcb->FileObject, &FileOffset, SizeDirEntry, TRUE, &Context, (PVOID*)&Entry)) { while (TRUE) { @@ -155,7 +155,7 @@ ReadVolumeLabel (PDEVICE_EXTENSION DeviceExt, PVPB Vpb) { CcUnpinData(Context); FileOffset.u.LowPart += PAGE_SIZE; - if (!CcMapData(pFcb->FileObject, &FileOffset, PAGE_SIZE, TRUE, &Context, (PVOID*)&Entry)) + if (!CcMapData(pFcb->FileObject, &FileOffset, SizeDirEntry, TRUE, &Context, (PVOID*)&Entry)) { Context = NULL; break; @@ -466,7 +466,7 @@ VfatCreateFile ( PDEVICE_OBJECT DeviceObject, PIRP Irp ) /* This a open operation for the volume itself */ if (FileObject->FileName.Length == 0 && - FileObject->RelatedFileObject == NULL) + (FileObject->RelatedFileObject == NULL || FileObject->RelatedFileObject->FsContext2 != NULL)) { if (RequestedDisposition == FILE_CREATE || RequestedDisposition == FILE_OVERWRITE_IF || @@ -474,10 +474,13 @@ VfatCreateFile ( PDEVICE_OBJECT DeviceObject, PIRP Irp ) { return(STATUS_ACCESS_DENIED); } +#if 0 + /* In spite of what is shown in WDK, it seems that Windows FAT driver doesn't perform that test */ if (RequestedOptions & FILE_DIRECTORY_FILE) { return(STATUS_NOT_A_DIRECTORY); } +#endif pFcb = DeviceExt->VolumeFcb; pCcb = ExAllocateFromNPagedLookasideList(&VfatGlobalData->CcbLookasideList); if (pCcb == NULL) @@ -522,7 +525,7 @@ VfatCreateFile ( PDEVICE_OBJECT DeviceObject, PIRP Irp ) return(STATUS_OBJECT_NAME_INVALID); } } - if (FileObject->RelatedFileObject && PathNameU.Length > sizeof(WCHAR) && PathNameU.Buffer[0] == L'\\') + if (FileObject->RelatedFileObject && PathNameU.Length >= sizeof(WCHAR) && PathNameU.Buffer[0] == L'\\') { return(STATUS_OBJECT_NAME_INVALID); } diff --git a/drivers/filesystems/fastfat/direntry.c b/drivers/filesystems/fastfat/direntry.c index 1a1577c452d..060102973c6 100644 --- a/drivers/filesystems/fastfat/direntry.c +++ b/drivers/filesystems/fastfat/direntry.c @@ -66,7 +66,7 @@ FATIsDirectoryEmpty(PVFATFCB Fcb) CcUnpinData(Context); } - if (!CcMapData(Fcb->FileObject, &FileOffset, PAGE_SIZE, TRUE, &Context, (PVOID*)&FatDirEntry)) + if (!CcMapData(Fcb->FileObject, &FileOffset, sizeof(FAT_DIR_ENTRY), TRUE, &Context, (PVOID*)&FatDirEntry)) { return TRUE; } @@ -120,7 +120,7 @@ FATXIsDirectoryEmpty(PVFATFCB Fcb) CcUnpinData(Context); } - if (!CcMapData(Fcb->FileObject, &FileOffset, PAGE_SIZE, TRUE, &Context, (PVOID*)&FatXDirEntry)) + if (!CcMapData(Fcb->FileObject, &FileOffset, sizeof(FATX_DIR_ENTRY), TRUE, &Context, (PVOID*)&FatXDirEntry)) { return TRUE; } diff --git a/drivers/filesystems/fastfat/dirwr.c b/drivers/filesystems/fastfat/dirwr.c index a1da379004b..0e948addc67 100644 --- a/drivers/filesystems/fastfat/dirwr.c +++ b/drivers/filesystems/fastfat/dirwr.c @@ -638,7 +638,7 @@ FATDelEntry( CcUnpinData(Context); } Offset.u.LowPart = (i * sizeof(FAT_DIR_ENTRY) / PAGE_SIZE) * PAGE_SIZE; - CcPinRead(pFcb->parentFcb->FileObject, &Offset, PAGE_SIZE, TRUE, + CcPinRead(pFcb->parentFcb->FileObject, &Offset, sizeof(FAT_DIR_ENTRY), TRUE, &Context, (PVOID*)&pDirEntry); } pDirEntry[i % (PAGE_SIZE / sizeof(FAT_DIR_ENTRY))].Filename[0] = 0xe5; @@ -689,7 +689,7 @@ FATXDelEntry( DPRINT("delete entry: %d\n", StartIndex); Offset.u.HighPart = 0; Offset.u.LowPart = (StartIndex * sizeof(FATX_DIR_ENTRY) / PAGE_SIZE) * PAGE_SIZE; - if (!CcPinRead(pFcb->parentFcb->FileObject, &Offset, PAGE_SIZE, TRUE, + if (!CcPinRead(pFcb->parentFcb->FileObject, &Offset, sizeof(FATX_DIR_ENTRY), TRUE, &Context, (PVOID*)&pDirEntry)) { DPRINT1("CcPinRead(Offset %x:%x, Length %d) failed\n", Offset.u.HighPart, Offset.u.LowPart, PAGE_SIZE); diff --git a/drivers/filesystems/fastfat/fcb.c b/drivers/filesystems/fastfat/fcb.c index 1bfc51cec39..bfdeb18605b 100644 --- a/drivers/filesystems/fastfat/fcb.c +++ b/drivers/filesystems/fastfat/fcb.c @@ -474,7 +474,7 @@ vfatMakeFCBFromDirEntry( if (vfatFCBIsDirectory(rcFCB)) { ULONG FirstCluster, CurrentCluster; - NTSTATUS Status; + NTSTATUS Status = STATUS_SUCCESS; Size = 0; FirstCluster = vfatDirEntryGetFirstCluster (vcb, &rcFCB->entry); if (FirstCluster == 1) @@ -484,7 +484,7 @@ vfatMakeFCBFromDirEntry( else if (FirstCluster != 0) { CurrentCluster = FirstCluster; - while (CurrentCluster != 0xffffffff) + while (CurrentCluster != 0xffffffff && NT_SUCCESS(Status)) { Size += vcb->FatInfo.BytesPerCluster; Status = NextCluster (vcb, FirstCluster, &CurrentCluster, FALSE); diff --git a/drivers/filesystems/fastfat/iface.c b/drivers/filesystems/fastfat/iface.c index 6bf97159deb..de9bb165a33 100644 --- a/drivers/filesystems/fastfat/iface.c +++ b/drivers/filesystems/fastfat/iface.c @@ -100,6 +100,7 @@ DriverEntry(PDRIVER_OBJECT DriverObject, DriverObject->MajorFunction[IRP_MJ_LOCK_CONTROL] = VfatBuildRequest; DriverObject->MajorFunction[IRP_MJ_CLEANUP] = VfatBuildRequest; DriverObject->MajorFunction[IRP_MJ_FLUSH_BUFFERS] = VfatBuildRequest; + DriverObject->MajorFunction[IRP_MJ_PNP] = VfatBuildRequest; DriverObject->DriverUnload = NULL; diff --git a/drivers/filesystems/fastfat/misc.c b/drivers/filesystems/fastfat/misc.c index 688086acec2..71d94b5acb7 100644 --- a/drivers/filesystems/fastfat/misc.c +++ b/drivers/filesystems/fastfat/misc.c @@ -127,6 +127,8 @@ VfatDispatchRequest (IN PVFAT_IRP_CONTEXT IrpContext) return VfatCleanup(IrpContext); case IRP_MJ_FLUSH_BUFFERS: return VfatFlush(IrpContext); + case IRP_MJ_PNP: + return VfatPnp(IrpContext); default: DPRINT1 ("Unexpected major function %x\n", IrpContext->MajorFunction); IrpContext->Irp->IoStatus.Status = STATUS_DRIVER_INTERNAL_ERROR; diff --git a/drivers/filesystems/fastfat/pnp.c b/drivers/filesystems/fastfat/pnp.c new file mode 100644 index 00000000000..b77c04ce142 --- /dev/null +++ b/drivers/filesystems/fastfat/pnp.c @@ -0,0 +1,44 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS kernel + * FILE: drivers/filesystems/fastfat/pnp.c + * PURPOSE: VFAT Filesystem + * PROGRAMMER: Pierre Schweitzer + * + */ + +/* INCLUDES *****************************************************************/ + +#define NDEBUG +#include "vfat.h" + +/* FUNCTIONS ****************************************************************/ + +NTSTATUS VfatPnp(PVFAT_IRP_CONTEXT IrpContext) +{ + PVCB Vcb = NULL; + NTSTATUS Status; + + /* PRECONDITION */ + ASSERT(IrpContext); + + switch (IrpContext->Stack->MinorFunction) + { + case IRP_MN_QUERY_REMOVE_DEVICE: + case IRP_MN_SURPRISE_REMOVAL: + case IRP_MN_REMOVE_DEVICE: + case IRP_MN_CANCEL_REMOVE_DEVICE: + Status = STATUS_NOT_IMPLEMENTED; + IrpContext->Irp->IoStatus.Status = Status; + IoCompleteRequest(IrpContext->Irp, IO_NO_INCREMENT); + break; + default: + IoSkipCurrentIrpStackLocation(IrpContext->Irp); + Vcb = (PVCB)IrpContext->Stack->DeviceObject->DeviceExtension; + Status = IoCallDriver(Vcb->StorageDevice, IrpContext->Irp); + } + + VfatFreeIrpContext(IrpContext); + + return Status; +} diff --git a/drivers/filesystems/fastfat/vfat.h b/drivers/filesystems/fastfat/vfat.h index e9c37da3d63..3521d31a36d 100644 --- a/drivers/filesystems/fastfat/vfat.h +++ b/drivers/filesystems/fastfat/vfat.h @@ -775,5 +775,8 @@ NTSTATUS VfatFlush(PVFAT_IRP_CONTEXT IrpContext); NTSTATUS VfatFlushVolume(PDEVICE_EXTENSION DeviceExt, PVFATFCB VolumeFcb); +/* --------------------------------------------------------------- pnp.c */ + +NTSTATUS VfatPnp(PVFAT_IRP_CONTEXT IrpContext); /* EOF */ diff --git a/drivers/filesystems/fastfat/volume.c b/drivers/filesystems/fastfat/volume.c index d91e44fa99c..4a014b37882 100644 --- a/drivers/filesystems/fastfat/volume.c +++ b/drivers/filesystems/fastfat/volume.c @@ -229,7 +229,7 @@ FsdSetFsLabelInformation(PDEVICE_OBJECT DeviceObject, /* Search existing volume entry on disk */ FileOffset.QuadPart = 0; - if (CcPinRead(pRootFcb->FileObject, &FileOffset, PAGE_SIZE, TRUE, &Context, (PVOID*)&Entry)) + if (CcPinRead(pRootFcb->FileObject, &FileOffset, SizeDirEntry, TRUE, &Context, (PVOID*)&Entry)) { while (TRUE) { @@ -250,13 +250,13 @@ FsdSetFsLabelInformation(PDEVICE_OBJECT DeviceObject, Entry = (PDIR_ENTRY)((ULONG_PTR)Entry + SizeDirEntry); if ((DirIndex % EntriesPerPage) == 0) { - CcUnpinData(Context); - FileOffset.u.LowPart += PAGE_SIZE; - if (!CcPinRead(pRootFcb->FileObject, &FileOffset, PAGE_SIZE, TRUE, &Context, (PVOID*)&Entry)) - { - Context = NULL; - break; - } + CcUnpinData(Context); + FileOffset.u.LowPart += PAGE_SIZE; + if (!CcPinRead(pRootFcb->FileObject, &FileOffset, SizeDirEntry, TRUE, &Context, (PVOID*)&Entry)) + { + Context = NULL; + break; + } } } if (Context) diff --git a/drivers/filesystems/fastfat_new/cleanup.c b/drivers/filesystems/fastfat_new/cleanup.c index dac825fa9ea..dbc1f1b3d96 100644 --- a/drivers/filesystems/fastfat_new/cleanup.c +++ b/drivers/filesystems/fastfat_new/cleanup.c @@ -13,13 +13,430 @@ /* FUNCTIONS ****************************************************************/ +/* Last handle to a file object is closed */ +NTSTATUS +NTAPI +FatiCleanup(PFAT_IRP_CONTEXT IrpContext, PIRP Irp) +{ + PIO_STACK_LOCATION IrpSp; + PFILE_OBJECT FileObject; + TYPE_OF_OPEN TypeOfOpen; + PSHARE_ACCESS ShareAccess; + BOOLEAN SendUnlockNotification = FALSE; + PLARGE_INTEGER TruncateSize = NULL; + //LARGE_INTEGER LocalTruncateSize; + BOOLEAN AcquiredVcb = FALSE, AcquiredFcb = FALSE; + NTSTATUS Status; + PVCB Vcb; + PFCB Fcb; + PCCB Ccb; + + IrpSp = IoGetCurrentIrpStackLocation( Irp ); + + DPRINT("FatiCleanup\n"); + DPRINT("\tIrp = %p\n", Irp); + DPRINT("\t->FileObject = %p\n", IrpSp->FileObject); + + FileObject = IrpSp->FileObject; + TypeOfOpen = FatDecodeFileObject(FileObject, &Vcb, &Fcb, &Ccb); + + if (TypeOfOpen == UnopenedFileObject) + { + DPRINT1("Unopened File Object\n"); + + FatCompleteRequest(IrpContext, Irp, STATUS_SUCCESS); + return STATUS_SUCCESS; + } + + if (FlagOn( FileObject->Flags, FO_CLEANUP_COMPLETE )) + { + /* Just flush the file */ + + if (FlagOn(Vcb->State, VCB_STATE_FLAG_DEFERRED_FLUSH) && + FlagOn(FileObject->Flags, FO_FILE_MODIFIED) && + !FlagOn(Vcb->State, VCB_STATE_FLAG_WRITE_PROTECTED) && + (TypeOfOpen == UserFileOpen)) + { + //Status = FatFlushFile(IrpContext, Fcb, Flush); + //if (!NT_SUCCESS(Status)) FatNormalizeAndRaiseStatus(IrpContext, Status); + UNIMPLEMENTED; + } + + FatCompleteRequest(IrpContext, Irp, STATUS_SUCCESS); + return STATUS_SUCCESS; + } + + if (TypeOfOpen == UserFileOpen || + TypeOfOpen == UserDirectoryOpen) + { + ASSERT(Fcb != NULL); + + (VOID)FatAcquireExclusiveFcb(IrpContext, Fcb); + + AcquiredFcb = TRUE; + + /* Set FCB flags according to DELETE_ON_CLOSE */ + if (FlagOn(Ccb->Flags, CCB_DELETE_ON_CLOSE)) + { + ASSERT(FatNodeType(Fcb) != FAT_NTC_ROOT_DCB); + + SetFlag(Fcb->State, FCB_STATE_DELETE_ON_CLOSE); + + /* Issue a notification */ + if (TypeOfOpen == UserDirectoryOpen) + { + FsRtlNotifyFullChangeDirectory(Vcb->NotifySync, + &Vcb->NotifyList, + FileObject->FsContext, + NULL, + FALSE, + FALSE, + 0, + NULL, + NULL, + NULL); + } + } + + /* If file should be deleted, acquire locks */ + if ((Fcb->UncleanCount == 1) && + FlagOn(Fcb->State, FCB_STATE_DELETE_ON_CLOSE) && + (Fcb->Condition != FcbBad) && + !FlagOn(Vcb->State, VCB_STATE_FLAG_WRITE_PROTECTED)) + { + FatReleaseFcb(IrpContext, Fcb); + AcquiredFcb = FALSE; + + (VOID)FatAcquireExclusiveVcb(IrpContext, Vcb); + AcquiredVcb = TRUE; + + (VOID)FatAcquireExclusiveFcb(IrpContext, Fcb); + AcquiredFcb = TRUE; + } + } + + /* Acquire VCB lock if it was a volume open */ + if (TypeOfOpen == UserVolumeOpen) + { + (VOID)FatAcquireExclusiveVcb(IrpContext, Vcb); + AcquiredVcb = TRUE; + } + + /* Cleanup all notifications */ + if (TypeOfOpen == UserDirectoryOpen) + { + FsRtlNotifyCleanup(Vcb->NotifySync, + &Vcb->NotifyList, + Ccb); + } + + if (Fcb) + { + //TODO: FatVerifyFcb + } + + switch (TypeOfOpen) + { + case DirectoryFile: + case VirtualVolumeFile: + DPRINT1("Cleanup VirtualVolumeFile/DirectoryFile\n"); + ShareAccess = NULL; + break; + + case UserVolumeOpen: + DPRINT("Cleanup UserVolumeOpen\n"); + + if (FlagOn(Ccb->Flags, CCB_COMPLETE_DISMOUNT)) + { + FatCheckForDismount( IrpContext, Vcb, TRUE ); + } else if (FileObject->WriteAccess && + FlagOn(FileObject->Flags, FO_FILE_MODIFIED)) + { + UNIMPLEMENTED; + } + + /* Release the volume and send notification */ + if (FlagOn(Vcb->State, VCB_STATE_FLAG_LOCKED) && + (Vcb->FileObjectWithVcbLocked == FileObject)) + { + UNIMPLEMENTED; + SendUnlockNotification = TRUE; + } + + ShareAccess = &Vcb->ShareAccess; + break; + + case EaFile: + DPRINT1("Cleanup EaFileObject\n"); + ShareAccess = NULL; + break; + + case UserDirectoryOpen: + DPRINT("Cleanup UserDirectoryOpen\n"); + + ShareAccess = &Fcb->ShareAccess; + + /* Should it be a delayed close? */ + if ((Fcb->UncleanCount == 1) && + (Fcb->OpenCount == 1) && + (Fcb->Dcb.DirectoryFileOpenCount == 0) && + !FlagOn(Fcb->State, FCB_STATE_DELETE_ON_CLOSE) && + Fcb->Condition == FcbGood) + { + /* Yes, a delayed one */ + SetFlag(Fcb->State, FCB_STATE_DELAY_CLOSE); + } + + if (VcbGood == Vcb->Condition) + { + //FatUpdateDirentFromFcb( IrpContext, FileObject, Fcb, Ccb ); + //TODO: Actually update dirent + } + + if ((Fcb->UncleanCount == 1) && + (FatNodeType(Fcb) == FAT_NTC_DCB) && + (FlagOn(Fcb->State, FCB_STATE_DELETE_ON_CLOSE)) && + (Fcb->Condition != FcbBad) && + !FlagOn(Vcb->State, VCB_STATE_FLAG_WRITE_PROTECTED)) + { + UNIMPLEMENTED; + } + + /* Decrement unclean counter */ + ASSERT(Fcb->UncleanCount != 0); + Fcb->UncleanCount--; + break; + + case UserFileOpen: + DPRINT("Cleanup UserFileOpen\n"); + + ShareAccess = &Fcb->ShareAccess; + + /* Should it be a delayed close? */ + if ((FileObject->SectionObjectPointer->DataSectionObject == NULL) && + (FileObject->SectionObjectPointer->ImageSectionObject == NULL) && + (Fcb->UncleanCount == 1) && + (Fcb->OpenCount == 1) && + !FlagOn(Fcb->State, FCB_STATE_DELETE_ON_CLOSE) && + Fcb->Condition == FcbGood) + { + /* Yes, a delayed one */ + SetFlag(Fcb->State, FCB_STATE_DELAY_CLOSE); + } + + /* Unlock all file locks */ + FsRtlFastUnlockAll(&Fcb->Fcb.Lock, + FileObject, + IoGetRequestorProcess(Irp), + NULL); + + if (Vcb->Condition == VcbGood) + { + if (Fcb->Condition != FcbBad) + { + //FatUpdateDirentFromFcb( IrpContext, FileObject, Fcb, Ccb ); + // TODO: Update on-disk structures + } + + if (Fcb->UncleanCount == 1 && + Fcb->Condition != FcbBad) + { + //DELETE_CONTEXT DeleteContext; + + /* Should this file be deleted on close? */ + if (FlagOn(Fcb->State, FCB_STATE_DELETE_ON_CLOSE) && + !FlagOn(Vcb->State, VCB_STATE_FLAG_WRITE_PROTECTED)) + { + UNIMPLEMENTED; + } + else + { + if (!FlagOn(Fcb->State, FCB_STATE_PAGEFILE) && + (Fcb->Header.ValidDataLength.LowPart < Fcb->Header.FileSize.LowPart)) + { +#if 0 + ULONG ValidDataLength; + + ValidDataLength = Fcb->Header.ValidDataLength.LowPart; + + if (ValidDataLength < Fcb->ValidDataToDisk) { + ValidDataLength = Fcb->ValidDataToDisk; + } + + if (ValidDataLength < Fcb->Header.FileSize.LowPart) + { + FatZeroData( IrpContext, + Vcb, + FileObject, + ValidDataLength, + Fcb->Header.FileSize.LowPart - + ValidDataLength ); + + Fcb->ValidDataToDisk = + Fcb->Header.ValidDataLength.LowPart = + Fcb->Header.FileSize.LowPart; + + if (CcIsFileCached(FileObject)) + { + CcSetFileSizes(FileObject, (PCC_FILE_SIZES)&Fcb->Header.AllocationSize); + } + } +#endif + DPRINT1("Zeroing out data is not implemented\n"); + } + } + + /* Should the file be truncated on close? */ + if (FlagOn(Fcb->State, FCB_STATE_TRUNCATE_ON_CLOSE)) + { + if (Vcb->Condition == VcbGood) + { + // TODO: Actually truncate the file allocation + UNIMPLEMENTED; + } + + /* Remove truncation flag */ + Fcb->State &= ~FCB_STATE_TRUNCATE_ON_CLOSE; + } + + /* Check again if it should be deleted */ + if (FlagOn(Fcb->State, FCB_STATE_DELETE_ON_CLOSE) && + Fcb->Header.AllocationSize.LowPart == 0) + { + FatNotifyReportChange(IrpContext, + Vcb, + Fcb, + FILE_NOTIFY_CHANGE_FILE_NAME, + FILE_ACTION_REMOVED); + } + + /* Remove the entry from the splay table if the file was deleted */ + if (FlagOn(Fcb->State, FCB_STATE_DELETE_ON_CLOSE)) + { + FatRemoveNames(IrpContext, Fcb); + } + } + } + + ASSERT(Fcb->UncleanCount != 0); + Fcb->UncleanCount--; + if (!FlagOn(FileObject->Flags, FO_CACHE_SUPPORTED)) + { + ASSERT(Fcb->NonCachedUncleanCount != 0); + Fcb->NonCachedUncleanCount--; + } + + if (FlagOn(FileObject->Flags, FO_CACHE_SUPPORTED) && + (Fcb->NonCachedUncleanCount != 0) && + (Fcb->NonCachedUncleanCount == Fcb->UncleanCount) && + (Fcb->SectionObjectPointers.DataSectionObject != NULL)) + { + CcFlushCache(&Fcb->SectionObjectPointers, NULL, 0, NULL); + + /* Acquire and release PagingIo to get in sync with lazy writer */ + ExAcquireResourceExclusiveLite(Fcb->Header.PagingIoResource, TRUE); + ExReleaseResourceLite(Fcb->Header.PagingIoResource); + + CcPurgeCacheSection(&Fcb->SectionObjectPointers, + NULL, + 0, + FALSE); + } + + if (Fcb->Condition == FcbBad) + { + //TruncateSize = &FatLargeZero; + UNIMPLEMENTED; + } + + /* Cleanup the cache map */ + CcUninitializeCacheMap(FileObject, TruncateSize, NULL); + break; + + default: + KeBugCheckEx(FAT_FILE_SYSTEM, __LINE__, (ULONG_PTR)TypeOfOpen, 0, 0); + } + + /* Cleanup the share access */ + + if (ShareAccess) + { + DPRINT("Cleaning up the share access\n"); + IoRemoveShareAccess(FileObject, ShareAccess); + } + + if (TypeOfOpen == UserFileOpen) + { + /* Update oplocks */ + FsRtlCheckOplock(&Fcb->Fcb.Oplock, + Irp, + IrpContext, + NULL, + NULL); + + Fcb->Header.IsFastIoPossible = FatIsFastIoPossible(Fcb); + } + + /* Set the FO_CLEANUP_COMPLETE flag */ + SetFlag(FileObject->Flags, FO_CLEANUP_COMPLETE); + + Status = STATUS_SUCCESS; + + // TODO: Unpin repinned BCBs + //FatUnpinRepinnedBcbs(IrpContext); + + /* Flush the volume if necessary */ + if (FlagOn(Vcb->State, VCB_STATE_FLAG_DEFERRED_FLUSH) && + !FlagOn(Vcb->State, VCB_STATE_FLAG_WRITE_PROTECTED)) + { + UNIMPLEMENTED; + } + + /* Cleanup */ + if (AcquiredFcb) FatReleaseFcb(IrpContext, Fcb); + if (AcquiredVcb) FatReleaseVcb(IrpContext, Vcb); + + /* Send volume notification */ + if (SendUnlockNotification) + FsRtlNotifyVolumeEvent(FileObject, FSRTL_VOLUME_UNLOCK); + + return Status; +} + NTSTATUS NTAPI FatCleanup(PDEVICE_OBJECT DeviceObject, PIRP Irp) { - DPRINT1("FatCleanup(DeviceObject %p, Irp %p)\n", DeviceObject, Irp); + PFAT_IRP_CONTEXT IrpContext; + NTSTATUS Status; - return STATUS_NOT_IMPLEMENTED; + DPRINT("FatCleanup(DeviceObject %p, Irp %p)\n", DeviceObject, Irp); + + /* FatCleanup works only with a volume device object */ + if (DeviceObject == FatGlobalData.DiskDeviceObject) + { + /* Complete the request and return success */ + Irp->IoStatus.Status = STATUS_SUCCESS; + Irp->IoStatus.Information = FILE_OPENED; + + IoCompleteRequest(Irp, IO_DISK_INCREMENT); + + return STATUS_SUCCESS; + } + + /* Enter FsRtl critical region */ + FsRtlEnterFileSystem(); + + /* Build an irp context */ + IrpContext = FatBuildIrpContext(Irp, TRUE); + + /* Call internal function */ + Status = FatiCleanup(IrpContext, Irp); + + /* Leave FsRtl critical region */ + FsRtlExitFileSystem(); + + return Status; } /* EOF */ diff --git a/drivers/filesystems/fastfat_new/close.c b/drivers/filesystems/fastfat_new/close.c index 69346982f9c..69ccf3c8c43 100644 --- a/drivers/filesystems/fastfat_new/close.c +++ b/drivers/filesystems/fastfat_new/close.c @@ -11,15 +11,641 @@ #define NDEBUG #include "fastfat.h" +VOID NTAPI +FatQueueClose(IN PCLOSE_CONTEXT CloseContext, + IN BOOLEAN DelayClose); + +PCLOSE_CONTEXT NTAPI +FatRemoveClose(PVCB Vcb OPTIONAL, + PVCB LastVcbHint OPTIONAL); + +const ULONG FatMaxDelayedCloseCount = 16; + /* FUNCTIONS ****************************************************************/ +NTSTATUS +NTAPI +FatiCommonClose(IN PVCB Vcb, + IN PFCB Fcb, + IN PCCB Ccb, + IN TYPE_OF_OPEN TypeOfOpen, + IN BOOLEAN Wait, + OUT PBOOLEAN VcbDeleted) +{ + NTSTATUS Status; + PFCB ParentDcb; + BOOLEAN RecursiveClose, VcbDeletedLv = FALSE; + FAT_IRP_CONTEXT IrpContext; + + if (VcbDeleted) *VcbDeleted = FALSE; + + if (TypeOfOpen == UnopenedFileObject) + { + DPRINT1("Closing unopened file object\n"); + Status = STATUS_SUCCESS; + return Status; + } + + RtlZeroMemory(&IrpContext, sizeof(FAT_IRP_CONTEXT)); + + IrpContext.NodeTypeCode = FAT_NTC_IRP_CONTEXT; + IrpContext.NodeByteSize = sizeof(IrpContext); + IrpContext.MajorFunction = IRP_MJ_CLOSE; + + if (Wait) SetFlag(IrpContext.Flags, IRPCONTEXT_CANWAIT); + + if (!ExAcquireResourceExclusiveLite(&Vcb->Resource, Wait)) return STATUS_PENDING; + + if (Vcb->State & VCB_STATE_FLAG_CLOSE_IN_PROGRESS) + { + RecursiveClose = TRUE; + } + else + { + SetFlag(Vcb->State, VCB_STATE_FLAG_CLOSE_IN_PROGRESS); + RecursiveClose = FALSE; + + Vcb->OpenFileCount++; + } + + /* Update on-disk structures */ + switch (TypeOfOpen) + { + case VirtualVolumeFile: + DPRINT1("Close VirtualVolumeFile\n"); + + InterlockedDecrement((PLONG)&(Vcb->InternalOpenCount)); + InterlockedDecrement((PLONG)&(Vcb->ResidualOpenCount)); + + Status = STATUS_SUCCESS; + goto close_done; + break; + + case UserVolumeOpen: + DPRINT1("Close UserVolumeOpen\n"); + + Vcb->DirectAccessOpenCount--; + Vcb->OpenFileCount--; + if (FlagOn(Ccb->Flags, CCB_READ_ONLY)) Vcb->ReadOnlyCount--; + + FatDeleteCcb(&IrpContext, Ccb); + + Status = STATUS_SUCCESS; + goto close_done; + break; + + case EaFile: + UNIMPLEMENTED; + break; + + case DirectoryFile: + DPRINT1("Close DirectoryFile\n"); + + InterlockedDecrement((PLONG)&(Fcb->Dcb.DirectoryFileOpenCount)); + InterlockedDecrement((PLONG)&(Vcb->InternalOpenCount)); + + if (FatNodeType(Fcb) == FAT_NTC_ROOT_DCB) + { + InterlockedDecrement((PLONG)&(Vcb->ResidualOpenCount)); + } + + if (RecursiveClose) + { + Status = STATUS_SUCCESS; + goto close_done; + } + else + { + break; + } + + case UserDirectoryOpen: + case UserFileOpen: + DPRINT("Close UserFileOpen/UserDirectoryOpen\n"); + + if ((FatNodeType(Fcb) == FAT_NTC_DCB) && + IsListEmpty(&Fcb->Dcb.ParentDcbList) && + (Fcb->OpenCount == 1) && + (Fcb->Dcb.DirectoryFile != NULL)) + { + PFILE_OBJECT DirectoryFileObject = Fcb->Dcb.DirectoryFile; + + DPRINT1("Uninitialize the stream file object\n"); + + CcUninitializeCacheMap(DirectoryFileObject, NULL, NULL); + + Fcb->Dcb.DirectoryFile = NULL; + ObDereferenceObject(DirectoryFileObject); + } + + Fcb->OpenCount--; + Vcb->OpenFileCount--; + if (FlagOn(Ccb->Flags, CCB_READ_ONLY)) Vcb->ReadOnlyCount --; + + FatDeleteCcb(&IrpContext, Ccb); + break; + + default: + KeBugCheckEx(FAT_FILE_SYSTEM, __LINE__, (ULONG_PTR)TypeOfOpen, 0, 0); + } + + /* Update in-memory structures */ + if (((FatNodeType(Fcb) == FAT_NTC_FCB) && + (Fcb->OpenCount == 0)) + || + ((FatNodeType(Fcb) == FAT_NTC_DCB) && + (IsListEmpty(&Fcb->Dcb.ParentDcbList)) && + (Fcb->OpenCount == 0) && + (Fcb->Dcb.DirectoryFileOpenCount == 0))) + { + ParentDcb = Fcb->ParentFcb; + + SetFlag(Vcb->State, VCB_STATE_FLAG_DELETED_FCB); + + FatDeleteFcb(&IrpContext, Fcb); + + while ((FatNodeType(ParentDcb) == FAT_NTC_DCB) && + IsListEmpty(&ParentDcb->Dcb.ParentDcbList) && + (ParentDcb->OpenCount == 0) && + (ParentDcb->Dcb.DirectoryFile != NULL)) + { + PFILE_OBJECT DirectoryFileObject; + + DirectoryFileObject = ParentDcb->Dcb.DirectoryFile; + + DPRINT1("Uninitialize parent Stream Cache Map\n"); + + CcUninitializeCacheMap(DirectoryFileObject, NULL, NULL); + + ParentDcb->Dcb.DirectoryFile = NULL; + + ObDereferenceObject(DirectoryFileObject); + + if (ParentDcb->Dcb.DirectoryFileOpenCount == 0) + { + PFCB CurrentDcb; + + CurrentDcb = ParentDcb; + ParentDcb = CurrentDcb->ParentFcb; + + SetFlag(Vcb->State, VCB_STATE_FLAG_DELETED_FCB); + + FatDeleteFcb(&IrpContext, CurrentDcb); + } + else + { + break; + } + } + } + + Status = STATUS_SUCCESS; + +close_done: + /* Closing is done, check if VCB could be closed too */ + if (!RecursiveClose) + { + /* One open left - yes, VCB can go away */ + if (Vcb->OpenFileCount == 1 && + !FlagOn(Vcb->State, VCB_STATE_FLAG_DISMOUNT_IN_PROGRESS) + && VcbDeleted) + { + FatReleaseVcb(&IrpContext, Vcb ); + + SetFlag(IrpContext.Flags, IRPCONTEXT_CANWAIT); + + FatAcquireExclusiveGlobal(&IrpContext); + + FatAcquireExclusiveVcb(&IrpContext, Vcb); + + Vcb->OpenFileCount--; + + VcbDeletedLv = FatCheckForDismount(&IrpContext, Vcb, FALSE); + + FatReleaseGlobal(&IrpContext); + + if (VcbDeleted) *VcbDeleted = VcbDeletedLv; + } + else + { + /* Remove extra referenec */ + Vcb->OpenFileCount --; + } + + /* Clear recursion flag if necessary */ + if (!VcbDeletedLv) + { + ClearFlag(Vcb->State, VCB_STATE_FLAG_CLOSE_IN_PROGRESS); + } + } + + /* Release VCB if it wasn't deleted */ + if (!VcbDeletedLv) + FatReleaseVcb(&IrpContext, Vcb); + + return Status; +} + +NTSTATUS +NTAPI +FatiClose(IN PFAT_IRP_CONTEXT IrpContext, + IN PIRP Irp) +{ + PIO_STACK_LOCATION IrpSp; + TYPE_OF_OPEN TypeOfOpen; + PVCB Vcb; + PFCB Fcb; + PCCB Ccb; + BOOLEAN TopLevel, Wait, VcbDeleted = FALSE, DelayedClose = FALSE; + NTSTATUS Status = STATUS_SUCCESS; + PCLOSE_CONTEXT CloseContext = NULL; + + TopLevel = FatIsTopLevelIrp(Irp); + + /* Get current IRP stack location */ + IrpSp = IoGetCurrentIrpStackLocation(Irp); + + /* Decode incoming file object */ + TypeOfOpen = FatDecodeFileObject(IrpSp->FileObject, &Vcb, &Fcb, &Ccb); + + /* Set CCB read only flag */ + if (Ccb && IsFileObjectReadOnly(IrpSp->FileObject)) + SetFlag(Ccb->Flags, CCB_READ_ONLY); + + /* It's possible to wait only if we are top level or not a system process */ + Wait = TopLevel && (PsGetCurrentProcess() != FatGlobalData.SystemProcess); + + /* Determine if it's a delayed close, by flags first */ + if ((TypeOfOpen == UserFileOpen || TypeOfOpen == UserDirectoryOpen) && + (Fcb->State & FCB_STATE_DELAY_CLOSE) && + !FatGlobalData.ShutdownStarted) + { + DelayedClose = TRUE; + } + + /* If close is not delayed, try to perform the close operation */ + if (!DelayedClose) + Status = FatiCommonClose(Vcb, Fcb, Ccb, TypeOfOpen, Wait, &VcbDeleted); + + /* We have to delay close if either it's defined by a flag or it was not possible + to perform it synchronously */ + if (DelayedClose || Status == STATUS_PENDING) + { + DPRINT1("Queuing a pending close, Vcb %p, Fcb %p, Ccb %p\n", Vcb, Fcb, Ccb); + + /* Check if a close context should be allocated */ + if (TypeOfOpen == VirtualVolumeFile) + { + ASSERT(Vcb->CloseContext != NULL); + CloseContext = Vcb->CloseContext; + Vcb->CloseContext = NULL; + CloseContext->Free = TRUE; + } + else if (TypeOfOpen == DirectoryFile || + TypeOfOpen == EaFile) + { + UNIMPLEMENTED; + //CloseContext = FatAllocateCloseContext(Vcb); + //ASSERT(CloseContext != NULL); + CloseContext->Free = TRUE; + } + else + { + //TODO: FatDeallocateCcbStrings( Ccb ); + + /* Set CloseContext to a buffer inside Ccb */ + CloseContext = &Ccb->CloseContext; + CloseContext->Free = FALSE; + SetFlag(Ccb->Flags, CCB_CLOSE_CONTEXT); + } + + /* Save all info in the close context */ + CloseContext->Vcb = Vcb; + CloseContext->Fcb = Fcb; + CloseContext->TypeOfOpen = TypeOfOpen; + + /* Queue the close */ + FatQueueClose(CloseContext, (BOOLEAN)(Fcb && FlagOn(Fcb->State, FCB_STATE_DELAY_CLOSE))); + } + else + { + /* Close finished right away */ + if (TypeOfOpen == VirtualVolumeFile || + TypeOfOpen == DirectoryFile || + TypeOfOpen == EaFile) + { + if (TypeOfOpen == VirtualVolumeFile) + { + /* Free close context for the not deleted VCB */ + if (!VcbDeleted) + { + CloseContext = Vcb->CloseContext; + Vcb->CloseContext = NULL; + + ASSERT(CloseContext != NULL); + } + } + else + { + //CloseContext = FatAllocateCloseContext(Vcb); + DPRINT1("TODO: Allocate close context!\n"); + ASSERT(CloseContext != NULL); + } + + /* Free close context */ + if (CloseContext) ExFreePool(CloseContext); + } + } + + /* Complete the request */ + FatCompleteRequest(NULL, Irp, Status); + + /* Reset the top level IRP if necessary */ + if (TopLevel) IoSetTopLevelIrp(NULL); + + return Status; +} + NTSTATUS NTAPI FatClose(PDEVICE_OBJECT DeviceObject, PIRP Irp) { - DPRINT1("FatClose(DeviceObject %p, Irp %p)\n", DeviceObject, Irp); + PFAT_IRP_CONTEXT IrpContext; + NTSTATUS Status; - return STATUS_NOT_IMPLEMENTED; + DPRINT("FatClose(DeviceObject %p, Irp %p)\n", DeviceObject, Irp); + + /* FatClose works only with a volume device object */ + if (DeviceObject == FatGlobalData.DiskDeviceObject) + { + /* Complete the request and return success */ + Irp->IoStatus.Status = STATUS_SUCCESS; + Irp->IoStatus.Information = FILE_OPENED; + + IoCompleteRequest(Irp, IO_DISK_INCREMENT); + + return STATUS_SUCCESS; + } + + /* Enter FsRtl critical region */ + FsRtlEnterFileSystem(); + + /* Build an irp context */ + IrpContext = FatBuildIrpContext(Irp, TRUE); + + /* Call internal function */ + Status = FatiClose(IrpContext, Irp); + + /* Leave FsRtl critical region */ + FsRtlExitFileSystem(); + + return Status; +} + +VOID +NTAPI +FatPendingClose(IN PVCB Vcb OPTIONAL) +{ + PCLOSE_CONTEXT CloseContext; + PVCB CurrentVcb = NULL; + PVCB LastVcb = NULL; + BOOLEAN FreeContext; + ULONG Loops = 0; + + /* Do the top-level IRP trick */ + if (!Vcb) IoSetTopLevelIrp((PIRP)FSRTL_FSP_TOP_LEVEL_IRP); + + while ((CloseContext = FatRemoveClose(Vcb, LastVcb))) + { + if (!Vcb) + { + if (!FatGlobalData.ShutdownStarted) + { + if (CloseContext->Vcb != CurrentVcb) + { + Loops = 0; + + /* Release previous VCB */ + if (CurrentVcb) + ExReleaseResourceLite(&CurrentVcb->Resource); + + /* Lock the new VCB */ + CurrentVcb = CloseContext->Vcb; + (VOID)ExAcquireResourceExclusiveLite(&CurrentVcb->Resource, TRUE); + } + else + { + /* Try to lock */ + if (++Loops >= 20) + { + if (ExGetSharedWaiterCount(&CurrentVcb->Resource) + + ExGetExclusiveWaiterCount(&CurrentVcb->Resource)) + { + ExReleaseResourceLite(&CurrentVcb->Resource); + (VOID)ExAcquireResourceExclusiveLite(&CurrentVcb->Resource, TRUE); + } + + Loops = 0; + } + } + + /* Check open count */ + if (CurrentVcb->OpenFileCount <= 1) + { + ExReleaseResourceLite(&CurrentVcb->Resource); + CurrentVcb = NULL; + } + } + else if (CurrentVcb) + { + ExReleaseResourceLite(&CurrentVcb->Resource); + CurrentVcb = NULL; + } + } + + LastVcb = CurrentVcb; + + /* Remember if we should free the context */ + FreeContext = CloseContext->Free; + + FatiCommonClose(CloseContext->Vcb, + CloseContext->Fcb, + (FreeContext ? NULL : CONTAINING_RECORD(CloseContext, CCB, CloseContext)), + CloseContext->TypeOfOpen, + TRUE, + NULL); + + /* Free context if necessary */ + if (FreeContext) ExFreePool(CloseContext); + } + + /* Release VCB if necessary */ + if (CurrentVcb) ExReleaseResourceLite(&CurrentVcb->Resource); + + /* Reset top level IRP */ + if (!Vcb) IoSetTopLevelIrp( NULL ); +} + +VOID +NTAPI +FatCloseWorker(IN PDEVICE_OBJECT DeviceObject, + IN PVOID Context) +{ + FsRtlEnterFileSystem(); + + FatPendingClose((PVCB)Context); + + FsRtlExitFileSystem(); +} + +VOID +NTAPI +FatQueueClose(IN PCLOSE_CONTEXT CloseContext, + IN BOOLEAN DelayClose) +{ + BOOLEAN RunWorker = FALSE; + + /* Acquire the close lists mutex */ + ExAcquireFastMutexUnsafe(&FatCloseQueueMutex); + + /* Add it to the desired list */ + if (DelayClose) + { + InsertTailList(&FatGlobalData.DelayedCloseList, + &CloseContext->GlobalLinks); + InsertTailList(&CloseContext->Vcb->DelayedCloseList, + &CloseContext->VcbLinks); + + FatGlobalData.DelayedCloseCount++; + + if (FatGlobalData.DelayedCloseCount > FatMaxDelayedCloseCount && + !FatGlobalData.AsyncCloseActive) + { + FatGlobalData.AsyncCloseActive = TRUE; + RunWorker = TRUE; + } + } + else + { + InsertTailList(&FatGlobalData.AsyncCloseList, + &CloseContext->GlobalLinks); + InsertTailList(&CloseContext->Vcb->AsyncCloseList, + &CloseContext->VcbLinks); + + FatGlobalData.AsyncCloseCount++; + + if (!FatGlobalData.AsyncCloseActive) + { + FatGlobalData.AsyncCloseActive = TRUE; + RunWorker = TRUE; + } + } + + /* Release the close lists mutex */ + ExReleaseFastMutexUnsafe(&FatCloseQueueMutex); + + if (RunWorker) + IoQueueWorkItem(FatGlobalData.FatCloseItem, FatCloseWorker, CriticalWorkQueue, NULL); +} + +PCLOSE_CONTEXT +NTAPI +FatRemoveClose(PVCB Vcb OPTIONAL, + PVCB LastVcbHint OPTIONAL) +{ + PLIST_ENTRY Entry; + PCLOSE_CONTEXT CloseContext; + BOOLEAN IsWorker = FALSE; + + /* Acquire the close lists mutex */ + ExAcquireFastMutexUnsafe(&FatCloseQueueMutex); + + if (!Vcb) IsWorker = TRUE; + + if (Vcb == NULL && LastVcbHint != NULL) + { + // TODO: A very special case of overflowing the queue + UNIMPLEMENTED; + } + + /* Usual processing from a worker thread */ + if (!Vcb) + { +TryToCloseAgain: + + /* Is there anything in the async close list */ + if (!IsListEmpty(&FatGlobalData.AsyncCloseList)) + { + Entry = RemoveHeadList(&FatGlobalData.AsyncCloseList); + FatGlobalData.AsyncCloseCount--; + + CloseContext = CONTAINING_RECORD(Entry, + CLOSE_CONTEXT, + GlobalLinks); + + RemoveEntryList(&CloseContext->VcbLinks); + } else if (!IsListEmpty(&FatGlobalData.DelayedCloseList) && + (FatGlobalData.DelayedCloseCount > FatMaxDelayedCloseCount/2 || + FatGlobalData.ShutdownStarted)) + { + /* In case of a shutdown or when delayed queue is filled at half - perform closing */ + Entry = RemoveHeadList(&FatGlobalData.DelayedCloseList); + FatGlobalData.DelayedCloseCount--; + + CloseContext = CONTAINING_RECORD(Entry, + CLOSE_CONTEXT, + GlobalLinks); + RemoveEntryList(&CloseContext->VcbLinks); + } + else + { + /* Nothing to close */ + CloseContext = NULL; + if (IsWorker) FatGlobalData.AsyncCloseActive = FALSE; + } + } + else + { + if (!IsListEmpty(&Vcb->AsyncCloseList)) + { + /* Is there anything in the async close list */ + Entry = RemoveHeadList(&Vcb->AsyncCloseList); + FatGlobalData.AsyncCloseCount--; + + CloseContext = CONTAINING_RECORD(Entry, + CLOSE_CONTEXT, + VcbLinks); + + RemoveEntryList(&CloseContext->GlobalLinks); + } + else if (!IsListEmpty(&Vcb->DelayedCloseList)) + { + /* Process delayed close list */ + Entry = RemoveHeadList(&Vcb->DelayedCloseList); + FatGlobalData.DelayedCloseCount--; + + CloseContext = CONTAINING_RECORD(Entry, + CLOSE_CONTEXT, + VcbLinks); + + RemoveEntryList(&CloseContext->GlobalLinks); + } + else if (LastVcbHint) + { + /* Try again */ + goto TryToCloseAgain; + } + else + { + /* Nothing to close */ + CloseContext = NULL; + } + } + + /* Release the close lists mutex */ + ExReleaseFastMutexUnsafe(&FatCloseQueueMutex); + + return CloseContext; } /* EOF */ diff --git a/drivers/filesystems/fastfat_new/create.c b/drivers/filesystems/fastfat_new/create.c index db9a794538e..ce8cc90522d 100644 --- a/drivers/filesystems/fastfat_new/create.c +++ b/drivers/filesystems/fastfat_new/create.c @@ -72,7 +72,9 @@ FatiOpenRootDcb(IN PFAT_IRP_CONTEXT IrpContext, /* Increment counters */ Dcb->OpenCount++; + Dcb->UncleanCount++; Vcb->OpenFileCount++; + if (IsFileObjectReadOnly(FileObject)) Vcb->ReadOnlyCount++; /* Set success statuses */ Iosb.Status = STATUS_SUCCESS; @@ -186,7 +188,7 @@ FatiOverwriteFile(PFAT_IRP_CONTEXT IrpContext, CcSetFileSizes(FileObject, (PCC_FILE_SIZES)&Fcb->Header.AllocationSize); // TODO: Actually truncate the file - DPRINT1("TODO: Actually truncate the file with a fullfat handle %x\n", Fcb->FatHandle); + DPRINT1("TODO: Actually truncate file '%wZ' with a fullfat handle %x\n", &Fcb->FullFileName, Fcb->FatHandle); /* Release the paging resource */ ExReleaseResourceLite(Fcb->Header.PagingIoResource); @@ -288,6 +290,12 @@ FatiOpenExistingDir(IN PFAT_IRP_CONTEXT IrpContext, Fcb, FatCreateCcb()); + /* Increase counters */ + Fcb->UncleanCount++; + Fcb->OpenCount++; + Vcb->OpenFileCount++; + if (IsFileObjectReadOnly(FileObject)) Vcb->ReadOnlyCount++; + Iosb.Status = STATUS_SUCCESS; Iosb.Information = FILE_OPENED; @@ -319,6 +327,7 @@ FatiOpenExistingFile(IN PFAT_IRP_CONTEXT IrpContext, PFCB Fcb; NTSTATUS Status; FF_FILE *FileHandle; + FF_ERROR FfError; /* Check for create file option and fail */ if (CreateDisposition == FILE_CREATE) @@ -341,20 +350,22 @@ FatiOpenExistingFile(IN PFAT_IRP_CONTEXT IrpContext, } /* Open the file with FullFAT */ - FileHandle = FF_Open(Vcb->Ioman, AnsiName.Buffer, FF_MODE_READ, NULL); + FileHandle = FF_Open(Vcb->Ioman, AnsiName.Buffer, FF_MODE_READ, &FfError); if (!FileHandle) { + DPRINT1("Failed to open file '%s', error %ld\n", AnsiName.Buffer, FfError); Iosb.Status = STATUS_OBJECT_NAME_NOT_FOUND; // FIXME: A shortcut for now return Iosb; } + DPRINT1("Succeeded opening file '%s'\n", AnsiName.Buffer); /* Create a new FCB for this file */ Fcb = FatCreateFcb(IrpContext, Vcb, ParentDcb, FileHandle); // TODO: Check if overwrite is needed - // This is usual file open branch, without overwriting! + // TODO: This is usual file open branch, without overwriting! /* Set context and section object pointers */ FatSetFileObject(FileObject, UserFileOpen, @@ -365,6 +376,13 @@ FatiOpenExistingFile(IN PFAT_IRP_CONTEXT IrpContext, Iosb.Status = STATUS_SUCCESS; Iosb.Information = FILE_OPENED; + + /* Increase counters */ + Fcb->UncleanCount++; + Fcb->OpenCount++; + if (FlagOn(FileObject->Flags, FO_NO_INTERMEDIATE_BUFFERING)) Fcb->NonCachedUncleanCount++; + if (IsFileObjectReadOnly(FileObject)) Vcb->ReadOnlyCount++; + return Iosb; } @@ -397,7 +415,7 @@ FatiOpenVolume(IN PFAT_IRP_CONTEXT IrpContext, // and opened handles count is not 0 //if (!FlagOn(ShareAccess, FILE_SHARE_READ) - DPRINT1("Exclusive voume open\n"); + DPRINT1("Exclusive volume open\n"); // TODO: Flush the volume VolumeFlushed = TRUE; @@ -450,6 +468,7 @@ FatiOpenVolume(IN PFAT_IRP_CONTEXT IrpContext, /* Increase direct open count */ Vcb->DirectOpenCount++; Vcb->OpenFileCount++; + if (IsFileObjectReadOnly(FileObject)) Vcb->ReadOnlyCount++; /* Set no buffering flag */ FileObject->Flags |= FO_NO_INTERMEDIATE_BUFFERING; @@ -720,7 +739,7 @@ FatiCreate(IN PFAT_IRP_CONTEXT IrpContext, /* Set parent DCB */ ParentDcb = RelatedDcb; - DPRINT1("Opening file '%wZ' relatively to '%wZ'\n", &FileName, &ParentDcb->FullFileName); + DPRINT("Opening file '%wZ' relatively to '%wZ'\n", &FileName, &ParentDcb->FullFileName); } else { @@ -1137,6 +1156,12 @@ FatiCreate(IN PFAT_IRP_CONTEXT IrpContext, DeleteOnClose, OpenedAsDos); + /* In case of success set cache supported flag */ + if (NT_SUCCESS(Iosb.Status) && !NoIntermediateBuffering) + { + SetFlag(FileObject->Flags, FO_CACHE_SUPPORTED); + } + Irp->IoStatus.Information = Iosb.Information; /* Unlock VCB */ diff --git a/drivers/filesystems/fastfat_new/dir.c b/drivers/filesystems/fastfat_new/dir.c index ca04e84c191..991971545bf 100644 --- a/drivers/filesystems/fastfat_new/dir.c +++ b/drivers/filesystems/fastfat_new/dir.c @@ -82,9 +82,6 @@ FatCreateRootDcb(IN PFAT_IRP_CONTEXT IrpContext, ExInitializeFastMutex(&Dcb->HeaderMutex); FsRtlSetupAdvancedHeader(&Dcb->Header, &Dcb->HeaderMutex); - /* Initialize MCB */ - FsRtlInitializeLargeMcb(&Dcb->Mcb, NonPagedPool); - /* Set up first cluster field depending on FAT type */ if (TRUE/*FatIsFat32(Vcb)*/) { @@ -114,13 +111,6 @@ FatCreateRootDcb(IN PFAT_IRP_CONTEXT IrpContext, #endif UNIMPLEMENTED; } - - /* Initialize free dirent bitmap */ - RtlInitializeBitMap(&Dcb->Dcb.FreeBitmap, NULL, 0); - - /* Fill the dirent bitmap */ - DPRINT1("Filling the free dirent bitmap is missing\n"); - //FatCheckFreeDirentBitmap( IrpContext, Dcb ); } PFCB @@ -191,9 +181,98 @@ FatiOpenExistingDcb(IN PFAT_IRP_CONTEXT IrpContext, IN BOOLEAN DeleteOnClose) { IO_STATUS_BLOCK Iosb = {{0}}; + PCCB Ccb; - Iosb.Status = STATUS_NOT_IMPLEMENTED; - UNIMPLEMENTED; + /* Exclusively lock this FCB */ + FatAcquireExclusiveFcb(IrpContext, Dcb); + + /* Check if it's a delete-on-close of a root DCB */ + if (FatNodeType(Dcb) == FAT_NTC_ROOT_DCB && DeleteOnClose) + { + Iosb.Status = STATUS_CANNOT_DELETE; + + /* Release the lock and return */ + FatReleaseFcb(IrpContext, Dcb); + return Iosb; + } + + /*if (NoEaKnowledge && NodeType(Dcb) != FAT_NTC_ROOT_DCB && + !FatIsFat32(Vcb)) + { + UNIMPLEMENTED; + }*/ + + /* Check the create disposition and desired access */ + if ((CreateDisposition != FILE_OPEN) && + (CreateDisposition != FILE_OPEN_IF)) + { + Iosb.Status = STATUS_OBJECT_NAME_COLLISION; + + /* Release the lock and return */ + FatReleaseFcb(IrpContext, Dcb); + return Iosb; + } + +#if 0 + if (!FatCheckFileAccess(IrpContext, + Dcb->DirentFatFlags, + DesiredAccess)) + { + Iosb.Status = STATUS_ACCESS_DENIED; + try_return( Iosb ); + } +#endif + + /* If it's already opened - check share access */ + if (Dcb->OpenCount > 0) + { + Iosb.Status = IoCheckShareAccess(*DesiredAccess, + ShareAccess, + FileObject, + &Dcb->ShareAccess, + TRUE); + + if (!NT_SUCCESS(Iosb.Status)) + { + /* Release the lock and return */ + FatReleaseFcb(IrpContext, Dcb); + return Iosb; + } + } + else + { + IoSetShareAccess(*DesiredAccess, + ShareAccess, + FileObject, + &Dcb->ShareAccess); + } + + /* Set the file object */ + Ccb = FatCreateCcb(IrpContext); + FatSetFileObject(FileObject, + UserDirectoryOpen, + Dcb, + Ccb); + + /* Increase counters */ + Dcb->UncleanCount++; + Dcb->OpenCount++; + Vcb->OpenFileCount++; + if (IsFileObjectReadOnly(FileObject)) Vcb->ReadOnlyCount++; + + /* Set delete on close */ + if (DeleteOnClose) + SetFlag(Ccb->Flags, CCB_DELETE_ON_CLOSE); + + /* Clear delay close flag */ + ClearFlag(Dcb->State, FCB_STATE_DELAY_CLOSE); + + /* That's it */ + Iosb.Status = STATUS_SUCCESS; + Iosb.Information = FILE_OPENED; + + /* Release the lock */ + FatReleaseFcb(IrpContext, Dcb); return Iosb; } diff --git a/drivers/filesystems/fastfat_new/fastfat.c b/drivers/filesystems/fastfat_new/fastfat.c index 64736afc797..c469437b152 100644 --- a/drivers/filesystems/fastfat_new/fastfat.c +++ b/drivers/filesystems/fastfat_new/fastfat.c @@ -14,6 +14,7 @@ /* GLOBALS ******************************************************************/ FAT_GLOBAL_DATA FatGlobalData; +FAST_MUTEX FatCloseQueueMutex; /* FUNCTIONS ****************************************************************/ @@ -42,6 +43,7 @@ DriverEntry(PDRIVER_OBJECT DriverObject, RtlZeroMemory(&FatGlobalData, sizeof(FAT_GLOBAL_DATA)); FatGlobalData.DriverObject = DriverObject; FatGlobalData.DiskDeviceObject = DeviceObject; + FatGlobalData.SystemProcess = PsGetCurrentProcess(); /* Fill major function handlers */ DriverObject->MajorFunction[IRP_MJ_CLOSE] = FatClose; @@ -108,6 +110,12 @@ DriverEntry(PDRIVER_OBJECT DriverObject, /* Initialize synchronization resource for the global data */ ExInitializeResourceLite(&FatGlobalData.Resource); + /* Initialize queued close stuff */ + InitializeListHead(&FatGlobalData.AsyncCloseList); + InitializeListHead(&FatGlobalData.DelayedCloseList); + FatGlobalData.FatCloseItem = IoAllocateWorkItem(DeviceObject); + ExInitializeFastMutex(&FatCloseQueueMutex); + /* Initialize global VCB list */ InitializeListHead(&FatGlobalData.VcbListHead); @@ -317,7 +325,7 @@ FatDecodeFileObject(IN PFILE_OBJECT FileObject, TypeOfOpen = (*Ccb == NULL ? DirectoryFile : UserDirectoryOpen); - DPRINT1("Referencing a directory: %wZ\n", &(*FcbOrDcb)->FullFileName); + DPRINT("Referencing a directory: %wZ\n", &(*FcbOrDcb)->FullFileName); break; /* File */ @@ -510,4 +518,45 @@ FatMapUserBuffer(PIRP Irp) return MmGetSystemAddressForMdlSafe(Irp->MdlAddress, NormalPagePriority); } +BOOLEAN +NTAPI +FatIsTopLevelIrp(IN PIRP Irp) +{ + if (!IoGetTopLevelIrp()) + { + IoSetTopLevelIrp(Irp); + return TRUE; + } + + return FALSE; +} + +VOID +NTAPI +FatNotifyReportChange(IN PFAT_IRP_CONTEXT IrpContext, + IN PVCB Vcb, + IN PFCB Fcb, + IN ULONG Filter, + IN ULONG Action) +{ + if (Fcb->FullFileName.Buffer == NULL) + FatSetFullFileNameInFcb(IrpContext, Fcb); + + ASSERT(Fcb->FullFileName.Length != 0 ); + ASSERT(Fcb->FileNameLength != 0 ); + ASSERT(Fcb->FullFileName.Length > Fcb->FileNameLength ); + ASSERT(Fcb->FullFileName.Buffer[(Fcb->FullFileName.Length - Fcb->FileNameLength)/sizeof(WCHAR) - 1] == L'\\' ); + + FsRtlNotifyFullReportChange(Vcb->NotifySync, + &Vcb->NotifyList, + (PSTRING)&Fcb->FullFileName, + (USHORT)(Fcb->FullFileName.Length - + Fcb->FileNameLength), + NULL, + NULL, + Filter, + Action, + NULL); +} + /* EOF */ diff --git a/drivers/filesystems/fastfat_new/fastfat.h b/drivers/filesystems/fastfat_new/fastfat.h index a227a91f0ea..fbbf272c413 100644 --- a/drivers/filesystems/fastfat_new/fastfat.h +++ b/drivers/filesystems/fastfat_new/fastfat.h @@ -16,6 +16,7 @@ #define TAG_FCB 'BCFV' #define TAG_IRP 'PRIV' #define TAG_VFAT 'TAFV' +#define TAG_FSD_CLOSE_CONTEXT 'CLCV' /* Global resource acquire/release */ @@ -36,6 +37,34 @@ ExReleaseResourceLite(&(FatGlobalData.Resource)); \ } +#define FatIsFastIoPossible(FCB) ((BOOLEAN) \ + (((FCB)->Condition != FcbGood || !FsRtlOplockIsFastIoPossible(&(FCB)->Fcb.Oplock)) ? \ + FastIoIsNotPossible \ + : \ + (!FsRtlAreThereCurrentFileLocks(&(FCB)->Fcb.Lock) && \ + ((FCB)->OutstandingAsyncWrites == 0) && \ + !FlagOn((FCB)->Vcb->State, VCB_STATE_FLAG_WRITE_PROTECTED) ? \ + FastIoIsPossible \ + : \ + FastIoIsQuestionable \ + ) \ + ) \ +) + +#define IsFileObjectReadOnly(FO) (!((FO)->WriteAccess | (FO)->DeleteAccess)) +#define IsFileDeleted(FCB) (FlagOn((FCB)->State, FCB_STATE_DELETE_ON_CLOSE) && ((FCB)->UncleanCount == 0)) + +BOOLEAN +FORCEINLINE +FatIsIoRangeValid(IN LARGE_INTEGER Start, IN ULONG Length) +{ + /* Check if it's more than 32bits, or if the length causes 32bit overflow. + FAT-specific! */ + + return !(Start.HighPart || Start.LowPart + Length < Start.LowPart); +} + + NTSYSAPI NTSTATUS NTAPI @@ -67,6 +96,12 @@ FatReadStreamFile(PVCB Vcb, PBCB *Bcb, PVOID *Buffer); +BOOLEAN +NTAPI +FatCheckForDismount(IN PFAT_IRP_CONTEXT IrpContext, + PVCB Vcb, + IN BOOLEAN Force); + /* ----------------------------------------------------------- dir.c */ NTSTATUS NTAPI @@ -149,6 +184,8 @@ FatNoopRelease(IN PVOID Context); /* --------------------------------------------------------- fastfat.c */ +extern FAST_MUTEX FatCloseQueueMutex; + PFAT_IRP_CONTEXT NTAPI FatBuildIrpContext(PIRP Irp, BOOLEAN CanWait); @@ -205,6 +242,16 @@ FatSetFileObject(PFILE_OBJECT FileObject, PVOID FASTCALL FatMapUserBuffer(PIRP Irp); +BOOLEAN NTAPI +FatIsTopLevelIrp(IN PIRP Irp); + +VOID NTAPI +FatNotifyReportChange(IN PFAT_IRP_CONTEXT IrpContext, + IN PVCB Vcb, + IN PFCB Fcb, + IN ULONG Filter, + IN ULONG Action); + /* --------------------------------------------------------- fullfat.c */ FF_T_SINT32 @@ -284,6 +331,10 @@ FatCreateFcb( IN PFCB ParentDcb, IN FF_FILE *FileHandle); +VOID NTAPI +FatDeleteFcb(IN PFAT_IRP_CONTEXT IrpContext, + IN PFCB Fcb); + IO_STATUS_BLOCK NTAPI FatiOpenExistingFcb(IN PFAT_IRP_CONTEXT IrpContext, IN PFILE_OBJECT FileObject, @@ -319,6 +370,10 @@ FatRemoveNames(IN PFAT_IRP_CONTEXT IrpContext, PCCB NTAPI FatCreateCcb(); +VOID NTAPI +FatDeleteCcb(IN PFAT_IRP_CONTEXT IrpContext, + IN PCCB Ccb); + VOID NTAPI FatSetFullNameInFcb(PFCB Fcb, PUNICODE_STRING Name); diff --git a/drivers/filesystems/fastfat_new/fat.c b/drivers/filesystems/fastfat_new/fat.c index 06b601c48e8..a6ac9fa9995 100644 --- a/drivers/filesystems/fastfat_new/fat.c +++ b/drivers/filesystems/fastfat_new/fat.c @@ -163,6 +163,10 @@ FatInitializeVcb(IN PFAT_IRP_CONTEXT IrpContext, /* Initialize VCB's resource */ ExInitializeResourceLite(&Vcb->Resource); + /* Initialize close queue lists */ + InitializeListHead(&Vcb->AsyncCloseList); + InitializeListHead(&Vcb->DelayedCloseList); + /* Initialize CC */ CcInitializeCacheMap(Vcb->StreamFileObject, (PCC_FILE_SIZES)&Vcb->Header.AllocationSize, @@ -201,6 +205,10 @@ FatInitializeVcb(IN PFAT_IRP_CONTEXT IrpContext, goto FatInitializeVcbCleanup; } + /* Increase internal / residual open counter */ + InterlockedIncrement((PLONG)&(Vcb->InternalOpenCount)); + InterlockedIncrement((PLONG)&(Vcb->ResidualOpenCount)); + /* Set up notifications */ FsRtlNotifyInitializeSync(&Vcb->NotifySync); InitializeListHead(&Vcb->NotifyList); @@ -239,6 +247,9 @@ FatUninitializeVcb(IN PVCB Vcb) Vcb->StreamFileObject = NULL; } + /* Free ContextClose if it's not freed up already */ + if (Vcb->CloseContext) ExFreePool(Vcb->CloseContext); + /* Free notifications stuff */ FsRtlNotifyUninitializeSync(&Vcb->NotifySync); diff --git a/drivers/filesystems/fastfat_new/fatstruc.h b/drivers/filesystems/fastfat_new/fatstruc.h index dff04c59ec7..2ca2f54b8da 100644 --- a/drivers/filesystems/fastfat_new/fatstruc.h +++ b/drivers/filesystems/fastfat_new/fatstruc.h @@ -14,15 +14,17 @@ typedef FAT_NODE_TYPE *PFAT_NODE_TYPE; #define FatNodeType(Ptr) (*((PFAT_NODE_TYPE)(Ptr))) /* Node type codes */ -#define FAT_NTC_VCB (CSHORT) '00VF' -#define FAT_NTC_FCB (CSHORT) 'CF' -#define FAT_NTC_DCB (CSHORT) 'DF' -#define FAT_NTC_ROOT_DCB (CSHORT) 'RFD' -#define FAT_NTC_CCB (CSHORT) 'BCC' +#define FAT_NTC_VCB (CSHORT) '00VF' +#define FAT_NTC_FCB (CSHORT) 'CF' +#define FAT_NTC_DCB (CSHORT) 'DF' +#define FAT_NTC_ROOT_DCB (CSHORT) 'RFD' +#define FAT_NTC_CCB (CSHORT) 'BCC' +#define FAT_NTC_IRP_CONTEXT (CSHORT) 'PRI' typedef struct _FAT_GLOBAL_DATA { ERESOURCE Resource; + PEPROCESS SystemProcess; PDRIVER_OBJECT DriverObject; PDEVICE_OBJECT DiskDeviceObject; LIST_ENTRY VcbListHead; @@ -33,9 +35,20 @@ typedef struct _FAT_GLOBAL_DATA CACHE_MANAGER_CALLBACKS CacheMgrCallbacks; CACHE_MANAGER_CALLBACKS CacheMgrNoopCallbacks; BOOLEAN Win31FileSystem; + BOOLEAN ShutdownStarted; /* Jan 1, 1980 System Time */ LARGE_INTEGER DefaultFileTime; + /* Queued close */ + ULONG AsyncCloseCount; + ULONG DelayedCloseCount; + LIST_ENTRY AsyncCloseList; + LIST_ENTRY DelayedCloseList; + PIO_WORKITEM FatCloseItem; + + /* Various flags */ + BOOLEAN AsyncCloseActive; + /* FullFAT integration */ FF_IOMAN *Ioman; FF_ERROR FF_Error; @@ -82,6 +95,10 @@ typedef struct _FAT_PAGE_CONTEXT typedef struct _FAT_IRP_CONTEXT { + /* Type and size of this record (must be FAT_NTC_IRP_CONTEXT) */ + FAT_NODE_TYPE NodeTypeCode; + CSHORT NodeByteSize; + PIRP Irp; PDEVICE_OBJECT DeviceObject; UCHAR MajorFunction; @@ -132,10 +149,15 @@ typedef struct _FAT_METHODS { PFAT_SETFAT_VALUE_RUN_ROUTINE SetValueRun; } FAT_METHODS, *PFAT_METHODS; -#define VCB_STATE_FLAG_LOCKED 0x01 -#define VCB_STATE_FLAG_DIRTY 0x02 -#define VCB_STATE_MOUNTED_DIRTY 0x04 -#define VCB_STATE_CREATE_IN_PROGRESS 0x08 +#define VCB_STATE_FLAG_LOCKED 0x001 +#define VCB_STATE_FLAG_DIRTY 0x002 +#define VCB_STATE_MOUNTED_DIRTY 0x004 +#define VCB_STATE_CREATE_IN_PROGRESS 0x008 +#define VCB_STATE_FLAG_CLOSE_IN_PROGRESS 0x010 +#define VCB_STATE_FLAG_DELETED_FCB 0x020 +#define VCB_STATE_FLAG_DISMOUNT_IN_PROGRESS 0x040 +#define VCB_STATE_FLAG_DEFERRED_FLUSH 0x080 +#define VCB_STATE_FLAG_WRITE_PROTECTED 0x100 typedef enum _VCB_CONDITION { @@ -158,10 +180,13 @@ typedef struct _VCB ULONG State; VCB_CONDITION Condition; ERESOURCE Resource; + struct _CLOSE_CONTEXT *CloseContext; + LIST_ENTRY AsyncCloseList; + LIST_ENTRY DelayedCloseList; /* Direct volume access */ - ULONG DirectOpenCount; SHARE_ACCESS ShareAccess; + PFILE_OBJECT FileObjectWithVcbLocked; /* Notifications support */ PNOTIFY_SYNC NotifySync; @@ -186,8 +211,13 @@ typedef struct _VCB struct _FCB *RootDcb; /* Counters */ - ULONG MediaChangeCount; + ULONG DirectOpenCount; ULONG OpenFileCount; + ULONG ReadOnlyCount; + ULONG InternalOpenCount; + ULONG ResidualOpenCount; + ULONG DirectAccessOpenCount; + ULONG MediaChangeCount; /* FullFAT integration */ FF_IOMAN *Ioman; @@ -221,6 +251,18 @@ typedef struct _VOLUME_DEVICE_OBJECT VCB Vcb; /* Must be the last entry! */ }; } VOLUME_DEVICE_OBJECT, *PVOLUME_DEVICE_OBJECT; + +typedef enum _TYPE_OF_OPEN +{ + UnopenedFileObject, + UserFileOpen, + UserDirectoryOpen, + UserVolumeOpen, + VirtualVolumeFile, + DirectoryFile, + EaFile +} TYPE_OF_OPEN; + // // Short name always exists in FAT // @@ -252,6 +294,7 @@ typedef enum _FCB_CONDITION #define FCB_STATE_PAGEFILE 0x04 #define FCB_STATE_DELAY_CLOSE 0x08 #define FCB_STATE_TRUNCATE_ON_CLOSE 0x10 +#define FCB_STATE_DELETE_ON_CLOSE 0x20 typedef struct _FCB { @@ -281,8 +324,6 @@ typedef struct _FCB FCB_CONDITION Condition; /* Share access */ SHARE_ACCESS ShareAccess; - /* Mcb mapping Vbo->Lbo */ - LARGE_MCB Mcb; ULONG FirstCluster; /* Links into FCB Tree */ FCB_NAME_LINK ShortName; @@ -307,6 +348,8 @@ typedef struct _FCB PKEVENT OutstandingAsyncEvent; /* Counters */ ULONG OpenCount; + ULONG UncleanCount; + ULONG NonCachedUncleanCount; union { struct @@ -318,12 +361,11 @@ typedef struct _FCB struct { - /* A list of all FCBs/DCBs opened under this DCB */ - LIST_ENTRY ParentDcbList; + LIST_ENTRY ParentDcbList; /* A list of all FCBs/DCBs opened under this DCB */ + ULONG DirectoryFileOpenCount; /* Sector-based access to the dir */ + PFILE_OBJECT DirectoryFile; /* Directory data stream (just handy to have it). */ - PFILE_OBJECT StreamFileObject; - /* Bitmap to search for free dirents. */ - RTL_BITMAP FreeBitmap; + //PFILE_OBJECT StreamFileObject; /* Names */ PRTL_SPLAY_LINKS SplayLinksAnsi; PRTL_SPLAY_LINKS SplayLinksUnicode; @@ -368,6 +410,17 @@ typedef struct _FAT_FIND_DIRENT_CONTEXT BOOLEAN Valid8dot3Name; } FAT_FIND_DIRENT_CONTEXT, *PFAT_FIND_DIRENT_CONTEXT; +typedef struct _CLOSE_CONTEXT +{ + LIST_ENTRY GlobalLinks; + LIST_ENTRY VcbLinks; + + PVCB Vcb; + PFCB Fcb; + TYPE_OF_OPEN TypeOfOpen; + BOOLEAN Free; +} CLOSE_CONTEXT, *PCLOSE_CONTEXT; + typedef struct _CCB { CSHORT NodeTypeCode; @@ -377,19 +430,9 @@ typedef struct _CCB ULONG Entry; UNICODE_STRING SearchPattern; UCHAR Flags; + CLOSE_CONTEXT CloseContext; } CCB, *PCCB; -typedef enum _TYPE_OF_OPEN -{ - UnopenedFileObject, - UserFileOpen, - UserDirectoryOpen, - UserVolumeOpen, - VirtualVolumeFile, - DirectoryFile, - EaFile -} TYPE_OF_OPEN; - typedef enum _FILE_TIME_INDEX { FileCreationTime = 0, @@ -401,5 +444,10 @@ typedef enum _FILE_TIME_INDEX #define CCB_SEARCH_RETURN_SINGLE_ENTRY 0x01 #define CCB_SEARCH_PATTERN_LEGAL_8DOT3 0x02 #define CCB_SEARCH_PATTERN_HAS_WILD_CARD 0x04 -#define CCB_DASD_IO 0x10 +#define CCB_DASD_IO 0x08 +#define CCB_READ_ONLY 0x10 +#define CCB_DELETE_ON_CLOSE 0x20 +#define CCB_COMPLETE_DISMOUNT 0x40 +#define CCB_CLOSE_CONTEXT 0x80 + extern FAT_GLOBAL_DATA FatGlobalData; diff --git a/drivers/filesystems/fastfat_new/fcb.c b/drivers/filesystems/fastfat_new/fcb.c index cb02d53bb16..eeb12dd8c17 100644 --- a/drivers/filesystems/fastfat_new/fcb.c +++ b/drivers/filesystems/fastfat_new/fcb.c @@ -149,12 +149,74 @@ FatCreateFcb(IN PFAT_IRP_CONTEXT IrpContext, Fcb->Header.ValidDataLength.LowPart = FileHandle->Filesize; Fcb->FatHandle = FileHandle; + /* Initialize locks */ + FsRtlInitializeFileLock(&Fcb->Fcb.Lock, NULL, NULL); + FsRtlInitializeOplock(&Fcb->Fcb.Oplock); + /* Set names */ FatSetFcbNames(IrpContext, Fcb); return Fcb; } +VOID +NTAPI +FatDeleteFcb(IN PFAT_IRP_CONTEXT IrpContext, + IN PFCB Fcb) +{ + DPRINT("FatDeleteFcb %p\n", Fcb); + + if (Fcb->OpenCount != 0) + { + DPRINT1("Trying to delete FCB with OpenCount %d\n", Fcb->OpenCount); + ASSERT(FALSE); + } + + if ((Fcb->Header.NodeTypeCode == FAT_NTC_DCB) || + (Fcb->Header.NodeTypeCode == FAT_NTC_ROOT_DCB)) + { + /* Make sure it's a valid deletion */ + ASSERT(Fcb->Dcb.DirectoryFileOpenCount == 0); + ASSERT(IsListEmpty(&Fcb->Dcb.ParentDcbList)); + ASSERT(Fcb->Dcb.DirectoryFile == NULL); + } + else + { + /* Free locks */ + FsRtlUninitializeFileLock(&Fcb->Fcb.Lock); + FsRtlUninitializeOplock(&Fcb->Fcb.Oplock); + } + + /* Release any possible filter contexts */ + FsRtlTeardownPerStreamContexts(&Fcb->Header); + + /* Remove from parents queue */ + if (Fcb->Header.NodeTypeCode != FAT_NTC_ROOT_DCB) + { + RemoveEntryList(&(Fcb->ParentDcbLinks)); + } + + /* Free FullFAT handle */ + if (Fcb->FatHandle) FF_Close(Fcb->FatHandle); + + /* Remove from the splay table */ + if (FlagOn(Fcb->State, FCB_STATE_HAS_NAMES)) + FatRemoveNames(IrpContext, Fcb); + + /* Free file name buffers */ + if (Fcb->Header.NodeTypeCode != FAT_NTC_ROOT_DCB) + { + if (Fcb->FullFileName.Buffer) + ExFreePool(Fcb->FullFileName.Buffer); + } + + if (Fcb->ExactCaseLongName.Buffer) + ExFreePool(Fcb->ExactCaseLongName.Buffer); + + /* Free this FCB, finally */ + ExFreePool(Fcb); +} + PCCB NTAPI FatCreateCcb() @@ -172,6 +234,17 @@ FatCreateCcb() return Ccb; } +VOID +NTAPI +FatDeleteCcb(IN PFAT_IRP_CONTEXT IrpContext, + IN PCCB Ccb) +{ + // TODO: Deallocate CCB strings, if any + + /* Free the CCB */ + ExFreePool(Ccb); +} + IO_STATUS_BLOCK NTAPI FatiOpenExistingFcb(IN PFAT_IRP_CONTEXT IrpContext, @@ -443,8 +516,11 @@ SuccComplete: ClearFlag(Fcb->State, FCB_STATE_DELAY_CLOSE); /* Increase counters */ + Fcb->UncleanCount++; Fcb->OpenCount++; Vcb->OpenFileCount++; + if (IsFileObjectReadOnly(FileObject)) Vcb->ReadOnlyCount++; + if (FlagOn(FileObject->Flags, FO_NO_INTERMEDIATE_BUFFERING)) Fcb->NonCachedUncleanCount++; // TODO: Handle DeleteOnClose and OpenedAsDos by storing those flags in CCB } diff --git a/drivers/filesystems/fastfat_new/finfo.c b/drivers/filesystems/fastfat_new/finfo.c index d162abaa132..7e958348787 100644 --- a/drivers/filesystems/fastfat_new/finfo.c +++ b/drivers/filesystems/fastfat_new/finfo.c @@ -263,11 +263,7 @@ FatQueryInformation(PDEVICE_OBJECT DeviceObject, PIRP Irp) FsRtlEnterFileSystem(); /* Set Top Level IRP if not set */ - if (IoGetTopLevelIrp() == NULL) - { - IoSetTopLevelIrp(Irp); - TopLevel = TRUE; - } + TopLevel = FatIsTopLevelIrp(Irp); /* Build an irp context */ IrpContext = FatBuildIrpContext(Irp, CanWait); @@ -284,12 +280,394 @@ FatQueryInformation(PDEVICE_OBJECT DeviceObject, PIRP Irp) return Status; } +NTSTATUS +NTAPI +FatSetEndOfFileInfo(IN PFAT_IRP_CONTEXT IrpContext, + IN PIRP Irp, + IN PFILE_OBJECT FileObject, + IN PVCB Vcb, + IN PFCB Fcb) +{ + PFILE_END_OF_FILE_INFORMATION Buffer; + ULONG NewFileSize; + ULONG InitialFileSize; + ULONG InitialValidDataLength; + //ULONG InitialValidDataToDisk; + BOOLEAN CacheMapInitialized = FALSE; + BOOLEAN ResourceAcquired = FALSE; + NTSTATUS Status; + + Buffer = Irp->AssociatedIrp.SystemBuffer; + + if (FatNodeType(Fcb) != FAT_NTC_FCB) + { + /* Trying to change size of a dir */ + Status = STATUS_INVALID_DEVICE_REQUEST; + return Status; + } + + /* Validate new size */ + if (!FatIsIoRangeValid(Buffer->EndOfFile, 0)) + { + Status = STATUS_DISK_FULL; + return Status; + } + + NewFileSize = Buffer->EndOfFile.LowPart; + + /* Lookup allocation size if needed */ + if (Fcb->Header.AllocationSize.QuadPart == (LONGLONG)-1) + UNIMPLEMENTED;//FatLookupFileAllocationSize(IrpContext, Fcb); + + /* Cache the file if there is a data section */ + if (FileObject->SectionObjectPointer->DataSectionObject && + (FileObject->SectionObjectPointer->SharedCacheMap == NULL) && + !FlagOn(Irp->Flags, IRP_PAGING_IO)) + { + if (FlagOn(FileObject->Flags, FO_CLEANUP_COMPLETE)) + { + /* This is a really weird condition */ + UNIMPLEMENTED; + //Raise(STATUS_FILE_CLOSED); + } + + /* Initialize the cache map */ + CcInitializeCacheMap(FileObject, + (PCC_FILE_SIZES)&Fcb->Header.AllocationSize, + FALSE, + &FatGlobalData.CacheMgrCallbacks, + Fcb); + + CacheMapInitialized = TRUE; + } + + /* Lazy write case */ + if (IoGetCurrentIrpStackLocation(Irp)->Parameters.SetFile.AdvanceOnly) + { + if (!IsFileDeleted(Fcb) && + (Fcb->Condition == FcbGood)) + { + /* Clamp the new file size */ + if (NewFileSize >= Fcb->Header.FileSize.LowPart) + NewFileSize = Fcb->Header.FileSize.LowPart; + + ASSERT(NewFileSize <= Fcb->Header.AllocationSize.LowPart); + + /* Never reduce the file size here! */ + + // TODO: Actually change file size + DPRINT1("Actually changing file size is missing\n"); + + /* Notify about file size change */ + FatNotifyReportChange(IrpContext, + Vcb, + Fcb, + FILE_NOTIFY_CHANGE_SIZE, + FILE_ACTION_MODIFIED); + } + else + { + DPRINT1("Cannot set size on deleted file\n"); + } + + Status = STATUS_SUCCESS; + return Status; + } + + if ( NewFileSize > Fcb->Header.AllocationSize.LowPart ) + { + // TODO: Increase file size + DPRINT1("Actually changing file size is missing\n"); + } + + if (Fcb->Header.FileSize.LowPart != NewFileSize) + { + if (NewFileSize < Fcb->Header.FileSize.LowPart) + { + if (!MmCanFileBeTruncated(FileObject->SectionObjectPointer, + &Buffer->EndOfFile)) + { + Status = STATUS_USER_MAPPED_FILE; + + /* Free up resources if necessary */ + if (CacheMapInitialized) + CcUninitializeCacheMap(FileObject, NULL, NULL); + + return Status; + } + + ResourceAcquired = ExAcquireResourceExclusiveLite(Fcb->Header.PagingIoResource, TRUE); + } + + /* Set new file sizes */ + InitialFileSize = Fcb->Header.FileSize.LowPart; + InitialValidDataLength = Fcb->Header.ValidDataLength.LowPart; + //InitialValidDataToDisk = Fcb->ValidDataToDisk; + + Fcb->Header.FileSize.LowPart = NewFileSize; + + /* Adjust valid data length if new size is less than that */ + if (Fcb->Header.ValidDataLength.LowPart > NewFileSize) + Fcb->Header.ValidDataLength.LowPart = NewFileSize; + + //if (Fcb->ValidDataToDisk > NewFileSize) + // Fcb->ValidDataToDisk = NewFileSize; + + DPRINT1("New file size is 0x%08lx\n", NewFileSize); + + /* Update cache mapping */ + CcSetFileSizes(FileObject, + (PCC_FILE_SIZES)&Fcb->Header.AllocationSize); + + /* Notify about size change */ + FatNotifyReportChange(IrpContext, + Vcb, + Fcb, + FILE_NOTIFY_CHANGE_SIZE, + FILE_ACTION_MODIFIED); + + /* Set truncate on close flag */ + SetFlag(Fcb->State, FCB_STATE_TRUNCATE_ON_CLOSE); + } + + /* Set modified flag */ + FileObject->Flags |= FO_FILE_MODIFIED; + + /* Free up resources if necessary */ + if (CacheMapInitialized) + CcUninitializeCacheMap(FileObject, NULL, NULL); + + if (ResourceAcquired) + ExReleaseResourceLite(Fcb->Header.PagingIoResource); + + return STATUS_SUCCESS; +} + +NTSTATUS +NTAPI +FatiSetInformation(IN PFAT_IRP_CONTEXT IrpContext, + IN PIRP Irp) +{ + PFILE_OBJECT FileObject; + PIO_STACK_LOCATION IrpSp; + FILE_INFORMATION_CLASS InfoClass; + TYPE_OF_OPEN TypeOfOpen; + PVCB Vcb; + PFCB Fcb; + PCCB Ccb; + LONG Length; + PVOID Buffer; + NTSTATUS Status = STATUS_SUCCESS; + BOOLEAN VcbAcquired = FALSE, FcbAcquired = FALSE; + + /* Get IRP stack location */ + IrpSp = IoGetCurrentIrpStackLocation(Irp); + + /* Get the file object */ + FileObject = IrpSp->FileObject; + + /* Copy variables to something with shorter names */ + InfoClass = IrpSp->Parameters.SetFile.FileInformationClass; + Length = IrpSp->Parameters.SetFile.Length; + Buffer = Irp->AssociatedIrp.SystemBuffer; + + DPRINT("FatiSetInformation\n", 0); + DPRINT("\tIrp = %08lx\n", Irp); + DPRINT("\tLength = %08lx\n", Length); + DPRINT("\tFileInformationClass = %08lx\n", InfoClass); + DPRINT("\tFileObject = %08lx\n", IrpSp->Parameters.SetFile.FileObject); + DPRINT("\tBuffer = %08lx\n", Buffer); + + TypeOfOpen = FatDecodeFileObject(FileObject, &Vcb, &Fcb, &Ccb); + + DPRINT("Vcb %p, Fcb %p, Ccb %p, open type %d\n", Vcb, Fcb, Ccb, TypeOfOpen); + + switch (TypeOfOpen) + { + case UserVolumeOpen: + Status = STATUS_INVALID_PARAMETER; + /* Complete request and return status */ + FatCompleteRequest(IrpContext, Irp, Status); + return Status; + case UserFileOpen: + /* Check oplocks */ + if (!FlagOn(Fcb->State, FCB_STATE_PAGEFILE) && + ((InfoClass == FileEndOfFileInformation) || + (InfoClass == FileAllocationInformation))) + { + Status = FsRtlCheckOplock(&Fcb->Fcb.Oplock, + Irp, + IrpContext, + NULL, + NULL); + + if (Status != STATUS_SUCCESS) + { + /* Complete request and return status */ + FatCompleteRequest(IrpContext, Irp, Status); + return Status; + } + + /* Update Fast IO flag */ + Fcb->Header.IsFastIoPossible = FatIsFastIoPossible(Fcb); + } + break; + + case UserDirectoryOpen: + break; + + default: + Status = STATUS_INVALID_PARAMETER; + /* Complete request and return status */ + FatCompleteRequest(IrpContext, Irp, Status); + return Status; + } + + /* If it's a root DCB - fail */ + if (FatNodeType(Fcb) == FAT_NTC_ROOT_DCB) + { + if (InfoClass == FileDispositionInformation) + Status = STATUS_CANNOT_DELETE; + else + Status = STATUS_INVALID_PARAMETER; + + /* Complete request and return status */ + FatCompleteRequest(IrpContext, Irp, Status); + return Status; + } + + /* Acquire the volume lock if needed */ + if (InfoClass == FileDispositionInformation || + InfoClass == FileRenameInformation) + { + if (!FatAcquireExclusiveVcb(IrpContext, Vcb)) + { + UNIMPLEMENTED; + } + + VcbAcquired = TRUE; + } + + /* Acquire FCB lock */ + if (!FlagOn(Fcb->State, FCB_STATE_PAGEFILE)) + { + if (!FatAcquireExclusiveFcb(IrpContext, Fcb)) + { + UNIMPLEMENTED; + } + + FcbAcquired = TRUE; + } + + // TODO: VerifyFcb + + switch (InfoClass) + { + case FileBasicInformation: + //Status = FatSetBasicInfo(IrpContext, Irp, Fcb, Ccb); + DPRINT1("FileBasicInformation\n"); + break; + + case FileDispositionInformation: + if (FlagOn(Vcb->State, VCB_STATE_FLAG_DEFERRED_FLUSH) && + !FlagOn(IrpContext->Flags, IRPCONTEXT_CANWAIT)) + { + UNIMPLEMENTED; + } + else + { + //Status = FatSetDispositionInfo(IrpContext, Irp, FileObject, Fcb); + DPRINT1("FileDispositionInformation\n"); + } + + break; + + case FileRenameInformation: + if (!FlagOn(IrpContext->Flags, IRPCONTEXT_CANWAIT)) + { + UNIMPLEMENTED; + } + else + { + //Status = FatSetRenameInfo(IrpContext, Irp, Vcb, Fcb, Ccb); + DPRINT1("FileRenameInformation\n"); + + /* NOTE: Request must not be completed here! + That's why Irp/IrpContext are set to NULL */ + if (Status == STATUS_PENDING) + { + Irp = NULL; + IrpContext = NULL; + } + } + break; + + case FilePositionInformation: + //Status = FatSetPositionInfo(IrpContext, Irp, FileObject); + DPRINT1("FilePositionInformation\n"); + break; + + case FileLinkInformation: + Status = STATUS_INVALID_DEVICE_REQUEST; + break; + + case FileAllocationInformation: + //Status = FatSetAllocationInfo(IrpContext, Irp, Fcb, FileObject); + DPRINT1("FileAllocationInformation\n"); + break; + + case FileEndOfFileInformation: + Status = FatSetEndOfFileInfo(IrpContext, Irp, FileObject, Vcb, Fcb); + break; + + default: + Status = STATUS_INVALID_PARAMETER; + } + + /* Release locks */ + if (FcbAcquired) FatReleaseFcb(IrpContext, Fcb); + if (VcbAcquired) FatReleaseVcb(IrpContext, Vcb); + + /* Complete request and return status */ + FatCompleteRequest(IrpContext, Irp, Status); + return Status; +} + NTSTATUS NTAPI FatSetInformation(PDEVICE_OBJECT DeviceObject, PIRP Irp) { - DPRINT1("FatSetInformation()\n"); - return STATUS_NOT_IMPLEMENTED; + NTSTATUS Status; + BOOLEAN TopLevel, CanWait; + PFAT_IRP_CONTEXT IrpContext; + + CanWait = TRUE; + TopLevel = FALSE; + Status = STATUS_INVALID_DEVICE_REQUEST; + + /* Get CanWait flag */ + if (IoGetCurrentIrpStackLocation(Irp)->FileObject != NULL) + CanWait = IoIsOperationSynchronous(Irp); + + /* Enter FsRtl critical region */ + FsRtlEnterFileSystem(); + + /* Set Top Level IRP if not set */ + TopLevel = FatIsTopLevelIrp(Irp); + + /* Build an irp context */ + IrpContext = FatBuildIrpContext(Irp, CanWait); + + /* Perform the actual read */ + Status = FatiSetInformation(IrpContext, Irp); + + /* Restore top level Irp */ + if (TopLevel) IoSetTopLevelIrp(NULL); + + /* Leave FsRtl critical region */ + FsRtlExitFileSystem(); + + return Status; } /* EOF */ diff --git a/drivers/filesystems/fastfat_new/fsctl.c b/drivers/filesystems/fastfat_new/fsctl.c index 2953836cc45..540b417b8d8 100644 --- a/drivers/filesystems/fastfat_new/fsctl.c +++ b/drivers/filesystems/fastfat_new/fsctl.c @@ -13,13 +13,181 @@ /* FUNCTIONS ****************************************************************/ +NTSTATUS +NTAPI +FatOplockRequest(IN PFAT_IRP_CONTEXT IrpContext, + IN PIRP Irp) +{ + NTSTATUS Status; + DPRINT1("Oplock request!\n"); + + Status = STATUS_INVALID_DEVICE_REQUEST; + FatCompleteRequest(IrpContext, Irp, Status); + + return Status; +} + +NTSTATUS +NTAPI +FatMarkVolumeDirty(IN PFAT_IRP_CONTEXT IrpContext, + IN PIRP Irp) +{ + NTSTATUS Status; + DPRINT1("Marking volume as dirty\n"); + + Status = STATUS_SUCCESS; + FatCompleteRequest(IrpContext, Irp, Status); + + return Status; +} + NTSTATUS NTAPI FatUserFsCtrl(PFAT_IRP_CONTEXT IrpContext, PIRP Irp) { - DPRINT1("FatUserFsCtrl()\n"); - FatCompleteRequest(IrpContext, Irp, STATUS_INVALID_DEVICE_REQUEST); - return STATUS_INVALID_DEVICE_REQUEST; + PIO_STACK_LOCATION IrpSp; + NTSTATUS Status; + ULONG Code; + + /* Get current IRP stack location */ + IrpSp = IoGetCurrentIrpStackLocation(Irp); + + Code = IrpSp->Parameters.FileSystemControl.FsControlCode; + + /* Set the wait flag */ + if (Irp->RequestorMode != KernelMode && + (Code & 3) == METHOD_NEITHER) + { + SetFlag(IrpContext->Flags, IRPCONTEXT_CANWAIT); + } + + /* Branch according to the code */ + switch (Code) + { + case FSCTL_REQUEST_OPLOCK_LEVEL_1: + case FSCTL_REQUEST_OPLOCK_LEVEL_2: + case FSCTL_REQUEST_BATCH_OPLOCK: + case FSCTL_OPLOCK_BREAK_ACKNOWLEDGE: + case FSCTL_OPBATCH_ACK_CLOSE_PENDING: + case FSCTL_OPLOCK_BREAK_NOTIFY: + case FSCTL_OPLOCK_BREAK_ACK_NO_2: + case FSCTL_REQUEST_FILTER_OPLOCK : + Status = FatOplockRequest(IrpContext, Irp); + break; + + case FSCTL_LOCK_VOLUME: + //Status = FatLockVolume( IrpContext, Irp ); + DPRINT1("FSCTL_LOCK_VOLUME\n"); + Status = STATUS_INVALID_DEVICE_REQUEST; + FatCompleteRequest(IrpContext, Irp, Status); + break; + + case FSCTL_UNLOCK_VOLUME: + //Status = FatUnlockVolume( IrpContext, Irp ); + DPRINT1("FSCTL_UNLOCK_VOLUME\n"); + Status = STATUS_INVALID_DEVICE_REQUEST; + FatCompleteRequest(IrpContext, Irp, Status); + break; + + case FSCTL_DISMOUNT_VOLUME: + //Status = FatDismountVolume( IrpContext, Irp ); + DPRINT1("FSCTL_DISMOUNT_VOLUME\n"); + Status = STATUS_INVALID_DEVICE_REQUEST; + FatCompleteRequest(IrpContext, Irp, Status); + break; + + case FSCTL_MARK_VOLUME_DIRTY: + Status = FatMarkVolumeDirty(IrpContext, Irp); + break; + + case FSCTL_IS_VOLUME_DIRTY: + //Status = FatIsVolumeDirty( IrpContext, Irp ); + DPRINT1("FSCTL_IS_VOLUME_DIRTY\n"); + Status = STATUS_INVALID_DEVICE_REQUEST; + FatCompleteRequest(IrpContext, Irp, Status); + break; + + case FSCTL_IS_VOLUME_MOUNTED: + //Status = FatIsVolumeMounted( IrpContext, Irp ); + DPRINT1("FSCTL_IS_VOLUME_MOUNTED\n"); + Status = STATUS_INVALID_DEVICE_REQUEST; + FatCompleteRequest(IrpContext, Irp, Status); + break; + + case FSCTL_IS_PATHNAME_VALID: + //Status = FatIsPathnameValid( IrpContext, Irp ); + DPRINT1("FSCTL_IS_PATHNAME_VALID\n"); + Status = STATUS_INVALID_DEVICE_REQUEST; + FatCompleteRequest(IrpContext, Irp, Status); + break; + + case FSCTL_QUERY_RETRIEVAL_POINTERS: + //Status = FatQueryRetrievalPointers( IrpContext, Irp ); + DPRINT1("FSCTL_QUERY_RETRIEVAL_POINTERS\n"); + Status = STATUS_INVALID_DEVICE_REQUEST; + FatCompleteRequest(IrpContext, Irp, Status); + break; + + case FSCTL_QUERY_FAT_BPB: + //Status = FatQueryBpb( IrpContext, Irp ); + DPRINT1("FSCTL_QUERY_FAT_BPB\n"); + Status = STATUS_INVALID_DEVICE_REQUEST; + FatCompleteRequest(IrpContext, Irp, Status); + break; + + case FSCTL_FILESYSTEM_GET_STATISTICS: + //Status = FatGetStatistics( IrpContext, Irp ); + DPRINT1("FSCTL_FILESYSTEM_GET_STATISTICS\n"); + Status = STATUS_INVALID_DEVICE_REQUEST; + FatCompleteRequest(IrpContext, Irp, Status); + break; + + case FSCTL_GET_VOLUME_BITMAP: + //Status = FatGetVolumeBitmap( IrpContext, Irp ); + DPRINT1("FSCTL_GET_VOLUME_BITMAP\n"); + Status = STATUS_INVALID_DEVICE_REQUEST; + FatCompleteRequest(IrpContext, Irp, Status); + break; + + case FSCTL_GET_RETRIEVAL_POINTERS: + //Status = FatGetRetrievalPointers( IrpContext, Irp ); + DPRINT1("FSCTL_GET_RETRIEVAL_POINTERS\n"); + Status = STATUS_INVALID_DEVICE_REQUEST; + FatCompleteRequest(IrpContext, Irp, Status); + break; + + case FSCTL_MOVE_FILE: + //Status = FatMoveFile( IrpContext, Irp ); + DPRINT1("FSCTL_MOVE_FILE\n"); + Status = STATUS_INVALID_DEVICE_REQUEST; + FatCompleteRequest(IrpContext, Irp, Status); + break; + + case FSCTL_ALLOW_EXTENDED_DASD_IO: + //Status = FatAllowExtendedDasdIo( IrpContext, Irp ); + DPRINT1("FSCTL_ALLOW_EXTENDED_DASD_IO\n"); + Status = STATUS_INVALID_DEVICE_REQUEST; + FatCompleteRequest(IrpContext, Irp, Status); + break; + + default: + DPRINT("FatUserFsCtrl(), unhandled fs control code 0x%x\n", Code); + Status = STATUS_INVALID_DEVICE_REQUEST; + FatCompleteRequest(IrpContext, Irp, Status); + } + + //(((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method)) + + // 9c040 + // 1 1 0 0 0 + // 6 4 8 4 0 + // 10011100000001000000 + // DT = 1001 = 9 + // Access = 11 = 3 + // Function = 10000 = 16 + // Method = 0 + + return Status; } NTSTATUS diff --git a/drivers/filesystems/fastfat_new/lock.c b/drivers/filesystems/fastfat_new/lock.c index a081c4b29dd..509aa50b81c 100644 --- a/drivers/filesystems/fastfat_new/lock.c +++ b/drivers/filesystems/fastfat_new/lock.c @@ -13,12 +13,98 @@ /* FUNCTIONS ****************************************************************/ +NTSTATUS +NTAPI +FatiLockControl(PFAT_IRP_CONTEXT IrpContext, PIRP Irp) +{ + PIO_STACK_LOCATION IrpSp; + TYPE_OF_OPEN TypeOfOpen; + PVCB Vcb; + PFCB Fcb; + PCCB Ccb; + NTSTATUS Status; + + /* Get IRP stack location */ + IrpSp = IoGetCurrentIrpStackLocation(Irp); + + /* Determine type of open */ + TypeOfOpen = FatDecodeFileObject(IrpSp->FileObject, &Vcb, &Fcb, &Ccb); + + /* Only user file open is allowed */ + if (TypeOfOpen != UserFileOpen) + { + FatCompleteRequest(IrpContext, Irp, STATUS_INVALID_PARAMETER); + return STATUS_INVALID_PARAMETER; + } + + /* Acquire shared FCB lock */ + if (!FatAcquireSharedFcb(IrpContext, Fcb)) + { + UNIMPLEMENTED; + //Status = FatFsdPostRequest(IrpContext, Irp); + Status = STATUS_NOT_IMPLEMENTED; + return Status; + } + + /* Check oplock state */ + Status = FsRtlCheckOplock(&Fcb->Fcb.Oplock, + Irp, + IrpContext, + FatOplockComplete, + NULL); + + if (Status != STATUS_SUCCESS) + { + /* Release FCB lock */ + FatReleaseFcb(IrpContext, Fcb); + + return Status; + } + + /* Process the lock */ + Status = FsRtlProcessFileLock(&Fcb->Fcb.Lock, Irp, NULL); + + /* Update Fast I/O state */ + Fcb->Header.IsFastIoPossible = FatIsFastIoPossible(Fcb); + + /* Complete the request */ + FatCompleteRequest(IrpContext, NULL, 0); + + /* Release FCB lock */ + FatReleaseFcb(IrpContext, Fcb); + + return Status; +} + NTSTATUS NTAPI FatLockControl(PDEVICE_OBJECT DeviceObject, PIRP Irp) { + PFAT_IRP_CONTEXT IrpContext; + NTSTATUS Status; + BOOLEAN TopLevel; + DPRINT1("FatLockControl()\n"); - return STATUS_NOT_IMPLEMENTED; + + /* Enter FsRtl critical region */ + FsRtlEnterFileSystem(); + + /* Set Top Level IRP if not set */ + TopLevel = FatIsTopLevelIrp(Irp); + + /* Build an irp context */ + IrpContext = FatBuildIrpContext(Irp, IoIsOperationSynchronous(Irp)); + + /* Call internal function */ + Status = FatiLockControl(IrpContext, Irp); + + /* Reset Top Level IRP */ + if (TopLevel) IoSetTopLevelIrp(NULL); + + /* Leave FsRtl critical region */ + FsRtlExitFileSystem(); + + return Status; } VOID diff --git a/drivers/filesystems/fastfat_new/rw.c b/drivers/filesystems/fastfat_new/rw.c index a4b887b0c38..cdaea2b52a3 100644 --- a/drivers/filesystems/fastfat_new/rw.c +++ b/drivers/filesystems/fastfat_new/rw.c @@ -91,11 +91,7 @@ FatRead(PDEVICE_OBJECT DeviceObject, PIRP Irp) if (DeviceObject != FatGlobalData.DiskDeviceObject) { /* Set Top Level IRP if not set */ - if (IoGetTopLevelIrp() == NULL) - { - IoSetTopLevelIrp(Irp); - TopLevel = TRUE; - } + TopLevel = FatIsTopLevelIrp(Irp); /* Build an irp context */ IrpContext = FatBuildIrpContext(Irp, CanWait); diff --git a/drivers/filesystems/fastfat_new/volume.c b/drivers/filesystems/fastfat_new/volume.c index 49a67b0a450..a6a30abed38 100644 --- a/drivers/filesystems/fastfat_new/volume.c +++ b/drivers/filesystems/fastfat_new/volume.c @@ -8,7 +8,7 @@ /* INCLUDES *****************************************************************/ -//#define NDEBUG +#define NDEBUG #include "fastfat.h" /* FUNCTIONS ****************************************************************/ @@ -77,12 +77,31 @@ FatiQueryFsSizeInfo(PVCB Vcb, Buffer->SectorsPerAllocationUnit = Vcb->Bpb.SectorsPerCluster; Buffer->BytesPerSector = Vcb->Bpb.BytesPerSector; - DPRINT1("Total %d, free %d, SPC %d, BPS %d\n", Partition->FreeClusterCount, - Partition->NumClusters, Vcb->Bpb.SectorsPerCluster, Vcb->Bpb.BytesPerSector); + DPRINT1("Total %d, free %d, SPC %d, BPS %d\n", Partition->NumClusters, + Partition->FreeClusterCount, Vcb->Bpb.SectorsPerCluster, Vcb->Bpb.BytesPerSector); return Status; } +NTSTATUS +NTAPI +FatiQueryFsDeviceInfo(PVCB Vcb, + PFILE_FS_DEVICE_INFORMATION Buffer, + PLONG Length) +{ + /* Deduct the minimum written length */ + *Length -= sizeof(FILE_FS_DEVICE_INFORMATION); + + /* Zero it */ + RtlZeroMemory(Buffer, sizeof(FILE_FS_DEVICE_INFORMATION)); + + /* Set values */ + Buffer->DeviceType = FILE_DEVICE_DISK; + Buffer->Characteristics = Vcb->TargetDeviceObject->Characteristics; + + return STATUS_SUCCESS; +} + NTSTATUS NTAPI FatiQueryVolumeInfo(PFAT_IRP_CONTEXT IrpContext, PIRP Irp) @@ -135,13 +154,28 @@ FatiQueryVolumeInfo(PFAT_IRP_CONTEXT IrpContext, PIRP Irp) /* Call FsVolumeInfo handler */ Status = FatiQueryFsVolumeInfo(Vcb, Buffer, &Length); break; + case FileFsSizeInformation: /* Call FsVolumeInfo handler */ Status = FatiQueryFsSizeInfo(Vcb, Buffer, &Length); break; - default: - DPRINT1("Volume information class %d is not supported!\n", InfoClass); + + case FileFsDeviceInformation: + Status = FatiQueryFsDeviceInfo(Vcb, Buffer, &Length); + break; + + case FileFsAttributeInformation: UNIMPLEMENTED; + //Status = FatiQueryFsAttributeInfo(IrpContext, Vcb, Buffer, &Length); + break; + + case FileFsFullSizeInformation: + UNIMPLEMENTED; + //Status = FatiQueryFsFullSizeInfo(IrpContext, Vcb, Buffer, &Length); + break; + + default: + Status = STATUS_INVALID_PARAMETER; } /* Set IoStatus.Information to amount of filled bytes */ @@ -175,11 +209,7 @@ FatQueryVolumeInfo(PDEVICE_OBJECT DeviceObject, PIRP Irp) FsRtlEnterFileSystem(); /* Set Top Level IRP if not set */ - if (IoGetTopLevelIrp() == NULL) - { - IoSetTopLevelIrp(Irp); - TopLevel = TRUE; - } + TopLevel = FatIsTopLevelIrp(Irp); /* Build an irp context */ IrpContext = FatBuildIrpContext(Irp, CanWait); @@ -228,4 +258,14 @@ FatReadStreamFile(PVCB Vcb, } } +BOOLEAN +NTAPI +FatCheckForDismount(IN PFAT_IRP_CONTEXT IrpContext, + PVCB Vcb, + IN BOOLEAN Force) +{ + /* We never allow deletion of a volume for now */ + return FALSE; +} + /* EOF */ diff --git a/drivers/input/i8042prt/mouse.c b/drivers/input/i8042prt/mouse.c index 11838134667..efa73093244 100644 --- a/drivers/input/i8042prt/mouse.c +++ b/drivers/input/i8042prt/mouse.c @@ -49,7 +49,7 @@ i8042MouQueuePacket( DeviceExtension->MouseComplete = TRUE; DeviceExtension->MouseInBuffer++; - if (DeviceExtension->MouseInBuffer > DeviceExtension->Common.PortDeviceExtension->Settings.MouseDataQueueSize) + if (DeviceExtension->MouseInBuffer >= DeviceExtension->Common.PortDeviceExtension->Settings.MouseDataQueueSize) { WARN_(I8042PRT, "Mouse buffer overflow\n"); DeviceExtension->MouseInBuffer--; diff --git a/drivers/network/afd/afd/read.c b/drivers/network/afd/afd/read.c index f98fd17b3aa..91b20b2390e 100644 --- a/drivers/network/afd/afd/read.c +++ b/drivers/network/afd/afd/read.c @@ -26,8 +26,28 @@ #include "tdiconn.h" #include "debug.h" -static NTSTATUS RefillSocketBuffer( PAFD_FCB FCB ) { - NTSTATUS Status = STATUS_PENDING; +static VOID HandleEOFOnIrp( PAFD_FCB FCB, NTSTATUS Status, ULONG_PTR Information ) +{ + if( ( Status == STATUS_SUCCESS && !Information ) || + ( !NT_SUCCESS( Status ) ) ) + { + /* The socket has been closed */ + FCB->PollState |= AFD_EVENT_DISCONNECT; + FCB->PollStatus[FD_CLOSE_BIT] = Status; + + PollReeval( FCB->DeviceExt, FCB->FileObject ); + } +} + +static BOOLEAN CantReadMore( PAFD_FCB FCB ) { + UINT BytesAvailable = FCB->Recv.Content - FCB->Recv.BytesUsed; + + return !BytesAvailable && + (FCB->PollState & (AFD_EVENT_CLOSE | AFD_EVENT_DISCONNECT)); +} + +static VOID RefillSocketBuffer( PAFD_FCB FCB ) { + NTSTATUS Status; if( !FCB->ReceiveIrp.InFlightRequest ) { AFD_DbgPrint(MID_TRACE,("Replenishing buffer\n")); @@ -41,57 +61,37 @@ static NTSTATUS RefillSocketBuffer( PAFD_FCB FCB ) { ReceiveComplete, FCB ); - if( ( Status == STATUS_SUCCESS && !FCB->ReceiveIrp.Iosb.Information ) || - ( !NT_SUCCESS( Status ) ) ) - { - /* The socket has been closed */ - FCB->PollState |= AFD_EVENT_DISCONNECT; - FCB->PollStatus[FD_CLOSE_BIT] = Status; - FCB->Overread = TRUE; - Status = STATUS_FILE_CLOSED; - } - else if( Status == STATUS_SUCCESS ) + if( Status == STATUS_SUCCESS && FCB->ReceiveIrp.Iosb.Information ) { FCB->Recv.Content = FCB->ReceiveIrp.Iosb.Information; FCB->PollState |= AFD_EVENT_RECEIVE; FCB->PollStatus[FD_READ_BIT] = STATUS_SUCCESS; + + PollReeval( FCB->DeviceExt, FCB->FileObject ); } - PollReeval( FCB->DeviceExt, FCB->FileObject ); + else + { + /* Check for EOF */ + HandleEOFOnIrp(FCB, Status, FCB->ReceiveIrp.Iosb.Information); + } } - - return Status; } static NTSTATUS TryToSatisfyRecvRequestFromBuffer( PAFD_FCB FCB, PAFD_RECV_INFO RecvReq, PUINT TotalBytesCopied ) { - UINT i, BytesToCopy = 0, + UINT i, BytesToCopy = 0, FcbBytesCopied = FCB->Recv.BytesUsed, BytesAvailable = FCB->Recv.Content - FCB->Recv.BytesUsed; PAFD_MAPBUF Map; - NTSTATUS Status; *TotalBytesCopied = 0; AFD_DbgPrint(MID_TRACE,("Called, BytesAvailable = %d\n", BytesAvailable)); - if( FCB->Overread ) return STATUS_FILE_CLOSED; - if( !BytesAvailable ) { - FCB->Recv.Content = FCB->Recv.BytesUsed = 0; - Status = RefillSocketBuffer( FCB ); - if ( Status != STATUS_SUCCESS ) - return Status; - - /* If RefillSocketBuffer returns STATUS_SUCCESS, we're good to go - * If RefillSocketBuffer returns STATUS_PENDING, then it's waiting on the transport for data - * If RefillSocketBuffer returns STATUS_FILE_CLOSED, then the connection was terminated - */ - - /* Recalculate BytesAvailable based on new data */ - BytesAvailable = FCB->Recv.Content - FCB->Recv.BytesUsed; - ASSERT(BytesAvailable); - } + if( CantReadMore(FCB) ) return STATUS_SUCCESS; + if( !BytesAvailable ) return STATUS_PENDING; Map = (PAFD_MAPBUF)(RecvReq->BufferArray + RecvReq->BufferCount); @@ -115,17 +115,17 @@ static NTSTATUS TryToSatisfyRecvRequestFromBuffer( PAFD_FCB FCB, BytesToCopy)); RtlCopyMemory( Map[i].BufferAddress, - FCB->Recv.Window + FCB->Recv.BytesUsed, + FCB->Recv.Window + FcbBytesCopied, BytesToCopy ); MmUnmapLockedPages( Map[i].BufferAddress, Map[i].Mdl ); *TotalBytesCopied += BytesToCopy; + FcbBytesCopied += BytesToCopy; + BytesAvailable -= BytesToCopy; - if (!(RecvReq->TdiFlags & TDI_RECEIVE_PEEK)) { + if (!(RecvReq->TdiFlags & TDI_RECEIVE_PEEK)) FCB->Recv.BytesUsed += BytesToCopy; - BytesAvailable -= BytesToCopy; - } } } @@ -156,37 +156,74 @@ static NTSTATUS ReceiveActivity( PAFD_FCB FCB, PIRP Irp ) { AFD_DbgPrint(MID_TRACE,("FCB %x Receive data waiting %d\n", FCB, FCB->Recv.Content)); - /* Try to clear some requests */ - while( !IsListEmpty( &FCB->PendingIrpList[FUNCTION_RECV] ) ) { - NextIrpEntry = RemoveHeadList(&FCB->PendingIrpList[FUNCTION_RECV]); - NextIrp = CONTAINING_RECORD(NextIrpEntry, IRP, Tail.Overlay.ListEntry); - NextIrpSp = IoGetCurrentIrpStackLocation( NextIrp ); - RecvReq = NextIrpSp->Parameters.DeviceIoControl.Type3InputBuffer; - - AFD_DbgPrint(MID_TRACE,("RecvReq @ %x\n", RecvReq)); - - Status = TryToSatisfyRecvRequestFromBuffer( FCB, RecvReq, &TotalBytesCopied ); - - if( Status == STATUS_PENDING ) { - AFD_DbgPrint(MID_TRACE,("Ran out of data for %x\n", NextIrp)); - InsertHeadList(&FCB->PendingIrpList[FUNCTION_RECV], - &NextIrp->Tail.Overlay.ListEntry); - break; - } else { - AFD_DbgPrint(MID_TRACE,("Completing recv %x (%d)\n", NextIrp, - TotalBytesCopied)); - UnlockBuffers( RecvReq->BufferArray, - RecvReq->BufferCount, FALSE ); - NextIrp->IoStatus.Status = Status; - NextIrp->IoStatus.Information = TotalBytesCopied; - if( NextIrp == Irp ) { - RetStatus = Status; - RetBytesCopied = TotalBytesCopied; + if( CantReadMore( FCB ) ) { + /* Success here means that we got an EOF. Complete a pending read + * with zero bytes if we haven't yet overread, then kill the others. + */ + while( !IsListEmpty( &FCB->PendingIrpList[FUNCTION_RECV] ) ) { + NextIrpEntry = + RemoveHeadList(&FCB->PendingIrpList[FUNCTION_RECV]); + NextIrp = + CONTAINING_RECORD(NextIrpEntry, IRP, Tail.Overlay.ListEntry); + NextIrpSp = IoGetCurrentIrpStackLocation( NextIrp ); + RecvReq = NextIrpSp->Parameters.DeviceIoControl.Type3InputBuffer; + + AFD_DbgPrint(MID_TRACE,("Completing recv %x (%d)\n", NextIrp, + TotalBytesCopied)); + UnlockBuffers( RecvReq->BufferArray, + RecvReq->BufferCount, FALSE ); + Status = NextIrp->IoStatus.Status = + FCB->Overread ? STATUS_END_OF_FILE : STATUS_SUCCESS; + NextIrp->IoStatus.Information = 0; + if( NextIrp == Irp ) RetStatus = Status; + if( NextIrp->MdlAddress ) UnlockRequest( NextIrp, IoGetCurrentIrpStackLocation( NextIrp ) ); + (void)IoSetCancelRoutine(NextIrp, NULL); + IoCompleteRequest( NextIrp, IO_NETWORK_INCREMENT ); + FCB->Overread = TRUE; + } + } else { + /* Kick the user that receive would be possible now */ + /* XXX Not implemented yet */ + + AFD_DbgPrint(MID_TRACE,("FCB %x Receive data waiting %d\n", + FCB, FCB->Recv.Content)); + /*OskitDumpBuffer( FCB->Recv.Window, FCB->Recv.Content );*/ + + /* Try to clear some requests */ + while( !IsListEmpty( &FCB->PendingIrpList[FUNCTION_RECV] ) ) { + NextIrpEntry = + RemoveHeadList(&FCB->PendingIrpList[FUNCTION_RECV]); + NextIrp = + CONTAINING_RECORD(NextIrpEntry, IRP, Tail.Overlay.ListEntry); + NextIrpSp = IoGetCurrentIrpStackLocation( NextIrp ); + RecvReq = NextIrpSp->Parameters.DeviceIoControl.Type3InputBuffer; + + AFD_DbgPrint(MID_TRACE,("RecvReq @ %x\n", RecvReq)); + + Status = TryToSatisfyRecvRequestFromBuffer + ( FCB, RecvReq, &TotalBytesCopied ); + + if( Status == STATUS_PENDING ) { + AFD_DbgPrint(MID_TRACE,("Ran out of data for %x\n", NextIrp)); + InsertHeadList(&FCB->PendingIrpList[FUNCTION_RECV], + &NextIrp->Tail.Overlay.ListEntry); + break; + } else { + AFD_DbgPrint(MID_TRACE,("Completing recv %x (%d)\n", NextIrp, + TotalBytesCopied)); + UnlockBuffers( RecvReq->BufferArray, + RecvReq->BufferCount, FALSE ); + NextIrp->IoStatus.Status = Status; + NextIrp->IoStatus.Information = TotalBytesCopied; + if( NextIrp == Irp ) { + RetStatus = Status; + RetBytesCopied = TotalBytesCopied; + } + if( NextIrp->MdlAddress ) UnlockRequest( NextIrp, IoGetCurrentIrpStackLocation( NextIrp ) ); + (void)IoSetCancelRoutine(NextIrp, NULL); + IoCompleteRequest( NextIrp, IO_NETWORK_INCREMENT ); + } } - if( NextIrp->MdlAddress ) UnlockRequest( NextIrp, IoGetCurrentIrpStackLocation( NextIrp ) ); - (void)IoSetCancelRoutine(NextIrp, NULL); - IoCompleteRequest( NextIrp, IO_NETWORK_INCREMENT ); - } } if( FCB->Recv.Content ) { @@ -249,6 +286,8 @@ NTSTATUS NTAPI ReceiveComplete SocketStateUnlock( FCB ); return STATUS_INVALID_PARAMETER; } + + HandleEOFOnIrp( FCB, Irp->IoStatus.Status, Irp->IoStatus.Information ); ReceiveActivity( FCB, NULL ); diff --git a/drivers/network/ndis/include/miniport.h b/drivers/network/ndis/include/miniport.h index 7dd615db1bf..ad4de2a81e3 100644 --- a/drivers/network/ndis/include/miniport.h +++ b/drivers/network/ndis/include/miniport.h @@ -27,7 +27,7 @@ typedef struct _NDIS_M_DRIVER_BLOCK { PDRIVER_OBJECT DriverObject; /* Driver object of miniport */ LIST_ENTRY DeviceList; /* Adapters created by miniport */ PUNICODE_STRING RegistryPath; /* SCM Registry key */ -#if !defined(_MSC_VER) && defined(__NDIS_H) +#if !defined(_MSC_VER) && defined(_NDIS_) } NDIS_M_DRIVER_BLOCK_COMPATIBILITY_HACK_DONT_USE; #else } NDIS_M_DRIVER_BLOCK, *PNDIS_M_DRIVER_BLOCK; diff --git a/drivers/network/ndis/ndis/time.c b/drivers/network/ndis/ndis/time.c index eb5d00579c4..1f4c2b05573 100644 --- a/drivers/network/ndis/ndis/time.c +++ b/drivers/network/ndis/ndis/time.c @@ -247,16 +247,21 @@ NdisMSetPeriodicTimer( /* relative delays are negative, absolute are positive; resolution is 100ns */ Timeout.QuadPart = Int32x32To64(MillisecondsPeriod, -10000); - + + /* Lock the miniport block */ KeAcquireSpinLock(&Timer->Miniport->Lock, &OldIrql); - /* If KeSetTimer(Ex) returns FALSE then the timer is not in the system's queue (and not in ours either) */ - if (!KeSetTimerEx(&Timer->Timer, Timeout, MillisecondsPeriod, &Timer->Dpc)) - { - /* Add the timer at the head of the timer queue */ - Timer->NextDeferredTimer = Timer->Miniport->TimerQueue; - Timer->Miniport->TimerQueue = Timer; - } + + /* Attempt to dequeue the timer */ + DequeueMiniportTimer(Timer); + + /* Add the timer at the head of the timer queue */ + Timer->NextDeferredTimer = Timer->Miniport->TimerQueue; + Timer->Miniport->TimerQueue = Timer; + + /* Unlock the miniport block */ KeReleaseSpinLock(&Timer->Miniport->Lock, OldIrql); + + KeSetTimerEx(&Timer->Timer, Timeout, MillisecondsPeriod, &Timer->Dpc); } @@ -288,15 +293,20 @@ NdisMSetTimer( /* relative delays are negative, absolute are positive; resolution is 100ns */ Timeout.QuadPart = Int32x32To64(MillisecondsToDelay, -10000); + /* Lock the miniport block */ KeAcquireSpinLock(&Timer->Miniport->Lock, &OldIrql); - /* If KeSetTimer(Ex) returns FALSE then the timer is not in the system's queue (and not in ours either) */ - if (!KeSetTimer(&Timer->Timer, Timeout, &Timer->Dpc)) - { - /* Add the timer at the head of the timer queue */ - Timer->NextDeferredTimer = Timer->Miniport->TimerQueue; - Timer->Miniport->TimerQueue = Timer; - } + + /* Attempt to dequeue the timer */ + DequeueMiniportTimer(Timer); + + /* Add the timer at the head of the timer queue */ + Timer->NextDeferredTimer = Timer->Miniport->TimerQueue; + Timer->Miniport->TimerQueue = Timer; + + /* Unlock the miniport block */ KeReleaseSpinLock(&Timer->Miniport->Lock, OldIrql); + + KeSetTimer(&Timer->Timer, Timeout, &Timer->Dpc); } diff --git a/drivers/network/tcpip/datalink/lan.c b/drivers/network/tcpip/datalink/lan.c index 2d449550bb0..3883235b6a0 100644 --- a/drivers/network/tcpip/datalink/lan.c +++ b/drivers/network/tcpip/datalink/lan.c @@ -569,9 +569,7 @@ VOID NTAPI ProtocolBindAdapter( * SystemSpecific1: Pointer to a registry path with protocol-specific configuration information * SystemSpecific2: Unused & must not be touched */ -{ - /* XXX confirm that this is still true, or re-word the following comment */ - /* we get to ignore BindContext because we will never pend an operation with NDIS */ +{ TI_DbgPrint(DEBUG_DATALINK, ("Called with registry path %wZ for %wZ\n", SystemSpecific1, DeviceName)); *Status = LANRegisterAdapter(DeviceName, SystemSpecific1); } @@ -952,10 +950,13 @@ BOOLEAN BindAdapter( OBJECT_ATTRIBUTES ObjectAttributes; HANDLE ParameterHandle; PKEY_VALUE_PARTIAL_INFORMATION KeyValueInfo; + WCHAR Buffer[150]; UNICODE_STRING IPAddress = RTL_CONSTANT_STRING(L"IPAddress"); UNICODE_STRING Netmask = RTL_CONSTANT_STRING(L"SubnetMask"); UNICODE_STRING Gateway = RTL_CONSTANT_STRING(L"DefaultGateway"); UNICODE_STRING EnableDhcp = RTL_CONSTANT_STRING(L"EnableDHCP"); + UNICODE_STRING Prefix = RTL_CONSTANT_STRING(L"\\Registry\\Machine\\SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\"); + UNICODE_STRING TcpipRegistryPath; UNICODE_STRING RegistryDataU; ANSI_STRING RegistryDataA; @@ -1009,9 +1010,19 @@ BOOLEAN BindAdapter( TI_DbgPrint(DEBUG_DATALINK,("Adapter Description: %wZ\n", &IF->Description)); + + TcpipRegistryPath.MaximumLength = sizeof(WCHAR) * 150; + TcpipRegistryPath.Length = 0; + TcpipRegistryPath.Buffer = Buffer; + + RtlAppendUnicodeStringToString(&TcpipRegistryPath, + &Prefix); + + RtlAppendUnicodeStringToString(&TcpipRegistryPath, + &IF->Name); InitializeObjectAttributes(&ObjectAttributes, - RegistryPath, + &TcpipRegistryPath, OBJ_CASE_INSENSITIVE, 0, NULL); @@ -1019,6 +1030,7 @@ BOOLEAN BindAdapter( AddrInitIPv4(&DefaultMask, 0); Status = ZwOpenKey(&ParameterHandle, KEY_READ, &ObjectAttributes); + if (!NT_SUCCESS(Status)) { IF->Unicast = DefaultMask; @@ -1040,7 +1052,7 @@ BOOLEAN BindAdapter( KeyValueInfo, sizeof(KEY_VALUE_PARTIAL_INFORMATION) + sizeof(ULONG), &Unused); - if (NT_SUCCESS(Status) && KeyValueInfo->DataLength == sizeof(ULONG) && (*(PULONG)KeyValueInfo->Data) != 0) + if (NT_SUCCESS(Status) && KeyValueInfo->DataLength == sizeof(ULONG) && (*(PULONG)KeyValueInfo->Data) == 0) { RegistryDataU.MaximumLength = 16 + sizeof(WCHAR); RegistryDataU.Buffer = (PWCHAR)KeyValueInfo->Data; diff --git a/drivers/network/tcpip/tcpip/fileobjs.c b/drivers/network/tcpip/tcpip/fileobjs.c index 70357fced9a..98cc4062d0d 100644 --- a/drivers/network/tcpip/tcpip/fileobjs.c +++ b/drivers/network/tcpip/tcpip/fileobjs.c @@ -379,9 +379,15 @@ NTSTATUS FileCloseAddress( LockObject(AddrFile, &OldIrql); /* We have to close this connection because we started it */ if( AddrFile->Listener ) + { + AddrFile->Listener->AddressFile = NULL; TCPClose( AddrFile->Listener ); + } if( AddrFile->Connection ) + { + AddrFile->Connection->AddressFile = NULL; DereferenceObject( AddrFile->Connection ); + } UnlockObject(AddrFile, OldIrql); DereferenceObject(AddrFile); diff --git a/drivers/network/tcpip/tcpip/ninfo.c b/drivers/network/tcpip/tcpip/ninfo.c index 293eb19a027..f78d4b40062 100644 --- a/drivers/network/tcpip/tcpip/ninfo.c +++ b/drivers/network/tcpip/tcpip/ninfo.c @@ -21,15 +21,21 @@ TDI_STATUS InfoTdiQueryGetRouteTable( PIP_INTERFACE IF, PNDIS_BUFFER Buffer, PUI KIRQL OldIrql; UINT RtCount = CountFIBs(IF); UINT Size = sizeof( IPROUTE_ENTRY ) * RtCount; - PFIB_ENTRY RCache = - ExAllocatePool( NonPagedPool, sizeof( FIB_ENTRY ) * RtCount ), - RCacheCur = RCache; - PIPROUTE_ENTRY RouteEntries = ExAllocatePool( NonPagedPool, Size ), - RtCurrent = RouteEntries; + PFIB_ENTRY RCache, RCacheCur; + PIPROUTE_ENTRY RouteEntries, RtCurrent; UINT i; - TI_DbgPrint(DEBUG_INFO, ("Called, routes = %d, RCache = %08x\n", - RtCount, RCache)); + TI_DbgPrint(DEBUG_INFO, ("Called, routes = %d\n", + RtCount)); + + if (RtCount == 0) + return InfoCopyOut(NULL, 0, NULL, BufferSize); + + RouteEntries = ExAllocatePool( NonPagedPool, Size ); + RtCurrent = RouteEntries; + + RCache = ExAllocatePool( NonPagedPool, sizeof( FIB_ENTRY ) * RtCount ); + RCacheCur = RCache; if( !RCache || !RouteEntries ) { if( RCache ) ExFreePool( RCache ); diff --git a/drivers/storage/scsiport/scsiport.c b/drivers/storage/scsiport/scsiport.c index c1fe5f63384..74b787bfb12 100644 --- a/drivers/storage/scsiport/scsiport.c +++ b/drivers/storage/scsiport/scsiport.c @@ -1994,7 +1994,10 @@ ScsiPortNotification(IN SCSI_NOTIFICATION_TYPE NotificationType, break; case RequestTimerCall: - DPRINT1("UNIMPLEMENTED SCSI Notification called: RequestTimerCall!\n"); + DPRINT("Notify: RequestTimerCall\n"); + DeviceExtension->InterruptData.Flags |= SCSI_PORT_TIMER_NEEDED; + DeviceExtension->InterruptData.HwScsiTimer = (PHW_TIMER)va_arg(ap, PHW_TIMER); + DeviceExtension->InterruptData.MiniportTimerValue = (ULONG)va_arg(ap, ULONG); break; case BusChangeDetected: @@ -4802,6 +4805,7 @@ ScsiPortDpcForIsr(IN PKDPC Dpc, PSCSI_PORT_LUN_EXTENSION LunExtension; BOOLEAN NeedToStartIo; PSCSI_REQUEST_BLOCK_INFO SrbInfo; + LARGE_INTEGER TimerValue; DPRINT("ScsiPortDpcForIsr(Dpc %p DpcDeviceObject %p DpcIrp %p DpcContext %p)\n", Dpc, DpcDeviceObject, DpcIrp, DpcContext); @@ -4842,10 +4846,26 @@ TryAgain: } /* Check if timer is needed */ - if (InterruptData.Flags & SCIS_PORT_TIMER_NEEDED) + if (InterruptData.Flags & SCSI_PORT_TIMER_NEEDED) { - /* TODO: Implement */ - ASSERT(FALSE); + /* Save the timer routine */ + DeviceExtension->HwScsiTimer = InterruptData.HwScsiTimer; + + if (InterruptData.MiniportTimerValue == 0) + { + /* Cancel the timer */ + KeCancelTimer(&DeviceExtension->MiniportTimer); + } + else + { + /* Convert timer value */ + TimerValue.QuadPart = Int32x32To64(InterruptData.MiniportTimerValue, -10); + + /* Set the timer */ + KeSetTimer(&DeviceExtension->MiniportTimer, + TimerValue, + &DeviceExtension->MiniportTimerDpc); + } } /* If it's ready for the next request */ @@ -5599,8 +5619,31 @@ SpiMiniportTimerDpc(IN struct _KDPC *Dpc, IN PVOID SystemArgument1, IN PVOID SystemArgument2) { - DPRINT1("Miniport timer DPC\n"); - ASSERT(FALSE); + PSCSI_PORT_DEVICE_EXTENSION DeviceExtension; + + DPRINT("Miniport timer DPC\n"); + + DeviceExtension = ((PDEVICE_OBJECT)DeviceObject)->DeviceExtension; + + /* Acquire the spinlock */ + KeAcquireSpinLockAtDpcLevel(&DeviceExtension->SpinLock); + + /* Call the timer routine */ + if (DeviceExtension->HwScsiTimer != NULL) + { + DeviceExtension->HwScsiTimer(&DeviceExtension->MiniPortDeviceExtension); + } + + /* Release the spinlock */ + KeReleaseSpinLockFromDpcLevel(&DeviceExtension->SpinLock); + + if (DeviceExtension->InterruptData.Flags & SCSI_PORT_NOTIFICATION_NEEDED) + { + ScsiPortDpcForIsr(NULL, + DeviceExtension->DeviceObject, + NULL, + NULL); + } } static NTSTATUS diff --git a/drivers/storage/scsiport/scsiport_int.h b/drivers/storage/scsiport/scsiport_int.h index e6651e61f1d..9b6899f9b6c 100644 --- a/drivers/storage/scsiport/scsiport_int.h +++ b/drivers/storage/scsiport/scsiport_int.h @@ -36,7 +36,7 @@ #define SCSI_PORT_DISABLE_INT_REQUESET 0x2000 #define SCSI_PORT_DISABLE_INTERRUPTS 0x4000 #define SCSI_PORT_ENABLE_INT_REQUEST 0x8000 -#define SCIS_PORT_TIMER_NEEDED 0x10000 +#define SCSI_PORT_TIMER_NEEDED 0x10000 /* LUN Extension flags*/ #define LUNEX_FROZEN_QUEUE 0x0001 @@ -182,6 +182,8 @@ typedef struct _SCSI_PORT_INTERRUPT_DATA PSCSI_REQUEST_BLOCK_INFO CompletedRequests; /* Linked list of Srb info data */ PSCSI_PORT_LUN_EXTENSION CompletedAbort; PSCSI_PORT_LUN_EXTENSION ReadyLun; + PHW_TIMER HwScsiTimer; + ULONG MiniportTimerValue; } SCSI_PORT_INTERRUPT_DATA, *PSCSI_PORT_INTERRUPT_DATA; @@ -257,6 +259,7 @@ typedef struct _SCSI_PORT_DEVICE_EXTENSION PHW_INTERRUPT HwInterrupt; PHW_RESET_BUS HwResetBus; PHW_DMA_STARTED HwDmaStarted; + PHW_TIMER HwScsiTimer; PSCSI_REQUEST_BLOCK OriginalSrb; SCSI_REQUEST_BLOCK InternalSrb; diff --git a/drivers/usb/usbd/usbd.c b/drivers/usb/usbd/usbd.c index 2f5fac136a4..ce183c30819 100644 --- a/drivers/usb/usbd/usbd.c +++ b/drivers/usb/usbd/usbd.c @@ -5,6 +5,7 @@ * PURPOSE: Helper Library for USB * PROGRAMMERS: * Filip Navara + * Michael Martin * */ @@ -33,6 +34,7 @@ #include #include +#include #ifndef PLUGPLAY_REGKEY_DRIVER #define PLUGPLAY_REGKEY_DRIVER 2 #endif @@ -71,7 +73,7 @@ DllUnload(VOID) */ PVOID NTAPI USBD_Debug_GetHeap(ULONG Unknown1, POOL_TYPE PoolType, ULONG NumberOfBytes, - ULONG Tag) + ULONG Tag) { return ExAllocatePoolWithTag(PoolType, NumberOfBytes, Tag); } @@ -305,43 +307,56 @@ USBD_RegisterHcDeviceCapabilities(ULONG Unknown1, ULONG Unknown2, /* * @implemented - * FIXME: Test */ -PURB -NTAPI +PURB NTAPI USBD_CreateConfigurationRequestEx( PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor, PUSBD_INTERFACE_LIST_ENTRY InterfaceList ) { PURB Urb; - ULONG UrbSize; + ULONG UrbSize = 0; ULONG InterfaceCount; + ULONG InterfaceNumber, EndPointNumber; + PUSBD_INTERFACE_INFORMATION InterfaceInfo; for (InterfaceCount = 0; InterfaceList[InterfaceCount].InterfaceDescriptor != NULL; - ++InterfaceCount) - ; - /* Include the NULL entry */ - ++InterfaceCount; + InterfaceCount++) + { + UrbSize += sizeof(USBD_INTERFACE_INFORMATION); + UrbSize += (InterfaceList[InterfaceCount].InterfaceDescriptor->bNumEndpoints - 1) * sizeof(USBD_PIPE_INFORMATION); + } + + UrbSize += sizeof(URB) + sizeof(USBD_INTERFACE_INFORMATION); - UrbSize = sizeof(Urb->UrbSelectConfiguration) + - (InterfaceCount * sizeof(PUSBD_INTERFACE_LIST_ENTRY)); Urb = ExAllocatePool(NonPagedPool, UrbSize); - Urb->UrbSelectConfiguration.Hdr.Function = - URB_FUNCTION_SELECT_CONFIGURATION; - Urb->UrbSelectConfiguration.Hdr.Length = - sizeof(Urb->UrbSelectConfiguration); - Urb->UrbSelectConfiguration.ConfigurationDescriptor = - ConfigurationDescriptor; - memcpy((PVOID)&Urb->UrbSelectConfiguration.Interface, (PVOID)InterfaceList, - InterfaceCount * sizeof(PUSBD_INTERFACE_LIST_ENTRY)); + RtlZeroMemory(Urb, UrbSize); + Urb->UrbSelectConfiguration.Hdr.Function = URB_FUNCTION_SELECT_CONFIGURATION; + Urb->UrbSelectConfiguration.Hdr.Length = sizeof(Urb->UrbSelectConfiguration); + Urb->UrbSelectConfiguration.ConfigurationDescriptor = ConfigurationDescriptor; + + InterfaceInfo = &Urb->UrbSelectConfiguration.Interface; + for (InterfaceNumber = 0; InterfaceNumber < InterfaceCount; InterfaceNumber++) + { + InterfaceList[InterfaceNumber].Interface = InterfaceInfo; + InterfaceInfo->Length = sizeof(USBD_INTERFACE_INFORMATION) + + ((InterfaceList[InterfaceNumber].InterfaceDescriptor->bNumEndpoints - 1) * sizeof(USBD_PIPE_INFORMATION)); + InterfaceInfo->InterfaceNumber = InterfaceList[InterfaceNumber].InterfaceDescriptor->bInterfaceNumber; + InterfaceInfo->AlternateSetting = InterfaceList[InterfaceNumber].InterfaceDescriptor->bAlternateSetting; + InterfaceInfo->NumberOfPipes = InterfaceList[InterfaceNumber].InterfaceDescriptor->bNumEndpoints; + for (EndPointNumber = 0; EndPointNumber < InterfaceInfo->NumberOfPipes; EndPointNumber++) + { + InterfaceInfo->Pipes[EndPointNumber].MaximumTransferSize = PAGE_SIZE; + } + InterfaceInfo = (PUSBD_INTERFACE_INFORMATION) ((ULONG_PTR)InterfaceInfo + InterfaceInfo->Length); + } return Urb; } /* - * @unimplemented + * @implemented */ PURB NTAPI USBD_CreateConfigurationRequest( @@ -349,11 +364,12 @@ USBD_CreateConfigurationRequest( PUSHORT Size ) { + /* WindowsXP returns NULL */ return NULL; } /* - * @unimplemented + * @implemented */ ULONG NTAPI USBD_GetInterfaceLength( @@ -363,18 +379,23 @@ USBD_GetInterfaceLength( { ULONG_PTR Current; PUSB_INTERFACE_DESCRIPTOR CurrentDescriptor = InterfaceDescriptor; - ULONG Length = CurrentDescriptor->bLength; + ULONG Length = 0; + BOOLEAN InterfaceFound = FALSE; - // USB_ENDPOINT_DESCRIPTOR_TYPE - if (CurrentDescriptor->bDescriptorType == USB_INTERFACE_DESCRIPTOR_TYPE) + for (Current = (ULONG_PTR)CurrentDescriptor; + Current < (ULONG_PTR)BufferEnd; + Current += CurrentDescriptor->bLength) { - for (Current = (ULONG_PTR)CurrentDescriptor; - Current < (ULONG_PTR)BufferEnd; - Current += CurrentDescriptor->bLength) - CurrentDescriptor = (PUSB_INTERFACE_DESCRIPTOR)Current; - Length += CurrentDescriptor->bLength; + CurrentDescriptor = (PUSB_INTERFACE_DESCRIPTOR)Current; + if ((CurrentDescriptor->bDescriptorType == USB_INTERFACE_DESCRIPTOR_TYPE) && (InterfaceFound)) + break; + else if (CurrentDescriptor->bDescriptorType == USB_INTERFACE_DESCRIPTOR_TYPE) + InterfaceFound = TRUE; + + Length += CurrentDescriptor->bLength; } + return Length; } @@ -397,7 +418,7 @@ USBD_ParseDescriptors( ((PLONG)DescriptorBuffer + TotalLength) ) break; if (PComDes->bDescriptorType == DescriptorType) return PComDes; if (PComDes->bLength == 0) break; - PComDes = PComDes + PComDes->bLength; + PComDes = (PUSB_COMMON_DESCRIPTOR)((ULONG_PTR)PComDes + PComDes->bLength); } return NULL; } diff --git a/drivers/usb/usbehci/common.c b/drivers/usb/usbehci/common.c index 22740b3537f..3f6a99401b7 100644 --- a/drivers/usb/usbehci/common.c +++ b/drivers/usb/usbehci/common.c @@ -4,7 +4,7 @@ * FILE: drivers/usb/usbehci/common.c * PURPOSE: Common operations in FDO/PDO. * PROGRAMMERS: - * Michael Martin (mjmartin@reactos.org) + * Michael Martin (michael.martin@reactos.org) */ #define INITGUID diff --git a/drivers/usb/usbehci/fdo.c b/drivers/usb/usbehci/fdo.c index 881e97809de..29cf7fad77a 100644 --- a/drivers/usb/usbehci/fdo.c +++ b/drivers/usb/usbehci/fdo.c @@ -4,34 +4,68 @@ * FILE: drivers/usb/usbehci/fdo.c * PURPOSE: USB EHCI device driver. * PROGRAMMERS: - * Michael Martin (mjmartin@reactos.org) + * Michael Martin (michael.martin@reactos.org) */ /* INCLUDES *******************************************************************/ #include "usbehci.h" #include +VOID NTAPI +TimerDefferedRoutine(PKDPC Dpc, PVOID DeferredContext, PVOID SystemArgument1, PVOID SystemArgument2) +{ + PFDO_DEVICE_EXTENSION FdoDeviceExtension; + PPDO_DEVICE_EXTENSION PdoDeviceExtension; + ULONG tmp; + ULONG Base; + LONG i; + + FdoDeviceExtension = (PFDO_DEVICE_EXTENSION) DeferredContext; + PdoDeviceExtension = (PPDO_DEVICE_EXTENSION) FdoDeviceExtension->Pdo->DeviceExtension; + + Base = (ULONG)FdoDeviceExtension->ResourceMemory; + + for (i = 0; i < FdoDeviceExtension->ECHICaps.HCSParams.PortCount; i++) + { + tmp = READ_REGISTER_ULONG((PULONG) ((Base + EHCI_PORTSC) + (4 * i))); + + if ((tmp & 0x04) && (!(PdoDeviceExtension->Ports[i].PortChange & USB_PORT_STATUS_RESET))) + { + DPRINT("Port %x is enabled\n", i); + PdoDeviceExtension->Ports[i].PortChange |= USB_PORT_STATUS_RESET; + CompletePendingURBRequest(PdoDeviceExtension); + } + } + return; +} + VOID NTAPI EhciDefferedRoutine(PKDPC Dpc, PVOID DeferredContext, PVOID SystemArgument1, PVOID SystemArgument2) { PFDO_DEVICE_EXTENSION FdoDeviceExtension; PPDO_DEVICE_EXTENSION PdoDeviceExtension; ULONG CStatus; + ULONG tmp; + ULONG Base; + LONG i; FdoDeviceExtension = (PFDO_DEVICE_EXTENSION) DeferredContext; + + if (!FdoDeviceExtension->Pdo) + { + DPRINT1("PDO not set yet!\n"); + return; + } + PdoDeviceExtension = (PPDO_DEVICE_EXTENSION) FdoDeviceExtension->Pdo->DeviceExtension; + Base = (ULONG)FdoDeviceExtension->ResourceMemory; + CStatus = (ULONG) SystemArgument2; /* Port Change */ if (CStatus & EHCI_STS_PCD) { - LONG i; - ULONG tmp; - ULONG Base; - - Base = (ULONG)FdoDeviceExtension->ResourceMemory; - /* Loop through the ports */ for (i = 0; i < FdoDeviceExtension->ECHICaps.HCSParams.PortCount; i++) { @@ -69,22 +103,22 @@ EhciDefferedRoutine(PKDPC Dpc, PVOID DeferredContext, PVOID SystemArgument1, PVO KeStallExecutionProcessor(30); /* As per USB 2.0 Specs, 9.1.2. Reset the port and clear the status change */ - tmp |= 0x100 | 0x02; + //tmp |= 0x100 | 0x02; /* Sanity, Disable port */ - tmp &= ~0x04; + //tmp &= ~0x04; - WRITE_REGISTER_ULONG((PULONG) ((Base + EHCI_PORTSC) + (4 * i)), tmp); + //WRITE_REGISTER_ULONG((PULONG) ((Base + EHCI_PORTSC) + (4 * i)), tmp); - KeStallExecutionProcessor(20); + //KeStallExecutionProcessor(20); tmp = READ_REGISTER_ULONG((PULONG)((Base + EHCI_PORTSC) + (4 * i))); PdoDeviceExtension->ChildDeviceCount++; - PdoDeviceExtension->Ports[i].PortStatus |= USB_PORT_STATUS_HIGH_SPEED | USB_PORT_STATUS_CONNECT; + PdoDeviceExtension->Ports[i].PortStatus &= ~0x8000; + PdoDeviceExtension->Ports[i].PortStatus |= USB_PORT_STATUS_CONNECT; PdoDeviceExtension->Ports[i].PortChange |= USB_PORT_STATUS_CONNECT; - PdoDeviceExtension->HaltQueue = FALSE; - KeSetEvent(&PdoDeviceExtension->QueueDrainedEvent, 0, FALSE); + CompletePendingURBRequest(PdoDeviceExtension); } else { @@ -156,10 +190,23 @@ InterruptService(PKINTERRUPT Interrupt, PVOID ServiceContext) } BOOLEAN -ResetPort(PDEVICE_OBJECT DeviceObject) +ResetPort(PFDO_DEVICE_EXTENSION FdoDeviceExtension, UCHAR Port) { - /*FIXME: Implement me */ + ULONG Base; + ULONG tmp; + LARGE_INTEGER DueTime; + DPRINT("Reset Port %x\n", Port); + + Base = (ULONG)FdoDeviceExtension->ResourceMemory; + + tmp = READ_REGISTER_ULONG((PULONG) ((Base + EHCI_PORTSC) + (4 * Port))); + tmp |= 0x100; + WRITE_REGISTER_ULONG((PULONG) ((Base + EHCI_PORTSC) + (4 * Port)), tmp); + + DueTime.QuadPart = -100; + + KeSetTimerEx(&FdoDeviceExtension->UpdateTimer, DueTime, 0, &FdoDeviceExtension->TimerDpcObject); return TRUE; } @@ -171,7 +218,7 @@ StopEhci(PDEVICE_OBJECT DeviceObject) ULONG base; LONG tmp; - DPRINT1("Stopping Ehci controller\n"); + DPRINT("Stopping Ehci controller\n"); FdoDeviceExtension = (PFDO_DEVICE_EXTENSION)DeviceObject->DeviceExtension; base = (ULONG)FdoDeviceExtension->ResourceMemory; @@ -194,7 +241,7 @@ StartEhci(PDEVICE_OBJECT DeviceObject) LONG tmp2; ULONG base; - DPRINT1("Starting Ehci controller\n"); + DPRINT("Starting Ehci controller\n"); FdoDeviceExtension = (PFDO_DEVICE_EXTENSION)DeviceObject->DeviceExtension; base = (ULONG)FdoDeviceExtension->ResourceMemory; @@ -267,6 +314,11 @@ StartEhci(PDEVICE_OBJECT DeviceObject) EhciDefferedRoutine, FdoDeviceExtension); + KeInitializeDpc(&FdoDeviceExtension->TimerDpcObject, + TimerDefferedRoutine, + FdoDeviceExtension); + + Status = IoConnectInterrupt(&FdoDeviceExtension->EhciInterrupt, InterruptService, FdoDeviceExtension->DeviceObject, @@ -353,7 +405,7 @@ GetCapabilities(PFDO_DEVICE_EXTENSION DeviceExtension, ULONG Base) PHCS = (PEHCI_HCS_CONTENT)&DeviceExtension->ECHICaps.HCSParams; if (PHCS->PortRouteRules) { - for (i = 0; i < 8; i++) + for (i = 0; i < PCap->HCSParams.PortCount; i++) { PCap->PortRoute[i] = READ_REGISTER_UCHAR((PUCHAR) (Base + 12 + i)); } @@ -408,6 +460,8 @@ StartDevice(PDEVICE_OBJECT DeviceObject, PCM_PARTIAL_RESOURCE_LIST raw, PCM_PART /* Zeroize it */ RtlZeroMemory(FdoDeviceExtension->PeriodicFramList, sizeof(ULONG) * 1024); + ExInitializeFastMutex(&FdoDeviceExtension->FrameListMutex); + /* Allocate Common Buffer for Async List Head Queue */ FdoDeviceExtension->AsyncListQueueHeadPtr = FdoDeviceExtension->pDmaAdapter->DmaOperations->AllocateCommonBuffer(FdoDeviceExtension->pDmaAdapter, @@ -427,6 +481,8 @@ StartDevice(PDEVICE_OBJECT DeviceObject, PCM_PARTIAL_RESOURCE_LIST raw, PCM_PART /* FIXME: Same as FIXME above */ 20800); + ExInitializeFastMutex(&FdoDeviceExtension->AsyncListMutex); + Status = IoGetDeviceProperty(FdoDeviceExtension->LowerDevice, DevicePropertyAddress, sizeof(ULONG), @@ -540,6 +596,8 @@ FdoQueryBusRelations( DeviceExtension = (PFDO_DEVICE_EXTENSION)DeviceObject->DeviceExtension; + DPRINT1("Ehci: QueryBusRelations\n"); + /* Create the PDO with the next available number */ while (TRUE) { @@ -581,6 +639,7 @@ FdoQueryBusRelations( PdoDeviceExtension->ControllerFdo = DeviceObject; PdoDeviceExtension->DeviceObject = Pdo; + PdoDeviceExtension->NumberOfPorts = DeviceExtension->ECHICaps.HCSParams.PortCount; InitializeListHead(&PdoDeviceExtension->IrpQueue); KeInitializeSpinLock(&PdoDeviceExtension->IrpQueueLock); @@ -623,7 +682,7 @@ FdoDispatchPnp(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp) { case IRP_MN_START_DEVICE: { - DPRINT1("START_DEVICE\n"); + DPRINT1("Ehci: START_DEVICE\n"); Irp->IoStatus.Status = STATUS_SUCCESS; Status = ForwardAndWait(DeviceObject, Irp); @@ -634,20 +693,20 @@ FdoDispatchPnp(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp) } case IRP_MN_QUERY_DEVICE_RELATIONS: { - DPRINT1("IRP_MN_QUERY_DEVICE_RELATIONS\n"); + DPRINT1("Ehci: IRP_MN_QUERY_DEVICE_RELATIONS\n"); switch(Stack->Parameters.QueryDeviceRelations.Type) { case BusRelations: { PDEVICE_RELATIONS DeviceRelations = NULL; - DPRINT("BusRelations\n"); + DPRINT1("Ehci: BusRelations\n"); Status = FdoQueryBusRelations(DeviceObject, &DeviceRelations); Information = (ULONG_PTR)DeviceRelations; break; } default: { - DPRINT("Unknown query device relations type\n"); + DPRINT1("Ehci: Unknown query device relations type\n"); Status = STATUS_NOT_IMPLEMENTED; break; } @@ -656,16 +715,17 @@ FdoDispatchPnp(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp) } case IRP_MN_FILTER_RESOURCE_REQUIREMENTS: { - DPRINT("IRP_MN_FILTER_RESOURCE_REQUIREMENTS\n"); + DPRINT1("Ehci: IRP_MN_FILTER_RESOURCE_REQUIREMENTS\n"); return ForwardIrpAndForget(DeviceObject, Irp); break; } case IRP_MN_QUERY_RESOURCE_REQUIREMENTS: { - DPRINT("IRP_MN_QUERY_RESOURCE_REQUIREMENTS\n"); + DPRINT1("Ehci: IRP_MN_QUERY_RESOURCE_REQUIREMENTS\n"); } case IRP_MN_QUERY_INTERFACE: { + DPRINT1("Ehci: IRP_MN_QUERY_INTERFACE\n"); Status = STATUS_SUCCESS; Information = 0; Status = ForwardIrpAndForget(DeviceObject, Irp); @@ -674,7 +734,7 @@ FdoDispatchPnp(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp) } default: { - DPRINT1("IRP_MJ_PNP / Unhandled minor function 0x%lx\n", Stack->MinorFunction); + DPRINT1("Ehci: IRP_MJ_PNP / Unhandled minor function 0x%lx\n", Stack->MinorFunction); return ForwardIrpAndForget(DeviceObject, Irp); } } @@ -701,7 +761,7 @@ AddDevice(PDRIVER_OBJECT DriverObject, PDEVICE_OBJECT Pdo) PFDO_DEVICE_EXTENSION FdoDeviceExtension; - DPRINT("Ehci AddDevice\n"); + DPRINT1("Ehci: AddDevice\n"); /* Create the FDO with next available number */ while (TRUE) @@ -750,6 +810,8 @@ AddDevice(PDRIVER_OBJECT DriverObject, PDEVICE_OBJECT Pdo) FdoDeviceExtension = (PFDO_DEVICE_EXTENSION) Fdo->DeviceExtension; RtlZeroMemory(FdoDeviceExtension, sizeof(PFDO_DEVICE_EXTENSION)); + KeInitializeTimerEx(&FdoDeviceExtension->UpdateTimer, SynchronizationTimer); + FdoDeviceExtension->Common.IsFdo = TRUE; FdoDeviceExtension->DeviceObject = Fdo; @@ -818,14 +880,14 @@ AddDevice(PDRIVER_OBJECT DriverObject, PDEVICE_OBJECT Pdo) if (!NT_SUCCESS(Status)) { DPRINT1("Unable to register device interface!\n"); - ASSERT(FALSE); + return Status; } else { Status = IoSetDeviceInterfaceState(&InterfaceSymLinkName, TRUE); DPRINT1("SetInterfaceState %x\n", Status); if (!NT_SUCCESS(Status)) - ASSERT(FALSE); + return Status; } Fdo->Flags &= ~DO_DEVICE_INITIALIZING; @@ -836,13 +898,17 @@ NTSTATUS NTAPI FdoDispatchInternalDeviceControl(PDEVICE_OBJECT DeviceObject, PIRP Irp) { PFDO_DEVICE_EXTENSION FdoDeviceExtension; + PPDO_DEVICE_EXTENSION PdoDeviceExtension; PIO_STACK_LOCATION Stack = NULL; NTSTATUS Status = STATUS_UNSUCCESSFUL; ULONG_PTR Information = 0; PUSB_DEVICE UsbDevice = NULL; URB *Urb; + /*FIXME: This should never be called by a miniport as the miniport should only be dealing with the pdo */ + FdoDeviceExtension = (PFDO_DEVICE_EXTENSION) DeviceObject->DeviceExtension; + PdoDeviceExtension = (PPDO_DEVICE_EXTENSION) FdoDeviceExtension->Pdo->DeviceExtension; ASSERT(FdoDeviceExtension->Common.IsFdo == TRUE); @@ -854,56 +920,84 @@ FdoDispatchInternalDeviceControl(PDEVICE_OBJECT DeviceObject, PIRP Irp) DPRINT("Header Length %d\n", Urb->UrbHeader.Length); DPRINT("Header Function %d\n", Urb->UrbHeader.Function); - UsbDevice = Urb->UrbHeader.UsbdDeviceHandle; + UsbDevice = DeviceHandleToUsbDevice(PdoDeviceExtension, Urb->UrbHeader.UsbdDeviceHandle); + if (!UsbDevice) + { + DPRINT1("Invalid DeviceHandle or device not connected\n"); + return STATUS_DEVICE_NOT_CONNECTED; + } switch (Urb->UrbHeader.Function) { case URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER: { - DPRINT1("URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:\n"); + DPRINT1("Ehci: URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:\n"); break; } case URB_FUNCTION_GET_STATUS_FROM_DEVICE: { - DPRINT1("URB_FUNCTION_GET_STATUS_FROM_DEVICE\n"); + DPRINT1("Ehci: URB_FUNCTION_GET_STATUS_FROM_DEVICE\n"); break; } case URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE: { + DPRINT1("Ehci: URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE\n"); switch(Urb->UrbControlDescriptorRequest.DescriptorType) { case USB_DEVICE_DESCRIPTOR_TYPE: { - /* FIXNME: This probably not used for FDO and should be removed? */ + /* FIXME: This probably not used for FDO and should be removed? */ DPRINT1("USB DEVICE DESC\n"); break; } case USB_CONFIGURATION_DESCRIPTOR_TYPE: DPRINT1("USB CONFIG DESC\n"); + //break; case USB_STRING_DESCRIPTOR_TYPE: DPRINT1("Usb String Descriptor\n"); { USB_DEFAULT_PIPE_SETUP_PACKET CtrlSetup; + PUSB_STRING_DESCRIPTOR UsbString; BOOLEAN ResultOk; CtrlSetup.bmRequestType._BM.Recipient = BMREQUEST_TO_DEVICE; CtrlSetup.bmRequestType._BM.Type = BMREQUEST_STANDARD; + CtrlSetup.bmRequestType._BM.Reserved = 0; CtrlSetup.bmRequestType._BM.Dir = BMREQUEST_DEVICE_TO_HOST; CtrlSetup.bRequest = USB_REQUEST_GET_DESCRIPTOR; CtrlSetup.wValue.LowByte = Urb->UrbControlDescriptorRequest.Index; CtrlSetup.wValue.HiByte = Urb->UrbControlDescriptorRequest.DescriptorType; + if (Urb->UrbControlDescriptorRequest.DescriptorType == USB_STRING_DESCRIPTOR_TYPE) + { CtrlSetup.wIndex.W = Urb->UrbControlDescriptorRequest.LanguageId; + RtlZeroMemory(Urb->UrbControlDescriptorRequest.TransferBuffer, Urb->UrbControlDescriptorRequest.TransferBufferLength-1); + } else CtrlSetup.wIndex.W = 0; + CtrlSetup.wLength = Urb->UrbControlDescriptorRequest.TransferBufferLength; ResultOk = ExecuteControlRequest(FdoDeviceExtension, &CtrlSetup, UsbDevice->Address, UsbDevice->Port, Urb->UrbControlDescriptorRequest.TransferBuffer, Urb->UrbControlDescriptorRequest.TransferBufferLength); + if (Urb->UrbControlDescriptorRequest.DescriptorType == USB_STRING_DESCRIPTOR_TYPE) + { + UsbString = Urb->UrbControlDescriptorRequest.TransferBuffer; + DPRINT1("Index %x\n", Urb->UrbControlDescriptorRequest.Index); + DPRINT1("BufferLength %x\n", Urb->UrbControlDescriptorRequest.TransferBufferLength); + DPRINT1("Length %x\n", UsbString->bLength); + if (Urb->UrbControlDescriptorRequest.Index == 0) + { + DPRINT1("%x\n", (ULONG)Urb->UrbControlDescriptorRequest.TransferBuffer); + } + else + DPRINT1("String %S\n", &UsbString->bString); + } + UsbString = Urb->UrbControlDescriptorRequest.TransferBuffer; Urb->UrbHeader.Status = USBD_STATUS_SUCCESS; Status = STATUS_SUCCESS; - + Information = UsbString->bLength; break; } default: @@ -915,12 +1009,13 @@ FdoDispatchInternalDeviceControl(PDEVICE_OBJECT DeviceObject, PIRP Irp) } case URB_FUNCTION_SELECT_CONFIGURATION: { - DPRINT1("Selecting Configuration\n"); + DPRINT1("Ehci: URB_FUNCTION_SELECT_CONFIGURATION\n"); DPRINT1("Urb->UrbSelectConfiguration.ConfigurationHandle %x\n",Urb->UrbSelectConfiguration.ConfigurationHandle); break; } case URB_FUNCTION_CLASS_DEVICE: { + DPRINT1("Ehci: URB_FUNCTION_CLASS_DEVICE %x\n",Urb->UrbControlVendorClassRequest.Request); switch (Urb->UrbControlVendorClassRequest.Request) { case USB_REQUEST_GET_DESCRIPTOR: @@ -999,6 +1094,7 @@ FdoDispatchInternalDeviceControl(PDEVICE_OBJECT DeviceObject, PIRP Irp) } case URB_FUNCTION_CLASS_OTHER: { + DPRINT1("Ehci: URB_FUNCTION_CLASS_OTHER\n"); switch (Urb->UrbControlVendorClassRequest.Request) { case USB_REQUEST_GET_STATUS: @@ -1099,7 +1195,7 @@ FdoDispatchInternalDeviceControl(PDEVICE_OBJECT DeviceObject, PIRP Irp) } default: { - DPRINT1("Unhandled URB %x\n", Urb->UrbHeader.Function); + DPRINT1("Ehci: Unhandled URB %x\n", Urb->UrbHeader.Function); //Urb->UrbHeader.Status = USBD_STATUS_INVALID_URB_FUNCTION; } } diff --git a/drivers/usb/usbehci/irp.c b/drivers/usb/usbehci/irp.c index 99a601d8ebc..8bd51eaaeef 100644 --- a/drivers/usb/usbehci/irp.c +++ b/drivers/usb/usbehci/irp.c @@ -4,18 +4,23 @@ * FILE: drivers/usb/usbehci/irp.c * PURPOSE: IRP Handling. * PROGRAMMERS: - * Michael Martin + * Michael Martin (michael.martin@reactos.org) */ #include "usbehci.h" VOID -RequestURBCancel (PDEVICE_OBJECT DeviceObject, PIRP Irp) +RemoveUrbRequest(PPDO_DEVICE_EXTENSION DeviceExtension, PIRP Irp) { - PPDO_DEVICE_EXTENSION PdoDeviceExtension; - - PdoDeviceExtension = (PPDO_DEVICE_EXTENSION) DeviceObject->DeviceExtension; + KIRQL OldIrql; + KeAcquireSpinLock(&DeviceExtension->IrpQueueLock, &OldIrql); + RemoveEntryList(&Irp->Tail.Overlay.ListEntry); + KeReleaseSpinLock(&DeviceExtension->IrpQueueLock, OldIrql); +} +VOID +RequestURBCancel (PPDO_DEVICE_EXTENSION PdoDeviceExtension, PIRP Irp) +{ KIRQL OldIrql = Irp->CancelIrql; IoReleaseCancelSpinLock(DISPATCH_LEVEL); @@ -48,17 +53,483 @@ QueueURBRequest(PPDO_DEVICE_EXTENSION DeviceExtension, PIRP Irp) } } -VOID -CompletePendingURBRequest(PPDO_DEVICE_EXTENSION DeviceExtension) +NTSTATUS HandleUrbRequest(PPDO_DEVICE_EXTENSION PdoDeviceExtension, PIRP Irp) { - PLIST_ENTRY NextIrp = NULL; NTSTATUS Status = STATUS_UNSUCCESSFUL; ULONG_PTR Information = 0; PIO_STACK_LOCATION Stack; PUSB_DEVICE UsbDevice = NULL; + URB *Urb; + PFDO_DEVICE_EXTENSION FdoDeviceExtension; + FdoDeviceExtension = (PFDO_DEVICE_EXTENSION) PdoDeviceExtension->ControllerFdo->DeviceExtension; + + Stack = IoGetCurrentIrpStackLocation(Irp); + ASSERT(Stack); + + Urb = (PURB) Stack->Parameters.Others.Argument1; + + ASSERT(Urb); + + Information = 0; + Status = STATUS_SUCCESS; + + DPRINT("TransferBuffer %x\n", Urb->UrbControlDescriptorRequest.TransferBuffer); + DPRINT("TransferBufferLength %x\n", Urb->UrbControlDescriptorRequest.TransferBufferLength); + DPRINT("UsbdDeviceHandle = %x\n", Urb->UrbHeader.UsbdDeviceHandle); + + UsbDevice = Urb->UrbHeader.UsbdDeviceHandle; + + /* UsbdDeviceHandle of 0 is root hub */ + if (UsbDevice == NULL) + UsbDevice = PdoDeviceExtension->UsbDevices[0]; + + /* Assume URB success */ + Urb->UrbHeader.Status = USBD_STATUS_SUCCESS; + /* Set the DeviceHandle to the Internal Device */ + Urb->UrbHeader.UsbdDeviceHandle = UsbDevice; + + switch (Urb->UrbHeader.Function) + { + case URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER: + { + if (&UsbDevice->ActiveInterface->EndPoints[0]->EndPointDescriptor != Urb->UrbBulkOrInterruptTransfer.PipeHandle) + { + Status = STATUS_INVALID_PARAMETER; + break; + } + + ASSERT(Urb->UrbBulkOrInterruptTransfer.TransferBuffer != NULL); + RtlZeroMemory(Urb->UrbBulkOrInterruptTransfer.TransferBuffer, Urb->UrbBulkOrInterruptTransfer.TransferBufferLength); + + if (UsbDevice == PdoDeviceExtension->UsbDevices[0]) + { + if (Urb->UrbBulkOrInterruptTransfer.TransferFlags & (USBD_TRANSFER_DIRECTION_IN | USBD_SHORT_TRANSFER_OK)) + { + LONG i; + for (i = 0; i < PdoDeviceExtension->NumberOfPorts; i++) + { + if (PdoDeviceExtension->Ports[i].PortChange) + { + DPRINT1("Inform hub driver that port %d has changed\n", i+1); + ((PUCHAR)Urb->UrbBulkOrInterruptTransfer.TransferBuffer)[0] = 1 << ((i + 1) & 7); + } + } + } + else + { + Urb->UrbHeader.Status = USBD_STATUS_INVALID_PARAMETER; + Status = STATUS_UNSUCCESSFUL; + DPRINT1("Invalid transfer flags for SCE\n"); + } + } + else + DPRINT("Interrupt Transfer not for hub\n"); + break; + } + case URB_FUNCTION_GET_STATUS_FROM_DEVICE: + { + if (Urb->UrbControlGetStatusRequest.Index == 0) + { + ASSERT(Urb->UrbBulkOrInterruptTransfer.TransferBuffer != NULL); + *(PUSHORT)Urb->UrbControlGetStatusRequest.TransferBuffer = USB_PORT_STATUS_CONNECT | USB_PORT_STATUS_ENABLE; + } + else + { + DPRINT1("Uknown identifier\n"); + Urb->UrbHeader.Status = USBD_STATUS_INVALID_URB_FUNCTION; + Status = STATUS_UNSUCCESSFUL; + } + break; + } + case URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE: + { + switch(Urb->UrbControlDescriptorRequest.DescriptorType) + { + case USB_DEVICE_DESCRIPTOR_TYPE: + { + if (Urb->UrbControlDescriptorRequest.TransferBufferLength >= sizeof(USB_DEVICE_DESCRIPTOR)) + { + Urb->UrbControlDescriptorRequest.TransferBufferLength = sizeof(USB_DEVICE_DESCRIPTOR); + } + ASSERT(Urb->UrbControlDescriptorRequest.TransferBuffer != NULL); + RtlCopyMemory(Urb->UrbControlDescriptorRequest.TransferBuffer, + &UsbDevice->DeviceDescriptor, + Urb->UrbControlDescriptorRequest.TransferBufferLength); + break; + } + case USB_CONFIGURATION_DESCRIPTOR_TYPE: + { + PUCHAR BufPtr; + LONG i, j; + + if (Urb->UrbControlDescriptorRequest.TransferBufferLength >= UsbDevice->ActiveConfig->ConfigurationDescriptor.wTotalLength) + { + Urb->UrbControlDescriptorRequest.TransferBufferLength = UsbDevice->ActiveConfig->ConfigurationDescriptor.wTotalLength; + } + else + { + DPRINT1("TransferBufferLenth %x is too small!!!\n", Urb->UrbControlDescriptorRequest.TransferBufferLength); + if (Urb->UrbControlDescriptorRequest.TransferBufferLength < sizeof(USB_CONFIGURATION_DESCRIPTOR)) + { + DPRINT("Configuration Descriptor cannot fit into given buffer!\n"); + break; + } + } + + ASSERT(Urb->UrbControlDescriptorRequest.TransferBuffer); + BufPtr = (PUCHAR)Urb->UrbControlDescriptorRequest.TransferBuffer; + + /* Copy the Configuration Descriptor */ + RtlCopyMemory(BufPtr, &UsbDevice->ActiveConfig->ConfigurationDescriptor, sizeof(USB_CONFIGURATION_DESCRIPTOR)); + + /* If there is no room for all the configs then bail */ + if (!(Urb->UrbControlDescriptorRequest.TransferBufferLength > sizeof(USB_CONFIGURATION_DESCRIPTOR))) + { + DPRINT("All Descriptors cannot fit into given buffer! Only USB_CONFIGURATION_DESCRIPTOR given\n"); + break; + } + + BufPtr += sizeof(USB_CONFIGURATION_DESCRIPTOR); + for (i = 0; i < UsbDevice->ActiveConfig->ConfigurationDescriptor.bNumInterfaces; i++) + { + /* Copy the Interface Descriptor */ + RtlCopyMemory(BufPtr, &UsbDevice->ActiveConfig->Interfaces[i]->InterfaceDescriptor, sizeof(USB_INTERFACE_DESCRIPTOR)); + BufPtr += sizeof(USB_INTERFACE_DESCRIPTOR); + for (j = 0; j < UsbDevice->ActiveConfig->Interfaces[i]->InterfaceDescriptor.bNumEndpoints; j++) + { + /* Copy the EndPoint Descriptor */ + RtlCopyMemory(BufPtr, &UsbDevice->ActiveConfig->Interfaces[i]->EndPoints[j]->EndPointDescriptor, sizeof(USB_ENDPOINT_DESCRIPTOR)); + BufPtr += sizeof(USB_ENDPOINT_DESCRIPTOR); + } + } + + break; + } + case USB_STRING_DESCRIPTOR_TYPE: + { + USB_DEFAULT_PIPE_SETUP_PACKET CtrlSetup; + PUSB_STRING_DESCRIPTOR StringDesc; + BOOLEAN ResultOk; + + StringDesc = (PUSB_STRING_DESCRIPTOR) Urb->UrbControlDescriptorRequest.TransferBuffer; + + if (Urb->UrbControlDescriptorRequest.Index == 0) + DPRINT("Requesting LANGID's\n"); + + + RtlZeroMemory(Urb->UrbControlDescriptorRequest.TransferBuffer, Urb->UrbControlDescriptorRequest.TransferBufferLength-1); + + CtrlSetup.bmRequestType._BM.Recipient = BMREQUEST_TO_DEVICE; + CtrlSetup.bmRequestType._BM.Type = BMREQUEST_STANDARD; + CtrlSetup.bmRequestType._BM.Reserved = 0; + CtrlSetup.bmRequestType._BM.Dir = BMREQUEST_DEVICE_TO_HOST; + CtrlSetup.bRequest = USB_REQUEST_GET_DESCRIPTOR; + CtrlSetup.wValue.LowByte = Urb->UrbControlDescriptorRequest.Index; + CtrlSetup.wValue.HiByte = Urb->UrbControlDescriptorRequest.DescriptorType; + CtrlSetup.wIndex.W = Urb->UrbControlDescriptorRequest.LanguageId; + CtrlSetup.wLength = Urb->UrbControlDescriptorRequest.TransferBufferLength; + + ResultOk = ExecuteControlRequest(FdoDeviceExtension, &CtrlSetup, UsbDevice->Address, UsbDevice->Port, + Urb->UrbControlDescriptorRequest.TransferBuffer, Urb->UrbControlDescriptorRequest.TransferBufferLength); + break; + } + default: + { + DPRINT1("Descriptor Type %x not supported!\n", Urb->UrbControlDescriptorRequest.DescriptorType); + } + } + break; + } + case URB_FUNCTION_SELECT_CONFIGURATION: + { + PUSBD_INTERFACE_INFORMATION InterfaceInfo; + LONG iCount, pCount; + + DPRINT("Selecting Configuration\n"); + DPRINT("Urb->UrbSelectConfiguration.ConfigurationHandle %x\n",Urb->UrbSelectConfiguration.ConfigurationHandle); + + if (Urb->UrbSelectConfiguration.ConfigurationDescriptor) + { + Urb->UrbSelectConfiguration.ConfigurationHandle = (PVOID)&PdoDeviceExtension->UsbDevices[0]->ActiveConfig->ConfigurationDescriptor; + DPRINT("ConfigHandle %x\n", Urb->UrbSelectConfiguration.ConfigurationHandle); + InterfaceInfo = &Urb->UrbSelectConfiguration.Interface; + + for (iCount = 0; iCount < Urb->UrbSelectConfiguration.ConfigurationDescriptor->bNumInterfaces; iCount++) + { + InterfaceInfo->InterfaceHandle = (PVOID)&UsbDevice->ActiveInterface->InterfaceDescriptor; + InterfaceInfo->Class = UsbDevice->ActiveInterface->InterfaceDescriptor.bInterfaceClass; + InterfaceInfo->SubClass = UsbDevice->ActiveInterface->InterfaceDescriptor.bInterfaceSubClass; + InterfaceInfo->Protocol = UsbDevice->ActiveInterface->InterfaceDescriptor.bInterfaceProtocol; + InterfaceInfo->Reserved = 0; + + for (pCount = 0; pCount < InterfaceInfo->NumberOfPipes; pCount++) + { + InterfaceInfo->Pipes[pCount].MaximumPacketSize = UsbDevice->ActiveInterface->EndPoints[pCount]->EndPointDescriptor.wMaxPacketSize; + InterfaceInfo->Pipes[pCount].EndpointAddress = UsbDevice->ActiveInterface->EndPoints[pCount]->EndPointDescriptor.bEndpointAddress; + InterfaceInfo->Pipes[pCount].Interval = UsbDevice->ActiveInterface->EndPoints[pCount]->EndPointDescriptor.bInterval; + InterfaceInfo->Pipes[pCount].PipeType = UsbdPipeTypeInterrupt; + InterfaceInfo->Pipes[pCount].PipeHandle = (PVOID)&UsbDevice->ActiveInterface->EndPoints[pCount]->EndPointDescriptor; + if (InterfaceInfo->Pipes[pCount].MaximumTransferSize == 0) + InterfaceInfo->Pipes[pCount].MaximumTransferSize = 4096; + /* InterfaceInfo->Pipes[j].PipeFlags = 0; */ + } + InterfaceInfo = (PUSBD_INTERFACE_INFORMATION)((PUCHAR)InterfaceInfo + InterfaceInfo->Length); + } + } + else + { + /* FIXME: Set device to unconfigured state */ + } + break; + } + case URB_FUNCTION_CLASS_DEVICE: + { + switch (Urb->UrbControlVendorClassRequest.Request) + { + case USB_REQUEST_GET_DESCRIPTOR: + { + switch (Urb->UrbControlVendorClassRequest.Value >> 8) + { + case USB_DEVICE_CLASS_AUDIO: + { + DPRINT1("USB_DEVICE_CLASS_AUDIO not implemented\n"); + break; + } + case USB_DEVICE_CLASS_COMMUNICATIONS: + { + DPRINT1("USB_DEVICE_CLASS_COMMUNICATIONS not implemented\n"); + break; + } + case USB_DEVICE_CLASS_HUMAN_INTERFACE: + { + DPRINT1("USB_DEVICE_CLASS_HUMAN_INTERFACE not implemented\n"); + break; + } + case USB_DEVICE_CLASS_MONITOR: + { + DPRINT1("USB_DEVICE_CLASS_MONITOR not implemented\n"); + break; + } + case USB_DEVICE_CLASS_PHYSICAL_INTERFACE: + { + DPRINT1("USB_DEVICE_CLASS_PHYSICAL_INTERFACE not implemented\n"); + break; + } + case USB_DEVICE_CLASS_POWER: + { + DPRINT1("USB_DEVICE_CLASS_POWER not implemented\n"); + break; + } + case USB_DEVICE_CLASS_PRINTER: + { + DPRINT1("USB_DEVICE_CLASS_PRINTER not implemented\n"); + break; + } + case USB_DEVICE_CLASS_STORAGE: + { + DPRINT1("USB_DEVICE_CLASS_STORAGE not implemented\n"); + break; + } + case USB_DEVICE_CLASS_RESERVED: + DPRINT1("Reserved!!!\n"); + case USB_DEVICE_CLASS_HUB: + { + PUSB_HUB_DESCRIPTOR UsbHubDescr = Urb->UrbControlVendorClassRequest.TransferBuffer; + + DPRINT1("Length %x\n", Urb->UrbControlVendorClassRequest.TransferBufferLength); + ASSERT(Urb->UrbControlVendorClassRequest.TransferBuffer != 0); + /* FIXME: Handle more than root hub? */ + if(Urb->UrbControlVendorClassRequest.TransferBufferLength >= sizeof(USB_HUB_DESCRIPTOR)) + { + Urb->UrbControlVendorClassRequest.TransferBufferLength = sizeof(USB_HUB_DESCRIPTOR); + } + else + { + /* FIXME: Handle this correctly */ + UsbHubDescr->bDescriptorLength = sizeof(USB_HUB_DESCRIPTOR); + UsbHubDescr->bDescriptorType = 0x29; + break; + } + DPRINT1("USB_DEVICE_CLASS_HUB request\n"); + UsbHubDescr->bDescriptorLength = sizeof(USB_HUB_DESCRIPTOR); + UsbHubDescr->bDescriptorType = 0x29; + UsbHubDescr->bNumberOfPorts = 0x08; + UsbHubDescr->wHubCharacteristics = 0x0012; + UsbHubDescr->bPowerOnToPowerGood = 0x01; + UsbHubDescr->bHubControlCurrent = 0x00; + UsbHubDescr->bRemoveAndPowerMask[0] = 0x00; + UsbHubDescr->bRemoveAndPowerMask[1] = 0x00; + UsbHubDescr->bRemoveAndPowerMask[2] = 0xff; + break; + } + default: + { + DPRINT1("Unknown UrbControlVendorClassRequest Value\n"); + } + } + break; + } + case USB_REQUEST_GET_STATUS: + { + DPRINT1("DEVICE: USB_REQUEST_GET_STATUS for port %d\n", Urb->UrbControlVendorClassRequest.Index); + if (Urb->UrbControlVendorClassRequest.Index == 1) + { + ASSERT(Urb->UrbControlVendorClassRequest.TransferBuffer != 0); + ((PULONG)Urb->UrbControlVendorClassRequest.TransferBuffer)[0] = 0; + } + break; + } + default: + { + DPRINT1("Unhandled URB request for class device\n"); + Urb->UrbHeader.Status = USBD_STATUS_INVALID_URB_FUNCTION; + } + } + break; + } + case URB_FUNCTION_CLASS_OTHER: + { + DPRINT("URB_FUNCTION_CLASS_OTHER\n"); + /* FIXME: Each one of these needs to make sure that the index value is a valid for the number of ports and return STATUS_UNSUCCESSFUL is not */ + + switch (Urb->UrbControlVendorClassRequest.Request) + { + case USB_REQUEST_GET_STATUS: + { + DPRINT("USB_REQUEST_GET_STATUS Port %d\n", Urb->UrbControlVendorClassRequest.Index); + + ASSERT(Urb->UrbControlVendorClassRequest.TransferBuffer != 0); + DPRINT("PortStatus %x\n", PdoDeviceExtension->Ports[Urb->UrbControlVendorClassRequest.Index-1].PortStatus); + DPRINT("PortChange %x\n", PdoDeviceExtension->Ports[Urb->UrbControlVendorClassRequest.Index-1].PortChange); + ((PUSHORT)Urb->UrbControlVendorClassRequest.TransferBuffer)[0] = PdoDeviceExtension->Ports[Urb->UrbControlVendorClassRequest.Index-1].PortStatus; + ((PUSHORT)Urb->UrbControlVendorClassRequest.TransferBuffer)[1] = PdoDeviceExtension->Ports[Urb->UrbControlVendorClassRequest.Index-1].PortChange; + break; + } + case USB_REQUEST_CLEAR_FEATURE: + { + DPRINT("USB_REQUEST_CLEAR_FEATURE Port %d, value %x\n", Urb->UrbControlVendorClassRequest.Index, + Urb->UrbControlVendorClassRequest.Value); + switch (Urb->UrbControlVendorClassRequest.Value) + { + case C_PORT_CONNECTION: + PdoDeviceExtension->Ports[Urb->UrbControlVendorClassRequest.Index-1].PortChange &= ~USB_PORT_STATUS_CONNECT; + break; + case C_PORT_RESET: + PdoDeviceExtension->Ports[Urb->UrbControlVendorClassRequest.Index-1].PortChange &= ~USB_PORT_STATUS_RESET; + break; + default: + DPRINT1("Unknown Value for Clear Feature %x \n", Urb->UrbControlVendorClassRequest.Value); + break; + } + break; + } + case USB_REQUEST_SET_FEATURE: + { + DPRINT("USB_REQUEST_SET_FEATURE Port %d, value %x\n", Urb->UrbControlVendorClassRequest.Index, + Urb->UrbControlVendorClassRequest.Value); + + switch(Urb->UrbControlVendorClassRequest.Value) + { + case PORT_RESET: + { + PdoDeviceExtension->Ports[Urb->UrbControlVendorClassRequest.Index-1].PortStatus |= USB_PORT_STATUS_ENABLE; + ResetPort(FdoDeviceExtension, Urb->UrbControlVendorClassRequest.Index-1); + + break; + } + case PORT_ENABLE: + { + DPRINT1("PORT_ENABLE not implemented\n"); + break; + } + case PORT_POWER: + { + DPRINT1("PORT_POWER not implemented\n"); + break; + } + default: + { + DPRINT1("Unknown Set Feature!\n"); + break; + } + } + break; + } + case USB_REQUEST_SET_ADDRESS: + { + DPRINT1("USB_REQUEST_SET_ADDRESS\n"); + break; + } + case USB_REQUEST_GET_DESCRIPTOR: + { + DPRINT1("USB_REQUEST_GET_DESCRIPTOR\n"); + break; + } + case USB_REQUEST_SET_DESCRIPTOR: + { + DPRINT1("USB_REQUEST_SET_DESCRIPTOR\n"); + break; + } + case USB_REQUEST_GET_CONFIGURATION: + { + DPRINT1("USB_REQUEST_GET_CONFIGURATION\n"); + break; + } + case USB_REQUEST_SET_CONFIGURATION: + { + DPRINT1("USB_REQUEST_SET_CONFIGURATION\n"); + break; + } + case USB_REQUEST_GET_INTERFACE: + { + DPRINT1("USB_REQUEST_GET_INTERFACE\n"); + break; + } + case USB_REQUEST_SET_INTERFACE: + { + DPRINT1("USB_REQUEST_SET_INTERFACE\n"); + break; + } + case USB_REQUEST_SYNC_FRAME: + { + DPRINT1("USB_REQUEST_SYNC_FRAME\n"); + break; + } + default: + { + DPRINT1("Unknown Function Class Unknown request\n"); + break; + } + } + break; + } + default: + { + DPRINT1("Unhandled URB %x\n", Urb->UrbHeader.Function); + Urb->UrbHeader.Status = USBD_STATUS_INVALID_URB_FUNCTION; + } + + } + + Irp->IoStatus.Status = Status; + Irp->IoStatus.Information = Information; + + if (Urb->UrbHeader.Status == USBD_STATUS_SUCCESS) + { + /* Fake a successful Control Transfer */ + Urb->UrbHeader.Function = 0x08; + Urb->UrbHeader.UsbdFlags = 0; + } + + return Status; +} + +VOID +CompletePendingURBRequest(PPDO_DEVICE_EXTENSION DeviceExtension) +{ + PLIST_ENTRY NextIrp = NULL; KIRQL oldIrql; PIRP Irp = NULL; - URB *Urb; KeAcquireSpinLock(&DeviceExtension->IrpQueueLock, &oldIrql); @@ -69,467 +540,13 @@ CompletePendingURBRequest(PPDO_DEVICE_EXTENSION DeviceExtension) if (!Irp) break; - Stack = IoGetCurrentIrpStackLocation(Irp); - ASSERT(Stack); - - Urb = (PURB) Stack->Parameters.Others.Argument1; - - ASSERT(Urb); - - Information = 0; - Status = STATUS_SUCCESS; - - DPRINT("TransferBuffer %x\n", Urb->UrbControlDescriptorRequest.TransferBuffer); - DPRINT("TransferBufferLength %x\n", Urb->UrbControlDescriptorRequest.TransferBufferLength); - DPRINT("UsbdDeviceHandle = %x\n", Urb->UrbHeader.UsbdDeviceHandle); - - UsbDevice = Urb->UrbHeader.UsbdDeviceHandle; - /* UsbdDeviceHandle of 0 is root hub */ - if (UsbDevice == NULL) - UsbDevice = DeviceExtension->UsbDevices[0]; - - /* Assume URB success */ - Urb->UrbHeader.Status = USBD_STATUS_SUCCESS; - /* Set the DeviceHandle to the Internal Device */ - Urb->UrbHeader.UsbdDeviceHandle = UsbDevice; - - switch (Urb->UrbHeader.Function) - { - case URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER: - { - DPRINT("URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:\n"); - DPRINT("--->TransferBufferLength %x\n",Urb->UrbBulkOrInterruptTransfer.TransferBufferLength); - DPRINT("--->TransferBuffer %x\n",Urb->UrbBulkOrInterruptTransfer.TransferBuffer); - DPRINT("--->PipeHandle %x\n",Urb->UrbBulkOrInterruptTransfer.PipeHandle); - DPRINT("---->(PVOID)&UsbDevice->EndPointDescriptor %x\n", (PVOID)&UsbDevice->ActiveInterface->EndPoints[0]->EndPointDescriptor); - DPRINT("--->TransferFlags %x\n", Urb->UrbBulkOrInterruptTransfer.TransferFlags); - ASSERT(Urb->UrbBulkOrInterruptTransfer.TransferBuffer != NULL); - RtlZeroMemory(Urb->UrbBulkOrInterruptTransfer.TransferBuffer, Urb->UrbBulkOrInterruptTransfer.TransferBufferLength); - - if (UsbDevice == DeviceExtension->UsbDevices[0]) - { - if (Urb->UrbBulkOrInterruptTransfer.TransferFlags & (USBD_TRANSFER_DIRECTION_IN | USBD_SHORT_TRANSFER_OK)) - { - LONG i; - for (i = 0; i < 8; i++) - { - if (i == 0){ - DPRINT("PortStatus %x\n", DeviceExtension->Ports[i].PortStatus); - DPRINT("PortChange %x\n", DeviceExtension->Ports[i].PortChange);} - if (DeviceExtension->Ports[i].PortChange) - { - DPRINT1("Inform hub driver that port %d has changed\n", i+1); - ((PUCHAR)Urb->UrbBulkOrInterruptTransfer.TransferBuffer)[0] = 1 << ((i + 1) & 7); - } - } - } - else - { - Urb->UrbHeader.Status = USBD_STATUS_INVALID_PARAMETER; - Status = STATUS_UNSUCCESSFUL; - DPRINT1("Invalid transfer flags for SCE\n"); - } - } - else - DPRINT1("Interrupt Transfer not for hub\n"); - break; - } - case URB_FUNCTION_GET_STATUS_FROM_DEVICE: - { - DPRINT("Get Status from Device\n"); - DPRINT("Index : %d\n", Urb->UrbControlGetStatusRequest.Index); - - if (Urb->UrbControlGetStatusRequest.Index == 0) - { - ASSERT(Urb->UrbBulkOrInterruptTransfer.TransferBuffer != NULL); - *(PUSHORT)Urb->UrbControlGetStatusRequest.TransferBuffer = USB_PORT_STATUS_CONNECT | USB_PORT_STATUS_ENABLE; - } - else - { - DPRINT1("Uknown identifier\n"); - Urb->UrbHeader.Status = USBD_STATUS_INVALID_URB_FUNCTION; - Status = STATUS_UNSUCCESSFUL; - } - break; - } - case URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE: - { - switch(Urb->UrbControlDescriptorRequest.DescriptorType) - { - case USB_DEVICE_DESCRIPTOR_TYPE: - { - DPRINT1("USB DEVICE DESC\n"); - if (Urb->UrbControlDescriptorRequest.TransferBufferLength >= sizeof(USB_DEVICE_DESCRIPTOR)) - { - Urb->UrbControlDescriptorRequest.TransferBufferLength = sizeof(USB_DEVICE_DESCRIPTOR); - } - ASSERT(Urb->UrbControlDescriptorRequest.TransferBuffer != NULL); - RtlCopyMemory(Urb->UrbControlDescriptorRequest.TransferBuffer, - &UsbDevice->DeviceDescriptor, - Urb->UrbControlDescriptorRequest.TransferBufferLength); - break; - } - case USB_CONFIGURATION_DESCRIPTOR_TYPE: - { - PUCHAR BufPtr; - LONG i, j; - - DPRINT1("USB CONFIG DESC\n"); - - if (Urb->UrbControlDescriptorRequest.TransferBufferLength >= UsbDevice->ActiveConfig->ConfigurationDescriptor.wTotalLength) - { - Urb->UrbControlDescriptorRequest.TransferBufferLength = UsbDevice->ActiveConfig->ConfigurationDescriptor.wTotalLength; - } - else - { - DPRINT1("Buffer to small!!!\n"); - //ASSERT(FALSE); - } - - ASSERT(Urb->UrbControlDescriptorRequest.TransferBuffer); - BufPtr = (PUCHAR)Urb->UrbControlDescriptorRequest.TransferBuffer; - - /* Copy the Configuration Descriptor */ - RtlCopyMemory(BufPtr, &UsbDevice->ActiveConfig->ConfigurationDescriptor, sizeof(USB_CONFIGURATION_DESCRIPTOR)); - BufPtr += sizeof(USB_CONFIGURATION_DESCRIPTOR); - for (i = 0; i < UsbDevice->ActiveConfig->ConfigurationDescriptor.bNumInterfaces; i++) - { - /* Copy the Interface Descriptor */ - RtlCopyMemory(BufPtr, &UsbDevice->ActiveConfig->Interfaces[i]->InterfaceDescriptor, sizeof(USB_INTERFACE_DESCRIPTOR)); - BufPtr += sizeof(USB_INTERFACE_DESCRIPTOR); - for (j = 0; j < UsbDevice->ActiveConfig->Interfaces[i]->InterfaceDescriptor.bNumEndpoints; j++) - { - /* Copy the EndPoint Descriptor */ - RtlCopyMemory(BufPtr, &UsbDevice->ActiveConfig->Interfaces[i]->EndPoints[j]->EndPointDescriptor, sizeof(USB_ENDPOINT_DESCRIPTOR)); - BufPtr += sizeof(USB_ENDPOINT_DESCRIPTOR); - } - } - - break; - } - case USB_STRING_DESCRIPTOR_TYPE: - { - DPRINT1("Usb String Descriptor not implemented\n"); - break; - } - default: - { - DPRINT1("Descriptor Type %x not supported!\n", Urb->UrbControlDescriptorRequest.DescriptorType); - } - } - break; - } - case URB_FUNCTION_SELECT_CONFIGURATION: - { - PUSBD_INTERFACE_INFORMATION InterfaceInfo; - LONG iCount, pCount; - - DPRINT("Selecting Configuration\n"); - DPRINT("Length %x\n", Urb->UrbHeader.Length); - DPRINT("Urb->UrbSelectConfiguration.ConfigurationHandle %x\n",Urb->UrbSelectConfiguration.ConfigurationHandle); - - if (Urb->UrbSelectConfiguration.ConfigurationDescriptor) - { - DPRINT("ConfigurationDescriptor = %p\n", Urb->UrbSelectConfiguration.ConfigurationDescriptor); - DPRINT(" bLength = %d\n", Urb->UrbSelectConfiguration.ConfigurationDescriptor->bLength); - DPRINT(" bDescriptorType = %d\n", Urb->UrbSelectConfiguration.ConfigurationDescriptor->bDescriptorType); - DPRINT(" wTotalLength = %d\n", Urb->UrbSelectConfiguration.ConfigurationDescriptor->wTotalLength); - DPRINT(" bNumInterfaces = %d\n", Urb->UrbSelectConfiguration.ConfigurationDescriptor->bNumInterfaces); - DPRINT(" bConfigurationValue = %d\n", Urb->UrbSelectConfiguration.ConfigurationDescriptor->bConfigurationValue); - DPRINT(" iConfiguration = %d\n", Urb->UrbSelectConfiguration.ConfigurationDescriptor->iConfiguration); - DPRINT(" bmAttributes = %04x\n", Urb->UrbSelectConfiguration.ConfigurationDescriptor->bmAttributes); - DPRINT(" MaxPower = %d\n", Urb->UrbSelectConfiguration.ConfigurationDescriptor->MaxPower); - - - Urb->UrbSelectConfiguration.ConfigurationHandle = (PVOID)&DeviceExtension->UsbDevices[0]->ActiveConfig->ConfigurationDescriptor; - DPRINT("ConfigHandle %x\n", Urb->UrbSelectConfiguration.ConfigurationHandle); - InterfaceInfo = &Urb->UrbSelectConfiguration.Interface; - - for (iCount = 0; iCount < Urb->UrbSelectConfiguration.ConfigurationDescriptor->bNumInterfaces; iCount++) - { - DPRINT("InterfaceInformation[%d]\n", iCount); - DPRINT(" Length = %d\n", InterfaceInfo->Length); - DPRINT(" InterfaceNumber = %d\n", InterfaceInfo->InterfaceNumber); - DPRINT(" AlternateSetting = %d\n", InterfaceInfo->AlternateSetting); - DPRINT(" Class = %02x\n", (ULONG)InterfaceInfo->Class); - DPRINT(" SubClass = %02x\n", (ULONG)InterfaceInfo->SubClass); - DPRINT(" Protocol = %02x\n", (ULONG)InterfaceInfo->Protocol); - DPRINT(" Reserved = %02x\n", (ULONG)InterfaceInfo->Reserved); - DPRINT(" InterfaceHandle = %p\n", InterfaceInfo->InterfaceHandle); - DPRINT(" NumberOfPipes = %d\n", InterfaceInfo->NumberOfPipes); - InterfaceInfo->InterfaceHandle = (PVOID)&UsbDevice->ActiveInterface->InterfaceDescriptor; - InterfaceInfo->Class = UsbDevice->ActiveInterface->InterfaceDescriptor.bInterfaceClass; - InterfaceInfo->SubClass = UsbDevice->ActiveInterface->InterfaceDescriptor.bInterfaceSubClass; - InterfaceInfo->Protocol = UsbDevice->ActiveInterface->InterfaceDescriptor.bInterfaceProtocol; - InterfaceInfo->Reserved = 0; - - for (pCount = 0; pCount < InterfaceInfo->NumberOfPipes; pCount++) - { - DPRINT("Pipe[%d]\n", pCount); - DPRINT(" MaximumPacketSize = %d\n", InterfaceInfo->Pipes[pCount].MaximumPacketSize); - DPRINT(" EndpointAddress = %d\n", InterfaceInfo->Pipes[pCount].EndpointAddress); - DPRINT(" Interval = %d\n", InterfaceInfo->Pipes[pCount].Interval); - DPRINT(" PipeType = %d\n", InterfaceInfo->Pipes[pCount].PipeType); - DPRINT(" PipeHandle = %x\n", InterfaceInfo->Pipes[pCount].PipeHandle); - DPRINT(" MaximumTransferSize = %d\n", InterfaceInfo->Pipes[pCount].MaximumTransferSize); - DPRINT(" PipeFlags = %08x\n", InterfaceInfo->Pipes[pCount].PipeFlags); - InterfaceInfo->Pipes[pCount].MaximumPacketSize = UsbDevice->ActiveInterface->EndPoints[pCount]->EndPointDescriptor.wMaxPacketSize; - InterfaceInfo->Pipes[pCount].EndpointAddress = UsbDevice->ActiveInterface->EndPoints[pCount]->EndPointDescriptor.bEndpointAddress; - InterfaceInfo->Pipes[pCount].Interval = UsbDevice->ActiveInterface->EndPoints[pCount]->EndPointDescriptor.bInterval; - InterfaceInfo->Pipes[pCount].PipeType = UsbdPipeTypeInterrupt; - InterfaceInfo->Pipes[pCount].PipeHandle = (PVOID)&UsbDevice->ActiveInterface->EndPoints[pCount]->EndPointDescriptor; - if (InterfaceInfo->Pipes[pCount].MaximumTransferSize == 0) - InterfaceInfo->Pipes[pCount].MaximumTransferSize = 4096; - /* InterfaceInfo->Pipes[j].PipeFlags = 0; */ - } - InterfaceInfo = (PUSBD_INTERFACE_INFORMATION)((PUCHAR)InterfaceInfo + InterfaceInfo->Length); - } - } - else - { - /* FIXME: Set device to unconfigured state */ - } - break; - } - case URB_FUNCTION_CLASS_DEVICE: - { - switch (Urb->UrbControlVendorClassRequest.Request) - { - case USB_REQUEST_GET_DESCRIPTOR: - { - DPRINT1("TransferFlags %x\n", Urb->UrbControlVendorClassRequest.TransferFlags); - DPRINT1("Urb->UrbControlVendorClassRequest.Value %x\n", Urb->UrbControlVendorClassRequest.Value); - - switch (Urb->UrbControlVendorClassRequest.Value >> 8) - { - case USB_DEVICE_CLASS_AUDIO: - { - DPRINT1("USB_DEVICE_CLASS_AUDIO\n"); - break; - } - case USB_DEVICE_CLASS_COMMUNICATIONS: - { - DPRINT1("USB_DEVICE_CLASS_COMMUNICATIONS\n"); - break; - } - case USB_DEVICE_CLASS_HUMAN_INTERFACE: - { - DPRINT1("USB_DEVICE_CLASS_HUMAN_INTERFACE\n"); - break; - } - case USB_DEVICE_CLASS_MONITOR: - { - DPRINT1("USB_DEVICE_CLASS_MONITOR\n"); - break; - } - case USB_DEVICE_CLASS_PHYSICAL_INTERFACE: - { - DPRINT1("USB_DEVICE_CLASS_PHYSICAL_INTERFACE\n"); - break; - } - case USB_DEVICE_CLASS_POWER: - { - DPRINT1("USB_DEVICE_CLASS_POWER\n"); - break; - } - case USB_DEVICE_CLASS_PRINTER: - { - DPRINT1("USB_DEVICE_CLASS_PRINTER\n"); - break; - } - case USB_DEVICE_CLASS_STORAGE: - { - DPRINT1("USB_DEVICE_CLASS_STORAGE\n"); - break; - } - case USB_DEVICE_CLASS_RESERVED: - DPRINT1("Reserved!!!\n"); - case USB_DEVICE_CLASS_HUB: - { - - PUSB_HUB_DESCRIPTOR UsbHubDescr = Urb->UrbControlVendorClassRequest.TransferBuffer; - ASSERT(Urb->UrbControlVendorClassRequest.TransferBuffer != 0); - /* FIXME: Handle more than root hub? */ - if(Urb->UrbControlVendorClassRequest.TransferBufferLength >= sizeof(USB_HUB_DESCRIPTOR)) - { - Urb->UrbControlVendorClassRequest.TransferBufferLength = sizeof(USB_HUB_DESCRIPTOR); - } - else - { - /* FIXME: Handle this correctly */ - UsbHubDescr->bDescriptorLength = sizeof(USB_HUB_DESCRIPTOR); - UsbHubDescr->bDescriptorType = 0x29; - break; - } - DPRINT1("USB_DEVICE_CLASS_HUB request\n"); - UsbHubDescr->bDescriptorLength = sizeof(USB_HUB_DESCRIPTOR); - UsbHubDescr->bDescriptorType = 0x29; - UsbHubDescr->bNumberOfPorts = 0x08; - UsbHubDescr->wHubCharacteristics = 0x0012; - UsbHubDescr->bPowerOnToPowerGood = 0x01; - UsbHubDescr->bHubControlCurrent = 0x00; - UsbHubDescr->bRemoveAndPowerMask[0] = 0x00; - UsbHubDescr->bRemoveAndPowerMask[1] = 0x00; - UsbHubDescr->bRemoveAndPowerMask[2] = 0xff; - break; - } - default: - { - DPRINT1("Unknown UrbControlVendorClassRequest Value\n"); - } - } - break; - } - case USB_REQUEST_GET_STATUS: - { - DPRINT1("DEVICE: USB_REQUEST_GET_STATUS for port %d\n", Urb->UrbControlVendorClassRequest.Index); - - if (Urb->UrbControlVendorClassRequest.Index == 1) - { - ASSERT(Urb->UrbControlVendorClassRequest.TransferBuffer != 0); - ((PULONG)Urb->UrbControlVendorClassRequest.TransferBuffer)[0] = 0; - } - break; - } - default: - { - DPRINT1("Unhandled URB request for class device\n"); - Urb->UrbHeader.Status = USBD_STATUS_INVALID_URB_FUNCTION; - } - } - break; - } - case URB_FUNCTION_CLASS_OTHER: - { - switch (Urb->UrbControlVendorClassRequest.Request) - { - case USB_REQUEST_GET_STATUS: - { - DPRINT1("OTHER: USB_REQUEST_GET_STATUS for port %d\n", Urb->UrbControlVendorClassRequest.Index); - ASSERT(Urb->UrbControlVendorClassRequest.TransferBuffer != 0); - ((PUSHORT)Urb->UrbControlVendorClassRequest.TransferBuffer)[0] = DeviceExtension->Ports[Urb->UrbControlVendorClassRequest.Index-1].PortStatus; - ((PUSHORT)Urb->UrbControlVendorClassRequest.TransferBuffer)[1] = DeviceExtension->Ports[Urb->UrbControlVendorClassRequest.Index-1].PortChange; - break; - } - case USB_REQUEST_CLEAR_FEATURE: - { - DPRINT1("USB_REQUEST_CLEAR_FEATURE Port %d, value %x\n", Urb->UrbControlVendorClassRequest.Index, - Urb->UrbControlVendorClassRequest.Value); - switch (Urb->UrbControlVendorClassRequest.Value) - { - case C_PORT_CONNECTION: - DeviceExtension->Ports[Urb->UrbControlVendorClassRequest.Index-1].PortChange &= ~USB_PORT_STATUS_CONNECT; - break; - case C_PORT_RESET: - DeviceExtension->Ports[Urb->UrbControlVendorClassRequest.Index-1].PortChange &= ~USB_PORT_STATUS_RESET; - break; - default: - DPRINT1("Unknown Value for Clear Feature %x \n", Urb->UrbControlVendorClassRequest.Value); - break; - } - break; - } - case USB_REQUEST_SET_FEATURE: - { - DPRINT1("USB_REQUEST_SET_FEATURE Port %d, value %x\n", Urb->UrbControlVendorClassRequest.Index, - Urb->UrbControlVendorClassRequest.Value); - - switch(Urb->UrbControlVendorClassRequest.Value) - { - case PORT_RESET: - { - DeviceExtension->Ports[Urb->UrbControlVendorClassRequest.Index-1].PortChange |= USB_PORT_STATUS_RESET; - break; - } - case PORT_ENABLE: - { - DPRINT1("Unhandled Set Feature\n"); - break; - } - default: - { - DPRINT1("Unknown Set Feature!\n"); - break; - } - } - break; - } - case USB_REQUEST_SET_ADDRESS: - { - DPRINT1("USB_REQUEST_SET_ADDRESS\n"); - break; - } - case USB_REQUEST_GET_DESCRIPTOR: - { - DPRINT1("USB_REQUEST_GET_DESCRIPTOR\n"); - break; - } - case USB_REQUEST_SET_DESCRIPTOR: - { - DPRINT1("USB_REQUEST_SET_DESCRIPTOR\n"); - break; - } - case USB_REQUEST_GET_CONFIGURATION: - { - DPRINT1("USB_REQUEST_GET_CONFIGURATION\n"); - break; - } - case USB_REQUEST_SET_CONFIGURATION: - { - DPRINT1("USB_REQUEST_SET_CONFIGURATION\n"); - break; - } - case USB_REQUEST_GET_INTERFACE: - { - DPRINT1("USB_REQUEST_GET_INTERFACE\n"); - break; - } - case USB_REQUEST_SET_INTERFACE: - { - DPRINT1("USB_REQUEST_SET_INTERFACE\n"); - break; - } - case USB_REQUEST_SYNC_FRAME: - { - DPRINT1("USB_REQUEST_SYNC_FRAME\n"); - break; - } - default: - { - DPRINT1("Unknown Function Class Unknown request\n"); - break; - } - } - break; - } - default: - { - DPRINT1("Unhandled URB %x\n", Urb->UrbHeader.Function); - Urb->UrbHeader.Status = USBD_STATUS_INVALID_URB_FUNCTION; - } - - } - - Irp->IoStatus.Status = Status; - Irp->IoStatus.Information = Information; - - if (Urb->UrbHeader.Status == USBD_STATUS_SUCCESS) - { - /* Fake a successful Control Transfer */ - Urb->UrbHeader.Function = 0x08; - Urb->UrbHeader.UsbdFlags = 0; - } KeReleaseSpinLock(&DeviceExtension->IrpQueueLock, oldIrql); + HandleUrbRequest(DeviceExtension, Irp); IoCompleteRequest(Irp, IO_NO_INCREMENT); KeAcquireSpinLock(&DeviceExtension->IrpQueueLock, &oldIrql); - - if (DeviceExtension->HaltQueue) - break; } KeReleaseSpinLock(&DeviceExtension->IrpQueueLock, oldIrql); - if (!DeviceExtension->HaltQueue) - KeSetEvent(&DeviceExtension->QueueDrainedEvent, 0, FALSE); } diff --git a/drivers/usb/usbehci/misc.c b/drivers/usb/usbehci/misc.c index fb361e4f8f3..6c84c339f32 100644 --- a/drivers/usb/usbehci/misc.c +++ b/drivers/usb/usbehci/misc.c @@ -4,7 +4,7 @@ * FILE: drivers/usb/usbehci/misc.c * PURPOSE: Misceallenous operations. * PROGRAMMERS: - * Michael Martin + * Michael Martin (michael.martin@reactos.org) */ #include "usbehci.h" diff --git a/drivers/usb/usbehci/pdo.c b/drivers/usb/usbehci/pdo.c index 19e75345fd1..f8e83f4fbcd 100644 --- a/drivers/usb/usbehci/pdo.c +++ b/drivers/usb/usbehci/pdo.c @@ -4,7 +4,7 @@ * FILE: drivers/usb/usbehci/pdo.c * PURPOSE: USB EHCI device driver. * PROGRAMMERS: - * Michael Martin + * Michael Martin (michael.martin@reactos.org) */ #define INITGUID @@ -125,16 +125,56 @@ PdoDispatchInternalDeviceControl(PDEVICE_OBJECT DeviceObject, PIRP Irp) { case IOCTL_INTERNAL_USB_SUBMIT_URB: { + PUSB_DEVICE UsbDevice = NULL; URB *Urb; + ULONG i; Urb = (PURB) Stack->Parameters.Others.Argument1; - DPRINT("Header Length %d\n", Urb->UrbHeader.Length); - DPRINT("Header Function %d\n", Urb->UrbHeader.Function); - /* Queue all request for now, kernel thread will complete them */ - QueueURBRequest(PdoDeviceExtension, Irp); - Information = 0; - IoMarkIrpPending(Irp); - Status = STATUS_PENDING; + + UsbDevice = Urb->UrbHeader.UsbdDeviceHandle; + + if (UsbDevice == NULL) + UsbDevice = PdoDeviceExtension->UsbDevices[0]; + + if ((Urb->UrbHeader.Function == URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER) && + (UsbDevice == PdoDeviceExtension->UsbDevices[0])) + { + if (Urb->UrbBulkOrInterruptTransfer.PipeHandle == &UsbDevice->ActiveInterface->EndPoints[0]->EndPointDescriptor) + { + DPRINT1("PipeHandle doesnt match SCE PipeHandle\n"); + } + + /* Queue the Irp first */ + QueueURBRequest(PdoDeviceExtension, Irp); + + /* Check if there is any connected devices */ + for (i = 0; i < PdoDeviceExtension->NumberOfPorts; i++) + { + if (PdoDeviceExtension->Ports[i].PortChange == 0x01) + { + DPRINT1("Inform hub driver that port %d has changed\n", i+1); + ((PUCHAR)Urb->UrbBulkOrInterruptTransfer.TransferBuffer)[0] = 1 << ((i + 1) & 7); + Information = 0; + Status = STATUS_SUCCESS; + /* Assume URB success */ + Urb->UrbHeader.Status = USBD_STATUS_SUCCESS; + /* Set the DeviceHandle to the Internal Device */ + Urb->UrbHeader.UsbdDeviceHandle = UsbDevice; + + /* Request handled, Remove it from the queue */ + RemoveUrbRequest(PdoDeviceExtension, Irp); + break; + } + } + if (Status == STATUS_SUCCESS) break; + DPRINT1("Queueing IRP\n"); + IoMarkIrpPending(Irp); + Status = STATUS_PENDING; + break; + } + + Status = HandleUrbRequest(PdoDeviceExtension, Irp); + break; } case IOCTL_INTERNAL_USB_CYCLE_PORT: @@ -166,11 +206,11 @@ PdoDispatchInternalDeviceControl(PDEVICE_OBJECT DeviceObject, PIRP Irp) } case IOCTL_INTERNAL_USB_GET_DEVICE_HANDLE: { - DPRINT1("IOCTL_INTERNAL_USB_GET_DEVICE_HANDLE %x\n", IOCTL_INTERNAL_USB_GET_DEVICE_HANDLE); + DPRINT("Ehci: IOCTL_INTERNAL_USB_GET_DEVICE_HANDLE %x\n", Stack->Parameters.Others.Argument2); if (Stack->Parameters.Others.Argument1) { /* Return the root hubs devicehandle */ - DPRINT1("Returning RootHub Handle %x\n", PdoDeviceExtension->UsbDevices[0]); + DPRINT("Returning RootHub Handle %x\n", PdoDeviceExtension->UsbDevices[0]); *(PVOID *)Stack->Parameters.Others.Argument1 = (PVOID)PdoDeviceExtension->UsbDevices[0]; Status = STATUS_SUCCESS; } @@ -182,13 +222,13 @@ PdoDispatchInternalDeviceControl(PDEVICE_OBJECT DeviceObject, PIRP Irp) } case IOCTL_INTERNAL_USB_GET_HUB_COUNT: { - DPRINT1("IOCTL_INTERNAL_USB_GET_HUB_COUNT %x\n", IOCTL_INTERNAL_USB_GET_HUB_COUNT); + DPRINT("Ehci: IOCTL_INTERNAL_USB_GET_HUB_COUNT %x\n", IOCTL_INTERNAL_USB_GET_HUB_COUNT); ASSERT(Stack->Parameters.Others.Argument1 != NULL); if (Stack->Parameters.Others.Argument1) { /* FIXME: Determine the number of hubs between the usb device and root hub */ DPRINT1("RootHubCount %x\n", *(PULONG)Stack->Parameters.Others.Argument1); - *(PULONG)Stack->Parameters.Others.Argument1 = 0; + *(PULONG)Stack->Parameters.Others.Argument1 = 1; } Status = STATUS_SUCCESS; break; @@ -215,12 +255,14 @@ PdoDispatchInternalDeviceControl(PDEVICE_OBJECT DeviceObject, PIRP Irp) } case IOCTL_INTERNAL_USB_GET_ROOTHUB_PDO: { - DPRINT1("IOCTL_INTERNAL_USB_GET_ROOTHUB_PDO\n"); - + DPRINT("Ehci: IOCTL_INTERNAL_USB_GET_ROOTHUB_PDO Arg1 %x, Arg2 %x\n", Stack->Parameters.Others.Argument1, Stack->Parameters.Others.Argument2); if (Stack->Parameters.Others.Argument1) *(PVOID *)Stack->Parameters.Others.Argument1 = FdoDeviceExtension->Pdo; + + /* Windows usbehci driver gives the Pdo in both Arguments. */ if (Stack->Parameters.Others.Argument2) - *(PVOID *)Stack->Parameters.Others.Argument2 = IoGetAttachedDeviceReference(FdoDeviceExtension->DeviceObject); + //*(PVOID *)Stack->Parameters.Others.Argument2 = IoGetAttachedDeviceReference(FdoDeviceExtension->DeviceObject); + *(PVOID *)Stack->Parameters.Others.Argument2 = FdoDeviceExtension->Pdo; Information = 0; Status = STATUS_SUCCESS; @@ -229,7 +271,7 @@ PdoDispatchInternalDeviceControl(PDEVICE_OBJECT DeviceObject, PIRP Irp) case IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION: { PUSB_IDLE_CALLBACK_INFO CallBackInfo; - DPRINT1("IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION\n"); + DPRINT1("Ehci: IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION\n"); /* FIXME: Set Callback for safe power down */ CallBackInfo = Stack->Parameters.DeviceIoControl.Type3InputBuffer; DPRINT1("IdleCallback %x\n", CallBackInfo->IdleCallback); @@ -368,16 +410,20 @@ PdoDispatchPnp( UNICODE_STRING InterfaceSymLinkName; LONG i; + DPRINT1("Ehci: PDO StartDevice\n"); PdoDeviceExtension = (PPDO_DEVICE_EXTENSION)DeviceObject->DeviceExtension; FdoDeviceExtension = (PFDO_DEVICE_EXTENSION)PdoDeviceExtension->ControllerFdo->DeviceExtension; /* Create the root hub */ RootHubDevice = InternalCreateUsbDevice(1, 0, NULL, TRUE); - for (i = 0; i < 8; i++) + for (i = 0; i < PdoDeviceExtension->NumberOfPorts; i++) { - PdoDeviceExtension->Ports[i].PortStatus = USB_PORT_STATUS_ENABLE; + PdoDeviceExtension->Ports[i].PortStatus = USB_PORT_STATUS_HIGH_SPEED | 0x8000; PdoDeviceExtension->Ports[i].PortChange = 0; + + if (!FdoDeviceExtension->ECHICaps.HCSParams.PortPowerControl) + PdoDeviceExtension->Ports[i].PortStatus |= USB_PORT_STATUS_POWER; } RtlCopyMemory(&RootHubDevice->DeviceDescriptor, @@ -425,7 +471,7 @@ PdoDispatchPnp( PdoDeviceExtension->UsbDevices[0] = RootHubDevice; /* Create a thread to handle the URB's */ - +/* Status = PsCreateSystemThread(&PdoDeviceExtension->ThreadHandle, THREAD_ALL_ACCESS, NULL, @@ -436,18 +482,18 @@ PdoDispatchPnp( if (!NT_SUCCESS(Status)) DPRINT1("Failed Thread Creation with Status: %x\n", Status); - +*/ Status = IoRegisterDeviceInterface(DeviceObject, &GUID_DEVINTERFACE_USB_HUB, NULL, &InterfaceSymLinkName); if (!NT_SUCCESS(Status)) { DPRINT1("Failed to register interface\n"); - ASSERT(FALSE); + return Status; } else { Status = IoSetDeviceInterfaceState(&InterfaceSymLinkName, TRUE); if (!NT_SUCCESS(Status)) - ASSERT(FALSE); + return Status; } Status = STATUS_SUCCESS; @@ -455,6 +501,7 @@ PdoDispatchPnp( } case IRP_MN_QUERY_DEVICE_RELATIONS: { + DPRINT1("Ehci: PDO QueryDeviceRelations\n"); switch (Stack->Parameters.QueryDeviceRelations.Type) { case TargetDeviceRelation: @@ -499,6 +546,7 @@ PdoDispatchPnp( } case IRP_MN_QUERY_CAPABILITIES: { + DPRINT("Ehci: PDO Query Capabilities\n"); PDEVICE_CAPABILITIES DeviceCapabilities; ULONG i; @@ -538,6 +586,7 @@ PdoDispatchPnp( case IRP_MN_QUERY_ID: { + DPRINT("Ehci: PDO Query ID\n"); Status = PdoQueryId(DeviceObject, Irp, &Information); break; } @@ -549,6 +598,8 @@ PdoDispatchPnp( PPDO_DEVICE_EXTENSION PdoDeviceExtension; PFDO_DEVICE_EXTENSION FdoDeviceExtension; + DPRINT("Ehci: PDO Query Interface\n"); + PdoDeviceExtension = (PPDO_DEVICE_EXTENSION)DeviceObject->DeviceExtension; FdoDeviceExtension = (PFDO_DEVICE_EXTENSION)PdoDeviceExtension->ControllerFdo->DeviceExtension; @@ -558,10 +609,6 @@ PdoDispatchPnp( DPRINT1("Failed to create string from GUID!\n"); } - DPRINT("Interface GUID requested %wZ\n", &GuidString); - DPRINT("QueryInterface.Size %x\n", Stack->Parameters.QueryInterface.Size); - DPRINT("QueryInterface.Version %x\n", Stack->Parameters.QueryInterface.Version); - /* Assume success */ Status = STATUS_SUCCESS; Information = 0; diff --git a/drivers/usb/usbehci/urbreq.c b/drivers/usb/usbehci/urbreq.c index 86a88a899ea..8fdaf8149fb 100644 --- a/drivers/usb/usbehci/urbreq.c +++ b/drivers/usb/usbehci/urbreq.c @@ -4,7 +4,7 @@ * FILE: drivers/usb/usbehci/urbreq.c * PURPOSE: URB Related Functions. * PROGRAMMERS: - * Michael Martin (mjmartin@reactos.org) + * Michael Martin (michael.martin@reactos.org) */ #include "usbehci.h" @@ -125,6 +125,8 @@ ExecuteControlRequest(PFDO_DEVICE_EXTENSION DeviceExtension, PUSB_DEFAULT_PIPE_S DPRINT1("ExecuteControlRequest: Buffer %x, Length %x\n", Buffer, BufferLength); + ExAcquireFastMutex(&DeviceExtension->AsyncListMutex); + Base = (ULONG) DeviceExtension->ResourceMemory; /* Set up the QUEUE HEAD in memory */ @@ -198,7 +200,7 @@ ExecuteControlRequest(PFDO_DEVICE_EXTENSION DeviceExtension, PUSB_DEFAULT_PIPE_S UsbCmd->Run = FALSE; WRITE_REGISTER_ULONG((PULONG)(Base + EHCI_USBCMD), tmp); - if (CtrlSetup->bmRequestType._BM.Dir == BMREQUEST_DEVICE_TO_HOST) + if (SetupPacket->bmRequestType._BM.Dir == BMREQUEST_DEVICE_TO_HOST) { if ((Buffer) && (BufferLength)) { @@ -208,5 +210,7 @@ ExecuteControlRequest(PFDO_DEVICE_EXTENSION DeviceExtension, PUSB_DEFAULT_PIPE_S DPRINT1("Unable to copy data to buffer\n"); } + ExReleaseFastMutex(&DeviceExtension->AsyncListMutex); + return TRUE; } diff --git a/drivers/usb/usbehci/usbehci.c b/drivers/usb/usbehci/usbehci.c index 398f3b46bcb..a0cc00858ae 100644 --- a/drivers/usb/usbehci/usbehci.c +++ b/drivers/usb/usbehci/usbehci.c @@ -4,7 +4,7 @@ * FILE: drivers/usb/usbehci/usbehci.c * PURPOSE: USB EHCI device driver. * PROGRAMMERS: - * Michael Martin (mjmartin@reactos.com) + * Michael Martin (michael.martin@reactos.org) */ /* DEFINES *******************************************************************/ diff --git a/drivers/usb/usbehci/usbehci.h b/drivers/usb/usbehci/usbehci.h index 1867763de20..5e85ad31948 100644 --- a/drivers/usb/usbehci/usbehci.h +++ b/drivers/usb/usbehci/usbehci.h @@ -361,10 +361,13 @@ typedef struct _FDO_DEVICE_EXTENSION ULONG Vector; KIRQL Irql; + KTIMER UpdateTimer; KINTERRUPT_MODE Mode; BOOLEAN IrqShared; PKINTERRUPT EhciInterrupt; KDPC DpcObject; + KDPC TimerDpcObject; + KAFFINITY Affinity; ULONG MapRegisters; @@ -390,6 +393,9 @@ typedef struct _FDO_DEVICE_EXTENSION PHYSICAL_ADDRESS PeriodicFramListPhysAddr; PHYSICAL_ADDRESS AsyncListQueueHeadPtrPhysAddr; + FAST_MUTEX AsyncListMutex; + FAST_MUTEX FrameListMutex; + BOOLEAN AsyncComplete; PULONG ResourceBase; @@ -461,14 +467,23 @@ FdoDispatchInternalDeviceControl(PDEVICE_OBJECT DeviceObject, PIRP Irp); BOOLEAN ExecuteControlRequest(PFDO_DEVICE_EXTENSION DeviceExtension, PUSB_DEFAULT_PIPE_SETUP_PACKET SetupPacket, UCHAR Address, ULONG Port, PVOID Buffer, ULONG BufferLength); +VOID +RequestURBCancel (PPDO_DEVICE_EXTENSION DeviceExtension, PIRP Irp); + +VOID +RemoveUrbRequest(PPDO_DEVICE_EXTENSION PdoDeviceExtension, PIRP Irp); + VOID QueueURBRequest(PPDO_DEVICE_EXTENSION DeviceExtension, PIRP Irp); VOID CompletePendingURBRequest(PPDO_DEVICE_EXTENSION DeviceExtension); -VOID -URBRequestCancel (PDEVICE_OBJECT DeviceObject, PIRP Irp); +NTSTATUS +HandleUrbRequest(PPDO_DEVICE_EXTENSION DeviceExtension, PIRP Irp); PUSB_DEVICE DeviceHandleToUsbDevice(PPDO_DEVICE_EXTENSION PdoDeviceExtension, PUSB_DEVICE_HANDLE DeviceHandle); + +BOOLEAN +ResetPort(PFDO_DEVICE_EXTENSION FdoDeviceExtension, UCHAR Port); \ No newline at end of file diff --git a/drivers/usb/usbehci/usbiffn.c b/drivers/usb/usbehci/usbiffn.c index 5b4c5b4555c..4e9f4063f5a 100644 --- a/drivers/usb/usbehci/usbiffn.c +++ b/drivers/usb/usbehci/usbiffn.c @@ -4,7 +4,7 @@ * FILE: drivers/usb/usbehci/usbiffn.c * PURPOSE: Direct Call Interface Functions. * PROGRAMMERS: - * Michael Martin (mjmartin@reactos.org) + * Michael Martin (michael.martin@reactos.org) */ #include "usbehci.h" @@ -14,6 +14,7 @@ PVOID InternalCreateUsbDevice(UCHAR DeviceNumber, ULONG Port, PUSB_DEVICE Parent, BOOLEAN Hub) { PUSB_DEVICE UsbDevicePointer = NULL; + UsbDevicePointer = ExAllocatePoolWithTag(NonPagedPool, sizeof(USB_DEVICE), USB_POOL_TAG); if (!UsbDevicePointer) @@ -29,7 +30,7 @@ PVOID InternalCreateUsbDevice(UCHAR DeviceNumber, ULONG Port, PUSB_DEVICE Parent DPRINT1("This is the root hub\n"); } - UsbDevicePointer->Address = DeviceNumber; + UsbDevicePointer->Address = 0;// DeviceNumber; UsbDevicePointer->Port = Port; UsbDevicePointer->ParentDevice = Parent; @@ -42,14 +43,14 @@ VOID USB_BUSIFFN InterfaceReference(PVOID BusContext) { - DPRINT1("InterfaceReference called\n"); + DPRINT1("Ehci: InterfaceReference called\n"); } VOID USB_BUSIFFN InterfaceDereference(PVOID BusContext) { - DPRINT1("InterfaceDereference called\n"); + DPRINT1("Ehci: InterfaceDereference called\n"); } /* Bus Interface Hub V5 Functions */ @@ -65,7 +66,7 @@ CreateUsbDevice(PVOID BusContext, PUSB_DEVICE UsbDevice; LONG i = 0; PdoDeviceExtension = (PPDO_DEVICE_EXTENSION)((PDEVICE_OBJECT)BusContext)->DeviceExtension; - DPRINT("CreateUsbDevice: HubDeviceHandle %x, PortStatus %x, PortNumber %x\n", HubDeviceHandle, PortStatus, PortNumber); + DPRINT1("Ehci: CreateUsbDevice: HubDeviceHandle %x, PortStatus %x, PortNumber %x\n", HubDeviceHandle, PortStatus, PortNumber); if (PdoDeviceExtension->UsbDevices[0] != HubDeviceHandle) { @@ -84,8 +85,6 @@ CreateUsbDevice(PVOID BusContext, if (PdoDeviceExtension->UsbDevices[i] == NULL) { PdoDeviceExtension->UsbDevices[i] = (PUSB_DEVICE)UsbDevice; - PdoDeviceExtension->UsbDevices[i]->Address = i + 1; - PdoDeviceExtension->UsbDevices[i]->Port = PortNumber; break; } i++; @@ -116,7 +115,7 @@ InitializeUsbDevice(PVOID BusContext, PUSB_DEVICE_HANDLE DeviceHandle) PUCHAR Ptr; LONG i, j, k; - DPRINT1("InitializeUsbDevice called, device %x\n", DeviceHandle); + DPRINT1("Ehci: InitializeUsbDevice called, device %x\n", DeviceHandle); PdoDeviceExtension = (PPDO_DEVICE_EXTENSION)((PDEVICE_OBJECT)BusContext)->DeviceExtension; FdoDeviceExtension = (PFDO_DEVICE_EXTENSION)PdoDeviceExtension->ControllerFdo->DeviceExtension; @@ -139,8 +138,10 @@ InitializeUsbDevice(PVOID BusContext, PUSB_DEVICE_HANDLE DeviceHandle) Ptr = Buffer; /* Set the device address */ +/* CtrlSetup.bmRequestType._BM.Recipient = BMREQUEST_TO_DEVICE; CtrlSetup.bmRequestType._BM.Type = BMREQUEST_STANDARD; + CtrlSetup.bmRequestType._BM.Reserved = 0; CtrlSetup.bmRequestType._BM.Dir = BMREQUEST_HOST_TO_DEVICE; CtrlSetup.bRequest = USB_REQUEST_SET_ADDRESS; CtrlSetup.wValue.W = UsbDevice->Address; @@ -150,6 +151,8 @@ InitializeUsbDevice(PVOID BusContext, PUSB_DEVICE_HANDLE DeviceHandle) DPRINT1("Setting Address to %x\n", UsbDevice->Address); ResultOk = ExecuteControlRequest(FdoDeviceExtension, &CtrlSetup, 0, UsbDevice->Port, NULL, 0); +*/ + /* Get the Device Descriptor */ CtrlSetup.bmRequestType._BM.Recipient = BMREQUEST_TO_DEVICE; CtrlSetup.bmRequestType._BM.Type = BMREQUEST_STANDARD; @@ -209,6 +212,7 @@ InitializeUsbDevice(PVOID BusContext, PUSB_DEVICE_HANDLE DeviceHandle) sizeof(USB_CONFIGURATION) + sizeof(PVOID) * ConfigDesc->bNumInterfaces, USB_POOL_TAG); UsbDevice->Configs[i]->Device = UsbDevice; + RtlCopyMemory(&UsbDevice->Configs[0]->ConfigurationDescriptor, ConfigDesc, sizeof(USB_CONFIGURATION_DESCRIPTOR)); Ptr += ConfigDesc->bLength; @@ -252,7 +256,7 @@ GetUsbDescriptors(PVOID BusContext, PULONG ConfigDescriptorBufferLength) { PUSB_DEVICE UsbDevice; - DPRINT1("GetUsbDescriptor %x, %x, %x, %x\n", DeviceDescriptorBuffer, *DeviceDescriptorBufferLength, ConfigDescriptorBuffer, *ConfigDescriptorBufferLength); + DPRINT1("Ehci: GetUsbDescriptor %x, %x, %x, %x\n", DeviceDescriptorBuffer, *DeviceDescriptorBufferLength, ConfigDescriptorBuffer, *ConfigDescriptorBufferLength); UsbDevice = DeviceHandleToUsbDevice(BusContext, DeviceHandle); @@ -267,6 +271,7 @@ GetUsbDescriptors(PVOID BusContext, RtlCopyMemory(DeviceDescriptorBuffer, &UsbDevice->DeviceDescriptor, sizeof(USB_DEVICE_DESCRIPTOR)); *DeviceDescriptorBufferLength = sizeof(USB_DEVICE_DESCRIPTOR); } + if ((ConfigDescriptorBuffer) && (ConfigDescriptorBufferLength)) { RtlCopyMemory(ConfigDescriptorBuffer, &UsbDevice->ActiveConfig->ConfigurationDescriptor, sizeof(USB_CONFIGURATION_DESCRIPTOR)); @@ -340,7 +345,7 @@ NTSTATUS USB_BUSIFFN RestoreUsbDevice(PVOID BusContext, PUSB_DEVICE_HANDLE OldDeviceHandle, PUSB_DEVICE_HANDLE NewDeviceHandle) { - DPRINT1("RestoreUsbDevice called\n"); + DPRINT1("Ehci: RestoreUsbDevice called\n"); return STATUS_NOT_SUPPORTED; } @@ -348,7 +353,7 @@ NTSTATUS USB_BUSIFFN GetPortHackFlags(PVOID BusContext, PULONG Flags) { - DPRINT1("GetPortHackFlags called\n"); + DPRINT1("Ehci: GetPortHackFlags called\n"); return STATUS_NOT_SUPPORTED; } @@ -365,7 +370,7 @@ QueryDeviceInformation(PVOID BusContext, ULONG SizeNeeded; LONG i; - DPRINT1("QueryDeviceInformation (%x, %x, %x, %d, %x\n", BusContext, DeviceHandle, DeviceInformationBuffer, DeviceInformationBufferLength, LengthReturned); + DPRINT1("Ehci: QueryDeviceInformation (%x, %x, %x, %d, %x\n", BusContext, DeviceHandle, DeviceInformationBuffer, DeviceInformationBufferLength, LengthReturned); UsbDevice = DeviceHandleToUsbDevice(BusContext, DeviceHandle); @@ -418,7 +423,7 @@ GetControllerInformation(PVOID BusContext, { PUSB_CONTROLLER_INFORMATION_0 ControllerInfo; - DPRINT1("GetControllerInformation called\n"); + DPRINT1("Ehci: GetControllerInformation called\n"); ControllerInfo = ControllerInformationBuffer; @@ -447,7 +452,7 @@ NTSTATUS USB_BUSIFFN ControllerSelectiveSuspend(PVOID BusContext, BOOLEAN Enable) { - DPRINT1("ControllerSelectiveSuspend called\n"); + DPRINT1("Ehci: ControllerSelectiveSuspend called\n"); return STATUS_NOT_SUPPORTED; } @@ -464,13 +469,16 @@ GetExtendedHubInformation(PVOID BusContext, PPDO_DEVICE_EXTENSION PdoDeviceExtension = (PPDO_DEVICE_EXTENSION)((PDEVICE_OBJECT)BusContext)->DeviceExtension; PFDO_DEVICE_EXTENSION FdoDeviceExntension = (PFDO_DEVICE_EXTENSION)PdoDeviceExtension->ControllerFdo->DeviceExtension; LONG i; - DPRINT1("GetExtendedHubInformation\n"); + DPRINT1("Ehci: GetExtendedHubInformation BusContext %x, PDO %x\n", BusContext, HubPhysicalDeviceObject); /* Set the default return value */ *LengthReturned = 0; - /* Caller must have set InformationLevel to 0 */ + + DPRINT1("InformationLevel %x\n", UsbExtHubInfo->InformationLevel); + + /* Caller is suppose to have set InformationLevel to 0. However usbehci from MS seems to ignore this */ if (UsbExtHubInfo->InformationLevel != 0) { - return STATUS_NOT_SUPPORTED; + DPRINT1("InformationLevel should really be set to 0. Ignoring\n"); } UsbExtHubInfo->NumberOfPorts = 8; @@ -496,7 +504,7 @@ GetRootHubSymbolicName(PVOID BusContext, ULONG HubSymNameBufferLength, PULONG HubSymNameActualLength) { - DPRINT1("GetRootHubSymbolicName called\n"); + DPRINT1("Ehci: GetRootHubSymbolicName called\n"); if (HubSymNameBufferLength < 16) return STATUS_UNSUCCESSFUL; @@ -512,7 +520,7 @@ GetDeviceBusContext(PVOID HubBusContext, PVOID DeviceHandle) { PUSB_DEVICE UsbDevice; - DPRINT1("GetDeviceBusContext called\n"); + DPRINT1("Ehci: GetDeviceBusContext called\n"); UsbDevice = DeviceHandleToUsbDevice(HubBusContext, DeviceHandle); if (!UsbDevice) @@ -528,8 +536,7 @@ NTSTATUS USB_BUSIFFN Initialize20Hub(PVOID BusContext, PUSB_DEVICE_HANDLE HubDeviceHandle, ULONG TtCount) { - DPRINT1("Initialize20Hub called, HubDeviceHandle: %x\n", HubDeviceHandle); - + DPRINT1("Ehci: Initialize20Hub called, HubDeviceHandle: %x\n", HubDeviceHandle); /* FIXME: */ /* Create the Irp Queue for SCE */ /* Should queue be created for each device or each enpoint??? */ @@ -541,7 +548,7 @@ USB_BUSIFFN RootHubInitNotification(PVOID BusContext, PVOID CallbackContext, PRH_INIT_CALLBACK CallbackRoutine) { PPDO_DEVICE_EXTENSION PdoDeviceExtension; - DPRINT1("RootHubInitNotification %x, %x, %x\n", BusContext, CallbackContext, CallbackRoutine); + DPRINT1("Ehci: RootHubInitNotification %x, %x, %x\n", BusContext, CallbackContext, CallbackRoutine); PdoDeviceExtension = (PPDO_DEVICE_EXTENSION)((PDEVICE_OBJECT)BusContext)->DeviceExtension; PdoDeviceExtension->CallbackContext = CallbackContext; @@ -579,7 +586,7 @@ VOID USB_BUSIFFN SetDeviceHandleData(PVOID BusContext, PVOID DeviceHandle, PDEVICE_OBJECT UsbDevicePdo) { - DPRINT1("SetDeviceHandleData called\n"); + DPRINT1("Ehci: SetDeviceHandleData called\n"); } @@ -589,7 +596,7 @@ VOID USB_BUSIFFN GetUSBDIVersion(PVOID BusContext, PUSBD_VERSION_INFORMATION VersionInformation, PULONG HcdCapabilites) { - DPRINT1("GetUSBDIVersion called\n"); + DPRINT1("Ehci: GetUSBDIVersion called\n"); return; } @@ -597,7 +604,7 @@ NTSTATUS USB_BUSIFFN QueryBusTime(PVOID BusContext, PULONG CurrentFrame) { - DPRINT1("QueryBusTime called\n"); + DPRINT1("Ehci: QueryBusTime called\n"); return STATUS_NOT_SUPPORTED; } @@ -605,7 +612,7 @@ NTSTATUS USB_BUSIFFN SubmitIsoOutUrb(PVOID BusContext, PURB Urb) { - DPRINT1("SubmitIsoOutUrb called\n"); + DPRINT1("Ehci: SubmitIsoOutUrb called\n"); return STATUS_NOT_SUPPORTED; } @@ -617,7 +624,7 @@ QueryBusInformation(PVOID BusContext, PULONG BusInformationBufferLength, PULONG BusInformationActualLength) { - DPRINT1("QueryBusInformation called\n"); + DPRINT1("Ehci: QueryBusInformation called\n"); return STATUS_NOT_SUPPORTED; } @@ -625,7 +632,7 @@ BOOLEAN USB_BUSIFFN IsDeviceHighSpeed(PVOID BusContext) { - DPRINT1("IsDeviceHighSpeed called\n"); + DPRINT1("Ehci: IsDeviceHighSpeed called\n"); return TRUE; } @@ -633,6 +640,6 @@ NTSTATUS USB_BUSIFFN EnumLogEntry(PVOID BusContext, ULONG DriverTag, ULONG EnumTag, ULONG P1, ULONG P2) { - DPRINT1("EnumLogEntry called\n"); + DPRINT1("Ehci: EnumLogEntry called\n"); return STATUS_SUCCESS; } diff --git a/drivers/usb/usbhub/fdo.c b/drivers/usb/usbhub/fdo.c index 4b223dc5dfa..bea0e09e65f 100644 --- a/drivers/usb/usbhub/fdo.c +++ b/drivers/usb/usbhub/fdo.c @@ -4,499 +4,1187 @@ * FILE: drivers/usb/cromwell/hub/fdo.c * PURPOSE: IRP_MJ_PNP operations for FDOs * - * PROGRAMMERS: Herv Poussineau (hpoussin@reactos.com) + * PROGRAMMERS: Herv� Poussineau (hpoussin@reactos.com) + * Michael Martin (michael.martin@reactos.org) */ #define INITGUID +#include #define NDEBUG #include "usbhub.h" +#include "usbdlib.h" #define IO_METHOD_FROM_CTL_CODE(ctlCode) (ctlCode&0x00000003) -static VOID -UsbhubGetUserBuffers( - IN PIRP Irp, - IN ULONG IoControlCode, - OUT PVOID* BufferIn, - OUT PVOID* BufferOut) +typedef struct _PORTSTATUSANDCHANGE { - ASSERT(Irp); - ASSERT(BufferIn); - ASSERT(BufferOut); + USHORT Status; + USHORT Change; +} PORTSTATUSANDCHANGE, *PPORTSTATUSANDCHANGE; - switch (IO_METHOD_FROM_CTL_CODE(IoControlCode)) - { - case METHOD_BUFFERED: - *BufferIn = *BufferOut = Irp->AssociatedIrp.SystemBuffer; - break; - case METHOD_IN_DIRECT: - case METHOD_OUT_DIRECT: - *BufferIn = Irp->AssociatedIrp.SystemBuffer; - *BufferOut = MmGetSystemAddressForMdl(Irp->MdlAddress); - break; - case METHOD_NEITHER: - *BufferIn = IoGetCurrentIrpStackLocation(Irp)->Parameters.DeviceIoControl.Type3InputBuffer; - *BufferOut = Irp->UserBuffer; - break; - default: - /* Should never happen */ - *BufferIn = NULL; - *BufferOut = NULL; - break; - } +NTSTATUS +QueryRootHub(IN PDEVICE_OBJECT Pdo, IN ULONG IoControlCode, OUT PVOID OutParameter1, OUT PVOID OutParameter2); +NTSTATUS +WaitForUsbDeviceArrivalNotification(PDEVICE_OBJECT DeviceObject); +NTSTATUS +SubmitUrbToRootHub(IN PDEVICE_OBJECT Pdo, IN ULONG IoControlCode, IN PURB Urb); + +VOID DumpDeviceDescriptor(PUSB_DEVICE_DESCRIPTOR DeviceDescriptor) +{ + DPRINT1("Dumping Device Descriptor %x\n", DeviceDescriptor); + DPRINT1("bLength %x\n", DeviceDescriptor->bLength); + DPRINT1("bDescriptorType %x\n", DeviceDescriptor->bDescriptorType); + DPRINT1("bcdUSB %x\n", DeviceDescriptor->bcdUSB); + DPRINT1("bDeviceClass %x\n", DeviceDescriptor->bDeviceClass); + DPRINT1("bDeviceSubClass %x\n", DeviceDescriptor->bDeviceSubClass); + DPRINT1("bDeviceProtocol %x\n", DeviceDescriptor->bDeviceProtocol); + DPRINT1("bMaxPacketSize0 %x\n", DeviceDescriptor->bMaxPacketSize0); + DPRINT1("idVendor %x\n", DeviceDescriptor->idVendor); + DPRINT1("idProduct %x\n", DeviceDescriptor->idProduct); + DPRINT1("bcdDevice %x\n", DeviceDescriptor->bcdDevice); + DPRINT1("iManufacturer %x\n", DeviceDescriptor->iManufacturer); + DPRINT1("iProduct %x\n", DeviceDescriptor->iProduct); + DPRINT1("iSerialNumber %x\n", DeviceDescriptor->iSerialNumber); + DPRINT1("bNumConfigurations %x\n", DeviceDescriptor->bNumConfigurations); } -static NTSTATUS -UsbhubFdoQueryBusRelations( - IN PDEVICE_OBJECT DeviceObject, - OUT PDEVICE_RELATIONS* pDeviceRelations) +VOID DumpFullConfigurationDescriptor(PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor) { - PHUB_DEVICE_EXTENSION DeviceExtension; - PDEVICE_RELATIONS DeviceRelations; - PDEVICE_OBJECT Pdo; - PHUB_DEVICE_EXTENSION PdoExtension; - struct usb_device* dev; - ULONG i; - ULONG Children = 0; - ULONG NeededSize; - NTSTATUS Status; - CHAR Buffer[3][40]; + PUSB_INTERFACE_DESCRIPTOR InterfaceDescriptor; + PUSB_ENDPOINT_DESCRIPTOR EndpointDescriptor; + LONG i, j; - DeviceExtension = (PHUB_DEVICE_EXTENSION)DeviceObject->DeviceExtension; - dev = DeviceExtension->dev; + DPRINT1("Duming ConfigurationDescriptor %x\n", ConfigurationDescriptor); + DPRINT1("bLength %x\n", ConfigurationDescriptor->bLength); + DPRINT1("bDescriptorType %x\n", ConfigurationDescriptor->bDescriptorType); + DPRINT1("wTotalLength %x\n", ConfigurationDescriptor->wTotalLength); + DPRINT1("bNumInterfaces %x\n", ConfigurationDescriptor->bNumInterfaces); + DPRINT1("bConfigurationValue %x\n", ConfigurationDescriptor->bConfigurationValue); + DPRINT1("iConfiguration %x\n", ConfigurationDescriptor->iConfiguration); + DPRINT1("bmAttributes %x\n", ConfigurationDescriptor->bmAttributes); + DPRINT1("MaxPower %x\n", ConfigurationDescriptor->MaxPower); - /* Create PDOs that are missing */ - for (i = 0; i < dev->maxchild; i++) - { - if (dev->children[i] == NULL) - { - /* No child device at this place */ - continue; - } - Children++; - if (DeviceExtension->Children[i] != NULL) - { - /* PDO already exists */ - continue; - } - /* Need to create the PDO */ - Status = IoCreateDevice( - DeviceObject->DriverObject, - sizeof(HUB_DEVICE_EXTENSION), - NULL, /* Device name */ - FILE_DEVICE_CONTROLLER, - FILE_AUTOGENERATED_DEVICE_NAME, - FALSE, - &DeviceExtension->Children[i]); - if (!NT_SUCCESS(Status)) - { - DPRINT("Usbhub: IoCreateDevice() failed with status 0x%08lx\n", Status); - return Status; - } + InterfaceDescriptor = (PUSB_INTERFACE_DESCRIPTOR) ((ULONG_PTR)ConfigurationDescriptor + sizeof(USB_CONFIGURATION_DESCRIPTOR)); - Pdo = DeviceExtension->Children[i]; - Pdo->Flags |= DO_BUS_ENUMERATED_DEVICE; + for (i=0; i < ConfigurationDescriptor->bNumInterfaces; i++) + { + DPRINT1("- Dumping InterfaceDescriptor %x\n", InterfaceDescriptor); + DPRINT1(" bLength %x\n", InterfaceDescriptor->bLength); + DPRINT1(" bDescriptorType %x\n", InterfaceDescriptor->bDescriptorType); + DPRINT1(" bInterfaceNumber %x\n", InterfaceDescriptor->bInterfaceNumber); + DPRINT1(" bAlternateSetting %x\n", InterfaceDescriptor->bAlternateSetting); + DPRINT1(" bNumEndpoints %x\n", InterfaceDescriptor->bNumEndpoints); + DPRINT1(" bInterfaceClass %x\n", InterfaceDescriptor->bInterfaceClass); + DPRINT1(" bInterfaceSubClass %x\n", InterfaceDescriptor->bInterfaceSubClass); + DPRINT1(" bInterfaceProtocol %x\n", InterfaceDescriptor->bInterfaceProtocol); + DPRINT1(" iInterface %x\n", InterfaceDescriptor->iInterface); - PdoExtension = Pdo->DeviceExtension; - RtlZeroMemory(PdoExtension, sizeof(HUB_DEVICE_EXTENSION)); + EndpointDescriptor = (PUSB_ENDPOINT_DESCRIPTOR) ((ULONG_PTR)InterfaceDescriptor + sizeof(USB_INTERFACE_DESCRIPTOR)); - PdoExtension->IsFDO = FALSE; - PdoExtension->dev = dev->children[i]; + for (j=0; j < InterfaceDescriptor->bNumEndpoints; j++) + { + DPRINT1(" bLength %x\n", EndpointDescriptor->bLength); + DPRINT1(" bDescriptorType %x\n", EndpointDescriptor->bDescriptorType); + DPRINT1(" bEndpointAddress %x\n", EndpointDescriptor->bEndpointAddress); + DPRINT1(" bmAttributes %x\n", EndpointDescriptor->bmAttributes); + DPRINT1(" wMaxPacketSize %x\n", EndpointDescriptor->wMaxPacketSize); + DPRINT1(" bInterval %x\n", EndpointDescriptor->bInterval); + EndpointDescriptor = (PUSB_ENDPOINT_DESCRIPTOR) ((ULONG_PTR)EndpointDescriptor + sizeof(USB_ENDPOINT_DESCRIPTOR)); + } + InterfaceDescriptor = (PUSB_INTERFACE_DESCRIPTOR)(ULONG_PTR)EndpointDescriptor; + } - sprintf(Buffer[0], "%lu", i); - Status = UsbhubInitMultiSzString( - &PdoExtension->InstanceId, - Buffer[0], NULL); - if (!NT_SUCCESS(Status)) - goto ByeBye; - - DPRINT1("child #%lu: USB\\Vid_%04x&Pid_%04x&Rev_%04x\n", - i, - PdoExtension->dev->descriptor.idVendor, - PdoExtension->dev->descriptor.idProduct, - PdoExtension->dev->descriptor.bcdDevice); - sprintf(Buffer[0], "USB\\Vid_%04x&Pid_%04x&Rev_%04x", - PdoExtension->dev->descriptor.idVendor, - PdoExtension->dev->descriptor.idProduct, - PdoExtension->dev->descriptor.bcdDevice); - sprintf(Buffer[1], "USB\\Vid_%04x&Pid_%04x", - PdoExtension->dev->descriptor.idVendor, - PdoExtension->dev->descriptor.idProduct); - Status = UsbhubInitMultiSzString( - &PdoExtension->HardwareIds, - Buffer[0], Buffer[1], NULL); - if (!NT_SUCCESS(Status)) - goto ByeBye; - - Status = UsbhubInitMultiSzString( - &PdoExtension->DeviceId, - Buffer[1], NULL); - if (!NT_SUCCESS(Status)) - goto ByeBye; - - if (PdoExtension->dev->actconfig->desc.bNumInterfaces == 1) - { - /* Single-interface USB device */ - if (PdoExtension->dev->descriptor.bDeviceClass != 0) - { - /* Use these values for device class/sub class/protocol */ - sprintf(Buffer[0], "USB\\Class_%02x&SubClass_%02x&Prot_%02x", - PdoExtension->dev->descriptor.bDeviceClass, - PdoExtension->dev->descriptor.bDeviceSubClass, - PdoExtension->dev->descriptor.bDeviceProtocol); - sprintf(Buffer[1], "USB\\Class_%02x&SubClass_%02x", - PdoExtension->dev->descriptor.bDeviceClass, - PdoExtension->dev->descriptor.bDeviceSubClass); - sprintf(Buffer[2], "USB\\Class_%02x", - PdoExtension->dev->descriptor.bDeviceClass); - } - else - { - /* Use values specified in the interface descriptor */ - struct usb_host_interface *itf = PdoExtension->dev->actconfig->interface->altsetting; - sprintf(Buffer[0], "USB\\Class_%02x&SubClass_%02x&Prot_%02x", - itf->desc.bInterfaceClass, - itf->desc.bInterfaceSubClass, - itf->desc.bInterfaceProtocol); - sprintf(Buffer[1], "USB\\Class_%02x&SubClass_%02x", - itf->desc.bInterfaceClass, - itf->desc.bInterfaceSubClass); - sprintf(Buffer[2], "USB\\Class_%02x", - itf->desc.bInterfaceClass); - } - Status = UsbhubInitMultiSzString( - &PdoExtension->CompatibleIds, - Buffer[0], Buffer[1], Buffer[2], NULL); - } - else - { - /* Multiple-interface USB device */ - sprintf(Buffer[0], "USB\\DevClass_%02x&SubClass_%02x&Prot_%02x", - PdoExtension->dev->descriptor.bDeviceClass, - PdoExtension->dev->descriptor.bDeviceSubClass, - PdoExtension->dev->descriptor.bDeviceProtocol); - sprintf(Buffer[1], "USB\\DevClass_%02x&SubClass_%02x", - PdoExtension->dev->descriptor.bDeviceClass, - PdoExtension->dev->descriptor.bDeviceSubClass); - sprintf(Buffer[2], "USB\\DevClass_%02x", - PdoExtension->dev->descriptor.bDeviceClass); - Status = UsbhubInitMultiSzString( - &PdoExtension->CompatibleIds, - Buffer[0], Buffer[1], Buffer[2], "USB\\COMPOSITE", NULL); - } - - if (!NT_SUCCESS(Status)) - goto ByeBye; - - Pdo->Flags &= ~DO_DEVICE_INITIALIZING; - } - - /* Fill returned structure */ - NeededSize = sizeof(DEVICE_RELATIONS); - if (Children > 1) - NeededSize += (Children - 1) * sizeof(PDEVICE_OBJECT); - DeviceRelations = (PDEVICE_RELATIONS)ExAllocatePool( - PagedPool, - NeededSize); - if (!DeviceRelations) - return STATUS_INSUFFICIENT_RESOURCES; - DeviceRelations->Count = Children; - Children = 0; - for (i = 0; i < USB_MAXCHILDREN; i++) - { - if (DeviceExtension->Children[i]) - { - ObReferenceObject(DeviceExtension->Children[i]); - DeviceRelations->Objects[Children++] = DeviceExtension->Children[i]; - } - } - ASSERT(Children == DeviceRelations->Count); - - *pDeviceRelations = DeviceRelations; - return STATUS_SUCCESS; - -ByeBye: - RtlFreeUnicodeString(&PdoExtension->DeviceId); - RtlFreeUnicodeString(&PdoExtension->InstanceId); - RtlFreeUnicodeString(&PdoExtension->HardwareIds); - RtlFreeUnicodeString(&PdoExtension->CompatibleIds); - IoDeleteDevice(Pdo); - return Status; } -NTSTATUS NTAPI -UsbhubPnpFdo( - IN PDEVICE_OBJECT DeviceObject, - IN PIRP Irp) +VOID DumpInterfaceInfo(PUSBD_INTERFACE_INFORMATION InterfaceInformation) { - PIO_STACK_LOCATION IrpSp; - NTSTATUS Status; - ULONG MinorFunction; - ULONG_PTR Information = 0; + PUSBD_PIPE_INFORMATION PipeInformation; + ULONG i; - IrpSp = IoGetCurrentIrpStackLocation(Irp); - MinorFunction = IrpSp->MinorFunction; + DPRINT1("IntefaceLenth %x\n",InterfaceInformation->Length); + DPRINT1("InterfaceNumber %x\n",InterfaceInformation->InterfaceNumber); + DPRINT1("AlternateSetting %x\n",InterfaceInformation->AlternateSetting); + DPRINT1("Class %x\n",InterfaceInformation->Class); + DPRINT1("SubClass %x\n",InterfaceInformation->SubClass); + DPRINT1("Protocol %x\n",InterfaceInformation->Protocol); + DPRINT1("Reserved %x\n",InterfaceInformation->Reserved); + DPRINT1("InterfaceHandle %x\n",InterfaceInformation->InterfaceHandle); + DPRINT1("NumberOfPipes %x\n", InterfaceInformation->NumberOfPipes); - switch (MinorFunction) - { - case IRP_MN_START_DEVICE: /* 0x0 */ - { - DPRINT("Usbhub: IRP_MJ_PNP / IRP_MN_START_DEVICE\n"); - Status = ForwardIrpAndWait(DeviceObject, Irp); - break; - } + PipeInformation = &InterfaceInformation->Pipes[0]; - case IRP_MN_QUERY_DEVICE_RELATIONS: /* (optional) 0x7 */ - { - switch (IrpSp->Parameters.QueryDeviceRelations.Type) - { - case BusRelations: - { - PDEVICE_RELATIONS DeviceRelations = NULL; - DPRINT("Usbhub: IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_RELATIONS / BusRelations\n"); - Status = UsbhubFdoQueryBusRelations(DeviceObject, &DeviceRelations); - Information = (ULONG_PTR)DeviceRelations; - break; - } - case RemovalRelations: - { - DPRINT1("Usbhub: IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_RELATIONS / RemovalRelations\n"); - return ForwardIrpAndForget(DeviceObject, Irp); - } - default: - DPRINT1("Usbhub: IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_RELATIONS / Unknown type 0x%lx\n", - IrpSp->Parameters.QueryDeviceRelations.Type); - return ForwardIrpAndForget(DeviceObject, Irp); - } - break; - } + for (i = 0; i < InterfaceInformation->NumberOfPipes; i++) + { - default: - { - DPRINT1("Usbhub: IRP_MJ_PNP / unknown minor function 0x%lx\n", MinorFunction); - return ForwardIrpAndForget(DeviceObject, Irp); - } - } - Irp->IoStatus.Information = Information; - Irp->IoStatus.Status = Status; - IoCompleteRequest(Irp, IO_NO_INCREMENT); - return Status; + DPRINT1("MaximumPacketSize %x\n", PipeInformation->MaximumPacketSize); + DPRINT1("EndpointAddress %x\n", PipeInformation->EndpointAddress); + DPRINT1("Interval %x\n", PipeInformation->Interval); + DPRINT1("PipeType %x\n", PipeInformation->PipeType); + DPRINT1("PipeHandle %x\n", PipeInformation->PipeHandle); + DPRINT1("PipeFlags %x\n", PipeInformation->PipeFlags); + DPRINT1("MaximumTransferSize %x\n", PipeInformation->MaximumTransferSize); + PipeInformation = (PUSBD_PIPE_INFORMATION)((ULONG_PTR)PipeInformation + sizeof(USBD_PIPE_INFORMATION)); + } +} + + +VOID NTAPI +WorkerThread(IN PVOID Context) +{ + PHUB_DEVICE_EXTENSION DeviceExtension; + PDEVICE_OBJECT DeviceObject, Pdo; + PHUB_CHILDDEVICE_EXTENSION PdoExtension; + PURB Urb = NULL; + PORTSTATUSANDCHANGE PortStatusAndChange; + int PortLoop, DeviceCount; + NTSTATUS Status; + USB_DEVICE_DESCRIPTOR DevDesc; + USB_CONFIGURATION_DESCRIPTOR ConfigDesc; + ULONG DevDescSize, ConfigDescSize; + PUSB_STRING_DESCRIPTOR StringDesc; + USB_STRING_DESCRIPTOR LanguageIdDescriptor; + PWORKITEMDATA WorkItemData = (PWORKITEMDATA)Context; + + DeviceObject = (PDEVICE_OBJECT)WorkItemData->Context; + + DeviceExtension = (PHUB_DEVICE_EXTENSION)DeviceObject->DeviceExtension; + + /* Determine where in the children array to store this device info */ + for (DeviceCount = 0; DeviceCount < USB_MAXCHILDREN; DeviceCount++) + { + if (DeviceExtension->UsbChildren[DeviceCount] == NULL) + { + break; + } + } + + Urb = ExAllocatePoolWithTag(NonPagedPool, sizeof(URB), USB_HUB_TAG); + if (!Urb) + { + DPRINT1("Failed to allocate memory for URB!\n"); + ASSERT(FALSE); + } + + RtlZeroMemory(Urb, sizeof(URB)); + + for (PortLoop = 0; PortLoop < DeviceExtension->UsbExtHubInfo.NumberOfPorts; PortLoop++) + { + /* Get the port status */ + UsbBuildVendorRequest(Urb, + URB_FUNCTION_CLASS_OTHER, + sizeof(Urb->UrbControlVendorClassRequest), + USBD_TRANSFER_DIRECTION_OUT, + 0, + USB_REQUEST_GET_STATUS, + 0, + PortLoop + 1, + &PortStatusAndChange, + 0, + sizeof(PORTSTATUSANDCHANGE), + 0); + + Status = QueryRootHub(DeviceExtension->RootHubPdo, IOCTL_INTERNAL_USB_SUBMIT_URB, Urb, NULL); + if (!NT_SUCCESS(Status)) + { + DPRINT1("Failed to get PortStatus!\n"); + goto CleanUp; + } + + DPRINT("Notification Port %x:\n", PortLoop + 1); + DPRINT("Status %x\n", PortStatusAndChange.Status); + DPRINT("Change %x\n", PortStatusAndChange.Change); + + if (PortStatusAndChange.Change == USB_PORT_STATUS_RESET) + { + /* Clear the Reset */ + UsbBuildVendorRequest(Urb, + URB_FUNCTION_CLASS_OTHER, + sizeof(Urb->UrbControlVendorClassRequest), + USBD_TRANSFER_DIRECTION_IN, + 0, + USB_REQUEST_CLEAR_FEATURE, + C_PORT_RESET, + PortLoop + 1, + &PortStatusAndChange, + 0, + sizeof(PORTSTATUSANDCHANGE), + 0); + + Status = QueryRootHub(DeviceExtension->RootHubPdo, IOCTL_INTERNAL_USB_SUBMIT_URB, Urb, NULL); + if (!NT_SUCCESS(Status)) + { + DPRINT1("Failed to Clear the Port Reset with Status %x!\n", Status); + goto CleanUp; + } + + UsbBuildVendorRequest(Urb, URB_FUNCTION_CLASS_OTHER, + sizeof(Urb->UrbControlVendorClassRequest), + USBD_TRANSFER_DIRECTION_OUT, + 0, + USB_REQUEST_GET_STATUS, + 0, + PortLoop + 1, + &PortStatusAndChange, + 0, + sizeof(PORTSTATUSANDCHANGE), + 0); + + Status = QueryRootHub(DeviceExtension->RootHubPdo, IOCTL_INTERNAL_USB_SUBMIT_URB, Urb, NULL); + + DPRINT("Status %x\n", PortStatusAndChange.Status); + DPRINT("Change %x\n", PortStatusAndChange.Change); + + /* Create the UsbDevice */ + Status = DeviceExtension->HubInterface.CreateUsbDevice(DeviceExtension->RootHubPdo, + (PVOID)&DeviceExtension->UsbChildren[DeviceCount], + DeviceExtension->RootHubUsbDevice, + PortStatusAndChange.Status, + PortLoop + 1); + DPRINT1("CreateUsbDevice Status %x\n", Status); + + Status = DeviceExtension->HubInterface.InitializeUsbDevice(DeviceExtension->RootHubPdo, DeviceExtension->UsbChildren[DeviceCount]); + DPRINT1("InitializeUsbDevice Status %x\n", Status); + + DevDescSize = sizeof(USB_DEVICE_DESCRIPTOR); + ConfigDescSize = sizeof(USB_CONFIGURATION_DESCRIPTOR); + Status = DeviceExtension->HubInterface.GetUsbDescriptors(DeviceExtension->RootHubPdo, + DeviceExtension->UsbChildren[DeviceCount], + (PUCHAR)&DevDesc, + &DevDescSize, + (PUCHAR)&ConfigDesc, + &ConfigDescSize); + if (!NT_SUCCESS(Status)) + { + DPRINT1("Failed to Get Usb Deccriptors %x!\n", Status); + } + + DumpDeviceDescriptor(&DevDesc); + + Status = IoCreateDevice(DeviceObject->DriverObject, + sizeof(HUB_CHILDDEVICE_EXTENSION), + NULL, + FILE_DEVICE_CONTROLLER, + FILE_AUTOGENERATED_DEVICE_NAME, + FALSE, + &DeviceExtension->Children[DeviceCount]); + + if (!NT_SUCCESS(Status)) + { + DPRINT1("UsbHub; IoCreateDevice failed with status %x\n",Status); + goto CleanUp; + } + + Pdo = DeviceExtension->Children[DeviceCount]; + DPRINT1("Created New Device with %x\n", Pdo); + Pdo->Flags |= DO_BUS_ENUMERATED_DEVICE; + + PdoExtension = Pdo->DeviceExtension; + + RtlZeroMemory(PdoExtension, sizeof(HUB_CHILDDEVICE_EXTENSION)); + + PdoExtension->DeviceId = ExAllocatePoolWithTag(NonPagedPool, 32 * sizeof(WCHAR), USB_HUB_TAG); + RtlZeroMemory(PdoExtension->DeviceId, 32 * sizeof(WCHAR)); + swprintf(PdoExtension->DeviceId, L"USB\\Vid_%04x&Pid_%04x", DevDesc.idVendor, DevDesc.idProduct); + + + /* Get the LANGids */ + RtlZeroMemory(&LanguageIdDescriptor, sizeof(USB_STRING_DESCRIPTOR)); + UsbBuildGetDescriptorRequest(Urb, + sizeof(Urb->UrbControlDescriptorRequest), + USB_STRING_DESCRIPTOR_TYPE, + 0, + 0, + &LanguageIdDescriptor, + NULL, + sizeof(USB_STRING_DESCRIPTOR), + NULL); + + Urb->UrbHeader.UsbdDeviceHandle = DeviceExtension->UsbChildren[DeviceCount]; + Status = QueryRootHub(DeviceExtension->RootHubPdo, IOCTL_INTERNAL_USB_SUBMIT_URB, Urb, NULL); + + /* Get the length of the SerialNumber */ + StringDesc = ExAllocatePoolWithTag(PagedPool, 64, USB_HUB_TAG); + RtlZeroMemory(StringDesc, 64); + StringDesc->bLength = 0; + StringDesc->bDescriptorType = 0; + + UsbBuildGetDescriptorRequest(Urb, + sizeof(Urb->UrbControlDescriptorRequest), + USB_STRING_DESCRIPTOR_TYPE, + DevDesc.iSerialNumber, + LanguageIdDescriptor.bString[0], + StringDesc, + NULL, + 64, + NULL); + + Urb->UrbHeader.UsbdDeviceHandle = DeviceExtension->UsbChildren[DeviceCount]; + + Status = QueryRootHub(DeviceExtension->RootHubPdo, IOCTL_INTERNAL_USB_SUBMIT_URB, Urb, NULL); + + PdoExtension->InstanceId = ExAllocatePoolWithTag(NonPagedPool, (StringDesc->bLength + 1) * sizeof(WCHAR), USB_HUB_TAG); + DPRINT1("PdoExtension->InstanceId %x\n",PdoExtension->InstanceId); + + RtlZeroMemory(PdoExtension->InstanceId, (StringDesc->bLength + 1) * sizeof(WCHAR)); + RtlCopyMemory(PdoExtension->InstanceId, &StringDesc->bString[0], StringDesc->bLength); + DPRINT1("------>SerialNumber %S\n", PdoExtension->InstanceId); + + + + RtlZeroMemory(StringDesc, 64); + StringDesc->bLength = 0; + StringDesc->bDescriptorType = 0; + + UsbBuildGetDescriptorRequest(Urb, + sizeof(Urb->UrbControlDescriptorRequest), + USB_STRING_DESCRIPTOR_TYPE, + DevDesc.iProduct, + LanguageIdDescriptor.bString[0], + StringDesc, + NULL, + 64, + NULL); + + Urb->UrbHeader.UsbdDeviceHandle = DeviceExtension->UsbChildren[DeviceCount]; + + Status = QueryRootHub(DeviceExtension->RootHubPdo, IOCTL_INTERNAL_USB_SUBMIT_URB, Urb, NULL); + + PdoExtension->TextDescription = ExAllocatePoolWithTag(NonPagedPool, (StringDesc->bLength + 1) * sizeof(WCHAR), USB_HUB_TAG); + + RtlZeroMemory(PdoExtension->TextDescription, (StringDesc->bLength + 1) * sizeof(WCHAR)); + RtlCopyMemory(PdoExtension->TextDescription, &StringDesc->bString[0], StringDesc->bLength); + ExFreePool(StringDesc); + DPRINT1("------>TextDescription %S\n", PdoExtension->TextDescription); + + PdoExtension->IsFDO = FALSE; + PdoExtension->Parent = DeviceObject; + Pdo->Flags &= ~DO_DEVICE_INITIALIZING; + + ExFreePool(WorkItemData); + ExFreePool(Urb); + + IoInvalidateDeviceRelations(DeviceExtension->RootHubPdo, BusRelations); + return; + } + + /* Is a device connected to this port */ + if (PortStatusAndChange.Change == USB_PORT_STATUS_CONNECT) + { + /* Clear the Connect from ProtChange */ + UsbBuildVendorRequest(Urb, + URB_FUNCTION_CLASS_OTHER, + sizeof(Urb->UrbControlVendorClassRequest), + USBD_TRANSFER_DIRECTION_IN, + 0, + USB_REQUEST_CLEAR_FEATURE, + C_PORT_CONNECTION, + PortLoop + 1, + &PortStatusAndChange, + 0, + sizeof(PORTSTATUSANDCHANGE), + 0); + + Status = QueryRootHub(DeviceExtension->RootHubPdo, IOCTL_INTERNAL_USB_SUBMIT_URB, Urb, NULL); + if (!NT_SUCCESS(Status)) + { + DPRINT1("Failed to Clear the Port Connect!\n"); + goto CleanUp; + } + + /* Send the miniport controller a SCE request so when the port resets we can be informed */ + WaitForUsbDeviceArrivalNotification(DeviceObject); + + UsbBuildVendorRequest(Urb, + URB_FUNCTION_CLASS_OTHER, + sizeof(Urb->UrbControlVendorClassRequest), + USBD_TRANSFER_DIRECTION_IN, + 0, + USB_REQUEST_SET_FEATURE, + PORT_RESET, + PortLoop + 1, + &PortStatusAndChange, + 0, + sizeof(PORTSTATUSANDCHANGE), + 0); + + Status = QueryRootHub(DeviceExtension->RootHubPdo, IOCTL_INTERNAL_USB_SUBMIT_URB, Urb, NULL); + + if (!NT_SUCCESS(Status)) + { + DPRINT1("Failed to Reset the port!\n"); + goto CleanUp; + } + /* At this point the miniport will complete another SCE to inform of Reset completed */ + } + } + +CleanUp: + ExFreePool(WorkItemData); + ExFreePool(Urb); } NTSTATUS -UsbhubDeviceControlFdo( - IN PDEVICE_OBJECT DeviceObject, - IN PIRP Irp) +DeviceArrivalCompletion(PDEVICE_OBJECT DeviceObject, PIRP Irp, PVOID Context) { - PIO_STACK_LOCATION Stack; - ULONG IoControlCode; - PHUB_DEVICE_EXTENSION DeviceExtension; - ULONG LengthIn, LengthOut; - ULONG_PTR Information = 0; - PVOID BufferIn, BufferOut; - NTSTATUS Status; + PHUB_DEVICE_EXTENSION DeviceExtension; + LONG i; + PWORKITEMDATA WorkItemData; - Stack = IoGetCurrentIrpStackLocation(Irp); - LengthIn = Stack->Parameters.DeviceIoControl.InputBufferLength; - LengthOut = Stack->Parameters.DeviceIoControl.OutputBufferLength; - DeviceExtension = (PHUB_DEVICE_EXTENSION)DeviceObject->DeviceExtension; - IoControlCode = Stack->Parameters.DeviceIoControl.IoControlCode; - UsbhubGetUserBuffers(Irp, IoControlCode, &BufferIn, &BufferOut); + DeviceExtension = (PHUB_DEVICE_EXTENSION)((PDEVICE_OBJECT)Context)->DeviceExtension; - switch (IoControlCode) - { - case IOCTL_USB_GET_NODE_INFORMATION: - { - PUSB_NODE_INFORMATION NodeInformation; - struct usb_device* dev; - DPRINT("Usbhub: IOCTL_USB_GET_NODE_INFORMATION\n"); - if (LengthOut < sizeof(USB_NODE_INFORMATION)) - Status = STATUS_BUFFER_TOO_SMALL; - else if (BufferOut == NULL) - Status = STATUS_INVALID_PARAMETER; - else - { - NodeInformation = (PUSB_NODE_INFORMATION)BufferOut; - dev = ((PHUB_DEVICE_EXTENSION)DeviceObject->DeviceExtension)->dev; - NodeInformation->NodeType = UsbHub; - RtlCopyMemory( - &NodeInformation->u.HubInformation.HubDescriptor, - ((struct usb_hub *)usb_get_intfdata(to_usb_interface(&dev->actconfig->interface[0].dev)))->descriptor, - sizeof(USB_HUB_DESCRIPTOR)); - NodeInformation->u.HubInformation.HubIsBusPowered = dev->actconfig->desc.bmAttributes & 0x80; - Information = sizeof(USB_NODE_INFORMATION); - Status = STATUS_SUCCESS; - } - break; - } - case IOCTL_USB_GET_NODE_CONNECTION_NAME: - { - PHUB_DEVICE_EXTENSION DeviceExtension; - PUSB_NODE_CONNECTION_NAME ConnectionName; - DeviceExtension = (PHUB_DEVICE_EXTENSION)DeviceObject->DeviceExtension; - ConnectionName = (PUSB_NODE_CONNECTION_NAME)BufferOut; + for (i=0; i < DeviceExtension->UsbExtHubInfo.NumberOfPorts; i++) + DPRINT1("Port %x DeviceExtension->PortStatus %x\n",i+1, DeviceExtension->PortStatus[i]); - DPRINT("Usbhub: IOCTL_USB_GET_NODE_CONNECTION_NAME\n"); - if (LengthOut < sizeof(USB_NODE_CONNECTION_NAME)) - Status = STATUS_BUFFER_TOO_SMALL; - else if (BufferOut == NULL) - Status = STATUS_INVALID_PARAMETER; - else if (ConnectionName->ConnectionIndex < 1 - || ConnectionName->ConnectionIndex > USB_MAXCHILDREN) - Status = STATUS_INVALID_PARAMETER; - else if (DeviceExtension->Children[ConnectionName->ConnectionIndex - 1] == NULL) - Status = STATUS_INVALID_PARAMETER; - else - { - ULONG NeededStructureSize; - DeviceExtension = (PHUB_DEVICE_EXTENSION)DeviceExtension->Children[ConnectionName->ConnectionIndex - 1]->DeviceExtension; - NeededStructureSize = DeviceExtension->SymbolicLinkName.Length + sizeof(UNICODE_NULL) + FIELD_OFFSET(USB_NODE_CONNECTION_NAME, NodeName); - if (ConnectionName->ActualLength < NeededStructureSize / sizeof(WCHAR) - || LengthOut < NeededStructureSize) - { - /* Buffer too small */ - ConnectionName->ActualLength = NeededStructureSize / sizeof(WCHAR); - Information = sizeof(USB_NODE_CONNECTION_NAME); - Status = STATUS_BUFFER_TOO_SMALL; - } - else - { - RtlCopyMemory( - ConnectionName->NodeName, - DeviceExtension->SymbolicLinkName.Buffer, - DeviceExtension->SymbolicLinkName.Length); - ConnectionName->NodeName[DeviceExtension->SymbolicLinkName.Length / sizeof(WCHAR)] = UNICODE_NULL; - DPRINT("Usbhub: IOCTL_USB_GET_NODE_CONNECTION_NAME returns '%S'\n", ConnectionName->NodeName); - ConnectionName->ActualLength = NeededStructureSize / sizeof(WCHAR); - Information = NeededStructureSize; - Status = STATUS_SUCCESS; - } - Information = LengthOut; - } - break; - } - case IOCTL_USB_GET_NODE_CONNECTION_INFORMATION: - { - PUSB_NODE_CONNECTION_INFORMATION ConnectionInformation; - ULONG i, j, k; - struct usb_device* dev; - ULONG NumberOfOpenPipes = 0; - ULONG SizeOfOpenPipesArray; - ConnectionInformation = (PUSB_NODE_CONNECTION_INFORMATION)BufferOut; + IoFreeIrp(Irp); - DPRINT("Usbhub: IOCTL_USB_GET_NODE_CONNECTION_INFORMATION\n"); - if (LengthOut < sizeof(USB_NODE_CONNECTION_INFORMATION)) - Status = STATUS_BUFFER_TOO_SMALL; - else if (BufferOut == NULL) - Status = STATUS_INVALID_PARAMETER; - else if (ConnectionInformation->ConnectionIndex < 1 - || ConnectionInformation->ConnectionIndex > USB_MAXCHILDREN) - Status = STATUS_INVALID_PARAMETER; - else - { - dev = ((PHUB_DEVICE_EXTENSION)DeviceObject->DeviceExtension)->dev; - dev = dev->children[ConnectionInformation->ConnectionIndex - 1]; - if (dev == NULL) - { - /* No device connected to this port */ - RtlZeroMemory( - &ConnectionInformation->DeviceDescriptor, - sizeof(USB_NODE_CONNECTION_INFORMATION) - FIELD_OFFSET(USB_NODE_CONNECTION_INFORMATION, DeviceDescriptor)); - ConnectionInformation->ConnectionStatus = NoDeviceConnected; - Information = sizeof(USB_NODE_CONNECTION_INFORMATION); - Status = STATUS_SUCCESS; - break; - } - SizeOfOpenPipesArray = (LengthOut - FIELD_OFFSET(USB_NODE_CONNECTION_INFORMATION, PipeList)) / sizeof(USB_PIPE_INFO); - RtlCopyMemory( - &ConnectionInformation->DeviceDescriptor, - &dev->descriptor, - sizeof(USB_DEVICE_DESCRIPTOR)); - ConnectionInformation->CurrentConfigurationValue = dev->actconfig->desc.bConfigurationValue; - ConnectionInformation->LowSpeed = dev->speed == USB_SPEED_LOW || dev->speed == USB_SPEED_FULL; - ConnectionInformation->DeviceIsHub = dev->descriptor.bDeviceClass == USB_CLASS_HUB; - ConnectionInformation->DeviceAddress = dev->devnum; - ConnectionInformation->ConnectionStatus = DeviceConnected; + WorkItemData = ExAllocatePool(NonPagedPool, sizeof(WORKITEMDATA)); + if (!WorkItemData) + { + DPRINT1("Failed to allocate memory\n"); + return STATUS_NO_MEMORY; + } - for (i = 0; i < dev->actconfig->desc.bNumInterfaces; i++) - for (j = 0; j < dev->actconfig->interface[i].num_altsetting; j++) - for (k = 0; k < dev->actconfig->interface[i].altsetting[j].desc.bNumEndpoints; k++) - { - if (NumberOfOpenPipes < SizeOfOpenPipesArray) - { - PUSB_PIPE_INFO Pipe = &ConnectionInformation->PipeList[NumberOfOpenPipes]; - struct usb_host_endpoint* endpoint = &dev->actconfig->interface[i].altsetting[j].endpoint[k]; - RtlCopyMemory( - &Pipe->EndpointDescriptor, - &endpoint->desc, - endpoint->desc.bLength); - Pipe->ScheduleOffset = 0; /* FIXME */ - } - NumberOfOpenPipes++; - } - ConnectionInformation->NumberOfOpenPipes = NumberOfOpenPipes; - Information = sizeof(USB_NODE_CONNECTION_INFORMATION); - if (NumberOfOpenPipes <= SizeOfOpenPipesArray) - Status = STATUS_SUCCESS; - else - Status = STATUS_BUFFER_OVERFLOW; - } - break; - } - case IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION: - { - //PUSB_DESCRIPTOR_REQUEST Descriptor; - DPRINT("Usbhub: IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION\n"); - DPRINT1("Usbhub: IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION unimplemented\n"); - Information = 0; - Status = STATUS_NOT_IMPLEMENTED; - break; - } - case IOCTL_USB_GET_NODE_CONNECTION_DRIVERKEY_NAME: - { - PHUB_DEVICE_EXTENSION DeviceExtension; - PUSB_NODE_CONNECTION_DRIVERKEY_NAME StringDescriptor; - DPRINT("Usbhub: IOCTL_USB_GET_NODE_CONNECTION_DRIVERKEY_NAME\n"); - DeviceExtension = (PHUB_DEVICE_EXTENSION)DeviceObject->DeviceExtension; - StringDescriptor = (PUSB_NODE_CONNECTION_DRIVERKEY_NAME)BufferOut; - if (LengthOut < sizeof(USB_NODE_CONNECTION_DRIVERKEY_NAME)) - Status = STATUS_BUFFER_TOO_SMALL; - else if (StringDescriptor == NULL) - Status = STATUS_INVALID_PARAMETER; - else if (StringDescriptor->ConnectionIndex < 1 - || StringDescriptor->ConnectionIndex > USB_MAXCHILDREN) - Status = STATUS_INVALID_PARAMETER; - else if (DeviceExtension->Children[StringDescriptor->ConnectionIndex - 1] == NULL) - Status = STATUS_INVALID_PARAMETER; - else - { - ULONG StringSize; - Status = IoGetDeviceProperty( - DeviceExtension->Children[StringDescriptor->ConnectionIndex - 1], - DevicePropertyDriverKeyName, - LengthOut - FIELD_OFFSET(USB_NODE_CONNECTION_DRIVERKEY_NAME, DriverKeyName), - StringDescriptor->DriverKeyName, - &StringSize); - if (NT_SUCCESS(Status) || Status == STATUS_BUFFER_TOO_SMALL) - { - StringDescriptor->ActualLength = StringSize + FIELD_OFFSET(USB_NODE_CONNECTION_DRIVERKEY_NAME, DriverKeyName); - Information = LengthOut; - Status = STATUS_SUCCESS; - } - } - break; - } - default: - { - /* Pass Irp to lower driver */ - DPRINT1("Usbhub: Unknown IOCTL code 0x%lx\n", Stack->Parameters.DeviceIoControl.IoControlCode); - return ForwardIrpAndForget(DeviceObject, Irp); - } - } + RtlZeroMemory(WorkItemData, sizeof(WORKITEMDATA)); + WorkItemData->Context = Context; - Irp->IoStatus.Information = Information; - Irp->IoStatus.Status = Status; - IoCompleteRequest(Irp, IO_NO_INCREMENT); - return Status; + ExInitializeWorkItem(&WorkItemData->WorkItem, (PWORKER_THREAD_ROUTINE)WorkerThread, (PVOID)WorkItemData); + ExQueueWorkItem(&WorkItemData->WorkItem, DelayedWorkQueue); + return STATUS_MORE_PROCESSING_REQUIRED; +} + + +NTSTATUS +WaitForUsbDeviceArrivalNotification(PDEVICE_OBJECT DeviceObject) +{ + PURB Urb; + PIRP Irp; + NTSTATUS Status; + PIO_STACK_LOCATION Stack = NULL; + PHUB_DEVICE_EXTENSION DeviceExtension; + + DeviceExtension = (PHUB_DEVICE_EXTENSION)DeviceObject->DeviceExtension; + + Urb = &DeviceExtension->Urb; + + RtlZeroMemory(Urb, sizeof(URB)); + + /* Send URB to the miniports Status Change Endpoint SCE */ + UsbBuildInterruptOrBulkTransferRequest(Urb, + sizeof(struct _URB_BULK_OR_INTERRUPT_TRANSFER), + DeviceExtension->PipeHandle, + &DeviceExtension->PortStatus, + NULL, + sizeof(ULONG) * 2, + USBD_TRANSFER_DIRECTION_IN | USBD_SHORT_TRANSFER_OK, + NULL); + + Urb->UrbHeader.UsbdDeviceHandle = DeviceExtension->RootHubUsbDevice; + + Irp = IoAllocateIrp(DeviceExtension->RootHubPdo->StackSize, FALSE); + + if (Irp == NULL) + { + DPRINT("Usbhub: IoBuildDeviceIoControlRequest() failed\n"); + return STATUS_INSUFFICIENT_RESOURCES; + } + + + Irp->IoStatus.Status = STATUS_NOT_SUPPORTED; + Irp->IoStatus.Information = 0; + Irp->Flags = 0; + Irp->UserBuffer = NULL; + + Stack = IoGetCurrentIrpStackLocation(Irp); + Stack->DeviceObject = DeviceExtension->RootHubPdo; + + Stack = IoGetNextIrpStackLocation(Irp); + Stack->DeviceObject = DeviceExtension->RootHubPdo; + Stack->Parameters.Others.Argument1 = Urb; + Stack->Parameters.Others.Argument2 = NULL; + Stack->MajorFunction = IRP_MJ_INTERNAL_DEVICE_CONTROL; + Stack->Parameters.DeviceIoControl.IoControlCode = IOCTL_INTERNAL_USB_SUBMIT_URB; + + //IoSetCompletionRoutineEx(DeviceExtension->RootHubPdo, Irp, (PIO_COMPLETION_ROUTINE)DeviceArrivalCompletion, DeviceObject, TRUE, TRUE, TRUE); + IoSetCompletionRoutine(Irp, (PIO_COMPLETION_ROUTINE)DeviceArrivalCompletion, DeviceObject, TRUE, TRUE, TRUE); + + Status = IoCallDriver(DeviceExtension->RootHubPdo, Irp); + DPRINT1("SCE request status %x\n", Status); + + return STATUS_PENDING; +} + +NTSTATUS +SubmitUrbToRootHub(IN PDEVICE_OBJECT Pdo, IN ULONG IoControlCode, IN PURB Urb) +{ + PIRP Irp; + IO_STATUS_BLOCK IoStatus; + NTSTATUS Status; + PIO_STACK_LOCATION Stack = NULL; + + Irp = IoBuildDeviceIoControlRequest(IoControlCode, + Pdo, + NULL, 0, + NULL, 0, + TRUE, + NULL, + &IoStatus); + + if (Irp == NULL) + { + DPRINT("Usbhub: IoBuildDeviceIoControlRequest() failed\n"); + return STATUS_INSUFFICIENT_RESOURCES; + } + + /* Initialize the status block before sending the IRP */ + IoStatus.Status = STATUS_NOT_SUPPORTED; + IoStatus.Information = 0; + + Stack = IoGetNextIrpStackLocation(Irp); + + Stack->Parameters.Others.Argument1 = Urb; + Stack->Parameters.Others.Argument2 = NULL; + + Status = IoCallDriver(Pdo, Irp); + + return Status; +} + +NTSTATUS +QueryRootHub(IN PDEVICE_OBJECT Pdo, IN ULONG IoControlCode, OUT PVOID OutParameter1, OUT PVOID OutParameter2) +{ + KEVENT Event; + PIRP Irp; + IO_STATUS_BLOCK IoStatus; + NTSTATUS Status; + PIO_STACK_LOCATION Stack = NULL; + + KeInitializeEvent(&Event, NotificationEvent, FALSE); + + Irp = IoBuildDeviceIoControlRequest(IoControlCode, + Pdo, + NULL, 0, + NULL, 0, + TRUE, + &Event, + &IoStatus); + + if (Irp == NULL) + { + DPRINT("Usbhub: IoBuildDeviceIoControlRequest() failed\n"); + return STATUS_INSUFFICIENT_RESOURCES; + } + + /* Initialize the status block before sending the IRP */ + IoStatus.Status = STATUS_NOT_SUPPORTED; + IoStatus.Information = 0; + + Stack = IoGetNextIrpStackLocation(Irp); + + Stack->Parameters.Others.Argument1 = OutParameter1; + Stack->Parameters.Others.Argument2 = OutParameter2; + + Status = IoCallDriver(Pdo, Irp); + + if (Status == STATUS_PENDING) + { + DPRINT1("Usbhub: Operation pending\n"); + KeWaitForSingleObject(&Event, Suspended, KernelMode, FALSE, NULL); + Status = IoStatus.Status; + } + + return Status; +} + +NTSTATUS QueryInterface(IN PDEVICE_OBJECT Pdo, IN CONST GUID InterfaceType, IN LONG Size, IN LONG Version, OUT PVOID Interface) +{ + KEVENT Event; + PIRP Irp; + IO_STATUS_BLOCK IoStatus; + NTSTATUS Status; + PIO_STACK_LOCATION Stack = NULL; + + KeInitializeEvent(&Event, NotificationEvent, FALSE); + + Irp = IoBuildSynchronousFsdRequest(IRP_MJ_PNP, + Pdo, + NULL, + 0, + NULL, + &Event, + &IoStatus); + + Stack = IoGetNextIrpStackLocation(Irp); + Stack->MinorFunction = IRP_MN_QUERY_INTERFACE; + Stack->Parameters.QueryInterface.InterfaceType= &InterfaceType;//USB_BUS_INTERFACE_HUB_GUID; + Stack->Parameters.QueryInterface.Size = Size; + Stack->Parameters.QueryInterface.Version = Version; + Stack->Parameters.QueryInterface.Interface = Interface; + Stack->Parameters.QueryInterface.InterfaceSpecificData = NULL; + + Status = IoCallDriver(Pdo, Irp); + + if (Status == STATUS_PENDING) + { + DPRINT("Usbhub: Operation pending\n"); + KeWaitForSingleObject(&Event, Suspended, KernelMode, FALSE, NULL); + Status = IoStatus.Status; + } + + return Status; +} + +static VOID +UsbhubGetUserBuffers(IN PIRP Irp, IN ULONG IoControlCode, OUT PVOID* BufferIn, OUT PVOID* BufferOut) +{ + ASSERT(Irp); + ASSERT(BufferIn); + ASSERT(BufferOut); + + switch (IO_METHOD_FROM_CTL_CODE(IoControlCode)) + { + case METHOD_BUFFERED: + *BufferIn = *BufferOut = Irp->AssociatedIrp.SystemBuffer; + break; + case METHOD_IN_DIRECT: + case METHOD_OUT_DIRECT: + *BufferIn = Irp->AssociatedIrp.SystemBuffer; + *BufferOut = MmGetSystemAddressForMdl(Irp->MdlAddress); + break; + case METHOD_NEITHER: + *BufferIn = IoGetCurrentIrpStackLocation(Irp)->Parameters.DeviceIoControl.Type3InputBuffer; + *BufferOut = Irp->UserBuffer; + break; + default: + /* Should never happen */ + *BufferIn = NULL; + *BufferOut = NULL; + break; + } +} + +NTSTATUS +UsbhubFdoQueryBusRelations(IN PDEVICE_OBJECT DeviceObject, OUT PDEVICE_RELATIONS* pDeviceRelations) +{ + PHUB_DEVICE_EXTENSION DeviceExtension; + PDEVICE_RELATIONS DeviceRelations; + ULONG i; + ULONG Children = 0; + ULONG NeededSize; + + DeviceExtension = (PHUB_DEVICE_EXTENSION)DeviceObject->DeviceExtension; + DPRINT1("USBHUB: Query Bus Relations\n"); + + /* Create PDOs that are missing */ + for (i = 0; i < USB_MAXCHILDREN; i++) + { + + if (DeviceExtension->UsbChildren[i] == NULL) + { + continue; + } + Children++; + } + + /* Fill returned structure */ + NeededSize = sizeof(DEVICE_RELATIONS); + if (Children > 1) + NeededSize += (Children - 1) * sizeof(PDEVICE_OBJECT); + + DeviceRelations = (PDEVICE_RELATIONS)ExAllocatePool(PagedPool, + NeededSize); + + if (!DeviceRelations) + return STATUS_INSUFFICIENT_RESOURCES; + DeviceRelations->Count = Children; + Children = 0; + + for (i = 0; i < USB_MAXCHILDREN; i++) + { + if (DeviceExtension->Children[i]) + { + ObReferenceObject(DeviceExtension->Children[i]); + DeviceRelations->Objects[Children++] = DeviceExtension->Children[i]; + } + } + + ASSERT(Children == DeviceRelations->Count); + *pDeviceRelations = DeviceRelations; + + WaitForUsbDeviceArrivalNotification(DeviceObject); + + return STATUS_SUCCESS; +} + +VOID CallBackRoutine(IN PVOID Argument1) +{ + DPRINT1("RH_INIT_CALLBACK %x\n", Argument1); + ASSERT(FALSE); +} + +NTSTATUS NTAPI +UsbhubPnpFdo(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp) +{ + PIO_STACK_LOCATION IrpSp; + NTSTATUS Status = STATUS_SUCCESS; + ULONG MinorFunction; + ULONG_PTR Information = 0; + PHUB_DEVICE_EXTENSION DeviceExtension; + + IrpSp = IoGetCurrentIrpStackLocation(Irp); + MinorFunction = IrpSp->MinorFunction; + + DeviceExtension = (PHUB_DEVICE_EXTENSION) DeviceObject->DeviceExtension; + + switch (MinorFunction) + { + case IRP_MN_START_DEVICE: /* 0x0 */ + { + PURB Urb; + ULONG Result = 0; + PUSB_INTERFACE_DESCRIPTOR Pid; + /* Theres only one descriptor on hub */ + USBD_INTERFACE_LIST_ENTRY InterfaceList[2] = {{NULL, NULL}, {NULL, NULL}}; + PURB ConfigUrb = NULL; + + /* We differ from windows on hubpdo because we dont have usbport.sys which manages all usb device objects */ + DPRINT1("Usbhub: IRP_MJ_PNP / IRP_MN_START_DEVICE\n"); + + /* Allocating size including the sizeof USBD_INTERFACE_LIST_ENTRY */ + Urb = ExAllocatePoolWithTag(NonPagedPool, sizeof(URB) + sizeof(USBD_INTERFACE_LIST_ENTRY), USB_HUB_TAG); + RtlZeroMemory(Urb, sizeof(URB) + sizeof(USBD_INTERFACE_LIST_ENTRY)); + + /* Get the hubs PDO */ + QueryRootHub(DeviceExtension->LowerDevice, IOCTL_INTERNAL_USB_GET_ROOTHUB_PDO, &DeviceExtension->RootHubPdo, &DeviceExtension->RootHubFdo); + ASSERT(DeviceExtension->RootHubPdo); + ASSERT(DeviceExtension->RootHubFdo); + DPRINT1("RootPdo %x, RootFdo %x\n", DeviceExtension->RootHubPdo, DeviceExtension->RootHubFdo); + + /* Send the START_DEVICE irp down to the PDO of RootHub */ + Status = ForwardIrpAndWait(DeviceExtension->RootHubPdo, Irp); + + if (!NT_SUCCESS(Status)) + { + DPRINT1("Failed to start the RootHub PDO\n"); + ASSERT(FALSE); + } + + /* Get the current number of hubs */ + QueryRootHub(DeviceExtension->RootHubPdo,IOCTL_INTERNAL_USB_GET_HUB_COUNT, &DeviceExtension->HubCount, NULL); + + /* Get the Direct Call Interfaces */ + Status = QueryInterface(DeviceExtension->RootHubPdo, + USB_BUS_INTERFACE_HUB_GUID, + sizeof(USB_BUS_INTERFACE_HUB_V5), + 5, + (PVOID)&DeviceExtension->HubInterface); + if (!NT_SUCCESS(Status)) + { + DPRINT1("UsbhubM Failed to get HUB_GUID interface with status 0x%08lx\n", Status); + return STATUS_UNSUCCESSFUL; + } + + Status = QueryInterface(DeviceExtension->RootHubPdo, + USB_BUS_INTERFACE_USBDI_GUID, + sizeof(USB_BUS_INTERFACE_USBDI_V2), + 2, + (PVOID)&DeviceExtension->UsbDInterface); + if (!NT_SUCCESS(Status)) + { + DPRINT1("UsbhubM Failed to get USBDI_GUID interface with status 0x%08lx\n", Status); + return STATUS_UNSUCCESSFUL; + } + + /* Get roothub device handle */ + Status = QueryRootHub(DeviceExtension->RootHubPdo, IOCTL_INTERNAL_USB_GET_DEVICE_HANDLE, &DeviceExtension->RootHubUsbDevice, NULL); + if (!NT_SUCCESS(Status)) + { + DPRINT1("Usbhub: GetRootHubDeviceHandle failed with status 0x%08lx\n", Status); + return Status; + } + + Status = DeviceExtension->HubInterface.QueryDeviceInformation(DeviceExtension->RootHubPdo, + DeviceExtension->RootHubUsbDevice, + &DeviceExtension->DeviceInformation, + sizeof(USB_DEVICE_INFORMATION_0), + &Result); + + + DPRINT("Status %x, Result %x\n", Status, Result); + DPRINT("InformationLevel %x\n", DeviceExtension->DeviceInformation.InformationLevel); + DPRINT("ActualLength %x\n", DeviceExtension->DeviceInformation.ActualLength); + DPRINT("PortNumber %x\n", DeviceExtension->DeviceInformation.PortNumber); + DPRINT("DeviceDescriptor %x\n", DeviceExtension->DeviceInformation.DeviceDescriptor); + DPRINT("HubAddress %x\n", DeviceExtension->DeviceInformation.HubAddress); + DPRINT("NumberofPipes %x\n", DeviceExtension->DeviceInformation.NumberOfOpenPipes); + + /* Get roothubs device descriptor */ + UsbBuildGetDescriptorRequest(Urb, + sizeof(Urb->UrbControlDescriptorRequest), + USB_DEVICE_DESCRIPTOR_TYPE, + 0, + 0, + &DeviceExtension->HubDeviceDescriptor, + NULL, + sizeof(USB_DEVICE_DESCRIPTOR), + NULL); + + Urb->UrbHeader.UsbdDeviceHandle = DeviceExtension->RootHubUsbDevice; + + Status = QueryRootHub(DeviceExtension->RootHubPdo, IOCTL_INTERNAL_USB_SUBMIT_URB, Urb, NULL); + if (!NT_SUCCESS(Status)) + { + DPRINT1("Usbhub: Failed to get HubDeviceDescriptor!\n"); + } + + DumpDeviceDescriptor(&DeviceExtension->HubDeviceDescriptor); + + /* Get roothubs configuration descriptor */ + UsbBuildGetDescriptorRequest(Urb, + sizeof(Urb->UrbControlDescriptorRequest), + USB_CONFIGURATION_DESCRIPTOR_TYPE, + 0, + 0, + &DeviceExtension->HubConfigDescriptor, + NULL, + sizeof(USB_CONFIGURATION_DESCRIPTOR) + sizeof(USB_INTERFACE_DESCRIPTOR) + sizeof(USB_ENDPOINT_DESCRIPTOR), + NULL); + Urb->UrbHeader.UsbdDeviceHandle = DeviceExtension->RootHubUsbDevice; + + Status = QueryRootHub(DeviceExtension->RootHubPdo, IOCTL_INTERNAL_USB_SUBMIT_URB, Urb, NULL); + + if (!NT_SUCCESS(Status)) + { + DPRINT1("Usbhub: Failed to get RootHub Configuration with status %x\n", Status); + ASSERT(FALSE); + } + ASSERT(DeviceExtension->HubConfigDescriptor.wTotalLength); + + DumpFullConfigurationDescriptor(&DeviceExtension->HubConfigDescriptor); + //DPRINT1("DeviceExtension->HubConfigDescriptor.wTotalLength %x\n", DeviceExtension->HubConfigDescriptor.wTotalLength); + + Status = DeviceExtension->HubInterface.GetExtendedHubInformation(DeviceExtension->RootHubPdo, + DeviceExtension->RootHubPdo, + &DeviceExtension->UsbExtHubInfo, + sizeof(USB_EXTHUB_INFORMATION_0), + &Result); + if (!NT_SUCCESS(Status)) + { + DPRINT1("Usbhub: Failed to extended hub information. Unable to determine the number of ports!\n"); + ASSERT(FALSE); + } + + DPRINT1("DeviceExtension->UsbExtHubInfo.NumberOfPorts %x\n", DeviceExtension->UsbExtHubInfo.NumberOfPorts); + + UsbBuildVendorRequest(Urb, + URB_FUNCTION_CLASS_DEVICE, + sizeof(Urb->UrbControlVendorClassRequest), + USBD_TRANSFER_DIRECTION_IN, + 0, + USB_DEVICE_CLASS_RESERVED, + 0, + 0, + &DeviceExtension->HubDescriptor, + NULL, + sizeof(USB_HUB_DESCRIPTOR), + NULL); + + Urb->UrbHeader.UsbdDeviceHandle = DeviceExtension->RootHubUsbDevice; + + Status = QueryRootHub(DeviceExtension->RootHubPdo, IOCTL_INTERNAL_USB_SUBMIT_URB, Urb, NULL); + + DPRINT1("bDescriptorType %x\n", DeviceExtension->HubDescriptor.bDescriptorType); + + /* Select the configuration */ + + /* Get the first one */ + Pid = USBD_ParseConfigurationDescriptorEx(&DeviceExtension->HubConfigDescriptor, + &DeviceExtension->HubConfigDescriptor, + -1, -1, -1, -1, -1); + ASSERT(Pid != NULL); + InterfaceList[0].InterfaceDescriptor = Pid; + ConfigUrb = USBD_CreateConfigurationRequestEx(&DeviceExtension->HubConfigDescriptor, (PUSBD_INTERFACE_LIST_ENTRY)&InterfaceList); + ASSERT(ConfigUrb != NULL); + Status = QueryRootHub(DeviceExtension->RootHubPdo, IOCTL_INTERNAL_USB_SUBMIT_URB, ConfigUrb, NULL); + + DeviceExtension->ConfigurationHandle = ConfigUrb->UrbSelectConfiguration.ConfigurationHandle; + DeviceExtension->PipeHandle = ConfigUrb->UrbSelectConfiguration.Interface.Pipes[0].PipeHandle; + DPRINT1("Configuration Handle %x\n", DeviceExtension->ConfigurationHandle); + + ExFreePool(ConfigUrb); + + Status = DeviceExtension->HubInterface.Initialize20Hub(DeviceExtension->RootHubPdo, DeviceExtension->RootHubUsbDevice, 1); + DPRINT1("Status %x\n", Status); + + { + int PortLoop; + USHORT PortStatusAndChange[2]; + + for (PortLoop=0; PortLoop< DeviceExtension->UsbExtHubInfo.NumberOfPorts; PortLoop++) + { + DPRINT1("Port %x\n", PortLoop); + UsbBuildVendorRequest(Urb, + URB_FUNCTION_CLASS_OTHER, + sizeof(Urb->UrbControlVendorClassRequest), + USBD_TRANSFER_DIRECTION_IN, + 0, + USB_REQUEST_SET_FEATURE, + PORT_POWER, + 1, + 0, + 0, + 0, + 0); + + Urb->UrbOSFeatureDescriptorRequest.MS_FeatureDescriptorIndex = PortLoop + 1; + Status = QueryRootHub(DeviceExtension->RootHubPdo, IOCTL_INTERNAL_USB_SUBMIT_URB, Urb, NULL); + + DPRINT1("Status %x\n", Status); + + UsbBuildVendorRequest(Urb, + URB_FUNCTION_CLASS_OTHER, + sizeof(Urb->UrbControlVendorClassRequest), + USBD_TRANSFER_DIRECTION_OUT, + 0, + USB_REQUEST_GET_STATUS, + 0, + PortLoop + 1, + &PortStatusAndChange, + 0, + sizeof(PortStatusAndChange), + 0); + Status = QueryRootHub(DeviceExtension->RootHubPdo, IOCTL_INTERNAL_USB_SUBMIT_URB, Urb, NULL); + + DPRINT1("Status %x\n", Status); + DPRINT1("PortStatus = %x\n", PortStatusAndChange[0]); + DPRINT1("PortChange = %x\n", PortStatusAndChange[1]); + } + } + + ExFreePool(Urb); + break; + } + + case IRP_MN_QUERY_DEVICE_RELATIONS: /* (optional) 0x7 */ + { + switch (IrpSp->Parameters.QueryDeviceRelations.Type) + { + case BusRelations: + { + PDEVICE_RELATIONS DeviceRelations = NULL; + DPRINT1("Usbhub: IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_RELATIONS / BusRelations\n"); + + Status = UsbhubFdoQueryBusRelations(DeviceObject, &DeviceRelations); + + Information = (ULONG_PTR)DeviceRelations; + break; + } + case RemovalRelations: + { + DPRINT1("Usbhub: IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_RELATIONS / RemovalRelations\n"); + return ForwardIrpAndForget(DeviceObject, Irp); + } + default: + DPRINT1("Usbhub: IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_RELATIONS / Unknown type 0x%lx\n", + IrpSp->Parameters.QueryDeviceRelations.Type); + return ForwardIrpAndForget(DeviceObject, Irp); + } + break; + } + case IRP_MN_QUERY_BUS_INFORMATION: + { + DPRINT1("IRP_MN_QUERY_BUS_INFORMATION\n"); + break; + } + case IRP_MN_QUERY_ID: + { + DPRINT1("IRP_MN_QUERY_ID\n"); + break; + } + case IRP_MN_QUERY_CAPABILITIES: + { + DPRINT1("IRP_MN_QUERY_CAPABILITIES\n"); + break; + } + default: + { + DPRINT1("Usbhub: IRP_MJ_PNP / unknown minor function 0x%lx\n", MinorFunction); + return ForwardIrpAndForget(DeviceObject, Irp); + } + } + Irp->IoStatus.Information = Information; + Irp->IoStatus.Status = Status; + IoCompleteRequest(Irp, IO_NO_INCREMENT); + return Status; +} + +NTSTATUS +UsbhubDeviceControlFdo(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp) +{ + PIO_STACK_LOCATION Stack; + ULONG IoControlCode; + PHUB_DEVICE_EXTENSION DeviceExtension; + ULONG LengthIn, LengthOut; + ULONG_PTR Information = 0; + PVOID BufferIn, BufferOut; + NTSTATUS Status = STATUS_UNSUCCESSFUL; + + Stack = IoGetCurrentIrpStackLocation(Irp); + LengthIn = Stack->Parameters.DeviceIoControl.InputBufferLength; + LengthOut = Stack->Parameters.DeviceIoControl.OutputBufferLength; + DeviceExtension = (PHUB_DEVICE_EXTENSION)DeviceObject->DeviceExtension; + IoControlCode = Stack->Parameters.DeviceIoControl.IoControlCode; + UsbhubGetUserBuffers(Irp, IoControlCode, &BufferIn, &BufferOut); + + switch (IoControlCode) + { + case IOCTL_USB_GET_NODE_INFORMATION: + { + //PUSB_NODE_INFORMATION NodeInformation; + + DPRINT1("Usbhub: IOCTL_USB_GET_NODE_INFORMATION\n"); + if (LengthOut < sizeof(USB_NODE_INFORMATION)) + Status = STATUS_BUFFER_TOO_SMALL; + else if (BufferOut == NULL) + Status = STATUS_INVALID_PARAMETER; + else + { + /*NodeInformation = (PUSB_NODE_INFORMATION)BufferOut; + dev = ((PHUB_DEVICE_EXTENSION)DeviceObject->DeviceExtension)->dev; + NodeInformation->NodeType = UsbHub; + RtlCopyMemory( + &NodeInformation->u.HubInformation.HubDescriptor, + ((struct usb_hub *)usb_get_intfdata(to_usb_interface(&dev->actconfig->interface[0].dev)))->descriptor, + sizeof(USB_HUB_DESCRIPTOR)); + NodeInformation->u.HubInformation.HubIsBusPowered = dev->actconfig->desc.bmAttributes & 0x80; + Information = sizeof(USB_NODE_INFORMATION);*/ + Status = STATUS_SUCCESS; + } + break; + } + case IOCTL_USB_GET_NODE_CONNECTION_NAME: + { + PHUB_DEVICE_EXTENSION DeviceExtension; + PUSB_NODE_CONNECTION_NAME ConnectionName; + DeviceExtension = (PHUB_DEVICE_EXTENSION)DeviceObject->DeviceExtension; + ConnectionName = (PUSB_NODE_CONNECTION_NAME)BufferOut; + + DPRINT1("Usbhub: IOCTL_USB_GET_NODE_CONNECTION_NAME\n"); + if (LengthOut < sizeof(USB_NODE_CONNECTION_NAME)) + Status = STATUS_BUFFER_TOO_SMALL; + else if (BufferOut == NULL) + Status = STATUS_INVALID_PARAMETER; + else if (ConnectionName->ConnectionIndex < 1 + || ConnectionName->ConnectionIndex > USB_MAXCHILDREN) + Status = STATUS_INVALID_PARAMETER; + else if (DeviceExtension->Children[ConnectionName->ConnectionIndex - 1] == NULL) + Status = STATUS_INVALID_PARAMETER; + else + { + ULONG NeededStructureSize; + DeviceExtension = (PHUB_DEVICE_EXTENSION)DeviceExtension->Children[ConnectionName->ConnectionIndex - 1]->DeviceExtension; + NeededStructureSize = DeviceExtension->SymbolicLinkName.Length + sizeof(UNICODE_NULL) + FIELD_OFFSET(USB_NODE_CONNECTION_NAME, NodeName); + if (ConnectionName->ActualLength < NeededStructureSize / sizeof(WCHAR) + || LengthOut < NeededStructureSize) + { + /* Buffer too small */ + ConnectionName->ActualLength = NeededStructureSize / sizeof(WCHAR); + Information = sizeof(USB_NODE_CONNECTION_NAME); + Status = STATUS_BUFFER_TOO_SMALL; + } + else + { + RtlCopyMemory( + ConnectionName->NodeName, + DeviceExtension->SymbolicLinkName.Buffer, + DeviceExtension->SymbolicLinkName.Length); + ConnectionName->NodeName[DeviceExtension->SymbolicLinkName.Length / sizeof(WCHAR)] = UNICODE_NULL; + DPRINT1("Usbhub: IOCTL_USB_GET_NODE_CONNECTION_NAME returns '%S'\n", ConnectionName->NodeName); + ConnectionName->ActualLength = NeededStructureSize / sizeof(WCHAR); + Information = NeededStructureSize; + Status = STATUS_SUCCESS; + } + Information = LengthOut; + } + break; + } + case IOCTL_USB_GET_NODE_CONNECTION_INFORMATION: + { + PUSB_NODE_CONNECTION_INFORMATION ConnectionInformation; +/* + ULONG i, j, k; + struct usb_device* dev; + ULONG NumberOfOpenPipes = 0; + ULONG SizeOfOpenPipesArray; +*/ + ConnectionInformation = (PUSB_NODE_CONNECTION_INFORMATION)BufferOut; + + DPRINT1("Usbhub: IOCTL_USB_GET_NODE_CONNECTION_INFORMATION\n"); + if (LengthOut < sizeof(USB_NODE_CONNECTION_INFORMATION)) + Status = STATUS_BUFFER_TOO_SMALL; + else if (BufferOut == NULL) + Status = STATUS_INVALID_PARAMETER; + else if (ConnectionInformation->ConnectionIndex < 1 + || ConnectionInformation->ConnectionIndex > USB_MAXCHILDREN) + Status = STATUS_INVALID_PARAMETER; + else + { + DPRINT1("Usbhub: We should succeed\n"); + } + break; + } + case IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION: + { + //PUSB_DESCRIPTOR_REQUEST Descriptor; + DPRINT1("Usbhub: IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION\n"); + Information = 0; + Status = STATUS_NOT_IMPLEMENTED; + break; + } + case IOCTL_USB_GET_NODE_CONNECTION_DRIVERKEY_NAME: + { + PHUB_DEVICE_EXTENSION DeviceExtension; + PUSB_NODE_CONNECTION_DRIVERKEY_NAME StringDescriptor; + DPRINT1("Usbhub: IOCTL_USB_GET_NODE_CONNECTION_DRIVERKEY_NAME\n"); + DeviceExtension = (PHUB_DEVICE_EXTENSION)DeviceObject->DeviceExtension; + StringDescriptor = (PUSB_NODE_CONNECTION_DRIVERKEY_NAME)BufferOut; + if (LengthOut < sizeof(USB_NODE_CONNECTION_DRIVERKEY_NAME)) + Status = STATUS_BUFFER_TOO_SMALL; + else if (StringDescriptor == NULL) + Status = STATUS_INVALID_PARAMETER; + else if (StringDescriptor->ConnectionIndex < 1 + || StringDescriptor->ConnectionIndex > USB_MAXCHILDREN) + Status = STATUS_INVALID_PARAMETER; + else if (DeviceExtension->Children[StringDescriptor->ConnectionIndex - 1] == NULL) + Status = STATUS_INVALID_PARAMETER; + else + { + ULONG StringSize; + Status = IoGetDeviceProperty( + DeviceExtension->Children[StringDescriptor->ConnectionIndex - 1], + DevicePropertyDriverKeyName, + LengthOut - FIELD_OFFSET(USB_NODE_CONNECTION_DRIVERKEY_NAME, DriverKeyName), + StringDescriptor->DriverKeyName, + &StringSize); + if (NT_SUCCESS(Status) || Status == STATUS_BUFFER_TOO_SMALL) + { + StringDescriptor->ActualLength = StringSize + FIELD_OFFSET(USB_NODE_CONNECTION_DRIVERKEY_NAME, DriverKeyName); + Information = LengthOut; + Status = STATUS_SUCCESS; + } + } + break; + } + default: + { + /* Pass Irp to lower driver */ + DPRINT1("Usbhub: Unknown IOCTL code 0x%lx\n", Stack->Parameters.DeviceIoControl.IoControlCode); + return ForwardIrpAndForget(DeviceObject, Irp); + } + } + + Irp->IoStatus.Information = Information; + Irp->IoStatus.Status = Status; + IoCompleteRequest(Irp, IO_NO_INCREMENT); + return Status; } diff --git a/drivers/usb/usbhub/misc.c b/drivers/usb/usbhub/misc.c index 8b393c1f1fd..a870a7e4f38 100644 --- a/drivers/usb/usbhub/misc.c +++ b/drivers/usb/usbhub/misc.c @@ -4,7 +4,7 @@ * FILE: drivers/usb/cromwell/hub/misc.c * PURPOSE: Misceallenous operations * - * PROGRAMMERS: Herv Poussineau (hpoussin@reactos.com), + * PROGRAMMERS: Herv� Poussineau (hpoussin@reactos.com), */ #define NDEBUG @@ -13,54 +13,50 @@ NTSTATUS NTAPI ForwardIrpAndWaitCompletion( - IN PDEVICE_OBJECT DeviceObject, - IN PIRP Irp, - IN PVOID Context) + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp, + IN PVOID Context) { - if (Irp->PendingReturned) - KeSetEvent((PKEVENT)Context, IO_NO_INCREMENT, FALSE); - return STATUS_MORE_PROCESSING_REQUIRED; + if (Irp->PendingReturned) + KeSetEvent((PKEVENT)Context, IO_NO_INCREMENT, FALSE); + return STATUS_MORE_PROCESSING_REQUIRED; } NTSTATUS ForwardIrpAndWait( - IN PDEVICE_OBJECT DeviceObject, - IN PIRP Irp) + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp) { - PDEVICE_OBJECT LowerDevice = ((PHUB_DEVICE_EXTENSION)DeviceObject->DeviceExtension)->LowerDevice; - KEVENT Event; - NTSTATUS Status; + KEVENT Event; + NTSTATUS Status; - ASSERT(LowerDevice); + KeInitializeEvent(&Event, NotificationEvent, FALSE); + IoCopyCurrentIrpStackLocationToNext(Irp); - KeInitializeEvent(&Event, NotificationEvent, FALSE); - IoCopyCurrentIrpStackLocationToNext(Irp); + IoSetCompletionRoutine(Irp, ForwardIrpAndWaitCompletion, &Event, TRUE, TRUE, TRUE); - DPRINT("UHCI: Calling lower device %p [%wZ]\n", LowerDevice, &LowerDevice->DriverObject->DriverName); - IoSetCompletionRoutine(Irp, ForwardIrpAndWaitCompletion, &Event, TRUE, TRUE, TRUE); + Status = IoCallDriver(DeviceObject, Irp); + if (Status == STATUS_PENDING) + { + Status = KeWaitForSingleObject(&Event, Suspended, KernelMode, FALSE, NULL); + if (NT_SUCCESS(Status)) + Status = Irp->IoStatus.Status; + } - Status = IoCallDriver(LowerDevice, Irp); - if (Status == STATUS_PENDING) - { - Status = KeWaitForSingleObject(&Event, Suspended, KernelMode, FALSE, NULL); - if (NT_SUCCESS(Status)) - Status = Irp->IoStatus.Status; - } - - return Status; + return Status; } NTSTATUS NTAPI ForwardIrpAndForget( - IN PDEVICE_OBJECT DeviceObject, - IN PIRP Irp) + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp) { - PDEVICE_OBJECT LowerDevice = ((PHUB_DEVICE_EXTENSION)DeviceObject->DeviceExtension)->LowerDevice; + PDEVICE_OBJECT LowerDevice = ((PHUB_DEVICE_EXTENSION)DeviceObject->DeviceExtension)->LowerDevice; - ASSERT(LowerDevice); + ASSERT(LowerDevice); - IoSkipCurrentIrpStackLocation(Irp); - return IoCallDriver(LowerDevice, Irp); + IoSkipCurrentIrpStackLocation(Irp); + return IoCallDriver(LowerDevice, Irp); } /* I really want PCSZ strings as last arguments because @@ -68,99 +64,99 @@ ForwardIrpAndForget( * identification */ NTSTATUS UsbhubInitMultiSzString( - OUT PUNICODE_STRING Destination, - ... /* list of PCSZ */) + OUT PUNICODE_STRING Destination, + ... /* list of PCSZ */) { - va_list args; - PCSZ Source; - ANSI_STRING AnsiString; - UNICODE_STRING UnicodeString; - ULONG DestinationSize = 0; - NTSTATUS Status = STATUS_SUCCESS; + va_list args; + PCSZ Source; + ANSI_STRING AnsiString; + UNICODE_STRING UnicodeString; + ULONG DestinationSize = 0; + NTSTATUS Status = STATUS_SUCCESS; - ASSERT(Destination); + ASSERT(Destination); - /* Calculate length needed for destination unicode string */ - va_start(args, Destination); - Source = va_arg(args, PCSZ); - while (Source != NULL) - { - RtlInitAnsiString(&AnsiString, Source); - DestinationSize += RtlAnsiStringToUnicodeSize(&AnsiString) - + sizeof(WCHAR) /* final NULL */; - Source = va_arg(args, PCSZ); - } - va_end(args); - if (DestinationSize == 0) - { - RtlInitUnicodeString(Destination, NULL); - return STATUS_SUCCESS; - } + /* Calculate length needed for destination unicode string */ + va_start(args, Destination); + Source = va_arg(args, PCSZ); + while (Source != NULL) + { + RtlInitAnsiString(&AnsiString, Source); + DestinationSize += RtlAnsiStringToUnicodeSize(&AnsiString) + + sizeof(WCHAR) /* final NULL */; + Source = va_arg(args, PCSZ); + } + va_end(args); + if (DestinationSize == 0) + { + RtlInitUnicodeString(Destination, NULL); + return STATUS_SUCCESS; + } - /* Initialize destination string */ - DestinationSize += sizeof(WCHAR); // final NULL - Destination->Buffer = (PWSTR)ExAllocatePoolWithTag(PagedPool, DestinationSize, USB_HUB_TAG); - if (!Destination->Buffer) - return STATUS_INSUFFICIENT_RESOURCES; - Destination->Length = 0; - Destination->MaximumLength = (USHORT)DestinationSize; + /* Initialize destination string */ + DestinationSize += sizeof(WCHAR); // final NULL + Destination->Buffer = (PWSTR)ExAllocatePoolWithTag(PagedPool, DestinationSize, USB_HUB_TAG); + if (!Destination->Buffer) + return STATUS_INSUFFICIENT_RESOURCES; + Destination->Length = 0; + Destination->MaximumLength = (USHORT)DestinationSize; - /* Copy arguments to destination string */ - /* Use a temporary unicode string, which buffer is shared with - * destination string, to copy arguments */ - UnicodeString.Length = Destination->Length; - UnicodeString.MaximumLength = Destination->MaximumLength; - UnicodeString.Buffer = Destination->Buffer; - va_start(args, Destination); - Source = va_arg(args, PCSZ); - while (Source != NULL) - { - RtlInitAnsiString(&AnsiString, Source); - Status = RtlAnsiStringToUnicodeString(&UnicodeString, &AnsiString, FALSE); - if (!NT_SUCCESS(Status)) - { - ExFreePoolWithTag(Destination->Buffer, USB_HUB_TAG); - break; - } - Destination->Length += UnicodeString.Length + sizeof(WCHAR); - UnicodeString.MaximumLength -= UnicodeString.Length + sizeof(WCHAR); - UnicodeString.Buffer += UnicodeString.Length / sizeof(WCHAR) + 1; - UnicodeString.Length = 0; - Source = va_arg(args, PCSZ); - } - va_end(args); - if (NT_SUCCESS(Status)) - { - /* Finish multi-sz string */ - Destination->Buffer[Destination->Length / sizeof(WCHAR)] = L'\0'; - Destination->Length += sizeof(WCHAR); - } - return Status; + /* Copy arguments to destination string */ + /* Use a temporary unicode string, which buffer is shared with + * destination string, to copy arguments */ + UnicodeString.Length = Destination->Length; + UnicodeString.MaximumLength = Destination->MaximumLength; + UnicodeString.Buffer = Destination->Buffer; + va_start(args, Destination); + Source = va_arg(args, PCSZ); + while (Source != NULL) + { + RtlInitAnsiString(&AnsiString, Source); + Status = RtlAnsiStringToUnicodeString(&UnicodeString, &AnsiString, FALSE); + if (!NT_SUCCESS(Status)) + { + ExFreePoolWithTag(Destination->Buffer, USB_HUB_TAG); + break; + } + Destination->Length += UnicodeString.Length + sizeof(WCHAR); + UnicodeString.MaximumLength -= UnicodeString.Length + sizeof(WCHAR); + UnicodeString.Buffer += UnicodeString.Length / sizeof(WCHAR) + 1; + UnicodeString.Length = 0; + Source = va_arg(args, PCSZ); + } + va_end(args); + if (NT_SUCCESS(Status)) + { + /* Finish multi-sz string */ + Destination->Buffer[Destination->Length / sizeof(WCHAR)] = L'\0'; + Destination->Length += sizeof(WCHAR); + } + return Status; } NTSTATUS UsbhubDuplicateUnicodeString( - OUT PUNICODE_STRING Destination, - IN PUNICODE_STRING Source, - IN POOL_TYPE PoolType) + OUT PUNICODE_STRING Destination, + IN PUNICODE_STRING Source, + IN POOL_TYPE PoolType) { - ASSERT(Destination); + ASSERT(Destination); - if (Source == NULL) - { - RtlInitUnicodeString(Destination, NULL); - return STATUS_SUCCESS; - } + if (Source == NULL) + { + RtlInitUnicodeString(Destination, NULL); + return STATUS_SUCCESS; + } - Destination->Buffer = ExAllocatePool(PoolType, Source->MaximumLength); - if (Destination->Buffer == NULL) - { - return STATUS_INSUFFICIENT_RESOURCES; - } + Destination->Buffer = ExAllocatePool(PoolType, Source->MaximumLength); + if (Destination->Buffer == NULL) + { + return STATUS_INSUFFICIENT_RESOURCES; + } - Destination->MaximumLength = Source->MaximumLength; - Destination->Length = Source->Length; - RtlCopyMemory(Destination->Buffer, Source->Buffer, Source->MaximumLength); + Destination->MaximumLength = Source->MaximumLength; + Destination->Length = Source->Length; + RtlCopyMemory(Destination->Buffer, Source->Buffer, Source->MaximumLength); - return STATUS_SUCCESS; + return STATUS_SUCCESS; } diff --git a/drivers/usb/usbhub/pdo.c b/drivers/usb/usbhub/pdo.c index 4f433b6e4f0..f217c6da0a1 100644 --- a/drivers/usb/usbhub/pdo.c +++ b/drivers/usb/usbhub/pdo.c @@ -5,6 +5,7 @@ * PURPOSE: IRP_MJ_PNP operations for PDOs * * PROGRAMMERS: Copyright 2005-2006 Herv Poussineau (hpoussin@reactos.org) + * 2010 Michael Martin (michael.martin@reactos.org) */ #define NDEBUG @@ -15,333 +16,299 @@ NTSTATUS UsbhubInternalDeviceControlPdo( - IN PDEVICE_OBJECT DeviceObject, - IN PIRP Irp) + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp) { - PIO_STACK_LOCATION Stack; - ULONG_PTR Information = 0; - NTSTATUS Status; + PIO_STACK_LOCATION Stack; + ULONG_PTR Information = 0; + NTSTATUS Status; - DPRINT("Usbhub: UsbhubInternalDeviceControlPdo() called\n"); + DPRINT1("Usbhub: UsbhubInternalDeviceControlPdo() called\n"); - Stack = IoGetCurrentIrpStackLocation(Irp); - Status = Irp->IoStatus.Status; + Stack = IoGetCurrentIrpStackLocation(Irp); + Status = Irp->IoStatus.Status; - switch (Stack->Parameters.DeviceIoControl.IoControlCode) - { - case IOCTL_INTERNAL_USB_GET_PARENT_HUB_INFO: - { - PHUB_DEVICE_EXTENSION DeviceExtension; + switch (Stack->Parameters.DeviceIoControl.IoControlCode) + { + case IOCTL_INTERNAL_USB_GET_PARENT_HUB_INFO: + { + PHUB_DEVICE_EXTENSION DeviceExtension; - DPRINT("Usbhub: IOCTL_INTERNAL_USB_GET_PARENT_HUB_INFO\n"); - if (Irp->AssociatedIrp.SystemBuffer == NULL - || Stack->Parameters.DeviceIoControl.OutputBufferLength != sizeof(PVOID)) - { - Status = STATUS_INVALID_PARAMETER; - } - else - { - PVOID* pHubPointer; - DeviceExtension = (PHUB_DEVICE_EXTENSION)DeviceObject->DeviceExtension; + DPRINT1("Usbhub: IOCTL_INTERNAL_USB_GET_PARENT_HUB_INFO\n"); + if (Irp->AssociatedIrp.SystemBuffer == NULL + || Stack->Parameters.DeviceIoControl.OutputBufferLength != sizeof(PVOID)) + { + Status = STATUS_INVALID_PARAMETER; + } + else + { + PVOID* pHubPointer; + DeviceExtension = (PHUB_DEVICE_EXTENSION)DeviceObject->DeviceExtension; - pHubPointer = (PVOID*)Irp->AssociatedIrp.SystemBuffer; - *pHubPointer = DeviceExtension->dev; - Information = sizeof(PVOID); - Status = STATUS_SUCCESS; - } - break; - } - default: - { - DPRINT1("Usbhub: Unknown IOCTL code 0x%lx\n", Stack->Parameters.DeviceIoControl.IoControlCode); - Information = Irp->IoStatus.Information; - Status = Irp->IoStatus.Status; - } - } + pHubPointer = (PVOID*)Irp->AssociatedIrp.SystemBuffer; + *pHubPointer = DeviceExtension->dev; + Information = sizeof(PVOID); + Status = STATUS_SUCCESS; + } + break; + } + default: + { + DPRINT1("Usbhub: Unknown IOCTL code 0x%lx\n", Stack->Parameters.DeviceIoControl.IoControlCode); + Information = Irp->IoStatus.Information; + Status = Irp->IoStatus.Status; + } + } - Irp->IoStatus.Information = Information; - Irp->IoStatus.Status = Status; - IoCompleteRequest(Irp, IO_NO_INCREMENT); - return Status; + Irp->IoStatus.Information = Information; + Irp->IoStatus.Status = Status; + IoCompleteRequest(Irp, IO_NO_INCREMENT); + return Status; } static NTSTATUS UsbhubPdoStartDevice( - IN PDEVICE_OBJECT DeviceObject, - IN PIRP Irp) + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp) { - PHUB_DEVICE_EXTENSION DeviceExtension; - NTSTATUS Status; + PHUB_DEVICE_EXTENSION DeviceExtension; + NTSTATUS Status = STATUS_UNSUCCESSFUL; - DeviceExtension = (PHUB_DEVICE_EXTENSION)DeviceObject->DeviceExtension; + DeviceExtension = (PHUB_DEVICE_EXTENSION)DeviceObject->DeviceExtension; - /* Register and activate device interface */ - Status = IoRegisterDeviceInterface( - DeviceObject, - DeviceExtension->dev->descriptor.bDeviceClass == USB_CLASS_HUB ? - &GUID_DEVINTERFACE_USB_HUB : - &GUID_DEVINTERFACE_USB_DEVICE, - NULL, /* Reference string */ - &DeviceExtension->SymbolicLinkName); - if (!NT_SUCCESS(Status)) - { - DPRINT("Usbhub: IoRegisterDeviceInterface() failed with status 0x%08lx\n", Status); - return Status; - } + /* Register and activate device interface */ +/* + Status = IoRegisterDeviceInterface( + DeviceObject, + DeviceExtension->dev->descriptor.bDeviceClass == USB_CLASS_HUB ? + &GUID_DEVINTERFACE_USB_HUB : + &GUID_DEVINTERFACE_USB_DEVICE, + NULL, + &DeviceExtension->SymbolicLinkName); +*/ + if (!NT_SUCCESS(Status)) + { + DPRINT1("Usbhub: IoRegisterDeviceInterface() failed with status 0x%08lx\n", Status); + return Status; + } - Status = IoSetDeviceInterfaceState(&DeviceExtension->SymbolicLinkName, TRUE); - if (!NT_SUCCESS(Status)) - { - DPRINT("Usbhub: IoSetDeviceInterfaceState() failed with status 0x%08lx\n", Status); - return Status; - } + //Status = IoSetDeviceInterfaceState(&DeviceExtension->SymbolicLinkName, TRUE); + if (!NT_SUCCESS(Status)) + { + DPRINT1("Usbhub: IoSetDeviceInterfaceState() failed with status 0x%08lx\n", Status); + return Status; + } - return STATUS_SUCCESS; + return STATUS_SUCCESS; } static NTSTATUS UsbhubPdoQueryId( - IN PDEVICE_OBJECT DeviceObject, - IN PIRP Irp, - OUT ULONG_PTR* Information) + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp, + OUT ULONG_PTR* Information) { - PHUB_DEVICE_EXTENSION DeviceExtension; - ULONG IdType; - PUNICODE_STRING SourceString; - UNICODE_STRING String; - NTSTATUS Status; + PHUB_CHILDDEVICE_EXTENSION DeviceExtension; + ULONG IdType; + PWCHAR SourceString = NULL; + NTSTATUS Status = STATUS_SUCCESS; - IdType = IoGetCurrentIrpStackLocation(Irp)->Parameters.QueryId.IdType; - DeviceExtension = (PHUB_DEVICE_EXTENSION)DeviceObject->DeviceExtension; - RtlInitUnicodeString(&String, NULL); + IdType = IoGetCurrentIrpStackLocation(Irp)->Parameters.QueryId.IdType; + DeviceExtension = (PHUB_CHILDDEVICE_EXTENSION)DeviceObject->DeviceExtension; - switch (IdType) - { - case BusQueryDeviceID: - { - DPRINT("Usbhub: IRP_MJ_PNP / IRP_MN_QUERY_ID / BusQueryDeviceID\n"); - SourceString = &DeviceExtension->DeviceId; - break; - } - case BusQueryHardwareIDs: - { - DPRINT("Usbhub: IRP_MJ_PNP / IRP_MN_QUERY_ID / BusQueryHardwareIDs\n"); - SourceString = &DeviceExtension->HardwareIds; - break; - } - case BusQueryCompatibleIDs: - { - DPRINT("Usbhub: IRP_MJ_PNP / IRP_MN_QUERY_ID / BusQueryCompatibleIDs\n"); - SourceString = &DeviceExtension->CompatibleIds; - break; - } - case BusQueryInstanceID: - { - DPRINT("Usbhub: IRP_MJ_PNP / IRP_MN_QUERY_ID / BusQueryInstanceID\n"); - SourceString = &DeviceExtension->InstanceId; - break; - } - default: - DPRINT1("Usbhub: IRP_MJ_PNP / IRP_MN_QUERY_ID / unknown query id type 0x%lx\n", IdType); - return STATUS_NOT_SUPPORTED; - } + switch (IdType) + { + case BusQueryDeviceID: + { + DPRINT1("Usbhub: IRP_MJ_PNP / IRP_MN_QUERY_ID / BusQueryDeviceID\n"); + SourceString = DeviceExtension->DeviceId; + break; + } + /* FIXME: Implement */ + case BusQueryHardwareIDs: + { + DPRINT1("Usbhub: IRP_MJ_PNP / IRP_MN_QUERY_ID / BusQueryHardwareIDs\n"); + SourceString = DeviceExtension->HardwareIds; + Status = STATUS_NOT_SUPPORTED; + break; + } + /* FIXME: Implement */ + case BusQueryCompatibleIDs: + { + DPRINT1("Usbhub: IRP_MJ_PNP / IRP_MN_QUERY_ID / BusQueryCompatibleIDs\n"); + SourceString = DeviceExtension->CompatibleIds; + Status = STATUS_NOT_SUPPORTED; + break; + } + case BusQueryInstanceID: + { + DPRINT1("Usbhub: IRP_MJ_PNP / IRP_MN_QUERY_ID / BusQueryInstanceID\n"); + SourceString = DeviceExtension->InstanceId; + break; + } + default: + DPRINT1("Usbhub: IRP_MJ_PNP / IRP_MN_QUERY_ID / unknown query id type 0x%lx\n", IdType); + return STATUS_NOT_SUPPORTED; + } - Status = UsbhubDuplicateUnicodeString( - &String, - SourceString, - PagedPool); - *Information = (ULONG_PTR)String.Buffer; - return Status; + *Information = (ULONG_PTR)SourceString; + return Status; } static NTSTATUS UsbhubPdoQueryDeviceText( - IN PDEVICE_OBJECT DeviceObject, - IN PIRP Irp, - OUT ULONG_PTR* Information) + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp, + OUT ULONG_PTR* Information) { - PHUB_DEVICE_EXTENSION DeviceExtension; - DEVICE_TEXT_TYPE DeviceTextType; - LCID LocaleId; + PHUB_CHILDDEVICE_EXTENSION DeviceExtension; + DEVICE_TEXT_TYPE DeviceTextType; + LCID LocaleId; - DeviceTextType = IoGetCurrentIrpStackLocation(Irp)->Parameters.QueryDeviceText.DeviceTextType; - LocaleId = IoGetCurrentIrpStackLocation(Irp)->Parameters.QueryDeviceText.LocaleId; - DeviceExtension = (PHUB_DEVICE_EXTENSION)DeviceObject->DeviceExtension; + DeviceTextType = IoGetCurrentIrpStackLocation(Irp)->Parameters.QueryDeviceText.DeviceTextType; + LocaleId = IoGetCurrentIrpStackLocation(Irp)->Parameters.QueryDeviceText.LocaleId; + DeviceExtension = (PHUB_CHILDDEVICE_EXTENSION)DeviceObject->DeviceExtension; - switch (DeviceTextType) - { - case DeviceTextDescription: - case DeviceTextLocationInformation: - { - unsigned short size; - int ret; - PWCHAR buf; - PWCHAR bufret; + switch (DeviceTextType) + { + case DeviceTextDescription: + case DeviceTextLocationInformation: + { + if (DeviceTextType == DeviceTextDescription) + { + *Information = (ULONG_PTR)DeviceExtension->TextDescription; + DPRINT1("Usbhub: IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_TEXT / DeviceTextDescription\n"); + } + else + DPRINT1("Usbhub: IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_TEXT / DeviceTextLocationInformation\n"); - if (DeviceTextType == DeviceTextDescription) - DPRINT("Usbhub: IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_TEXT / DeviceTextDescription\n"); - else - DPRINT("Usbhub: IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_TEXT / DeviceTextLocationInformation\n"); +/* if (!DeviceExtension->dev->descriptor.iProduct) + return STATUS_NOT_SUPPORTED;*/ - if (!DeviceExtension->dev->descriptor.iProduct) - return STATUS_NOT_SUPPORTED; - - ret = usb_get_string(DeviceExtension->dev, LocaleId, DeviceExtension->dev->descriptor.iProduct, &size, sizeof(size)); - if (ret < 2) - { - DPRINT("Usbhub: usb_get_string() failed with error %d\n", ret); - return STATUS_IO_DEVICE_ERROR; - } - size &= 0xff; - buf = ExAllocatePool(PagedPool, size); - if (buf == NULL) - { - DPRINT("Usbhub: ExAllocatePool() failed\n"); - return STATUS_INSUFFICIENT_RESOURCES; - } - ret = usb_get_string(DeviceExtension->dev, LocaleId, DeviceExtension->dev->descriptor.iProduct, buf, size); - if (ret < 0) - { - DPRINT("Usbhub: usb_get_string() failed with error %d\n", ret); - ExFreePool(buf); - return STATUS_IO_DEVICE_ERROR; - } - bufret = ExAllocatePool(PagedPool, size - 2 /* size of length identifier */ + 2 /* final NULL */); - if (bufret == NULL) - { - DPRINT("Usbhub: ExAllocatePool() failed\n"); - ExFreePool(buf); - return STATUS_INSUFFICIENT_RESOURCES; - } - - RtlCopyMemory(bufret, &buf[1], size - 2); - bufret[(size - 1) / sizeof(WCHAR)] = 0; - *Information = (ULONG_PTR)bufret; - ExFreePool(buf); - return STATUS_SUCCESS; - } - default: - DPRINT1("Usbhub: IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_TEXT / unknown device text type 0x%lx\n", DeviceTextType); - return STATUS_NOT_SUPPORTED; - } + return STATUS_SUCCESS; + } + default: + DPRINT1("Usbhub: IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_TEXT / unknown device text type 0x%lx\n", DeviceTextType); + return STATUS_NOT_SUPPORTED; + } } NTSTATUS NTAPI UsbhubPnpPdo( - IN PDEVICE_OBJECT DeviceObject, - IN PIRP Irp) + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp) { - ULONG MinorFunction; - PIO_STACK_LOCATION Stack; - ULONG_PTR Information = 0; - NTSTATUS Status; + ULONG MinorFunction; + PIO_STACK_LOCATION Stack; + ULONG_PTR Information = 0; + NTSTATUS Status; - Stack = IoGetCurrentIrpStackLocation(Irp); - MinorFunction = Stack->MinorFunction; + Stack = IoGetCurrentIrpStackLocation(Irp); + MinorFunction = Stack->MinorFunction; - switch (MinorFunction) - { - case IRP_MN_START_DEVICE: /* 0x0 */ - { - DPRINT("Usbhub: IRP_MJ_PNP / IRP_MN_START_DEVICE\n"); - Status = UsbhubPdoStartDevice(DeviceObject, Irp); - break; - } - case IRP_MN_QUERY_CAPABILITIES: /* 0x09 */ - { - PDEVICE_CAPABILITIES DeviceCapabilities; - ULONG i; - DPRINT("Usbhub: IRP_MJ_PNP / IRP_MN_QUERY_CAPABILITIES\n"); + switch (MinorFunction) + { + case IRP_MN_START_DEVICE: /* 0x0 */ + { + DPRINT1("Usbhub: IRP_MJ_PNP / IRP_MN_START_DEVICE\n"); + Status = UsbhubPdoStartDevice(DeviceObject, Irp); + break; + } + case IRP_MN_QUERY_CAPABILITIES: /* 0x09 */ + { + PDEVICE_CAPABILITIES DeviceCapabilities; + ULONG i; + DPRINT1("Usbhub: IRP_MJ_PNP / IRP_MN_QUERY_CAPABILITIES\n"); - DeviceCapabilities = (PDEVICE_CAPABILITIES)Stack->Parameters.DeviceCapabilities.Capabilities; - /* FIXME: capabilities can change with connected device */ - DeviceCapabilities->LockSupported = TRUE; - DeviceCapabilities->EjectSupported = FALSE; - DeviceCapabilities->Removable = FALSE; - DeviceCapabilities->DockDevice = FALSE; - DeviceCapabilities->UniqueID = FALSE; - DeviceCapabilities->SilentInstall = TRUE; - DeviceCapabilities->RawDeviceOK = FALSE; - DeviceCapabilities->SurpriseRemovalOK = FALSE; - DeviceCapabilities->HardwareDisabled = FALSE; /* FIXME */ - //DeviceCapabilities->NoDisplayInUI = FALSE; /* FIXME */ - DeviceCapabilities->DeviceState[0] = PowerDeviceD0; /* FIXME */ - for (i = 0; i < PowerSystemMaximum; i++) - DeviceCapabilities->DeviceState[i] = PowerDeviceD3; /* FIXME */ - //DeviceCapabilities->DeviceWake = PowerDeviceUndefined; /* FIXME */ - DeviceCapabilities->D1Latency = 0; /* FIXME */ - DeviceCapabilities->D2Latency = 0; /* FIXME */ - DeviceCapabilities->D3Latency = 0; /* FIXME */ - Status = STATUS_SUCCESS; - break; - } - case IRP_MN_QUERY_RESOURCES: /* 0x0a */ - { - PCM_RESOURCE_LIST ResourceList; + DeviceCapabilities = (PDEVICE_CAPABILITIES)Stack->Parameters.DeviceCapabilities.Capabilities; + /* FIXME: capabilities can change with connected device */ + DeviceCapabilities->LockSupported = TRUE; + DeviceCapabilities->EjectSupported = FALSE; + DeviceCapabilities->Removable = FALSE; + DeviceCapabilities->DockDevice = FALSE; + DeviceCapabilities->UniqueID = FALSE; + DeviceCapabilities->SilentInstall = TRUE; + DeviceCapabilities->RawDeviceOK = FALSE; + DeviceCapabilities->SurpriseRemovalOK = FALSE; + DeviceCapabilities->HardwareDisabled = FALSE; /* FIXME */ + //DeviceCapabilities->NoDisplayInUI = FALSE; /* FIXME */ + DeviceCapabilities->DeviceState[0] = PowerDeviceD0; /* FIXME */ + for (i = 0; i < PowerSystemMaximum; i++) + DeviceCapabilities->DeviceState[i] = PowerDeviceD3; /* FIXME */ + //DeviceCapabilities->DeviceWake = PowerDeviceUndefined; /* FIXME */ + DeviceCapabilities->D1Latency = 0; /* FIXME */ + DeviceCapabilities->D2Latency = 0; /* FIXME */ + DeviceCapabilities->D3Latency = 0; /* FIXME */ + Status = STATUS_SUCCESS; + break; + } + case IRP_MN_QUERY_RESOURCES: /* 0x0a */ + { + PCM_RESOURCE_LIST ResourceList; - DPRINT("Usbhub: IRP_MJ_PNP / IRP_MN_QUERY_RESOURCES\n"); - ResourceList = ExAllocatePool(PagedPool, sizeof(CM_RESOURCE_LIST)); - if (!ResourceList) - { - DPRINT("Usbhub: ExAllocatePool() failed\n"); - Status = STATUS_INSUFFICIENT_RESOURCES; - } - else - { - ResourceList->Count = 0; - Information = (ULONG_PTR)ResourceList; - Status = STATUS_SUCCESS; - } - break; - } - case IRP_MN_QUERY_RESOURCE_REQUIREMENTS: /* 0x0b */ - { - PIO_RESOURCE_REQUIREMENTS_LIST ResourceList; + DPRINT1("Usbhub: IRP_MJ_PNP / IRP_MN_QUERY_RESOURCES\n"); + ResourceList = ExAllocatePool(PagedPool, sizeof(CM_RESOURCE_LIST)); + if (!ResourceList) + { + DPRINT1("Usbhub: ExAllocatePool() failed\n"); + Status = STATUS_INSUFFICIENT_RESOURCES; + } + else + { + ResourceList->Count = 0; + Information = (ULONG_PTR)ResourceList; + Status = STATUS_SUCCESS; + } + break; + } + case IRP_MN_QUERY_RESOURCE_REQUIREMENTS: /* 0x0b */ + { + PIO_RESOURCE_REQUIREMENTS_LIST ResourceList; - DPRINT("Usbhub: IRP_MJ_PNP / IRP_MN_QUERY_RESOURCE_REQUIREMENTS\n"); - ResourceList = ExAllocatePool(PagedPool, sizeof(IO_RESOURCE_REQUIREMENTS_LIST)); - if (!ResourceList) - { - DPRINT("Usbhub: ExAllocatePool() failed\n"); - Status = STATUS_INSUFFICIENT_RESOURCES; - } - else - { - RtlZeroMemory(ResourceList, sizeof(IO_RESOURCE_REQUIREMENTS_LIST)); - ResourceList->ListSize = sizeof(IO_RESOURCE_REQUIREMENTS_LIST); - ResourceList->AlternativeLists = 1; - ResourceList->List->Version = 1; - ResourceList->List->Revision = 1; - ResourceList->List->Count = 0; - Information = (ULONG_PTR)ResourceList; - Status = STATUS_SUCCESS; - } - break; - } - case IRP_MN_QUERY_DEVICE_TEXT: /* 0x0c */ - { - Status = UsbhubPdoQueryDeviceText(DeviceObject, Irp, &Information); - break; - } - case IRP_MN_QUERY_ID: /* 0x13 */ - { - Status = UsbhubPdoQueryId(DeviceObject, Irp, &Information); - break; - } - default: - { - /* We can't forward request to the lower driver, because - * we are a Pdo, so we don't have lower driver... - */ - DPRINT1("Usbhub: IRP_MJ_PNP / unknown minor function 0x%lx\n", MinorFunction); - Information = Irp->IoStatus.Information; - Status = Irp->IoStatus.Status; - } - } + DPRINT1("Usbhub: IRP_MJ_PNP / IRP_MN_QUERY_RESOURCE_REQUIREMENTS\n"); + ResourceList = ExAllocatePool(PagedPool, sizeof(IO_RESOURCE_REQUIREMENTS_LIST)); + if (!ResourceList) + { + DPRINT1("Usbhub: ExAllocatePool() failed\n"); + Status = STATUS_INSUFFICIENT_RESOURCES; + } + else + { + RtlZeroMemory(ResourceList, sizeof(IO_RESOURCE_REQUIREMENTS_LIST)); + ResourceList->ListSize = sizeof(IO_RESOURCE_REQUIREMENTS_LIST); + ResourceList->AlternativeLists = 1; + ResourceList->List->Version = 1; + ResourceList->List->Revision = 1; + ResourceList->List->Count = 0; + Information = (ULONG_PTR)ResourceList; + Status = STATUS_SUCCESS; + } + break; + } + case IRP_MN_QUERY_DEVICE_TEXT: /* 0x0c */ + { + Status = UsbhubPdoQueryDeviceText(DeviceObject, Irp, &Information); + break; + } + case IRP_MN_QUERY_ID: /* 0x13 */ + { + Status = UsbhubPdoQueryId(DeviceObject, Irp, &Information); + break; + } + default: + { + /* We can't forward request to the lower driver, because + * we are a Pdo, so we don't have lower driver... + */ + DPRINT1("Usbhub: IRP_MJ_PNP / unknown minor function 0x%lx\n", MinorFunction); + Information = Irp->IoStatus.Information; + Status = Irp->IoStatus.Status; + } + } - Irp->IoStatus.Information = Information; - Irp->IoStatus.Status = Status; - IoCompleteRequest(Irp, IO_NO_INCREMENT); - return Status; + Irp->IoStatus.Information = Information; + Irp->IoStatus.Status = Status; + IoCompleteRequest(Irp, IO_NO_INCREMENT); + return Status; } diff --git a/drivers/usb/usbhub/usbhub.c b/drivers/usb/usbhub/usbhub.c index 15e319df312..2a9e54b8894 100644 --- a/drivers/usb/usbhub/usbhub.c +++ b/drivers/usb/usbhub/usbhub.c @@ -2,7 +2,8 @@ * ReactOS USB hub driver * Copyright (C) 2004 Aleksey Bragin * (C) 2005 Mark Tempel - * (C) 2005 Herv Poussineau + * (C) 2005 Herv� Poussineau + * (C) 2010 Michael Martin * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -26,159 +27,108 @@ /* PUBLIC AND PRIVATE FUNCTIONS ***********************************************/ -static NTSTATUS -GetRootHubPointer( - IN PDEVICE_OBJECT Pdo, - OUT PVOID* RootHubPointer) -{ - KEVENT Event; - PIRP Irp; - IO_STATUS_BLOCK IoStatus; - NTSTATUS Status; - - KeInitializeEvent (&Event, NotificationEvent, FALSE); - - Irp = IoBuildDeviceIoControlRequest(IOCTL_INTERNAL_USB_GET_PARENT_HUB_INFO, - Pdo, - NULL, sizeof(NULL), - RootHubPointer, sizeof(*RootHubPointer), - FALSE, - &Event, - &IoStatus); - if (Irp == NULL) - { - DPRINT("Usbhub: IoBuildDeviceIoControlRequest() failed\n"); - return STATUS_INSUFFICIENT_RESOURCES; - } - - /* Initialize the status block before sending the IRP */ - IoGetNextIrpStackLocation(Irp)->MajorFunction = IRP_MJ_INTERNAL_DEVICE_CONTROL; - IoStatus.Status = STATUS_NOT_SUPPORTED; - IoStatus.Information = 0; - - Status = IoCallDriver(Pdo, Irp); - - if (Status == STATUS_PENDING) - { - DPRINT("Usbhub: Operation pending\n"); - KeWaitForSingleObject(&Event, Suspended, KernelMode, FALSE, NULL); - Status = IoStatus.Status; - } - - return Status; -} - NTSTATUS NTAPI UsbhubAddDevice( - IN PDRIVER_OBJECT DriverObject, - IN PDEVICE_OBJECT Pdo) + IN PDRIVER_OBJECT DriverObject, + IN PDEVICE_OBJECT Pdo) { - PDEVICE_OBJECT Fdo; - PHUB_DEVICE_EXTENSION DeviceExtension; - NTSTATUS Status; + PDEVICE_OBJECT Fdo; + PHUB_DEVICE_EXTENSION DeviceExtension; + NTSTATUS Status; - Status = IoCreateDevice(DriverObject, - sizeof(HUB_DEVICE_EXTENSION), - NULL, /* DeviceName */ - FILE_DEVICE_BUS_EXTENDER, - 0, - FALSE, - &Fdo); - if (!NT_SUCCESS(Status)) - { - DPRINT1("Usbhub: IoCreateDevice() failed with status 0x%08lx\n", Status); - return Status; - } + Status = IoCreateDevice(DriverObject, + sizeof(HUB_DEVICE_EXTENSION), + NULL, /* DeviceName */ + FILE_DEVICE_BUS_EXTENDER, + FILE_AUTOGENERATED_DEVICE_NAME, + FALSE, + &Fdo); - // zerofill device extension - DeviceExtension = (PHUB_DEVICE_EXTENSION)Fdo->DeviceExtension; - RtlZeroMemory(DeviceExtension, sizeof(HUB_DEVICE_EXTENSION)); + if (!NT_SUCCESS(Status)) + { + DPRINT1("Usbhub: IoCreateDevice() failed with status 0x%08lx\n", Status); + return Status; + } - /* Get a pointer to the linux structure created by the USB controller, - * by sending IOCTL_INTERNAL_USB_GET_PARENT_HUB_INFO to lower device. - */ - Status = GetRootHubPointer(Pdo, (PVOID*)&DeviceExtension->dev); - if (!NT_SUCCESS(Status)) - { - DPRINT("Usbhub: GetRootHubPointer() failed with status 0x%08lx\n", Status); - IoDeleteDevice(Fdo); - return Status; - } - DeviceExtension->dev->dev.dev_ext = Pdo; + // zerofill device extension + DeviceExtension = (PHUB_DEVICE_EXTENSION)Fdo->DeviceExtension; + RtlZeroMemory(DeviceExtension, sizeof(HUB_DEVICE_EXTENSION)); - DeviceExtension->IsFDO = TRUE; - Fdo->Flags |= DO_POWER_PAGABLE; - Status = IoAttachDeviceToDeviceStackSafe(Fdo, Pdo, &DeviceExtension->LowerDevice); - if (!NT_SUCCESS(Status)) - { - DPRINT("Usbhub: IoAttachDeviceToDeviceStackSafe() failed with status 0x%08lx\n", Status); - IoDeleteDevice(Fdo); - return Status; - } - Fdo->Flags |= DO_BUFFERED_IO; - Fdo->Flags &= ~DO_DEVICE_INITIALIZING; + DeviceExtension->IsFDO = TRUE; + Fdo->Flags |= DO_POWER_PAGABLE; + //Status = IoAttachDeviceToDeviceStackSafe(Fdo, Pdo, &DeviceExtension->LowerDevice); + DeviceExtension->LowerDevice = IoAttachDeviceToDeviceStack(Fdo, Pdo); + if (!NT_SUCCESS(Status)) + { + DPRINT("Usbhub: IoAttachDeviceToDeviceStackSafe() failed with status 0x%08lx\n", Status); + IoDeleteDevice(Fdo); + return Status; + } + Fdo->Flags |= DO_BUFFERED_IO; - return STATUS_SUCCESS; + Fdo->Flags &= ~DO_DEVICE_INITIALIZING; + + return STATUS_SUCCESS; } static NTSTATUS NTAPI IrpStub( - IN PDEVICE_OBJECT DeviceObject, - IN PIRP Irp) + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp) { - NTSTATUS Status; + NTSTATUS Status; - if (((PHUB_DEVICE_EXTENSION)DeviceObject->DeviceExtension)->IsFDO) - { - DPRINT1("Usbhub: FDO stub for major function 0x%lx\n", - IoGetCurrentIrpStackLocation(Irp)->MajorFunction); + if (((PHUB_DEVICE_EXTENSION)DeviceObject->DeviceExtension)->IsFDO) + { + DPRINT1("Usbhub: FDO stub for major function 0x%lx\n", + IoGetCurrentIrpStackLocation(Irp)->MajorFunction); + return ForwardIrpAndForget(DeviceObject, Irp); + } + else + { + /* We can't forward request to the lower driver, because + * we are a Pdo, so we don't have lower driver... + */ + DPRINT1("Usbhub: PDO stub for major function 0x%lx\n", + IoGetCurrentIrpStackLocation(Irp)->MajorFunction); #ifndef NDEBUG - DbgBreakPoint(); + DbgBreakPoint(); #endif - return ForwardIrpAndForget(DeviceObject, Irp); - } - else - { - /* We can't forward request to the lower driver, because - * we are a Pdo, so we don't have lower driver... - */ - DPRINT1("Usbhub: PDO stub for major function 0x%lx\n", - IoGetCurrentIrpStackLocation(Irp)->MajorFunction); -#ifndef NDEBUG - DbgBreakPoint(); -#endif - } + } - Status = Irp->IoStatus.Status; - IoCompleteRequest(Irp, IO_NO_INCREMENT); - return Status; + Status = Irp->IoStatus.Status; + IoCompleteRequest(Irp, IO_NO_INCREMENT); + return Status; } static NTSTATUS NTAPI DispatchDeviceControl(PDEVICE_OBJECT DeviceObject, PIRP Irp) { - if (((PHUB_DEVICE_EXTENSION)DeviceObject->DeviceExtension)->IsFDO) - return UsbhubDeviceControlFdo(DeviceObject, Irp); - else - return IrpStub(DeviceObject, Irp); + DPRINT1("Usbhub: DispatchDeviceControl\n"); + if (((PHUB_DEVICE_EXTENSION)DeviceObject->DeviceExtension)->IsFDO) + return UsbhubDeviceControlFdo(DeviceObject, Irp); + else + return IrpStub(DeviceObject, Irp); } static NTSTATUS NTAPI DispatchInternalDeviceControl(PDEVICE_OBJECT DeviceObject, PIRP Irp) { - if (((PHUB_DEVICE_EXTENSION)DeviceObject->DeviceExtension)->IsFDO) - return IrpStub(DeviceObject, Irp); - else - return UsbhubInternalDeviceControlPdo(DeviceObject, Irp); + DPRINT1("Usbhub: DispatchInternalDeviceControl\n"); + if (((PHUB_DEVICE_EXTENSION)DeviceObject->DeviceExtension)->IsFDO) + return IrpStub(DeviceObject, Irp); + else + return UsbhubInternalDeviceControlPdo(DeviceObject, Irp); } static NTSTATUS NTAPI DispatchPnp(PDEVICE_OBJECT DeviceObject, PIRP Irp) { - if (((PHUB_DEVICE_EXTENSION)DeviceObject->DeviceExtension)->IsFDO) - return UsbhubPnpFdo(DeviceObject, Irp); - else - return UsbhubPnpPdo(DeviceObject, Irp); + DPRINT1("Usbhub: DispatchPnp\n"); + if (((PHUB_DEVICE_EXTENSION)DeviceObject->DeviceExtension)->IsFDO) + return UsbhubPnpFdo(DeviceObject, Irp); + else + return UsbhubPnpPdo(DeviceObject, Irp); } /* @@ -186,23 +136,24 @@ DispatchPnp(PDEVICE_OBJECT DeviceObject, PIRP Irp) */ NTSTATUS NTAPI DriverEntry( - IN PDRIVER_OBJECT DriverObject, - IN PUNICODE_STRING RegistryPath) + IN PDRIVER_OBJECT DriverObject, + IN PUNICODE_STRING RegistryPath) { - ULONG i; + ULONG i; - DriverObject->DriverExtension->AddDevice = UsbhubAddDevice; + DriverObject->DriverExtension->AddDevice = UsbhubAddDevice; + DPRINT1("Usbhub: DriverEntry\n"); - for (i = 0; i <= IRP_MJ_MAXIMUM_FUNCTION; i++) - DriverObject->MajorFunction[i] = IrpStub; + for (i = 0; i <= IRP_MJ_MAXIMUM_FUNCTION; i++) + DriverObject->MajorFunction[i] = IrpStub; - DriverObject->MajorFunction[IRP_MJ_CREATE] = UsbhubCreate; - DriverObject->MajorFunction[IRP_MJ_CLOSE] = UsbhubClose; - DriverObject->MajorFunction[IRP_MJ_CLEANUP] = UsbhubCleanup; - DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = DispatchDeviceControl; - DriverObject->MajorFunction[IRP_MJ_INTERNAL_DEVICE_CONTROL] = DispatchInternalDeviceControl; - DriverObject->MajorFunction[IRP_MJ_PNP] = DispatchPnp; + DriverObject->MajorFunction[IRP_MJ_CREATE] = UsbhubCreate; + DriverObject->MajorFunction[IRP_MJ_CLOSE] = UsbhubClose; + DriverObject->MajorFunction[IRP_MJ_CLEANUP] = UsbhubCleanup; + DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = DispatchDeviceControl; + DriverObject->MajorFunction[IRP_MJ_INTERNAL_DEVICE_CONTROL] = DispatchInternalDeviceControl; + DriverObject->MajorFunction[IRP_MJ_PNP] = DispatchPnp; - return STATUS_SUCCESS; + return STATUS_SUCCESS; } diff --git a/drivers/usb/usbhub/usbhub.h b/drivers/usb/usbhub/usbhub.h index 0bfb63ad14f..988c6fa2f2e 100644 --- a/drivers/usb/usbhub/usbhub.h +++ b/drivers/usb/usbhub/usbhub.h @@ -1,85 +1,181 @@ -#include - #include +#include +#include #include - -#include "../miniport/usb_wrapper.h" -#include "../usbport/hub.h" +#include +#include +//BROKEN: #include #define USB_HUB_TAG 'hbsu' +#define USB_MAXCHILDREN 127 + +/* Lifted from broken header above */ +#define C_HUB_LOCAL_POWER 0 +#define C_HUB_OVER_CURRENT 1 +#define PORT_CONNECTION 0 +#define PORT_ENABLE 1 +#define PORT_SUSPEND 2 +#define PORT_OVER_CURRENT 3 +#define PORT_RESET 4 +#define PORT_POWER 8 +#define PORT_LOW_SPEED 9 +#define C_PORT_CONNECTION 16 +#define C_PORT_ENABLE 17 +#define C_PORT_SUSPEND 18 +#define C_PORT_OVER_CURRENT 19 +#define C_PORT_RESET 20 +#define PORT_TEST 21 +#define PORT_INDICATOR 22 + +typedef struct _USB_ENDPOINT +{ + ULONG Flags; + LIST_ENTRY UrbList; + struct _USB_INTERFACE *Interface; + USB_ENDPOINT_DESCRIPTOR EndPointDescriptor; +} USB_ENDPOINT, *PUSB_ENDPOINT; + +typedef struct _USB_INTERFACE +{ + struct _USB_CONFIGURATION *Config; + USB_INTERFACE_DESCRIPTOR InterfaceDescriptor; + USB_ENDPOINT *EndPoints[]; +} USB_INTERFACE, *PUSB_INTERFACE; + +typedef struct _USB_CONFIGURATION +{ + struct _USB_DEVICE *Device; + USB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor; + USB_INTERFACE *Interfaces[]; +} USB_CONFIGURATION, *PUSB_CONFIGURATION; + +typedef struct _USB_DEVICE +{ + UCHAR Address; + ULONG Port; + PVOID ParentDevice; + BOOLEAN IsHub; + USB_DEVICE_SPEED DeviceSpeed; + USB_DEVICE_TYPE DeviceType; + USB_DEVICE_DESCRIPTOR DeviceDescriptor; + USB_CONFIGURATION *ActiveConfig; + USB_INTERFACE *ActiveInterface; + USB_CONFIGURATION **Configs; +} USB_DEVICE, *PUSB_DEVICE; + +typedef struct _WORKITEMDATA +{ + WORK_QUEUE_ITEM WorkItem; + PVOID Context; +} WORKITEMDATA, *PWORKITEMDATA; + +typedef struct _HUB_CHILDDEVICE_EXTENSION +{ + BOOLEAN IsFDO; + PDEVICE_OBJECT Parent; + PWCHAR DeviceId; // REG_SZ + PWCHAR InstanceId; // REG_SZ + PWCHAR HardwareIds; // REG_MULTI_SZ + PWCHAR CompatibleIds; // REG_MULTI_SZ + PWCHAR TextDescription; + UNICODE_STRING SymbolicLinkName; +} HUB_CHILDDEVICE_EXTENSION, *PHUB_CHILDDEVICE_EXTENSION; typedef struct _HUB_DEVICE_EXTENSION { - BOOLEAN IsFDO; - struct usb_device* dev; - PDEVICE_OBJECT LowerDevice; + BOOLEAN IsFDO; + USB_DEVICE* dev; + PDEVICE_OBJECT LowerDevice; + ULONG ChildCount; + PDEVICE_OBJECT Children[USB_MAXCHILDREN]; - PDEVICE_OBJECT Children[USB_MAXCHILDREN]; + PUSB_DEVICE UsbChildren[USB_MAXCHILDREN]; - /* Fields valid only when IsFDO == FALSE */ - UNICODE_STRING DeviceId; // REG_SZ - UNICODE_STRING InstanceId; // REG_SZ - UNICODE_STRING HardwareIds; // REG_MULTI_SZ - UNICODE_STRING CompatibleIds; // REG_MULTI_SZ - UNICODE_STRING SymbolicLinkName; + PUSB_DEVICE RootHubUsbDevice; + + PDEVICE_OBJECT RootHubPdo; + PDEVICE_OBJECT RootHubFdo; + + ULONG HubCount; + + USHORT PortStatus[256]; + URB Urb; + + USB_BUS_INTERFACE_HUB_V5 HubInterface; + USB_BUS_INTERFACE_USBDI_V2 UsbDInterface; + + USB_HUB_DESCRIPTOR HubDescriptor; + USB_DEVICE_DESCRIPTOR HubDeviceDescriptor; + + USB_CONFIGURATION_DESCRIPTOR HubConfigDescriptor; + USB_INTERFACE_DESCRIPTOR HubInterfaceDescriptor; + USB_ENDPOINT_DESCRIPTOR HubEndPointDescriptor; + + USB_EXTHUB_INFORMATION_0 UsbExtHubInfo; + USB_DEVICE_INFORMATION_0 DeviceInformation; + + USBD_CONFIGURATION_HANDLE ConfigurationHandle; + USBD_PIPE_HANDLE PipeHandle; + + UNICODE_STRING SymbolicLinkName; } HUB_DEVICE_EXTENSION, *PHUB_DEVICE_EXTENSION; /* createclose.c */ NTSTATUS NTAPI UsbhubCreate( - IN PDEVICE_OBJECT DeviceObject, - IN PIRP Irp); + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp); NTSTATUS NTAPI UsbhubClose( - IN PDEVICE_OBJECT DeviceObject, - IN PIRP Irp); + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp); NTSTATUS NTAPI UsbhubCleanup( - IN PDEVICE_OBJECT DeviceObject, - IN PIRP Irp); + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp); /* fdo.c */ NTSTATUS NTAPI UsbhubPnpFdo( - IN PDEVICE_OBJECT DeviceObject, - IN PIRP Irp); + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp); NTSTATUS UsbhubDeviceControlFdo( - IN PDEVICE_OBJECT DeviceObject, - IN PIRP Irp); + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp); /* misc.c */ NTSTATUS ForwardIrpAndWait( - IN PDEVICE_OBJECT DeviceObject, - IN PIRP Irp); + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp); NTSTATUS NTAPI ForwardIrpAndForget( - IN PDEVICE_OBJECT DeviceObject, - IN PIRP Irp); + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp); NTSTATUS UsbhubDuplicateUnicodeString( - OUT PUNICODE_STRING Destination, - IN PUNICODE_STRING Source, - IN POOL_TYPE PoolType); + OUT PUNICODE_STRING Destination, + IN PUNICODE_STRING Source, + IN POOL_TYPE PoolType); NTSTATUS UsbhubInitMultiSzString( - OUT PUNICODE_STRING Destination, - ... /* list of PCSZ */); + OUT PUNICODE_STRING Destination, + .../* list of PCSZ */); /* pdo.c */ NTSTATUS NTAPI UsbhubPnpPdo( - IN PDEVICE_OBJECT DeviceObject, - IN PIRP Irp); + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp); NTSTATUS UsbhubInternalDeviceControlPdo( - IN PDEVICE_OBJECT DeviceObject, - IN PIRP Irp); + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp); diff --git a/drivers/video/videoprt/int10.c b/drivers/video/videoprt/int10.c index 5f5458aa89f..2b287133084 100644 --- a/drivers/video/videoprt/int10.c +++ b/drivers/video/videoprt/int10.c @@ -20,7 +20,6 @@ */ #include "videoprt.h" -#include "internal/i386/v86m.h" /* PRIVATE FUNCTIONS **********************************************************/ diff --git a/hal/halx86/generic/halinit.c b/hal/halx86/generic/halinit.c index f0ebd33d4ca..9615891c045 100644 --- a/hal/halx86/generic/halinit.c +++ b/hal/halx86/generic/halinit.c @@ -111,7 +111,7 @@ HalInitSystem(IN ULONG BootPhase, /* Fill out the dispatch tables */ HalQuerySystemInformation = HaliQuerySystemInformation; HalSetSystemInformation = HaliSetSystemInformation; - HalInitPnpDriver = NULL; // FIXME: TODO + HalInitPnpDriver = HaliInitPnpDriver; #ifndef _MINIHAL_ HalGetDmaAdapter = HalpGetDmaAdapter; #else diff --git a/hal/halx86/generic/i386/systimer.S b/hal/halx86/generic/i386/systimer.S index 945b5081a89..1a5bb45a1b8 100644 --- a/hal/halx86/generic/i386/systimer.S +++ b/hal/halx86/generic/i386/systimer.S @@ -20,9 +20,6 @@ _HalpPerfCounterLow: .long 0 _HalpPerfCounterHigh: .long 0 _HalpSystemHardwareFlags: .long 0 -_UnhandledMsg: - .asciz "\n\x7\x7!!! Unhandled or Unexpected Code at line: %lx!!!\n" - /* FUNCTIONS *****************************************************************/ .global _HalpCalibrateStallExecution@0 @@ -389,6 +386,9 @@ LoopPostInt: /* Read 8254 timer */ mov al, 0 out 0x43, al + in al, 0x92 + or al, _HalpPerfCounterCutoff + out 0x92, al jmp $+2 in al, 0x40 jmp $+2 diff --git a/hal/halx86/generic/legacy/bussupp.c b/hal/halx86/generic/legacy/bussupp.c index 6faa60fb765..1758f85dab6 100644 --- a/hal/halx86/generic/legacy/bussupp.c +++ b/hal/halx86/generic/legacy/bussupp.c @@ -678,10 +678,10 @@ ShowSize(ULONG x) VOID NTAPI -HalpDebugPciBus(IN ULONG i, - IN ULONG j, - IN ULONG k, - IN PPCI_COMMON_CONFIG PciData) +HalpDebugPciDumpBus(IN ULONG i, + IN ULONG j, + IN ULONG k, + IN PPCI_COMMON_CONFIG PciData) { extern CHAR ClassTable[3922]; extern CHAR VendorTable[642355]; @@ -933,7 +933,7 @@ HalpInitializePciBus(VOID) if (PciData->VendorID == PCI_INVALID_VENDORID) continue; /* Print out the entry */ - HalpDebugPciBus(i, j, k, PciData); + HalpDebugPciDumpBus(i, j, k, PciData); /* Check if this is a Cardbus bridge */ if (PCI_CONFIGURATION_TYPE(PciData) == PCI_CARDBUS_BRIDGE_TYPE) diff --git a/hal/halx86/generic/legacy/halpcat.c b/hal/halx86/generic/legacy/halpcat.c index 0b85acd54ae..28913f9fc16 100644 --- a/hal/halx86/generic/legacy/halpcat.c +++ b/hal/halx86/generic/legacy/halpcat.c @@ -56,6 +56,14 @@ HalpIs16BitPortDecodeSupported(VOID) return (HalpBusType == MACHINE_TYPE_EISA) ? CM_RESOURCE_PORT_16_BIT_DECODE : 0; } +NTSTATUS +NTAPI +HaliInitPnpDriver(VOID) +{ + /* On PC-AT, this will interface with the PCI driver */ + return STATUS_SUCCESS; +} + /* * @implemented */ diff --git a/hal/halx86/generic/misc.c b/hal/halx86/generic/misc.c index f138e5f9871..4b171a819a6 100644 --- a/hal/halx86/generic/misc.c +++ b/hal/halx86/generic/misc.c @@ -301,13 +301,14 @@ HalHandleNMI(IN PVOID NmiInfo) // Halt the system // InbvDisplayString("\n*** The system has halted ***\n"); -#endif + // // Enter the debugger if possible // + KiBugCheckData[0] = (ULONG_PTR)KeServiceDescriptorTable; /* NMI Corruption? */ //if (!(KdDebuggerNotPresent) && (KdDebuggerEnabled)) KeEnterKernelDebugger(); - +#endif // // Freeze the system // diff --git a/hal/halx86/generic/timer.c b/hal/halx86/generic/timer.c index 524b6cecb34..2f78ac46cd8 100644 --- a/hal/halx86/generic/timer.c +++ b/hal/halx86/generic/timer.c @@ -14,6 +14,7 @@ /* GLOBALS *******************************************************************/ +ULONG HalpPerfCounterCutoff; BOOLEAN HalpClockSetMSRate; ULONG HalpCurrentTimeIncrement; ULONG HalpCurrentRollOver; @@ -71,34 +72,26 @@ HalpInitializeClock(VOID) Flags = __readeflags(); _disable(); - // - // Program the PIT for binary mode - // + /* Program the PIT for binary mode */ TimerControl.BcdMode = FALSE; - // - // Program the PIT to generate a normal rate wave (Mode 3) on channel 0. - // Channel 0 is used for the IRQ0 clock interval timer, and channel - // 1 is used for DRAM refresh. - // - // Mode 2 gives much better accuracy than Mode 3. - // + /* + * Program the PIT to generate a normal rate wave (Mode 3) on channel 0. + * Channel 0 is used for the IRQ0 clock interval timer, and channel + * 1 is used for DRAM refresh. + * + * Mode 2 gives much better accuracy than Mode 3. + */ TimerControl.OperatingMode = PitOperatingMode2; TimerControl.Channel = PitChannel0; - // - // Set the access mode that we'll use to program the reload value. - // + /* Set the access mode that we'll use to program the reload value */ TimerControl.AccessMode = PitAccessModeLowHigh; - // - // Now write the programming bits - // + /* Now write the programming bits */ __outbyte(TIMER_CONTROL_PORT, TimerControl.Bits); - // - // Next we write the reload value for channel 0 - // + /* Next we write the reload value for channel 0 */ __outbyte(TIMER_CHANNEL0_DATA_PORT, RollOver & 0xFF); __outbyte(TIMER_CHANNEL0_DATA_PORT, RollOver >> 8); @@ -125,6 +118,7 @@ HalpClockInterruptHandler(IN PKTRAP_FRAME TrapFrame) { /* Update the performance counter */ HalpPerfCounter.QuadPart += HalpCurrentRollOver; + HalpPerfCounterCutoff = KiEnableTimerWatchdog; /* Check if someone changed the time rate */ if (HalpClockSetMSRate) diff --git a/hal/halx86/include/halp.h b/hal/halx86/include/halp.h index c74ae1b0aa6..f837b849abd 100644 --- a/hal/halx86/include/halp.h +++ b/hal/halx86/include/halp.h @@ -4,6 +4,13 @@ #pragma once + +#ifdef _MSC_VER +#define REGISTERCALL FASTCALL +#else +#define REGISTERCALL __attribute__((regparm(3))) +#endif + typedef struct _HAL_BIOS_FRAME { ULONG SegSs; @@ -28,10 +35,9 @@ VOID ); typedef -FASTCALL VOID -DECLSPEC_NORETURN -(*PHAL_SW_INTERRUPT_HANDLER_2ND_ENTRY)( +ATTRIB_NORETURN +(FASTCALL *PHAL_SW_INTERRUPT_HANDLER_2ND_ENTRY)( IN PKTRAP_FRAME TrapFrame ); @@ -409,15 +415,14 @@ typedef struct _PIC_MASK typedef BOOLEAN -__attribute__((regparm(3))) -(*PHAL_DISMISS_INTERRUPT)( +( REGISTERCALL *PHAL_DISMISS_INTERRUPT)( IN KIRQL Irql, IN ULONG Irq, OUT PKIRQL OldIrql ); BOOLEAN -__attribute__((regparm(3))) +REGISTERCALL HalpDismissIrqGeneric( IN KIRQL Irql, IN ULONG Irq, @@ -425,7 +430,7 @@ HalpDismissIrqGeneric( ); BOOLEAN -__attribute__((regparm(3))) +REGISTERCALL HalpDismissIrq15( IN KIRQL Irql, IN ULONG Irq, @@ -433,7 +438,7 @@ HalpDismissIrq15( ); BOOLEAN -__attribute__((regparm(3))) +REGISTERCALL HalpDismissIrq13( IN KIRQL Irql, IN ULONG Irq, @@ -441,7 +446,7 @@ HalpDismissIrq13( ); BOOLEAN -__attribute__((regparm(3))) +REGISTERCALL HalpDismissIrq07( IN KIRQL Irql, IN ULONG Irq, @@ -449,7 +454,7 @@ HalpDismissIrq07( ); BOOLEAN -__attribute__((regparm(3))) +REGISTERCALL HalpDismissIrqLevel( IN KIRQL Irql, IN ULONG Irq, @@ -457,7 +462,7 @@ HalpDismissIrqLevel( ); BOOLEAN -__attribute__((regparm(3))) +REGISTERCALL HalpDismissIrq15Level( IN KIRQL Irql, IN ULONG Irq, @@ -465,7 +470,7 @@ HalpDismissIrq15Level( ); BOOLEAN -__attribute__((regparm(3))) +REGISTERCALL HalpDismissIrq13Level( IN KIRQL Irql, IN ULONG Irq, @@ -473,7 +478,7 @@ HalpDismissIrq13Level( ); BOOLEAN -__attribute__((regparm(3))) +REGISTERCALL HalpDismissIrq07Level( IN KIRQL Irql, IN ULONG Irq, @@ -558,8 +563,8 @@ VOID NTAPI HalpInitializePICs(IN BOOLEAN EnableInterrupts); VOID HalpApcInterrupt(VOID); VOID HalpDispatchInterrupt(VOID); VOID HalpDispatchInterrupt2(VOID); -VOID FASTCALL DECLSPEC_NORETURN HalpApcInterrupt2ndEntry(IN PKTRAP_FRAME TrapFrame); -VOID FASTCALL DECLSPEC_NORETURN HalpDispatchInterrupt2ndEntry(IN PKTRAP_FRAME TrapFrame); +DECLSPEC_NORETURN VOID FASTCALL HalpApcInterrupt2ndEntry(IN PKTRAP_FRAME TrapFrame); +DECLSPEC_NORETURN VOID FASTCALL HalpDispatchInterrupt2ndEntry(IN PKTRAP_FRAME TrapFrame); /* timer.c */ VOID NTAPI HalpInitializeClock(VOID); @@ -790,6 +795,21 @@ HalpInitBusHandlers( VOID ); +NTSTATUS +NTAPI +HaliInitPnpDriver( + VOID +); + +VOID +NTAPI +HalpDebugPciDumpBus( + IN ULONG i, + IN ULONG j, + IN ULONG k, + IN PPCI_COMMON_CONFIG PciData +); + #ifdef _M_AMD64 #define KfLowerIrql KeLowerIrql #ifndef CONFIG_SMP diff --git a/hal/halx86/up/pic.c b/hal/halx86/up/pic.c index 91b902b1a35..d441c1a4997 100644 --- a/hal/halx86/up/pic.c +++ b/hal/halx86/up/pic.c @@ -813,7 +813,7 @@ _HalpDismissIrqGeneric(IN KIRQL Irql, } BOOLEAN -__attribute__((regparm(3))) +REGISTERCALL HalpDismissIrqGeneric(IN KIRQL Irql, IN ULONG Irq, OUT PKIRQL OldIrql) @@ -823,7 +823,7 @@ HalpDismissIrqGeneric(IN KIRQL Irql, } BOOLEAN -__attribute__((regparm(3))) +REGISTERCALL HalpDismissIrq15(IN KIRQL Irql, IN ULONG Irq, OUT PKIRQL OldIrql) @@ -859,7 +859,7 @@ HalpDismissIrq15(IN KIRQL Irql, BOOLEAN -__attribute__((regparm(3))) +REGISTERCALL HalpDismissIrq13(IN KIRQL Irql, IN ULONG Irq, OUT PKIRQL OldIrql) @@ -872,7 +872,7 @@ HalpDismissIrq13(IN KIRQL Irql, } BOOLEAN -__attribute__((regparm(3))) +REGISTERCALL HalpDismissIrq07(IN KIRQL Irql, IN ULONG Irq, OUT PKIRQL OldIrql) @@ -956,7 +956,7 @@ _HalpDismissIrqLevel(IN KIRQL Irql, } BOOLEAN -__attribute__((regparm(3))) +REGISTERCALL HalpDismissIrqLevel(IN KIRQL Irql, IN ULONG Irq, OUT PKIRQL OldIrql) @@ -966,7 +966,7 @@ HalpDismissIrqLevel(IN KIRQL Irql, } BOOLEAN -__attribute__((regparm(3))) +REGISTERCALL HalpDismissIrq15Level(IN KIRQL Irql, IN ULONG Irq, OUT PKIRQL OldIrql) @@ -1001,7 +1001,7 @@ HalpDismissIrq15Level(IN KIRQL Irql, } BOOLEAN -__attribute__((regparm(3))) +REGISTERCALL HalpDismissIrq13Level(IN KIRQL Irql, IN ULONG Irq, OUT PKIRQL OldIrql) @@ -1014,7 +1014,7 @@ HalpDismissIrq13Level(IN KIRQL Irql, } BOOLEAN -__attribute__((regparm(3))) +REGISTERCALL HalpDismissIrq07Level(IN KIRQL Irql, IN ULONG Irq, OUT PKIRQL OldIrql) @@ -1252,8 +1252,8 @@ _HalpApcInterruptHandler(IN PKTRAP_FRAME TrapFrame) } VOID -FASTCALL DECLSPEC_NORETURN +FASTCALL HalpApcInterrupt2ndEntry(IN PKTRAP_FRAME TrapFrame) { /* Do the work */ @@ -1261,8 +1261,8 @@ HalpApcInterrupt2ndEntry(IN PKTRAP_FRAME TrapFrame) } VOID -FASTCALL DECLSPEC_NORETURN +FASTCALL HalpApcInterruptHandler(IN PKTRAP_FRAME TrapFrame) { /* Set up a fake INT Stack */ @@ -1301,8 +1301,8 @@ _HalpDispatchInterruptHandler(VOID) } VOID -FASTCALL DECLSPEC_NORETURN +FASTCALL HalpDispatchInterrupt2ndEntry(IN PKTRAP_FRAME TrapFrame) { KIRQL CurrentIrql; diff --git a/include/crt/_mingw.h b/include/crt/_mingw.h index 3ab124d91a1..b35b6af7203 100644 --- a/include/crt/_mingw.h +++ b/include/crt/_mingw.h @@ -44,7 +44,7 @@ #endif #if defined (_MSC_VER) -#define __MINGW_MSC_PREREQ(major, minor) ((major * 100 + minor * 10) >= _MSC_VER) +#define __MINGW_MSC_PREREQ(major, minor) (_MSC_VER >= (major * 100 + minor * 10)) #else #define __MINGW_MSC_PREREQ(major, minor) 0 #endif @@ -205,6 +205,12 @@ allow GCC to optimize away some EH unwind code, at least in DW2 case. */ #define _CRT_UNUSED(x) (void)x #endif +#ifdef _MSC_VER +#define ATTRIB_NORETURN +#else +#define ATTRIB_NORETURN DECLSPEC_NORETURN +#endif + #include "_mingw_mac.h" #endif /* !_INC_MINGW */ diff --git a/include/crt/stdlib.h b/include/crt/stdlib.h index f3aa7eb0cca..38400dfe9a2 100644 --- a/include/crt/stdlib.h +++ b/include/crt/stdlib.h @@ -489,7 +489,9 @@ extern "C" { __MINGW_EXTENSION lldiv_t __cdecl lldiv(long long, long long); +#ifndef _MSC_VER __MINGW_EXTENSION __CRT_INLINE long long __cdecl llabs(long long _j) { return (_j >= 0 ? _j : -_j); } +#endif __MINGW_EXTENSION long long __cdecl strtoll(const char* __restrict__, char** __restrict, int); __MINGW_EXTENSION unsigned long long __cdecl strtoull(const char* __restrict__, char** __restrict__, int); diff --git a/include/ddk/acpiioct.h b/include/ddk/acpiioct.h index d4d550feae1..eeeb6e8eacc 100644 --- a/include/ddk/acpiioct.h +++ b/include/ddk/acpiioct.h @@ -35,7 +35,7 @@ extern "C" { typedef struct _ACPI_EVAL_INPUT_BUFFER { ULONG Signature; - union { + _ANONYMOUS_UNION union { UCHAR MethodName[4]; ULONG MethodNameAsUlong; } DUMMYUNIONNAME; @@ -43,7 +43,7 @@ typedef struct _ACPI_EVAL_INPUT_BUFFER { typedef struct _ACPI_EVAL_INPUT_BUFFER_SIMPLE_INTEGER { ULONG Signature; - union { + _ANONYMOUS_UNION union { UCHAR MethodName[4]; ULONG MethodNameAsUlong; } DUMMYUNIONNAME; @@ -52,7 +52,7 @@ typedef struct _ACPI_EVAL_INPUT_BUFFER_SIMPLE_INTEGER { typedef struct _ACPI_EVAL_INPUT_BUFFER_SIMPLE_STRING { ULONG Signature; - union { + _ANONYMOUS_UNION union { UCHAR MethodName[4]; ULONG MethodNameAsUlong; } DUMMYUNIONNAME; @@ -63,7 +63,7 @@ typedef struct _ACPI_EVAL_INPUT_BUFFER_SIMPLE_STRING { typedef struct _ACPI_METHOD_ARGUMENT { USHORT Type; USHORT DataLength; - union { + _ANONYMOUS_UNION union { ULONG Argument; UCHAR Data[ANYSIZE_ARRAY]; } DUMMYUNIONNAME; @@ -72,7 +72,7 @@ typedef ACPI_METHOD_ARGUMENT UNALIGNED *PACPI_METHOD_ARGUMENT; typedef struct _ACPI_EVAL_INPUT_BUFFER_COMPLEX { ULONG Signature; - union { + _ANONYMOUS_UNION union { UCHAR MethodName[4]; ULONG MethodNameAsUlong; } DUMMYUNIONNAME; @@ -142,47 +142,47 @@ typedef struct _ACPI_ENUM_CHILDREN_OUTPUT_BUFFER { typedef ACPI_ENUM_CHILDREN_OUTPUT_BUFFER UNALIGNED *PACPI_ENUM_CHILDREN_OUTPUT_BUFFER; #define ACPI_METHOD_ARGUMENT_LENGTH( DataLength ) \ - (FIELD_OFFSET(ACPI_METHOD_ARGUMENT, Data) + max(sizeof(ULONG), DataLength)) + (FIELD_OFFSET(ACPI_METHOD_ARGUMENT, Data) + max(sizeof(ULONG), DataLength)) #define ACPI_METHOD_ARGUMENT_LENGTH_FROM_ARGUMENT( Argument ) \ - (ACPI_METHOD_ARGUMENT_LENGTH(((PACPI_METHOD_ARGUMENT)Argument)->DataLength)) + (ACPI_METHOD_ARGUMENT_LENGTH(((PACPI_METHOD_ARGUMENT)Argument)->DataLength)) #define ACPI_METHOD_NEXT_ARGUMENT( Argument ) \ - (PACPI_METHOD_ARGUMENT) ( (PUCHAR) Argument + \ - ACPI_METHOD_ARGUMENT_LENGTH_FROM_ARGUMENT( Argument ) ) + (PACPI_METHOD_ARGUMENT) ( (PUCHAR) Argument + \ + ACPI_METHOD_ARGUMENT_LENGTH_FROM_ARGUMENT( Argument ) ) #define ACPI_METHOD_SET_ARGUMENT_INTEGER( MethodArgument, IntData ) \ - { MethodArgument->Type = ACPI_METHOD_ARGUMENT_INTEGER; \ - MethodArgument->DataLength = sizeof(ULONG); \ - MethodArgument->Argument = IntData; } + { MethodArgument->Type = ACPI_METHOD_ARGUMENT_INTEGER; \ + MethodArgument->DataLength = sizeof(ULONG); \ + MethodArgument->Argument = IntData; } #define ACPI_METHOD_SET_ARGUMENT_STRING( Argument, StrData ) \ - { Argument->Type = ACPI_METHOD_ARGUMENT_STRING; \ - Argument->DataLength = strlen((PCHAR)StrData) + sizeof(UCHAR); \ - RtlCopyMemory(&Argument->Data[0],(PUCHAR)StrData,Argument->DataLength); } + { Argument->Type = ACPI_METHOD_ARGUMENT_STRING; \ + Argument->DataLength = strlen((PCHAR)StrData) + sizeof(UCHAR); \ + RtlCopyMemory(&Argument->Data[0],(PUCHAR)StrData,Argument->DataLength); } #define ACPI_METHOD_SET_ARGUMENT_BUFFER( Argument, BuffData, BuffLength ) \ - { Argument->Type = ACPI_METHOD_ARGUMENT_BUFFER; \ - Argument->DataLength = BuffLength; \ - RtlCopyMemory(&Argument->Data[0],(PUCHAR)BuffData,Argument->DataLength); } + { Argument->Type = ACPI_METHOD_ARGUMENT_BUFFER; \ + Argument->DataLength = BuffLength; \ + RtlCopyMemory(&Argument->Data[0],(PUCHAR)BuffData,Argument->DataLength); } -#define ACPI_ENUM_CHILD_LENGTH_FROM_CHILD( Child ) \ - ( (2* sizeof (ULONG)) + Child->NameLength ) +#define ACPI_ENUM_CHILD_LENGTH_FROM_CHILD( Child ) \ + ( (2* sizeof (ULONG)) + Child->NameLength ) -#define ACPI_ENUM_CHILD_NEXT( Child ) \ - (PACPI_ENUM_CHILD) ( (PUCHAR) Child + \ - ACPI_ENUM_CHILD_LENGTH_FROM_CHILD( Child ) ) +#define ACPI_ENUM_CHILD_NEXT( Child ) \ + (PACPI_ENUM_CHILD) ( (PUCHAR) Child + \ + ACPI_ENUM_CHILD_LENGTH_FROM_CHILD( Child ) ) -#define IOCTL_ACPI_ASYNC_EVAL_METHOD CTL_CODE(FILE_DEVICE_ACPI, 0, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) -#define IOCTL_ACPI_EVAL_METHOD CTL_CODE(FILE_DEVICE_ACPI, 1, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) -#define IOCTL_ACPI_ACQUIRE_GLOBAL_LOCK CTL_CODE(FILE_DEVICE_ACPI, 4, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) -#define IOCTL_ACPI_RELEASE_GLOBAL_LOCK CTL_CODE(FILE_DEVICE_ACPI, 5, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) +#define IOCTL_ACPI_ASYNC_EVAL_METHOD CTL_CODE(FILE_DEVICE_ACPI, 0, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) +#define IOCTL_ACPI_EVAL_METHOD CTL_CODE(FILE_DEVICE_ACPI, 1, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) +#define IOCTL_ACPI_ACQUIRE_GLOBAL_LOCK CTL_CODE(FILE_DEVICE_ACPI, 4, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) +#define IOCTL_ACPI_RELEASE_GLOBAL_LOCK CTL_CODE(FILE_DEVICE_ACPI, 5, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) #if (NTDDI_VERSION >= NTDDI_VISTA) -#define IOCTL_ACPI_EVAL_METHOD_EX CTL_CODE(FILE_DEVICE_ACPI, 6, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) -#define IOCTL_ACPI_ASYNC_EVAL_METHOD_EX CTL_CODE(FILE_DEVICE_ACPI, 7, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) -#define IOCTL_ACPI_ENUM_CHILDREN CTL_CODE(FILE_DEVICE_ACPI, 8, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) +#define IOCTL_ACPI_EVAL_METHOD_EX CTL_CODE(FILE_DEVICE_ACPI, 6, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) +#define IOCTL_ACPI_ASYNC_EVAL_METHOD_EX CTL_CODE(FILE_DEVICE_ACPI, 7, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) +#define IOCTL_ACPI_ENUM_CHILDREN CTL_CODE(FILE_DEVICE_ACPI, 8, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) #endif #ifdef __cplusplus diff --git a/include/ddk/bdasup.h b/include/ddk/bdasup.h index 373ccdbdcbf..51964113d77 100644 --- a/include/ddk/bdasup.h +++ b/include/ddk/bdasup.h @@ -6,15 +6,6 @@ extern "C" { #endif -/* Helper macro to enable gcc's extension. */ -#ifndef __GNU_EXTENSION -#ifdef __GNUC__ -#define __GNU_EXTENSION __extension__ -#else -#define __GNU_EXTENSION -#endif -#endif - #define STDMETHODCALLTYPE __stdcall #ifndef _WDMDDK_ diff --git a/include/ddk/d3dhal.h b/include/ddk/d3dhal.h index d4ecc2ca4e9..81f8d11e42e 100644 --- a/include/ddk/d3dhal.h +++ b/include/ddk/d3dhal.h @@ -22,15 +22,6 @@ #ifndef _D3DHAL_H_ #define _D3DHAL_H_ -/* Helper macro to enable gcc's extension. */ -#ifndef __GNU_EXTENSION -#ifdef __GNUC__ -#define __GNU_EXTENSION __extension__ -#else -#define __GNU_EXTENSION -#endif -#endif - #ifdef __cplusplus extern "C" { #endif @@ -61,31 +52,31 @@ typedef struct _DDRAWI_DDRAWSURFACE_LCL FAR *LPDDRAWI_DDRAWSURFACE_LCL; * device info structures */ typedef struct _D3DDeviceDesc_V1 { - DWORD dwSize; - DWORD dwFlags; - D3DCOLORMODEL dcmColorModel; - DWORD dwDevCaps; - D3DTRANSFORMCAPS dtcTransformCaps; - BOOL bClipping; - D3DLIGHTINGCAPS dlcLightingCaps; - D3DPRIMCAPS dpcLineCaps; - D3DPRIMCAPS dpcTriCaps; - DWORD dwDeviceRenderBitDepth; - DWORD dwDeviceZBufferBitDepth; - DWORD dwMaxBufferSize; - DWORD dwMaxVertexCount; -} D3DDEVICEDESC_V1,*LPD3DDEVICEDESC_V1; + DWORD dwSize; + DWORD dwFlags; + D3DCOLORMODEL dcmColorModel; + DWORD dwDevCaps; + D3DTRANSFORMCAPS dtcTransformCaps; + BOOL bClipping; + D3DLIGHTINGCAPS dlcLightingCaps; + D3DPRIMCAPS dpcLineCaps; + D3DPRIMCAPS dpcTriCaps; + DWORD dwDeviceRenderBitDepth; + DWORD dwDeviceZBufferBitDepth; + DWORD dwMaxBufferSize; + DWORD dwMaxVertexCount; +} D3DDEVICEDESC_V1, *LPD3DDEVICEDESC_V1; /* this is to allow keeping the bulk of our OpenGL code out of x11drv */ #define D3DDD_WINE_OPENGL_DEVICE 0x00008000 typedef struct _D3DHAL_GLOBALDRIVERDATA { - DWORD dwSize; - D3DDEVICEDESC_V1 hwCaps; - DWORD dwNumVertices; - DWORD dwNumClipVertices; - DWORD dwNumTextureFormats; - LPDDSURFACEDESC lpTextureFormats; + DWORD dwSize; + D3DDEVICEDESC_V1 hwCaps; + DWORD dwNumVertices; + DWORD dwNumClipVertices; + DWORD dwNumTextureFormats; + LPDDSURFACEDESC lpTextureFormats; } D3DHAL_GLOBALDRIVERDATA; #ifndef D3DHAL_GLOBALDRIVERDATA_DEFINED @@ -94,103 +85,103 @@ typedef D3DHAL_GLOBALDRIVERDATA *LPD3DHAL_GLOBALDRIVERDATA; #endif typedef struct _D3DHAL_D3DEXTENDEDCAPS { - DWORD dwSize; + DWORD dwSize; /* DirectX 5 */ - DWORD dwMinTextureWidth, dwMaxTextureWidth; - DWORD dwMinTextureHeight, dwMaxTextureHeight; - DWORD dwMinStippleWidth, dwMaxStippleWidth; - DWORD dwMinStippleHeight, dwMaxStippleHeight; + DWORD dwMinTextureWidth, dwMaxTextureWidth; + DWORD dwMinTextureHeight, dwMaxTextureHeight; + DWORD dwMinStippleWidth, dwMaxStippleWidth; + DWORD dwMinStippleHeight, dwMaxStippleHeight; /* DirectX 6 */ - DWORD dwMaxTextureRepeat; - DWORD dwMaxTextureAspectRatio; - DWORD dwMaxAnisotropy; - D3DVALUE dvGuardBandLeft; - D3DVALUE dvGuardBandTop; - D3DVALUE dvGuardBandRight; - D3DVALUE dvGuardBandBottom; - D3DVALUE dvExtentsAdjust; - DWORD dwStencilCaps; - DWORD dwFVFCaps; - DWORD dwTextureOpCaps; - WORD wMaxTextureBlendStages; - WORD wMaxSimultaneousTextures; + DWORD dwMaxTextureRepeat; + DWORD dwMaxTextureAspectRatio; + DWORD dwMaxAnisotropy; + D3DVALUE dvGuardBandLeft; + D3DVALUE dvGuardBandTop; + D3DVALUE dvGuardBandRight; + D3DVALUE dvGuardBandBottom; + D3DVALUE dvExtentsAdjust; + DWORD dwStencilCaps; + DWORD dwFVFCaps; + DWORD dwTextureOpCaps; + WORD wMaxTextureBlendStages; + WORD wMaxSimultaneousTextures; /* DirectX 7 */ - DWORD dwMaxActiveLights; - D3DVALUE dvMaxVertexW; - WORD wMaxUserClipPlanes; - WORD wMaxVertexBlendMatrices; - DWORD dwVertexProcessingCaps; - DWORD dwReserved1; - DWORD dwReserved2; - DWORD dwReserved3; - DWORD dwReserved4; -} D3DHAL_D3DEXTENDEDCAPS,*LPD3DHAL_D3DEXTENDEDCAPS; + DWORD dwMaxActiveLights; + D3DVALUE dvMaxVertexW; + WORD wMaxUserClipPlanes; + WORD wMaxVertexBlendMatrices; + DWORD dwVertexProcessingCaps; + DWORD dwReserved1; + DWORD dwReserved2; + DWORD dwReserved3; + DWORD dwReserved4; +} D3DHAL_D3DEXTENDEDCAPS, *LPD3DHAL_D3DEXTENDEDCAPS; /***************************************************************************** * d3d->driver callbacks */ -typedef struct _D3DHAL_CONTEXTCREATEDATA *LPD3DHAL_CONTEXTCREATEDATA; -typedef struct _D3DHAL_CONTEXTDESTROYDATA *LPD3DHAL_CONTEXTDESTROYDATA; -typedef struct _D3DHAL_CONTEXTDESTROYALLDATA *LPD3DHAL_CONTEXTDESTROYALLDATA; -typedef struct _D3DHAL_SCENECAPTUREDATA *LPD3DHAL_SCENECAPTUREDATA; -typedef struct _D3DHAL_RENDERSTATEDATA *LPD3DHAL_RENDERSTATEDATA; -typedef struct _D3DHAL_RENDERPRIMITIVEDATA *LPD3DHAL_RENDERPRIMITIVEDATA; -typedef struct _D3DHAL_TEXTURECREATEDATA *LPD3DHAL_TEXTURECREATEDATA; -typedef struct _D3DHAL_TEXTUREDESTROYDATA *LPD3DHAL_TEXTUREDESTROYDATA; -typedef struct _D3DHAL_TEXTURESWAPDATA *LPD3DHAL_TEXTURESWAPDATA; -typedef struct _D3DHAL_TEXTUREGETSURFDATA *LPD3DHAL_TEXTUREGETSURFDATA; -typedef struct _D3DHAL_GETSTATEDATA *LPD3DHAL_GETSTATEDATA; +typedef struct _D3DHAL_CONTEXTCREATEDATA *LPD3DHAL_CONTEXTCREATEDATA; +typedef struct _D3DHAL_CONTEXTDESTROYDATA *LPD3DHAL_CONTEXTDESTROYDATA; +typedef struct _D3DHAL_CONTEXTDESTROYALLDATA *LPD3DHAL_CONTEXTDESTROYALLDATA; +typedef struct _D3DHAL_SCENECAPTUREDATA *LPD3DHAL_SCENECAPTUREDATA; +typedef struct _D3DHAL_RENDERSTATEDATA *LPD3DHAL_RENDERSTATEDATA; +typedef struct _D3DHAL_RENDERPRIMITIVEDATA *LPD3DHAL_RENDERPRIMITIVEDATA; +typedef struct _D3DHAL_TEXTURECREATEDATA *LPD3DHAL_TEXTURECREATEDATA; +typedef struct _D3DHAL_TEXTUREDESTROYDATA *LPD3DHAL_TEXTUREDESTROYDATA; +typedef struct _D3DHAL_TEXTURESWAPDATA *LPD3DHAL_TEXTURESWAPDATA; +typedef struct _D3DHAL_TEXTUREGETSURFDATA *LPD3DHAL_TEXTUREGETSURFDATA; +typedef struct _D3DHAL_GETSTATEDATA *LPD3DHAL_GETSTATEDATA; typedef DWORD (PASCAL *LPD3DHAL_CONTEXTCREATECB) (LPD3DHAL_CONTEXTCREATEDATA); typedef DWORD (PASCAL *LPD3DHAL_CONTEXTDESTROYCB) (LPD3DHAL_CONTEXTDESTROYDATA); typedef DWORD (PASCAL *LPD3DHAL_CONTEXTDESTROYALLCB)(LPD3DHAL_CONTEXTDESTROYALLDATA); -typedef DWORD (PASCAL *LPD3DHAL_SCENECAPTURECB) (LPD3DHAL_SCENECAPTUREDATA); -typedef DWORD (PASCAL *LPD3DHAL_RENDERSTATECB) (LPD3DHAL_RENDERSTATEDATA); +typedef DWORD (PASCAL *LPD3DHAL_SCENECAPTURECB) (LPD3DHAL_SCENECAPTUREDATA); +typedef DWORD (PASCAL *LPD3DHAL_RENDERSTATECB) (LPD3DHAL_RENDERSTATEDATA); typedef DWORD (PASCAL *LPD3DHAL_RENDERPRIMITIVECB) (LPD3DHAL_RENDERPRIMITIVEDATA); typedef DWORD (PASCAL *LPD3DHAL_TEXTURECREATECB) (LPD3DHAL_TEXTURECREATEDATA); typedef DWORD (PASCAL *LPD3DHAL_TEXTUREDESTROYCB) (LPD3DHAL_TEXTUREDESTROYDATA); -typedef DWORD (PASCAL *LPD3DHAL_TEXTURESWAPCB) (LPD3DHAL_TEXTURESWAPDATA); +typedef DWORD (PASCAL *LPD3DHAL_TEXTURESWAPCB) (LPD3DHAL_TEXTURESWAPDATA); typedef DWORD (PASCAL *LPD3DHAL_TEXTUREGETSURFCB) (LPD3DHAL_TEXTUREGETSURFDATA); -typedef DWORD (PASCAL *LPD3DHAL_GETSTATECB) (LPD3DHAL_GETSTATEDATA); +typedef DWORD (PASCAL *LPD3DHAL_GETSTATECB) (LPD3DHAL_GETSTATEDATA); typedef struct _D3DHAL_CALLBACKS { - DWORD dwSize; - LPD3DHAL_CONTEXTCREATECB ContextCreate; - LPD3DHAL_CONTEXTDESTROYCB ContextDestroy; - LPD3DHAL_CONTEXTDESTROYALLCB ContextDestroyAll; - LPD3DHAL_SCENECAPTURECB SceneCapture; - LPVOID lpReserved10; - LPVOID lpReserved11; - LPD3DHAL_RENDERSTATECB RenderState; - LPD3DHAL_RENDERPRIMITIVECB RenderPrimitive; - DWORD dwReserved; - LPD3DHAL_TEXTURECREATECB TextureCreate; - LPD3DHAL_TEXTUREDESTROYCB TextureDestroy; - LPD3DHAL_TEXTURESWAPCB TextureSwap; - LPD3DHAL_TEXTUREGETSURFCB TextureGetSurf; + DWORD dwSize; + LPD3DHAL_CONTEXTCREATECB ContextCreate; + LPD3DHAL_CONTEXTDESTROYCB ContextDestroy; + LPD3DHAL_CONTEXTDESTROYALLCB ContextDestroyAll; + LPD3DHAL_SCENECAPTURECB SceneCapture; + LPVOID lpReserved10; + LPVOID lpReserved11; + LPD3DHAL_RENDERSTATECB RenderState; + LPD3DHAL_RENDERPRIMITIVECB RenderPrimitive; + DWORD dwReserved; + LPD3DHAL_TEXTURECREATECB TextureCreate; + LPD3DHAL_TEXTUREDESTROYCB TextureDestroy; + LPD3DHAL_TEXTURESWAPCB TextureSwap; + LPD3DHAL_TEXTUREGETSURFCB TextureGetSurf; /* now why did MS create CALLBACKS2 and CALLBACKS3 structures if * all these reserved fields were available? we may never know */ - LPVOID lpReserved12; - LPVOID lpReserved13; - LPVOID lpReserved14; - LPVOID lpReserved15; - LPVOID lpReserved16; - LPVOID lpReserved17; - LPVOID lpReserved18; - LPVOID lpReserved19; - LPVOID lpReserved20; - LPVOID lpReserved21; - LPD3DHAL_GETSTATECB GetState; - DWORD dwReserved0; - DWORD dwReserved1; - DWORD dwReserved2; - DWORD dwReserved3; - DWORD dwReserved4; - DWORD dwReserved5; - DWORD dwReserved6; - DWORD dwReserved7; - DWORD dwReserved8; - DWORD dwReserved9; + LPVOID lpReserved12; + LPVOID lpReserved13; + LPVOID lpReserved14; + LPVOID lpReserved15; + LPVOID lpReserved16; + LPVOID lpReserved17; + LPVOID lpReserved18; + LPVOID lpReserved19; + LPVOID lpReserved20; + LPVOID lpReserved21; + LPD3DHAL_GETSTATECB GetState; + DWORD dwReserved0; + DWORD dwReserved1; + DWORD dwReserved2; + DWORD dwReserved3; + DWORD dwReserved4; + DWORD dwReserved5; + DWORD dwReserved6; + DWORD dwReserved7; + DWORD dwReserved8; + DWORD dwReserved9; } D3DHAL_CALLBACKS; #ifndef D3DHAL_CALLBACKS_DEFINED @@ -198,132 +189,132 @@ typedef D3DHAL_CALLBACKS *LPD3DHAL_CALLBACKS; #define D3DHAL_CALLBACKS_DEFINED #endif -typedef struct _D3DHAL_SETRENDERTARGETDATA *LPD3DHAL_SETRENDERTARGETDATA; -typedef struct _D3DHAL_CLEARDATA *LPD3DHAL_CLEARDATA; -typedef struct _D3DHAL_DRAWONEPRIMITIVEDATA *LPD3DHAL_DRAWONEPRIMITIVEDATA; -typedef struct _D3DHAL_DRAWONEINDEXEDPRIMITIVEDATA *LPD3DHAL_DRAWONEINDEXEDPRIMITIVEDATA; -typedef struct _D3DHAL_DRAWPRIMITIVESDATA *LPD3DHAL_DRAWPRIMITIVESDATA; +typedef struct _D3DHAL_SETRENDERTARGETDATA *LPD3DHAL_SETRENDERTARGETDATA; +typedef struct _D3DHAL_CLEARDATA *LPD3DHAL_CLEARDATA; +typedef struct _D3DHAL_DRAWONEPRIMITIVEDATA *LPD3DHAL_DRAWONEPRIMITIVEDATA; +typedef struct _D3DHAL_DRAWONEINDEXEDPRIMITIVEDATA *LPD3DHAL_DRAWONEINDEXEDPRIMITIVEDATA; +typedef struct _D3DHAL_DRAWPRIMITIVESDATA *LPD3DHAL_DRAWPRIMITIVESDATA; -typedef DWORD (PASCAL *LPD3DHAL_SETRENDERTARGETCB) (LPD3DHAL_SETRENDERTARGETDATA); -typedef DWORD (PASCAL *LPD3DHAL_CLEARCB) (LPD3DHAL_CLEARDATA); -typedef DWORD (PASCAL *LPD3DHAL_DRAWONEPRIMITIVECB) (LPD3DHAL_DRAWONEPRIMITIVEDATA); +typedef DWORD (PASCAL *LPD3DHAL_SETRENDERTARGETCB) (LPD3DHAL_SETRENDERTARGETDATA); +typedef DWORD (PASCAL *LPD3DHAL_CLEARCB) (LPD3DHAL_CLEARDATA); +typedef DWORD (PASCAL *LPD3DHAL_DRAWONEPRIMITIVECB) (LPD3DHAL_DRAWONEPRIMITIVEDATA); typedef DWORD (PASCAL *LPD3DHAL_DRAWONEINDEXEDPRIMITIVECB)(LPD3DHAL_DRAWONEINDEXEDPRIMITIVEDATA); -typedef DWORD (PASCAL *LPD3DHAL_DRAWPRIMITIVESCB) (LPD3DHAL_DRAWPRIMITIVESDATA); +typedef DWORD (PASCAL *LPD3DHAL_DRAWPRIMITIVESCB) (LPD3DHAL_DRAWPRIMITIVESDATA); typedef struct _D3DHAL_CALLBACKS2 { - DWORD dwSize; - DWORD dwFlags; - LPD3DHAL_SETRENDERTARGETCB SetRenderTarget; - LPD3DHAL_CLEARCB Clear; - LPD3DHAL_DRAWONEPRIMITIVECB DrawOnePrimitive; - LPD3DHAL_DRAWONEINDEXEDPRIMITIVECB DrawOneIndexedPrimitive; - LPD3DHAL_DRAWPRIMITIVESCB DrawPrimitives; -} D3DHAL_CALLBACKS2,*LPD3DHAL_CALLBACKS2; + DWORD dwSize; + DWORD dwFlags; + LPD3DHAL_SETRENDERTARGETCB SetRenderTarget; + LPD3DHAL_CLEARCB Clear; + LPD3DHAL_DRAWONEPRIMITIVECB DrawOnePrimitive; + LPD3DHAL_DRAWONEINDEXEDPRIMITIVECB DrawOneIndexedPrimitive; + LPD3DHAL_DRAWPRIMITIVESCB DrawPrimitives; +} D3DHAL_CALLBACKS2, *LPD3DHAL_CALLBACKS2; -typedef struct _D3DHAL_CLEAR2DATA *LPD3DHAL_CLEAR2DATA; -typedef struct _D3DHAL_VALIDATETEXTURESTAGESTATEDATA *LPD3DHAL_VALIDATETEXTURESTAGESTATEDATA; -typedef struct _D3DHAL_DRAWPRIMITIVES2DATA *LPD3DHAL_DRAWPRIMITIVES2DATA; +typedef struct _D3DHAL_CLEAR2DATA *LPD3DHAL_CLEAR2DATA; +typedef struct _D3DHAL_VALIDATETEXTURESTAGESTATEDATA *LPD3DHAL_VALIDATETEXTURESTAGESTATEDATA; +typedef struct _D3DHAL_DRAWPRIMITIVES2DATA *LPD3DHAL_DRAWPRIMITIVES2DATA; -typedef DWORD (PASCAL *LPD3DHAL_CLEAR2CB) (LPD3DHAL_CLEAR2DATA); -typedef DWORD (PASCAL *LPD3DHAL_VALIDATETEXTURESTAGESTATECB)(LPD3DHAL_VALIDATETEXTURESTAGESTATEDATA); -typedef DWORD (PASCAL *LPD3DHAL_DRAWPRIMITIVES2CB) (LPD3DHAL_DRAWPRIMITIVES2DATA); +typedef DWORD (PASCAL *LPD3DHAL_CLEAR2CB) (LPD3DHAL_CLEAR2DATA); +typedef DWORD (PASCAL *LPD3DHAL_VALIDATETEXTURESTAGESTATECB) (LPD3DHAL_VALIDATETEXTURESTAGESTATEDATA); +typedef DWORD (PASCAL *LPD3DHAL_DRAWPRIMITIVES2CB) (LPD3DHAL_DRAWPRIMITIVES2DATA); typedef struct _D3DHAL_CALLBACKS3 { - DWORD dwSize; - DWORD dwFlags; - LPD3DHAL_CLEAR2CB Clear2; - LPVOID lpvReserved; - LPD3DHAL_VALIDATETEXTURESTAGESTATECB ValidateTextureStageState; - LPD3DHAL_DRAWPRIMITIVES2CB DrawPrimitives2; -} D3DHAL_CALLBACKS3,*LPD3DHAL_CALLBACKS3; + DWORD dwSize; + DWORD dwFlags; + LPD3DHAL_CLEAR2CB Clear2; + LPVOID lpvReserved; + LPD3DHAL_VALIDATETEXTURESTAGESTATECB ValidateTextureStageState; + LPD3DHAL_DRAWPRIMITIVES2CB DrawPrimitives2; +} D3DHAL_CALLBACKS3, *LPD3DHAL_CALLBACKS3; /***************************************************************************** * parameter structures */ typedef struct _D3DHAL_CONTEXTCREATEDATA { - union { - LPDDRAWI_DIRECTDRAW_GBL lpDDGbl; /* pre-DirectX 7 */ - LPDDRAWI_DIRECTDRAW_LCL lpDDLcl; /* DirectX 7 */ + _ANONYMOUS_UNION union { + LPDDRAWI_DIRECTDRAW_GBL lpDDGbl; /* pre-DirectX 7 */ + LPDDRAWI_DIRECTDRAW_LCL lpDDLcl; /* DirectX 7 */ } DUMMYUNIONNAME1; - union { - LPDIRECTDRAWSURFACE lpDDS; - LPDDRAWI_DDRAWSURFACE_LCL lpDDSLcl; /* DirectX 7 */ + _ANONYMOUS_UNION union { + LPDIRECTDRAWSURFACE lpDDS; + LPDDRAWI_DDRAWSURFACE_LCL lpDDSLcl; /* DirectX 7 */ } DUMMYUNIONNAME2; - union { - LPDIRECTDRAWSURFACE lpDDSZ; - LPDDRAWI_DDRAWSURFACE_LCL lpDDSZLcl; /* DirectX 7 */ + _ANONYMOUS_UNION union { + LPDIRECTDRAWSURFACE lpDDSZ; + LPDDRAWI_DDRAWSURFACE_LCL lpDDSZLcl; /* DirectX 7 */ } DUMMYUNIONNAME3; - union { - DWORD dwPID; - ULONG_PTR dwrstates; + _ANONYMOUS_UNION union { + DWORD dwPID; + ULONG_PTR dwrstates; } DUMMYUNIONNAME4; - ULONG_PTR dwhContext; - HRESULT ddrval; + ULONG_PTR dwhContext; + HRESULT ddrval; } D3DHAL_CONTEXTCREATEDATA; typedef struct _D3DHAL_CONTEXTDESTROYDATA { - ULONG_PTR dwhContext; - HRESULT ddrval; + ULONG_PTR dwhContext; + HRESULT ddrval; } D3DHAL_CONTEXTDESTROYDATA; typedef struct _D3DHAL_CONTEXTDESTROYALLDATA { - DWORD dwPID; - HRESULT ddrval; + DWORD dwPID; + HRESULT ddrval; } D3DHAL_CONTEXTDESTROYALLDATA; typedef struct _D3DHAL_SCENECAPTUREDATA { - ULONG_PTR dwhContext; - DWORD dwFlag; - HRESULT ddrval; + ULONG_PTR dwhContext; + DWORD dwFlag; + HRESULT ddrval; } D3DHAL_SCENECAPTUREDATA; -#define D3DHAL_SCENE_CAPTURE_START 0x00000000 -#define D3DHAL_SCENE_CAPTURE_END 0x00000001 +#define D3DHAL_SCENE_CAPTURE_START 0x00000000 +#define D3DHAL_SCENE_CAPTURE_END 0x00000001 typedef struct _D3DHAL_SETRENDERTARGETDATA { - ULONG_PTR dwhContext; - union { - LPDIRECTDRAWSURFACE lpDDS; - LPDDRAWI_DDRAWSURFACE_LCL lpDDSLcl; + ULONG_PTR dwhContext; + _ANONYMOUS_UNION union { + LPDIRECTDRAWSURFACE lpDDS; + LPDDRAWI_DDRAWSURFACE_LCL lpDDSLcl; } DUMMYUNIONNAME1; - union { - LPDIRECTDRAWSURFACE lpDDSZ; - LPDDRAWI_DDRAWSURFACE_LCL lpDDSZLcl; + _ANONYMOUS_UNION union { + LPDIRECTDRAWSURFACE lpDDSZ; + LPDDRAWI_DDRAWSURFACE_LCL lpDDSZLcl; } DUMMYUNIONNAME2; - HRESULT ddrval; + HRESULT ddrval; } D3DHAL_SETRENDERTARGETDATA; typedef struct _D3DHAL_DRAWPRIMITIVES2DATA { - ULONG_PTR dwhContext; - DWORD dwFlags; - DWORD dwVertexType; - LPDDRAWI_DDRAWSURFACE_LCL lpDDCommands; - DWORD dwCommandOffset; - DWORD dwCommandLength; - union { - LPDDRAWI_DDRAWSURFACE_LCL lpDDVertex; - LPVOID lpVertices; + ULONG_PTR dwhContext; + DWORD dwFlags; + DWORD dwVertexType; + LPDDRAWI_DDRAWSURFACE_LCL lpDDCommands; + DWORD dwCommandOffset; + DWORD dwCommandLength; + _ANONYMOUS_UNION union { + LPDDRAWI_DDRAWSURFACE_LCL lpDDVertex; + LPVOID lpVertices; } DUMMYUNIONNAME1; - DWORD dwVertexOffset; - DWORD dwVertexLength; - DWORD dwReqVertexBufSize; - DWORD dwReqCommandBufSize; - LPDWORD lpdwRStates; - union { - DWORD dwVertexSize; - HRESULT ddrval; + DWORD dwVertexOffset; + DWORD dwVertexLength; + DWORD dwReqVertexBufSize; + DWORD dwReqCommandBufSize; + LPDWORD lpdwRStates; + _ANONYMOUS_UNION union { + DWORD dwVertexSize; + HRESULT ddrval; } DUMMYUNIONNAME2; - DWORD dwErrorOffset; + DWORD dwErrorOffset; } D3DHAL_DRAWPRIMITIVES2DATA; -#define D3DHALDP2_USERMEMVERTICES 0x00000001 -#define D3DHALDP2_EXECUTEBUFFER 0x00000002 -#define D3DHALDP2_SWAPVERTEXBUFFER 0x00000004 -#define D3DHALDP2_SWAPCOMMANDBUFFER 0x00000008 -#define D3DHALDP2_REQVERTEXBUFSIZE 0x00000010 -#define D3DHALDP2_REQCOMMANDBUFSIZE 0x00000020 -#define D3DHALDP2_VIDMEMVERTEXBUF 0x00000040 -#define D3DHALDP2_VIDMEMCOMMANDBUF 0x00000080 +#define D3DHALDP2_USERMEMVERTICES 0x00000001 +#define D3DHALDP2_EXECUTEBUFFER 0x00000002 +#define D3DHALDP2_SWAPVERTEXBUFFER 0x00000004 +#define D3DHALDP2_SWAPCOMMANDBUFFER 0x00000008 +#define D3DHALDP2_REQVERTEXBUFSIZE 0x00000010 +#define D3DHALDP2_REQCOMMANDBUFSIZE 0x00000020 +#define D3DHALDP2_VIDMEMVERTEXBUF 0x00000040 +#define D3DHALDP2_VIDMEMCOMMANDBUF 0x00000080 /***************************************************************************** * DrawPrimitives2 command structures @@ -331,50 +322,50 @@ typedef struct _D3DHAL_DRAWPRIMITIVES2DATA { typedef struct _D3DHAL_DP2COMMAND { BYTE bCommand; BYTE bReserved; - union { + _ANONYMOUS_UNION union { WORD wPrimitiveCount; WORD wStateCount; } DUMMYUNIONNAME; -} D3DHAL_DP2COMMAND,*LPD3DHAL_DP2COMMAND; +} D3DHAL_DP2COMMAND, *LPD3DHAL_DP2COMMAND; typedef enum _D3DHAL_DP2OPERATION { - D3DDP2OP_POINTS = 1, - D3DDP2OP_INDEXEDLINELIST = 2, - D3DDP2OP_INDEXEDTRIANGLELIST = 3, - D3DDP2OP_RENDERSTATE = 8, - D3DDP2OP_LINELIST = 15, - D3DDP2OP_LINESTRIP = 16, - D3DDP2OP_INDEXEDLINESTRIP = 17, - D3DDP2OP_TRIANGLELIST = 18, - D3DDP2OP_TRIANGLESTRIP = 19, - D3DDP2OP_INDEXEDTRIANGLESTRIP = 20, - D3DDP2OP_TRIANGLEFAN = 21, - D3DDP2OP_INDEXEDTRIANGLEFAN = 22, - D3DDP2OP_TRIANGLEFAN_IMM = 23, - D3DDP2OP_LINELIST_IMM = 24, - D3DDP2OP_TEXTURESTAGESTATE = 25, - D3DDP2OP_INDEXEDTRIANGLELIST2 = 26, - D3DDP2OP_INDEXEDLINELIST2 = 27, - D3DDP2OP_VIEWPORTINFO = 28, - D3DDP2OP_WINFO = 29, + D3DDP2OP_POINTS = 1, + D3DDP2OP_INDEXEDLINELIST = 2, + D3DDP2OP_INDEXEDTRIANGLELIST = 3, + D3DDP2OP_RENDERSTATE = 8, + D3DDP2OP_LINELIST = 15, + D3DDP2OP_LINESTRIP = 16, + D3DDP2OP_INDEXEDLINESTRIP = 17, + D3DDP2OP_TRIANGLELIST = 18, + D3DDP2OP_TRIANGLESTRIP = 19, + D3DDP2OP_INDEXEDTRIANGLESTRIP = 20, + D3DDP2OP_TRIANGLEFAN = 21, + D3DDP2OP_INDEXEDTRIANGLEFAN = 22, + D3DDP2OP_TRIANGLEFAN_IMM = 23, + D3DDP2OP_LINELIST_IMM = 24, + D3DDP2OP_TEXTURESTAGESTATE = 25, + D3DDP2OP_INDEXEDTRIANGLELIST2 = 26, + D3DDP2OP_INDEXEDLINELIST2 = 27, + D3DDP2OP_VIEWPORTINFO = 28, + D3DDP2OP_WINFO = 29, /* pre-DirectX 7 interfaces */ - D3DDP2OP_SETPALETTE = 30, - D3DDP2OP_UPDATEPALETTE = 31, + D3DDP2OP_SETPALETTE = 30, + D3DDP2OP_UPDATEPALETTE = 31, /* DirectX 7 interfaces */ - D3DDP2OP_ZRANGE = 32, - D3DDP2OP_SETMATERIAL = 33, - D3DDP2OP_SETLIGHT = 34, - D3DDP2OP_CREATELIGHT = 35, - D3DDP2OP_SETTRANSFORM = 36, - D3DDP2OP_TEXBLT = 38, - D3DDP2OP_STATESET = 39, - D3DDP2OP_SETPRIORITY = 40, + D3DDP2OP_ZRANGE = 32, + D3DDP2OP_SETMATERIAL = 33, + D3DDP2OP_SETLIGHT = 34, + D3DDP2OP_CREATELIGHT = 35, + D3DDP2OP_SETTRANSFORM = 36, + D3DDP2OP_TEXBLT = 38, + D3DDP2OP_STATESET = 39, + D3DDP2OP_SETPRIORITY = 40, /* all interfaces */ - D3DDP2OP_SETRENDERTARGET = 41, - D3DDP2OP_CLEAR = 42, + D3DDP2OP_SETRENDERTARGET = 41, + D3DDP2OP_CLEAR = 42, /* DirectX 7 interfaces */ - D3DDP2OP_SETTEXLOD = 43, - D3DPP2OP_SETCLIPPLANE = 44, + D3DDP2OP_SETTEXLOD = 43, + D3DPP2OP_SETCLIPPLANE = 44, #if(DIRECT3D_VERSION >= 0x0800) D3DDP2OP_CREATEVERTEXSHADER = 45, D3DDP2OP_DELETEVERTEXSHADER = 46, @@ -433,84 +424,84 @@ typedef enum _D3DHAL_DP2OPERATION { typedef struct _D3DHAL_POINTS { WORD wCount; WORD wVStart; -} D3DHAL_DP2POINTS,*LPD3DHAL_DP2POINTS; +} D3DHAL_DP2POINTS, *LPD3DHAL_DP2POINTS; /* line primitives */ typedef struct _D3DHAL_DP2STARTVERTEX { WORD wVStart; -} D3DHAL_DP2STARTVERTEX,*LPD3DHAL_DP2STARTVERTEX; +} D3DHAL_DP2STARTVERTEX, *LPD3DHAL_DP2STARTVERTEX; typedef struct _D3DHAL_DP2LINELIST { WORD wVStart; -} D3DHAL_DP2LINELIST,*LPD3DHAL_DP2LINELIST; +} D3DHAL_DP2LINELIST, *LPD3DHAL_DP2LINELIST; typedef struct _D3DHAL_DP2INDEXEDLINELIST { WORD wV1; WORD wV2; -} D3DHAL_DP2INDEXEDLINELIST,*LPD3DHAL_DP2INDEXEDLINELIST; +} D3DHAL_DP2INDEXEDLINELIST, *LPD3DHAL_DP2INDEXEDLINELIST; typedef struct _D3DHAL_DP2LINESTRIP { WORD wVStart; -} D3DHAL_DP2LINESTRIP,*LPD3DHAL_DP2LINESTRIP; +} D3DHAL_DP2LINESTRIP, *LPD3DHAL_DP2LINESTRIP; typedef struct _D3DHAL_DP2INDEXEDLINESTRIP { WORD wV[2]; -} D3DHAL_DP2INDEXEDLINESTRIP,*LPD3DHAL_DP2INDEXEDLINESTRIP; +} D3DHAL_DP2INDEXEDLINESTRIP, *LPD3DHAL_DP2INDEXEDLINESTRIP; /* triangle primitives */ typedef struct _D3DHAL_DP2TRIANGLELIST { WORD wVStart; -} D3DHAL_DP2TRIANGLELIST,*LPD3DHAL_DP2TRIANGLELIST; +} D3DHAL_DP2TRIANGLELIST, *LPD3DHAL_DP2TRIANGLELIST; typedef struct _D3DHAL_DP2INDEXEDTRIANGLELIST { WORD wV1; WORD wV2; WORD wV3; WORD wFlags; -} D3DHAL_DP2INDEXEDTRIANGLELIST,*LPD3DHAL_DP2INDEXEDTRIANGLELIST; +} D3DHAL_DP2INDEXEDTRIANGLELIST, *LPD3DHAL_DP2INDEXEDTRIANGLELIST; typedef struct _D3DHAL_DP2INDEXEDTRIANGLELIST2 { WORD wV1; WORD wV2; WORD wV3; -} D3DHAL_DP2INDEXEDTRIANGLELIST2,*LPD3DHAL_DP2INDEXEDTRIANGLELIST2; +} D3DHAL_DP2INDEXEDTRIANGLELIST2, *LPD3DHAL_DP2INDEXEDTRIANGLELIST2; typedef struct _D3DHAL_DP2TRIANGLESTRIP { WORD wVStart; -} D3DHAL_DP2TRIANGLESTRIP,*LPD3DHAL_DP2TRIANGLESTRIP; +} D3DHAL_DP2TRIANGLESTRIP, *LPD3DHAL_DP2TRIANGLESTRIP; typedef struct _D3DHAL_DP2INDEXEDTRIANGLESTRIP { WORD wV[3]; -} D3DHAL_DP2INDEXEDTRIANGLESTRIP,*LPD3DHAL_DP2INDEXEDTRIANGLESTRIP; +} D3DHAL_DP2INDEXEDTRIANGLESTRIP, *LPD3DHAL_DP2INDEXEDTRIANGLESTRIP; typedef struct _D3DHAL_DP2TRIANGLEFAN { WORD wVStart; -} D3DHAL_DP2TRIANGLEFAN,*LPD3DHAL_DP2TRIANGLEFAN; +} D3DHAL_DP2TRIANGLEFAN, *LPD3DHAL_DP2TRIANGLEFAN; typedef struct _D3DHAL_DP2INDEXEDTRIANGLEFAN { WORD wV[3]; -} D3DHAL_DP2INDEXEDTRIANGLEFAN,*LPD3DHAL_DP2INDEXEDTRIANGLEFAN; +} D3DHAL_DP2INDEXEDTRIANGLEFAN, *LPD3DHAL_DP2INDEXEDTRIANGLEFAN; typedef struct _D3DHAL_DP2TRIANGLEFAN_IMM { DWORD dwEdgeFlags; -} D3DHAL_DP2TRIANGLEFAN_IMM,*LPD3DHAL_DP2TRIANGLEFAN_IMM; +} D3DHAL_DP2TRIANGLEFAN_IMM, *LPD3DHAL_DP2TRIANGLEFAN_IMM; /* render states */ typedef struct _D3DHAL_DP2RENDERSTATE { - D3DRENDERSTATETYPE RenderState; - union { + D3DRENDERSTATETYPE RenderState; + _ANONYMOUS_UNION union { D3DVALUE dvState; DWORD dwState; } DUMMYUNIONNAME; -} D3DHAL_DP2RENDERSTATE,*LPD3DHAL_DP2RENDERSTATE; +} D3DHAL_DP2RENDERSTATE, *LPD3DHAL_DP2RENDERSTATE; typedef struct _D3DHAL_DP2TEXTURESTAGESTATE { - WORD wStage; - WORD TSState; + WORD wStage; + WORD TSState; DWORD dwValue; -} D3DHAL_DP2TEXTURESTAGESTATE,*LPD3DHAL_DP2TEXTURESTAGESTATE; +} D3DHAL_DP2TEXTURESTAGESTATE, *LPD3DHAL_DP2TEXTURESTAGESTATE; #define D3DTSS_TEXTUREMAP 0 @@ -519,49 +510,49 @@ typedef struct _D3DHAL_DP2VIEWPORTINFO { DWORD dwY; DWORD dwWidth; DWORD dwHeight; -} D3DHAL_DP2VIEWPORTINFO,*LPD3DHAL_DP2VIEWPORTINFO; +} D3DHAL_DP2VIEWPORTINFO, *LPD3DHAL_DP2VIEWPORTINFO; typedef struct _D3DHAL_DP2WINFO { D3DVALUE dwWNear; D3DVALUE dwWFar; -} D3DHAL_DP2WINFO,*LPD3DHAL_DP2WINFO; +} D3DHAL_DP2WINFO, *LPD3DHAL_DP2WINFO; typedef struct _D3DHAL_DP2SETPALETTE { DWORD dwPaletteHandle; DWORD dwPaletteFlags; DWORD dwSurfaceHandle; -} D3DHAL_DP2SETPALETTE,*LPD3DHAL_DP2SETPALETTE; +} D3DHAL_DP2SETPALETTE, *LPD3DHAL_DP2SETPALETTE; typedef struct _D3DHAL_DP2UPDATEPALETTE { DWORD dwPaletteHandle; - WORD wStartIndex; - WORD wNumEntries; -} D3DHAL_DP2UPDATEPALETTE,*LPD3DHAL_DP2UPDATEPALETTE; + WORD wStartIndex; + WORD wNumEntries; +} D3DHAL_DP2UPDATEPALETTE, *LPD3DHAL_DP2UPDATEPALETTE; typedef struct _D3DHAL_DP2ZRANGE { D3DVALUE dvMinZ; D3DVALUE dvMaxZ; -} D3DHAL_DP2ZRANGE,*LPD3DHAL_DP2ZRANGE; +} D3DHAL_DP2ZRANGE, *LPD3DHAL_DP2ZRANGE; typedef D3DMATERIAL7 D3DHAL_DP2SETMATERIAL,*LPD3DHAL_DP2SETMATERIAL; typedef struct _D3DHAL_DP2SETLIGHT { DWORD dwIndex; DWORD dwDataType; -} D3DHAL_DP2SETLIGHT,*LPD3DHAL_DP2SETLIGHT; +} D3DHAL_DP2SETLIGHT, *LPD3DHAL_DP2SETLIGHT; -#define D3DHAL_SETLIGHT_ENABLE 0 -#define D3DHAL_SETLIGHT_DISABLE 1 -#define D3DHAL_SETLIGHT_DATA 2 +#define D3DHAL_SETLIGHT_ENABLE 0 +#define D3DHAL_SETLIGHT_DISABLE 1 +#define D3DHAL_SETLIGHT_DATA 2 typedef struct _D3DHAL_DP2CREATELIGHT { DWORD dwIndex; -} D3DHAL_DP2CREATELIGHT,*LPD3DHAL_DP2CREATELIGHT; +} D3DHAL_DP2CREATELIGHT, *LPD3DHAL_DP2CREATELIGHT; typedef struct _D3DHAL_DP2SETTRANSFORM { - D3DTRANSFORMSTATETYPE xfrmType; - D3DMATRIX matrix; -} D3DHAL_DP2SETTRANSFORM,*LPD3DHAL_DP2SETTRANSFORM; + D3DTRANSFORMSTATETYPE xfrmType; + D3DMATRIX matrix; +} D3DHAL_DP2SETTRANSFORM, *LPD3DHAL_DP2SETTRANSFORM; typedef struct _D3DHAL_DP2TEXBLT { DWORD dwDDDestSurface; @@ -569,72 +560,72 @@ typedef struct _D3DHAL_DP2TEXBLT { POINT pDest; RECTL rSrc; DWORD dwFlags; -} D3DHAL_DP2TEXBLT,*LPD3DHAL_DP2TEXBLT; +} D3DHAL_DP2TEXBLT, *LPD3DHAL_DP2TEXBLT; typedef struct _D3DHAL_DP2STATESET { - DWORD dwOperation; - DWORD dwParam; - D3DSTATEBLOCKTYPE sbType; -} D3DHAL_DP2STATESET,*LPD3DHAL_DP2STATESET; + DWORD dwOperation; + DWORD dwParam; + D3DSTATEBLOCKTYPE sbType; +} D3DHAL_DP2STATESET, *LPD3DHAL_DP2STATESET; -#define D3DHAL_STATESETBEGIN 0 -#define D3DHAL_STATESETEND 1 -#define D3DHAL_STATESETDELETE 2 -#define D3DHAL_STATESETEXECUTE 3 -#define D3DHAL_STATESETCAPTURE 4 +#define D3DHAL_STATESETBEGIN 0 +#define D3DHAL_STATESETEND 1 +#define D3DHAL_STATESETDELETE 2 +#define D3DHAL_STATESETEXECUTE 3 +#define D3DHAL_STATESETCAPTURE 4 typedef struct _D3DHAL_DP2SETPRIORITY { DWORD dwDDSurface; DWORD dwPriority; -} D3DHAL_DP2SETPRIORITY,*LPD3DHAL_DP2SETPRIORITY; +} D3DHAL_DP2SETPRIORITY, *LPD3DHAL_DP2SETPRIORITY; typedef struct _D3DHAL_DP2SETRENDERTARGET { DWORD hRenderTarget; DWORD hZBuffer; -} D3DHAL_DP2SETRENDERTARGET,*LPD3DHAL_DP2SETRENDERTARGET; +} D3DHAL_DP2SETRENDERTARGET, *LPD3DHAL_DP2SETRENDERTARGET; typedef struct _D3DHAL_DP2CLEAR { - DWORD dwFlags; - DWORD dwFillColor; - D3DVALUE dvFillDepth; - DWORD dwFillStencil; - RECT Rects[1]; -} D3DHAL_DP2CLEAR,*LPD3DHAL_DP2CLEAR; + DWORD dwFlags; + DWORD dwFillColor; + D3DVALUE dvFillDepth; + DWORD dwFillStencil; + RECT Rects[1]; +} D3DHAL_DP2CLEAR, *LPD3DHAL_DP2CLEAR; typedef struct _D3DHAL_DP2SETTEXLOD { DWORD dwDDSurface; DWORD dwLOD; -} D3DHAL_DP2SETTEXLOD,*LPD3DHAL_DP2SETTEXLOD; - +} D3DHAL_DP2SETTEXLOD, *LPD3DHAL_DP2SETTEXLOD; #if (DIRECT3D_VERSION >= 0x0900) -#define DX9_DDI_VERSION 4 +#define DX9_DDI_VERSION 4 #ifndef D3DVTXPCAPS_NO_VSDT_UBYTE4 -#define D3DVTXPCAPS_NO_VSDT_UBYTE4 0x00000080 +#define D3DVTXPCAPS_NO_VSDT_UBYTE4 0x00000080 #endif -#define D3DPMISCCAPS_LINEPATTERNREP 0x00000004 +#ifndef D3DPMISCCAPS_LINEPATTERNREP +#define D3DPMISCCAPS_LINEPATTERNREP 0x00000004 +#endif -#define D3DDEVCAPS_HWVERTEXBUFFER 0x02000000 -#define D3DDEVCAPS_HWINDEXBUFFER 0x04000000 -#define D3DDEVCAPS_SUBVOLUMELOCK 0x08000000 +#define D3DDEVCAPS_HWVERTEXBUFFER 0x02000000 +#define D3DDEVCAPS_HWINDEXBUFFER 0x04000000 +#define D3DDEVCAPS_SUBVOLUMELOCK 0x08000000 #ifndef D3DPMISCCAPS_FOGINFVF -#define D3DPMISCCAPS_FOGINFVF 0x00002000 +#define D3DPMISCCAPS_FOGINFVF 0x00002000 #endif #ifndef D3DFVF_FOG -#define D3DFVF_FOG 0x00002000 +#define D3DFVF_FOG 0x00002000 #endif -typedef struct _DD_GETDRIVERINFO2DATA -{ - DWORD dwReserved; - DWORD dwMagic; - DWORD dwType; - DWORD dwExpectedSize; +typedef struct _DD_GETDRIVERINFO2DATA { + DWORD dwReserved; + DWORD dwMagic; + DWORD dwType; + DWORD dwExpectedSize; } DD_GETDRIVERINFO2DATA; /** @@ -642,19 +633,19 @@ typedef struct _DD_GETDRIVERINFO2DATA * D3DGDI2_MAGIC to see if the passed GUID is GUID_GetDriverInfo2 * or a GUID_DDStereoMode. */ -#define GUID_GetDriverInfo2 GUID_DDStereoMode +#define GUID_GetDriverInfo2 GUID_DDStereoMode /** * Magic number used in DD_GETDRIVERINFO2DATA.dwHeight when * GUID_GetDriverInfo2/GUID_DDStereoMode is specified in a * GetDriverInfo call. */ -#define D3DGDI2_MAGIC 0xFFFFFFFF +#define D3DGDI2_MAGIC 0xFFFFFFFF #define D3DGDI2_TYPE_GETD3DCAPS8 0x00000001 #define D3DGDI2_TYPE_GETFORMATCOUNT 0x00000002 #define D3DGDI2_TYPE_GETFORMAT 0x00000003 -#define D3DGDI2_TYPE_DXVERSION 0x00000004 /* Make driver aware of currently used DirectX version */ +#define D3DGDI2_TYPE_DXVERSION 0x00000004 /* Make driver aware of currently used DirectX version */ #define D3DGDI2_TYPE_GETD3DCAPS9 0x00000010 #define D3DGDI2_TYPE_GETEXTENDEDMODECOUNT 0x00000011 #define D3DGDI2_TYPE_GETEXTENDEDMODE 0x00000012 @@ -665,10 +656,9 @@ typedef struct _DD_GETDRIVERINFO2DATA #define D3DGDI2_TYPE_DEFER_AGP_FREES 0x00000020 #define D3DGDI2_TYPE_GETD3DQUERYCOUNT 0x00000021 #define D3DGDI2_TYPE_GETD3DQUERY 0x00000022 -#define D3DGDI2_TYPE_GETDDIVERSION 0x00000023 /* Returns DX9_DDI_VERSION, used to check which DDK version the driver is compiled against */ +#define D3DGDI2_TYPE_GETDDIVERSION 0x00000023 /* Returns DX9_DDI_VERSION, used to check which DDK version the driver is compiled against */ -typedef struct _D3DCAPS8 -{ +typedef struct _D3DCAPS8 { D3DDEVTYPE DeviceType; UINT AdapterOrdinal; DWORD Caps; @@ -724,90 +714,77 @@ typedef struct _D3DCAPS8 float MaxPixelShaderValue; } D3DCAPS8; -typedef struct _DD_GETFORMATCOUNTDATA -{ - DD_GETDRIVERINFO2DATA gdi2; - DWORD dwFormatCount; - DWORD dwReserved; +typedef struct _DD_GETFORMATCOUNTDATA { + DD_GETDRIVERINFO2DATA gdi2; + DWORD dwFormatCount; + DWORD dwReserved; } DD_GETFORMATCOUNTDATA; -typedef struct _DD_GETFORMATDATA -{ - DD_GETDRIVERINFO2DATA gdi2; - DWORD dwFormatIndex; - DDPIXELFORMAT format; +typedef struct _DD_GETFORMATDATA { + DD_GETDRIVERINFO2DATA gdi2; + DWORD dwFormatIndex; + DDPIXELFORMAT format; } DD_GETFORMATDATA; -typedef struct _DD_DXVERSION -{ - DD_GETDRIVERINFO2DATA gdi2; - DWORD dwDXVersion; - DWORD dwReserved; +typedef struct _DD_DXVERSION { + DD_GETDRIVERINFO2DATA gdi2; + DWORD dwDXVersion; + DWORD dwReserved; } DD_DXVERSION; -typedef struct _DD_DEFERRED_AGP_AWARE_DATA -{ - DD_GETDRIVERINFO2DATA gdi2; +typedef struct _DD_DEFERRED_AGP_AWARE_DATA { + DD_GETDRIVERINFO2DATA gdi2; } DD_DEFERRED_AGP_AWARE_DATA; -typedef struct _DD_FREE_DEFERRED_AGP_DATA -{ - DD_GETDRIVERINFO2DATA gdi2; - DWORD dwProcessId; +typedef struct _DD_FREE_DEFERRED_AGP_DATA { + DD_GETDRIVERINFO2DATA gdi2; + DWORD dwProcessId; } DD_FREE_DEFERRED_AGP_DATA; -typedef struct _DD_GETEXTENDEDMODECOUNTDATA -{ - DD_GETDRIVERINFO2DATA gdi2; - DWORD dwModeCount; - DWORD dwReserved; +typedef struct _DD_GETEXTENDEDMODECOUNTDATA { + DD_GETDRIVERINFO2DATA gdi2; + DWORD dwModeCount; + DWORD dwReserved; } DD_GETEXTENDEDMODECOUNTDATA; -typedef struct _DD_GETEXTENDEDMODEDATA -{ - DD_GETDRIVERINFO2DATA gdi2; - DWORD dwModeIndex; - D3DDISPLAYMODE mode; +typedef struct _DD_GETEXTENDEDMODEDATA { + DD_GETDRIVERINFO2DATA gdi2; + DWORD dwModeIndex; + D3DDISPLAYMODE mode; } DD_GETEXTENDEDMODEDATA; -typedef struct _DD_GETADAPTERGROUPDATA -{ - DD_GETDRIVERINFO2DATA gdi2; - ULONG_PTR ulUniqueAdapterGroupId; - DWORD dwReserved1; - DWORD dwReserved2; +typedef struct _DD_GETADAPTERGROUPDATA { + DD_GETDRIVERINFO2DATA gdi2; + ULONG_PTR ulUniqueAdapterGroupId; + DWORD dwReserved1; + DWORD dwReserved2; } DD_GETADAPTERGROUPDATA; -typedef struct _DD_MULTISAMPLEQUALITYLEVELSDATA -{ - DD_GETDRIVERINFO2DATA gdi2; - D3DFORMAT Format; - BOOL bFlip : 1; - D3DMULTISAMPLE_TYPE MSType : 31; - DWORD QualityLevels; +typedef struct _DD_MULTISAMPLEQUALITYLEVELSDATA { + DD_GETDRIVERINFO2DATA gdi2; + D3DFORMAT Format; + WINBOOL bFlip : 1; + D3DMULTISAMPLE_TYPE MSType : 31; + DWORD QualityLevels; } DD_MULTISAMPLEQUALITYLEVELSDATA; -typedef struct _DD_GETD3DQUERYCOUNTDATA -{ - DD_GETDRIVERINFO2DATA gdi2; - DWORD dwNumQueries; +typedef struct _DD_GETD3DQUERYCOUNTDATA { + DD_GETDRIVERINFO2DATA gdi2; + DWORD dwNumQueries; } DD_GETD3DQUERYCOUNTDATA; -typedef struct _DD_GETD3DQUERYDATA -{ - DD_GETDRIVERINFO2DATA gdi2; - __GNU_EXTENSION union - { - DWORD dwQueryIndex; - D3DQUERYTYPE QueryType; - }; +typedef struct _DD_GETD3DQUERYDATA { + DD_GETDRIVERINFO2DATA gdi2; + __GNU_EXTENSION union { + DWORD dwQueryIndex; + D3DQUERYTYPE QueryType; + }; } DD_GETD3DQUERYDATA; -typedef struct _DD_GETDDIVERSIONDATA -{ - DD_GETDRIVERINFO2DATA gdi2; - DWORD dwDXVersion; - DWORD dwDDIVersion; +typedef struct _DD_GETDDIVERSIONDATA { + DD_GETDRIVERINFO2DATA gdi2; + DWORD dwDXVersion; + DWORD dwDDIVersion; } DD_GETDDIVERSIONDATA; #endif /* (DIRECT3D_VERSION >= 0x0900) */ diff --git a/include/ddk/d3dhalex.h b/include/ddk/d3dhalex.h index c040876c8fb..7c852aedc94 100644 --- a/include/ddk/d3dhalex.h +++ b/include/ddk/d3dhalex.h @@ -1,10 +1,10 @@ - #ifndef _D3DHALEX_H #define _D3DHALEX_H + #define D3DGDI_IS_GDI2(pData) ((((DD_GETDRIVERINFO2DATA*)(pData->lpvData))->dwMagic) == D3DGDI2_MAGIC) #define D3DGDI_IS_STEREOMODE(pData) ((((DD_STEREOMODE*) (pData->lpvData))->dwHeight) != D3DGDI2_MAGIC) #define D3DGDI_GET_GDI2_DATA(pData) (D3DGDI_IS_GDI2(pData) ? (((DD_GETDRIVERINFO2DATA*)(pData->lpvData))) : NULL) #define D3DGDI_GET_STEREOMODE_DATA(pData) (D3DGDI_IS_STEREOMODE(pData) ? (((DD_STEREOMODE*)(pData->lpvData))) : NULL) -#endif +#endif /* _D3DHALEX_H */ diff --git a/include/ddk/d3dnthal.h b/include/ddk/d3dnthal.h deleted file mode 100644 index b396e6f23a3..00000000000 --- a/include/ddk/d3dnthal.h +++ /dev/null @@ -1,272 +0,0 @@ -/* - * Direct3D NT driver interface - */ - -#ifndef __DDK_D3DNTHAL_H -#define __DDK_D3DNTHAL_H - -#include -#include -#include - -/* Helper macro to enable gcc's extension. */ -#ifndef __GNU_EXTENSION -#ifdef __GNUC__ -#define __GNU_EXTENSION __extension__ -#else -#define __GNU_EXTENSION -#endif -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -DEFINE_GUID(GUID_D3DCallbacks, 0x7BF06990, 0x8794, 0x11D0, 0x91, 0x39, 0x08, 0x00, 0x36, 0xD2, 0xEF, 0x02); -DEFINE_GUID(GUID_D3DCallbacks3, 0xDDF41230, 0xEC0A, 0x11D0, 0xA9, 0xB6, 0x00, 0xAA, 0x00, 0xC0, 0x99, 0x3E); -DEFINE_GUID(GUID_D3DExtendedCaps, 0x7DE41F80, 0x9D93, 0x11D0, 0x89, 0xAB, 0x00, 0xA0, 0xC9, 0x05, 0x41, 0x29); -DEFINE_GUID(GUID_D3DParseUnknownCommandCallback, 0x2E04FFA0, 0x98E4, 0x11D1, 0x8C, 0xE1, 0x00, 0xA0, 0xC9, 0x06, 0x29, 0xA8); -DEFINE_GUID(GUID_ZPixelFormats, 0x93869880, 0x36CF, 0x11D1, 0x9B, 0x1B, 0x00, 0xAA, 0x00, 0xBB, 0xB8, 0xAE); -DEFINE_GUID(GUID_DDStereoMode, 0xF828169C, 0xA8E8, 0x11D2, 0xA1, 0xF2, 0x00, 0xA0, 0xC9, 0x83, 0xEA, 0xF6); - -typedef struct _D3DNTHAL_CONTEXTCREATEDATA -{ - __GNU_EXTENSION union - { - PDD_DIRECTDRAW_GLOBAL lpDDGbl; - PDD_DIRECTDRAW_LOCAL lpDDLcl; - }; - __GNU_EXTENSION union - { - PDD_SURFACE_LOCAL lpDDS; - PDD_SURFACE_LOCAL lpDDSLcl; - }; - __GNU_EXTENSION union - { - PDD_SURFACE_LOCAL lpDDSZ; - PDD_SURFACE_LOCAL lpDDSZLcl; - }; - DWORD dwPID; - ULONG_PTR dwhContext; - HRESULT ddrval; -} D3DNTHAL_CONTEXTCREATEDATA, *LPD3DNTHAL_CONTEXTCREATEDATA; - -typedef struct _D3DNTHAL_CONTEXTDESTROYDATA -{ - ULONG_PTR dwhContext; - HRESULT ddrval; -} D3DNTHAL_CONTEXTDESTROYDATA, *LPD3DNTHAL_CONTEXTDESTROYDATA; - -typedef struct _D3DNTHAL_CONTEXTDESTROYALLDATA -{ - DWORD dwPID; - HRESULT ddrval; -} D3DNTHAL_CONTEXTDESTROYALLDATA, *LPD3DNTHAL_CONTEXTDESTROYALLDATA; - -typedef struct _D3DNTHAL_SCENECAPTUREDATA -{ - ULONG_PTR dwhContext; - DWORD dwFlag; - HRESULT ddrval; -} D3DNTHAL_SCENECAPTUREDATA, *LPD3DNTHAL_SCENECAPTUREDATA; - -typedef struct _D3DNTHAL_TEXTURECREATEDATA -{ - ULONG_PTR dwhContext; - HANDLE hDDS; - ULONG_PTR dwHandle; - HRESULT ddrval; -} D3DNTHAL_TEXTURECREATEDATA, *LPD3DNTHAL_TEXTURECREATEDATA; - -typedef struct _D3DNTHAL_TEXTUREDESTROYDATA -{ - ULONG_PTR dwhContext; - ULONG_PTR dwHandle; - HRESULT ddrval; -} D3DNTHAL_TEXTUREDESTROYDATA, *LPD3DNTHAL_TEXTUREDESTROYDATA; - -typedef struct _D3DNTHAL_TEXTURESWAPDATA -{ - ULONG_PTR dwhContext; - ULONG_PTR dwHandle1; - ULONG_PTR dwHandle2; - HRESULT ddrval; -} D3DNTHAL_TEXTURESWAPDATA, *LPD3DNTHAL_TEXTURESWAPDATA; - -typedef struct _D3DNTHAL_TEXTUREGETSURFDATA -{ - ULONG_PTR dwhContext; - HANDLE hDDS; - ULONG_PTR dwHandle; - HRESULT ddrval; -} D3DNTHAL_TEXTUREGETSURFDATA, *LPD3DNTHAL_TEXTUREGETSURFDATA; - -typedef DWORD (APIENTRY *LPD3DNTHAL_CONTEXTCREATECB)(LPD3DNTHAL_CONTEXTCREATEDATA); -typedef DWORD (APIENTRY *LPD3DNTHAL_CONTEXTDESTROYCB)(LPD3DNTHAL_CONTEXTDESTROYDATA); -typedef DWORD (APIENTRY *LPD3DNTHAL_CONTEXTDESTROYALLCB)(LPD3DNTHAL_CONTEXTDESTROYALLDATA); -typedef DWORD (APIENTRY *LPD3DNTHAL_SCENECAPTURECB)(LPD3DNTHAL_SCENECAPTUREDATA); -typedef DWORD (APIENTRY *LPD3DNTHAL_TEXTURECREATECB)(LPD3DNTHAL_TEXTURECREATEDATA); -typedef DWORD (APIENTRY *LPD3DNTHAL_TEXTUREDESTROYCB)(LPD3DNTHAL_TEXTUREDESTROYDATA); -typedef DWORD (APIENTRY *LPD3DNTHAL_TEXTURESWAPCB)(LPD3DNTHAL_TEXTURESWAPDATA); -typedef DWORD (APIENTRY *LPD3DNTHAL_TEXTUREGETSURFCB)(LPD3DNTHAL_TEXTUREGETSURFDATA); - -typedef struct _D3DNTHALDeviceDesc_V1 -{ - DWORD dwSize; - DWORD dwFlags; - D3DCOLORMODEL dcmColorModel; - DWORD dwDevCaps; - D3DTRANSFORMCAPS dtcTransformCaps; - BOOL bClipping; - D3DLIGHTINGCAPS dlcLightingCaps; - D3DPRIMCAPS dpcLineCaps; - D3DPRIMCAPS dpcTriCaps; - DWORD dwDeviceRenderBitDepth; - DWORD dwDeviceZBufferBitDepth; - DWORD dwMaxBufferSize; - DWORD dwMaxVertexCount; -} D3DNTHALDEVICEDESC_V1, *LPD3DNTHALDEVICEDESC_V1; - -typedef struct _D3DNTHAL_GLOBALDRIVERDATA -{ - DWORD dwSize; - D3DNTHALDEVICEDESC_V1 hwCaps; - DWORD dwNumVertices; - DWORD dwNumClipVertices; - DWORD dwNumTextureFormats; - LPDDSURFACEDESC lpTextureFormats; -} D3DNTHAL_GLOBALDRIVERDATA, *LPD3DNTHAL_GLOBALDRIVERDATA; - -typedef struct _D3DNTHAL_CALLBACKS -{ - DWORD dwSize; - LPD3DNTHAL_CONTEXTCREATECB ContextCreate; - LPD3DNTHAL_CONTEXTDESTROYCB ContextDestroy; - LPD3DNTHAL_CONTEXTDESTROYALLCB ContextDestroyAll; - LPD3DNTHAL_SCENECAPTURECB SceneCapture; - LPVOID dwReserved10; - LPVOID dwReserved11; - LPVOID dwReserved22; - LPVOID dwReserved23; - ULONG_PTR dwReserved; - LPD3DNTHAL_TEXTURECREATECB TextureCreate; - LPD3DNTHAL_TEXTUREDESTROYCB TextureDestroy; - LPD3DNTHAL_TEXTURESWAPCB TextureSwap; - LPD3DNTHAL_TEXTUREGETSURFCB TextureGetSurf; - LPVOID dwReserved12; - LPVOID dwReserved13; - LPVOID dwReserved14; - LPVOID dwReserved15; - LPVOID dwReserved16; - LPVOID dwReserved17; - LPVOID dwReserved18; - LPVOID dwReserved19; - LPVOID dwReserved20; - LPVOID dwReserved21; - LPVOID dwReserved24; - ULONG_PTR dwReserved0; - ULONG_PTR dwReserved1; - ULONG_PTR dwReserved2; - ULONG_PTR dwReserved3; - ULONG_PTR dwReserved4; - ULONG_PTR dwReserved5; - ULONG_PTR dwReserved6; - ULONG_PTR dwReserved7; - ULONG_PTR dwReserved8; - ULONG_PTR dwReserved9; -} D3DNTHAL_CALLBACKS, *LPD3DNTHAL_CALLBACKS; - - -typedef struct _D3DNTHAL_SETRENDERTARGETDATA -{ - ULONG_PTR dwhContext; - PDD_SURFACE_LOCAL lpDDS; - PDD_SURFACE_LOCAL lpDDSZ; - HRESULT ddrval; -} D3DNTHAL_SETRENDERTARGETDATA; -typedef D3DNTHAL_SETRENDERTARGETDATA *LPD3DNTHAL_SETRENDERTARGETDATA; - -typedef DWORD (APIENTRY *LPD3DNTHAL_SETRENDERTARGETCB)(LPD3DNTHAL_SETRENDERTARGETDATA); - - -typedef struct _D3DNTHAL_CALLBACKS2 -{ - DWORD dwSize; - DWORD dwFlags; - - LPD3DNTHAL_SETRENDERTARGETCB SetRenderTarget; - LPVOID dwReserved1; - LPVOID dwReserved2; - LPVOID dwReserved3; - LPVOID dwReserved4; -} D3DNTHAL_CALLBACKS2, *LPD3DNTHAL_CALLBACKS2; - - -typedef struct _D3DNTHAL_CLEAR2DATA -{ - ULONG_PTR dwhContext; - DWORD dwFlags; - DWORD dwFillColor; - D3DVALUE dvFillDepth; - DWORD dwFillStencil; - LPD3DRECT lpRects; - DWORD dwNumRects; - HRESULT ddrval; -} D3DNTHAL_CLEAR2DATA; -typedef D3DNTHAL_CLEAR2DATA FAR *LPD3DNTHAL_CLEAR2DATA; - -typedef struct _D3DNTHAL_VALIDATETEXTURESTAGESTATEDATA -{ - ULONG_PTR dwhContext; - DWORD dwFlags; - ULONG_PTR dwReserved; - DWORD dwNumPasses; - HRESULT ddrval; -} D3DNTHAL_VALIDATETEXTURESTAGESTATEDATA, FAR *LPD3DNTHAL_VALIDATETEXTURESTAGESTATEDATA; - -typedef struct _D3DNTHAL_DRAWPRIMITIVES2DATA -{ - ULONG_PTR dwhContext; - DWORD dwFlags; - DWORD dwVertexType; - PDD_SURFACE_LOCAL lpDDCommands; - DWORD dwCommandOffset; - DWORD dwCommandLength; - __GNU_EXTENSION union - { - PDD_SURFACE_LOCAL lpDDVertex; - LPVOID lpVertices; - }; - DWORD dwVertexOffset; - DWORD dwVertexLength; - DWORD dwReqVertexBufSize; - DWORD dwReqCommandBufSize; - LPDWORD lpdwRStates; - __GNU_EXTENSION union - { - DWORD dwVertexSize; - HRESULT ddrval; - }; - DWORD dwErrorOffset; -} D3DNTHAL_DRAWPRIMITIVES2DATA, FAR *LPD3DNTHAL_DRAWPRIMITIVES2DATA; - -typedef DWORD (APIENTRY *LPD3DNTHAL_CLEAR2CB)(LPD3DNTHAL_CLEAR2DATA); -typedef DWORD (APIENTRY *LPD3DNTHAL_VALIDATETEXTURESTAGESTATECB)(LPD3DNTHAL_VALIDATETEXTURESTAGESTATEDATA); -typedef DWORD (APIENTRY *LPD3DNTHAL_DRAWPRIMITIVES2CB)(LPD3DNTHAL_DRAWPRIMITIVES2DATA); - -typedef struct _D3DNTHAL_CALLBACKS3 -{ - DWORD dwSize; - DWORD dwFlags; - - LPD3DNTHAL_CLEAR2CB Clear2; - LPVOID lpvReserved; - LPD3DNTHAL_VALIDATETEXTURESTAGESTATECB ValidateTextureStageState; - LPD3DNTHAL_DRAWPRIMITIVES2CB DrawPrimitives2; -} D3DNTHAL_CALLBACKS3, *LPD3DNTHAL_CALLBACKS3; - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* __DDK_D3DNTHAL_H */ diff --git a/include/ddk/ddkernel.h b/include/ddk/ddkernel.h deleted file mode 100644 index bd46c759851..00000000000 --- a/include/ddk/ddkernel.h +++ /dev/null @@ -1,97 +0,0 @@ -/* $Id$ - * - * COPYRIGHT: This file is in the public domain. - * PROJECT: ReactOS kernel - * FILE: - * PURPOSE: Directx headers - * PROGRAMMER: Magnus Olsen (greatlrd) - * - */ - -#ifndef __DDKM_INCLUDED__ -#define __DDKM_INCLUDED__ - -#if defined (_WIN32) && !defined (_NO_COM) -DEFINE_GUID (IID_IDirectDrawKernel, 0x8D56C120,0x6A08,0x11D0,0x9B,0x06,0x00,0xA0,0xC9,0x03,0xA3,0xB8); -DEFINE_GUID (IID_IDirectDrawSurfaceKernel, 0x60755DA0,0x6A40,0x11D0,0x9B,0x06,0x00,0xA0,0xC9,0x03,0xA3,0xB8); -#endif - -typedef struct _DDKERNELCAPS -{ - DWORD dwSize; - DWORD dwCaps; - DWORD dwIRQCaps; -} DDKERNELCAPS, *LPDDKERNELCAPS; - -#define DDKERNELCAPS_SKIPFIELDS 0x00000001 -#define DDKERNELCAPS_AUTOFLIP 0x00000002 -#define DDKERNELCAPS_SETSTATE 0x00000004 -#define DDKERNELCAPS_LOCK 0x00000008 -#define DDKERNELCAPS_FLIPVIDEOPORT 0x00000010 -#define DDKERNELCAPS_FLIPOVERLAY 0x00000020 -#define DDKERNELCAPS_CAPTURE_SYSMEM 0x00000040 -#define DDKERNELCAPS_CAPTURE_NONLOCALVIDMEM 0x00000080 -#define DDKERNELCAPS_FIELDPOLARITY 0x00000100 -#define DDKERNELCAPS_CAPTURE_INVERTED 0x00000200 -#define DDIRQ_DISPLAY_VSYNC 0x00000001 -#define DDIRQ_RESERVED1 0x00000002 -#define DDIRQ_VPORT0_VSYNC 0x00000004 -#define DDIRQ_VPORT0_LINE 0x00000008 -#define DDIRQ_VPORT1_VSYNC 0x00000010 -#define DDIRQ_VPORT1_LINE 0x00000020 -#define DDIRQ_VPORT2_VSYNC 0x00000040 -#define DDIRQ_VPORT2_LINE 0x00000080 -#define DDIRQ_VPORT3_VSYNC 0x00000100 -#define DDIRQ_VPORT3_LINE 0x00000200 -#define DDIRQ_VPORT4_VSYNC 0x00000400 -#define DDIRQ_VPORT4_LINE 0x00000800 -#define DDIRQ_VPORT5_VSYNC 0x00001000 -#define DDIRQ_VPORT5_LINE 0x00002000 -#define DDIRQ_VPORT6_VSYNC 0x00004000 -#define DDIRQ_VPORT6_LINE 0x00008000 -#define DDIRQ_VPORT7_VSYNC 0x00010000 -#define DDIRQ_VPORT7_LINE 0x00020000 -#define DDIRQ_VPORT8_VSYNC 0x00040000 -#define DDIRQ_VPORT8_LINE 0x00080000 -#define DDIRQ_VPORT9_VSYNC 0x00010000 -#define DDIRQ_VPORT9_LINE 0x00020000 - -typedef struct IDirectDrawKernel* LPDIRECTDRAWKERNEL; -typedef struct IDirectDrawSurfaceKernel* LPDIRECTDRAWSURFACEKERNEL; - -#if defined(_WIN32) && !defined(_NO_COM) - -#undef INTERFACE -#define INTERFACE IDirectDrawKernel -DECLARE_INTERFACE_ (IDirectDrawKernel, IUnknown) -{ - STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID* ppvObj) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - STDMETHOD(GetKernelHandle) (THIS_ ULONG*) PURE; - STDMETHOD(ReleaseKernelHandle) (THIS) PURE; -}; - -#undef INTERFACE -#define INTERFACE IDirectDrawSurfaceKernel -DECLARE_INTERFACE_ (IDirectDrawSurfaceKernel, IUnknown) -{ - STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID* ppvObj) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - STDMETHOD(GetKernelHandle) (THIS_ ULONG*) PURE; - STDMETHOD(ReleaseKernelHandle) (THIS) PURE; -}; - -#undef INTERFACE -#endif // defined(_WIN32) && !defined(_NO_COM) - -#ifdef __cplusplus -}; -#endif - -#endif - - - - diff --git a/include/ddk/ddrawi.h b/include/ddk/ddrawi.h deleted file mode 100644 index 6b658ff5120..00000000000 --- a/include/ddk/ddrawi.h +++ /dev/null @@ -1,2204 +0,0 @@ -/* - * DirectDraw driver interface - * (DirectX 7 version) - * - * Copyright (C) 2001 Ove Kaaven - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef __DDRAWI_INCLUDED__ -#define __DDRAWI_INCLUDED__ - -/* Helper macro to enable gcc's extension. */ -#ifndef __GNU_EXTENSION -#ifdef __GNUC__ -#define __GNU_EXTENSION __extension__ -#else -#define __GNU_EXTENSION -#endif -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -#define OBJECT_ISROOT 0x80000000 - -#include -#include -#include -#include - -#define DDAPI WINAPI - -#define VALID_ALIGNMENT(align) \ - (!((align==0)||(align%2)!= 0 )) - -/* the DirectDraw versions */ -#define DD_VERSION 0x0200 /* compatibility version */ -#define DD_RUNTIME_VERSION 0x0902 /* actual version */ - -/* the HAL version returned from QUERYESCSUPPORT - DCICOMMAND */ -#define DD_HAL_VERSION 0x0100 - -/* more DCICOMMAND escapes */ -#ifndef DCICOMMAND -#define DCICOMMAND 3075 -#endif - -#define DDCREATEDRIVEROBJECT 10 -#define DDGET32BITDRIVERNAME 11 -#define DDNEWCALLBACKFNS 12 -#define DDVERSIONINFO 13 - - - -#define DDUNSUPPORTEDMODE ((DWORD) -1) - -#include "dciddi.h" - -#ifndef CCHDEVICENAME -#define CCHDEVICENAME 32 -#endif -#define MAX_DRIVER_NAME CCHDEVICENAME - -#define DDHAL_DRIVER_DLLNAME "DDRAW16.DLL" -#define DDHAL_APP_DLLNAME "DDRAW.DLL" - - - -/* GUID */ -#ifdef _WIN32 -DEFINE_GUID(GUID_MiscellaneousCallbacks, 0xefd60cc0, 0x49e7, 0x11d0, 0x88, 0x9d, 0x00, 0xaa, 0x00, 0xbb, 0xb7, 0x6a); -DEFINE_GUID(GUID_VideoPortCallbacks, 0xefd60cc1, 0x49e7, 0x11d0, 0x88, 0x9d, 0x00, 0xaa, 0x00, 0xbb, 0xb7, 0x6a); -DEFINE_GUID(GUID_ColorControlCallbacks, 0xefd60cc2, 0x49e7, 0x11d0, 0x88, 0x9d, 0x00, 0xaa, 0x00, 0xbb, 0xb7, 0x6a); -DEFINE_GUID(GUID_VideoPortCaps, 0xefd60cc3, 0x49e7, 0x11d0, 0x88, 0x9d, 0x00, 0xaa, 0x00, 0xbb, 0xb7, 0x6a); -DEFINE_GUID(GUID_D3DCallbacks2, 0x0ba584e1, 0x70b6, 0x11d0, 0x88, 0x9d, 0x00, 0xaa, 0x00, 0xbb, 0xb7, 0x6a); -DEFINE_GUID(GUID_D3DCallbacks3, 0xddf41230, 0xec0a, 0x11d0, 0xa9, 0xb6, 0x00, 0xaa, 0x00, 0xc0, 0x99, 0x3e); -DEFINE_GUID(GUID_NonLocalVidMemCaps, 0x86c4fa80, 0x8d84, 0x11d0, 0x94, 0xe8, 0x00, 0xc0, 0x4f, 0xc3, 0x41, 0x37); -DEFINE_GUID(GUID_KernelCallbacks, 0x80863800, 0x6B06, 0x11D0, 0x9B, 0x06, 0x0, 0xA0, 0xC9, 0x03, 0xA3, 0xB8); -DEFINE_GUID(GUID_KernelCaps, 0xFFAA7540, 0x7AA8, 0x11D0, 0x9B, 0x06, 0x00, 0xA0, 0xC9, 0x03, 0xA3, 0xB8); -DEFINE_GUID(GUID_D3DExtendedCaps, 0x7de41f80, 0x9d93, 0x11d0, 0x89, 0xab, 0x0, 0xa0, 0xc9, 0x5, 0x41, 0x29); -DEFINE_GUID(GUID_ZPixelFormats, 0x93869880, 0x36cf, 0x11d1, 0x9b, 0x1b, 0x0, 0xaa, 0x0, 0xbb, 0xb8, 0xae); -DEFINE_GUID(GUID_DDMoreSurfaceCaps, 0x3b8a0466, 0xf269, 0x11d1, 0x88, 0x0b, 0x0, 0xc0, 0x4f, 0xd9, 0x30, 0xc5); -DEFINE_GUID(GUID_DDStereoMode, 0xf828169c, 0xa8e8, 0x11d2, 0xa1, 0xf2, 0x0, 0xa0, 0xc9, 0x83, 0xea, 0xf6); -DEFINE_GUID(GUID_OptSurfaceKmodeInfo, 0xe05c8472, 0x51d4, 0x11d1, 0x8c, 0xce, 0x0, 0xa0, 0xc9, 0x6, 0x29, 0xa8); -DEFINE_GUID(GUID_OptSurfaceUmodeInfo, 0x9d792804, 0x5fa8, 0x11d1, 0x8c, 0xd0, 0x0, 0xa0, 0xc9, 0x6, 0x29, 0xa8); -DEFINE_GUID(GUID_UserModeDriverInfo, 0xf0b0e8e2, 0x5f97, 0x11d1, 0x8c, 0xd0, 0x0, 0xa0, 0xc9, 0x6, 0x29, 0xa8); -DEFINE_GUID(GUID_UserModeDriverPassword, 0x97f861b6, 0x60a1, 0x11d1, 0x8c, 0xd0, 0x0, 0xa0, 0xc9, 0x6, 0x29, 0xa8); -DEFINE_GUID(GUID_D3DParseUnknownCommandCallback, 0x2e04ffa0, 0x98e4, 0x11d1, 0x8c, 0xe1, 0x0, 0xa0, 0xc9, 0x6, 0x29, 0xa8); -DEFINE_GUID(GUID_MotionCompCallbacks, 0xb1122b40, 0x5dA5, 0x11d1, 0x8f, 0xcF, 0x00, 0xc0, 0x4f, 0xc2, 0x9b, 0x4e); -DEFINE_GUID(GUID_Miscellaneous2Callbacks, 0x406B2F00, 0x3E5A, 0x11D1, 0xB6, 0x40, 0x00, 0xAA, 0x00, 0xA1, 0xF9, 0x6A); -#endif - -#ifndef _WIN32 -#undef E_NOTIMPL -#undef E_OUTOFMEMORY -#undef E_INVALIDARG -#undef E_FAIL -#define E_NOTIMPL 0x80004001L -#define E_OUTOFMEMORY 0x8007000EL -#define E_INVALIDARG 0x80070057L -#define E_FAIL 0x80004005L -#endif - - -/***************************************************************************** - * Initialization stuff - */ -typedef struct { - char szName[260]; - char szEntryPoint[64]; - DWORD dwContext; -} DD32BITDRIVERDATA,*LPDD32BITDRIVERDATA; - -typedef struct { - DWORD dwHALVersion; - ULONG_PTR dwReserved1; - ULONG_PTR dwReserved2; -} DDVERSIONDATA,*LPDDVERSIONDATA; - -typedef DWORD (PASCAL *LPDD32BITDRIVERINIT)(DWORD dwContext); - - - -/* predeclare some structures */ -typedef struct _DDHALINFO *LPDDHALINFO; -typedef struct _DDRAWI_DIRECTDRAW_INT *LPDDRAWI_DIRECTDRAW_INT; - -#ifndef DDRAWI_DIRECTDRAW_DEFINED -typedef struct _DDRAWI_DIRECTDRAW_LCL *LPDDRAWI_DIRECTDRAW_LCL; -typedef struct _DDRAWI_DIRECTDRAW_GBL *LPDDRAWI_DIRECTDRAW_GBL; -#define DDRAWI_DIRECTDRAW_DEFINED -#endif - -typedef struct _DDRAWI_DDRAWSURFACE_INT *LPDDRAWI_DDRAWSURFACE_INT; - -#ifndef DDRAWI_DDRAWSURFACE_DEFINED -typedef struct _DDRAWI_DDRAWSURFACE_LCL *LPDDRAWI_DDRAWSURFACE_LCL; -#define DDRAWI_DDRAWSURFACE_DEFINED -#endif - -typedef struct _DDRAWI_DDRAWSURFACE_GBL *LPDDRAWI_DDRAWSURFACE_GBL; -typedef struct _DDRAWI_DDRAWSURFACE_MORE *LPDDRAWI_DDRAWSURFACE_MORE; -typedef struct _DDRAWI_DDRAWSURFACE_GBL_MORE *LPDDRAWI_DDRAWSURFACE_GBL_MORE; -typedef struct _DDRAWI_DDRAWPALETTE_INT *LPDDRAWI_DDRAWPALETTE_INT; -typedef struct _DDRAWI_DDRAWPALETTE_LCL *LPDDRAWI_DDRAWPALETTE_LCL; -typedef struct _DDRAWI_DDRAWPALETTE_GBL *LPDDRAWI_DDRAWPALETTE_GBL; -typedef struct _DDRAWI_DDRAWCLIPPER_INT *LPDDRAWI_DDRAWCLIPPER_INT; -typedef struct _DDRAWI_DDRAWCLIPPER_LCL *LPDDRAWI_DDRAWCLIPPER_LCL; -typedef struct _DDRAWI_DDRAWCLIPPER_GBL *LPDDRAWI_DDRAWCLIPPER_GBL; -typedef struct _DDRAWI_DDVIDEOPORT_INT *LPDDRAWI_DDVIDEOPORT_INT; -typedef struct _DDRAWI_DDVIDEOPORT_LCL *LPDDRAWI_DDVIDEOPORT_LCL; -typedef struct _DDRAWI_DDMOTIONCOMP_INT *LPDDRAWI_DDMOTIONCOMP_INT; -typedef struct _DDRAWI_DDMOTIONCOMP_LCL *LPDDRAWI_DDMOTIONCOMP_LCL; - -/***************************************************************************** - * driver->ddraw callbacks - */ -typedef BOOL (DDAPI *LPDDHAL_SETINFO)(LPDDHALINFO lpDDHalInfo, BOOL reset); -typedef FLATPTR (DDAPI *LPDDHAL_VIDMEMALLOC)(LPDDRAWI_DIRECTDRAW_GBL lpDD, int heap, DWORD dwWidth, DWORD dwHeight); -typedef void (DDAPI *LPDDHAL_VIDMEMFREE)(LPDDRAWI_DIRECTDRAW_GBL lpDD, int heap, FLATPTR fpMem); - -typedef struct { - DWORD dwSize; - LPDDHAL_SETINFO lpSetInfo; - LPDDHAL_VIDMEMALLOC lpVidMemAlloc; - LPDDHAL_VIDMEMFREE lpVidMemFree; -} DDHALDDRAWFNS,*LPDDHALDDRAWFNS; - -/***************************************************************************** - * mode info structure - */ -typedef struct _DDHALMODEINFO { - DWORD dwWidth; - DWORD dwHeight; - LONG lPitch; - DWORD dwBPP; - WORD wFlags; - WORD wRefreshRate; - DWORD dwRBitMask; - DWORD dwGBitMask; - DWORD dwBBitMask; - DWORD dwAlphaBitMask; -} DDHALMODEINFO,*LPDDHALMODEINFO; - - - - -#define DDMODEINFO_PALETTIZED 0x0001 -#define DDMODEINFO_MODEX 0x0002 -#define DDMODEINFO_UNSUPPORTED 0x0004 -#define DDMODEINFO_STANDARDVGA 0x0008 -#define DDMODEINFO_MAXREFRESH 0x0010 -#define DDMODEINFO_STEREO 0x0020 - -/***************************************************************************** - * video memory info structure - */ -typedef struct _VIDMEM { - DWORD dwFlags; - FLATPTR fpStart; - __GNU_EXTENSION union { - FLATPTR fpEnd; - DWORD dwWidth; - }; - DDSCAPS ddsCaps; - DDSCAPS ddsCapsAlt; - __GNU_EXTENSION union { - LPVMEMHEAP lpHeap; - DWORD dwHeight; - }; -} VIDMEM; - - -#define VIDMEM_ISLINEAR 0x00000001l -#define VIDMEM_ISRECTANGULAR 0x00000002l -#define VIDMEM_ISHEAP 0x00000004l -#define VIDMEM_ISNONLOCAL 0x00000008l -#define VIDMEM_ISWC 0x00000010l -#define VIDMEM_HEAPDISABLED 0x00000020l - -typedef struct _VIDMEMINFO { - FLATPTR fpPrimary; - DWORD dwFlags; - DWORD dwDisplayWidth; - DWORD dwDisplayHeight; - LONG lDisplayPitch; - DDPIXELFORMAT ddpfDisplay; - DWORD dwOffscreenAlign; - DWORD dwOverlayAlign; - DWORD dwTextureAlign; - DWORD dwZBufferAlign; - DWORD dwAlphaAlign; - DWORD dwNumHeaps; - LPVIDMEM pvmList; -} VIDMEMINFO,*LPVIDMEMINFO; - - - -typedef struct _HEAPALIAS { - FLATPTR fpVidMem; - LPVOID lpAlias; - DWORD dwAliasSize; -} HEAPALIAS,*LPHEAPALIAS; - -typedef struct _HEAPALIASINFO { - DWORD dwRefCnt; - DWORD dwFlags; - DWORD dwNumHeaps; - LPHEAPALIAS lpAliases; -} HEAPALIASINFO,*LPHEAPALIASINFO; - -#define HEAPALIASINFO_MAPPEDREAL 0x00000001 -#define HEAPALIASINFO_MAPPEDDUMMY 0x00000002 - -/***************************************************************************** - * capabilities structures - */ -typedef struct _DDCORECAPS { - DWORD dwSize; - DWORD dwCaps; - DWORD dwCaps2; - DWORD dwCKeyCaps; - DWORD dwFXCaps; - DWORD dwFXAlphaCaps; - DWORD dwPalCaps; - DWORD dwSVCaps; - DWORD dwAlphaBltConstBitDepths; - DWORD dwAlphaBltPixelBitDepths; - DWORD dwAlphaBltSurfaceBitDepths; - DWORD dwAlphaOverlayConstBitDepths; - DWORD dwAlphaOverlayPixelBitDepths; - DWORD dwAlphaOverlaySurfaceBitDepths; - DWORD dwZBufferBitDepths; - DWORD dwVidMemTotal; - DWORD dwVidMemFree; - DWORD dwMaxVisibleOverlays; - DWORD dwCurrVisibleOverlays; - DWORD dwNumFourCCCodes; - DWORD dwAlignBoundarySrc; - DWORD dwAlignSizeSrc; - DWORD dwAlignBoundaryDest; - DWORD dwAlignSizeDest; - DWORD dwAlignStrideAlign; - DWORD dwRops[DD_ROP_SPACE]; - DDSCAPS ddsCaps; - DWORD dwMinOverlayStretch; - DWORD dwMaxOverlayStretch; - DWORD dwMinLiveVideoStretch; - DWORD dwMaxLiveVideoStretch; - DWORD dwMinHwCodecStretch; - DWORD dwMaxHwCodecStretch; - DWORD dwReserved1; - DWORD dwReserved2; - DWORD dwReserved3; - DWORD dwSVBCaps; - DWORD dwSVBCKeyCaps; - DWORD dwSVBFXCaps; - DWORD dwSVBRops[DD_ROP_SPACE]; - DWORD dwVSBCaps; - DWORD dwVSBCKeyCaps; - DWORD dwVSBFXCaps; - DWORD dwVSBRops[DD_ROP_SPACE]; - DWORD dwSSBCaps; - DWORD dwSSBCKeyCaps; - DWORD dwSSBFXCaps; - DWORD dwSSBRops[DD_ROP_SPACE]; - DWORD dwMaxVideoPorts; - DWORD dwCurrVideoPorts; - DWORD dwSVBCaps2; -} DDCORECAPS,*LPDDCORECAPS; - -typedef struct _DDNONLOCALVIDMEMCAPS { - DWORD dwSize; - DWORD dwNLVBCaps; - DWORD dwNLVBCaps2; - DWORD dwNLVBCKeyCaps; - DWORD dwNLVBFXCaps; - DWORD dwNLVBRops[DD_ROP_SPACE]; -} DDNONLOCALVIDMEMCAPS,*LPDDNONLOCALVIDMEMCAPS; - - - -#define DDSCAPS_EXECUTEBUFFER DDSCAPS_RESERVED2 -#define DDSCAPS2_VERTEXBUFFER DDSCAPS2_RESERVED1 -#define DDSCAPS2_COMMANDBUFFER DDSCAPS2_RESERVED2 - - - - -/***************************************************************************** - * ddraw->driver callbacks - */ -#define DDHAL_DRIVER_NOTHANDLED 0x00000000l -#define DDHAL_DRIVER_HANDLED 0x00000001l -#define DDHAL_DRIVER_NOCKEYHW 0x00000002l - -typedef struct _DDHAL_DESTROYDRIVERDATA *LPDDHAL_DESTROYDRIVERDATA; -typedef struct _DDHAL_CREATESURFACEDATA *LPDDHAL_CREATESURFACEDATA; -typedef struct _DDHAL_DRVSETCOLORKEYDATA *LPDDHAL_DRVSETCOLORKEYDATA; -typedef struct _DDHAL_SETMODEDATA *LPDDHAL_SETMODEDATA; -typedef struct _DDHAL_WAITFORVERTICALBLANKDATA *LPDDHAL_WAITFORVERTICALBLANKDATA; -typedef struct _DDHAL_CANCREATESURFACEDATA *LPDDHAL_CANCREATESURFACEDATA; -typedef struct _DDHAL_CREATEPALETTEDATA *LPDDHAL_CREATEPALETTEDATA; -typedef struct _DDHAL_GETSCANLINEDATA *LPDDHAL_GETSCANLINEDATA; -typedef struct _DDHAL_SETEXCLUSIVEMODEDATA *LPDDHAL_SETEXCLUSIVEMODEDATA; -typedef struct _DDHAL_FLIPTOGDISURFACEDATA *LPDDHAL_FLIPTOGDISURFACEDATA; - -typedef DWORD (PASCAL *LPDDHAL_DESTROYDRIVER) (LPDDHAL_DESTROYDRIVERDATA); -typedef DWORD (PASCAL *LPDDHAL_CREATESURFACE) (LPDDHAL_CREATESURFACEDATA); -typedef DWORD (PASCAL *LPDDHAL_SETCOLORKEY) (LPDDHAL_DRVSETCOLORKEYDATA); -typedef DWORD (PASCAL *LPDDHAL_SETMODE) (LPDDHAL_SETMODEDATA); -typedef DWORD (PASCAL *LPDDHAL_WAITFORVERTICALBLANK)(LPDDHAL_WAITFORVERTICALBLANKDATA); -typedef DWORD (PASCAL *LPDDHAL_CANCREATESURFACE) (LPDDHAL_CANCREATESURFACEDATA ); -typedef DWORD (PASCAL *LPDDHAL_CREATEPALETTE) (LPDDHAL_CREATEPALETTEDATA); -typedef DWORD (PASCAL *LPDDHAL_GETSCANLINE) (LPDDHAL_GETSCANLINEDATA); -typedef DWORD (PASCAL *LPDDHAL_SETEXCLUSIVEMODE) (LPDDHAL_SETEXCLUSIVEMODEDATA); -typedef DWORD (PASCAL *LPDDHAL_FLIPTOGDISURFACE) (LPDDHAL_FLIPTOGDISURFACEDATA); - - - -typedef struct _DDHAL_DDCALLBACKS { - DWORD dwSize; - DWORD dwFlags; - LPDDHAL_DESTROYDRIVER DestroyDriver; - LPDDHAL_CREATESURFACE CreateSurface; - LPDDHAL_SETCOLORKEY SetColorKey; - LPDDHAL_SETMODE SetMode; - LPDDHAL_WAITFORVERTICALBLANK WaitForVerticalBlank; - LPDDHAL_CANCREATESURFACE CanCreateSurface; - LPDDHAL_CREATEPALETTE CreatePalette; - LPDDHAL_GETSCANLINE GetScanLine; - /* DirectX 2 */ - LPDDHAL_SETEXCLUSIVEMODE SetExclusiveMode; - LPDDHAL_FLIPTOGDISURFACE FlipToGDISurface; -} DDHAL_DDCALLBACKS,*LPDDHAL_DDCALLBACKS; - - - -typedef struct _DDHAL_DESTROYSURFACEDATA *LPDDHAL_DESTROYSURFACEDATA; -typedef struct _DDHAL_FLIPDATA *LPDDHAL_FLIPDATA; -typedef struct _DDHAL_SETCLIPLISTDATA *LPDDHAL_SETCLIPLISTDATA; -typedef struct _DDHAL_LOCKDATA *LPDDHAL_LOCKDATA; -typedef struct _DDHAL_UNLOCKDATA *LPDDHAL_UNLOCKDATA; -typedef struct _DDHAL_BLTDATA *LPDDHAL_BLTDATA; -typedef struct _DDHAL_SETCOLORKEYDATA *LPDDHAL_SETCOLORKEYDATA; -typedef struct _DDHAL_ADDATTACHEDSURFACEDATA *LPDDHAL_ADDATTACHEDSURFACEDATA; -typedef struct _DDHAL_GETBLTSTATUSDATA *LPDDHAL_GETBLTSTATUSDATA; -typedef struct _DDHAL_GETFLIPSTATUSDATA *LPDDHAL_GETFLIPSTATUSDATA; -typedef struct _DDHAL_UPDATEOVERLAYDATA *LPDDHAL_UPDATEOVERLAYDATA; -typedef struct _DDHAL_SETOVERLAYPOSITIONDATA *LPDDHAL_SETOVERLAYPOSITIONDATA; -typedef struct _DDHAL_SETPALETTEDATA *LPDDHAL_SETPALETTEDATA; - -typedef DWORD (PASCAL *LPDDHALSURFCB_DESTROYSURFACE) (LPDDHAL_DESTROYSURFACEDATA); -typedef DWORD (PASCAL *LPDDHALSURFCB_FLIP) (LPDDHAL_FLIPDATA); -typedef DWORD (PASCAL *LPDDHALSURFCB_SETCLIPLIST) (LPDDHAL_SETCLIPLISTDATA); -typedef DWORD (PASCAL *LPDDHALSURFCB_LOCK) (LPDDHAL_LOCKDATA); -typedef DWORD (PASCAL *LPDDHALSURFCB_UNLOCK) (LPDDHAL_UNLOCKDATA); -typedef DWORD (PASCAL *LPDDHALSURFCB_BLT) (LPDDHAL_BLTDATA); -typedef DWORD (PASCAL *LPDDHALSURFCB_SETCOLORKEY) (LPDDHAL_SETCOLORKEYDATA); -typedef DWORD (PASCAL *LPDDHALSURFCB_ADDATTACHEDSURFACE)(LPDDHAL_ADDATTACHEDSURFACEDATA); -typedef DWORD (PASCAL *LPDDHALSURFCB_GETBLTSTATUS) (LPDDHAL_GETBLTSTATUSDATA); -typedef DWORD (PASCAL *LPDDHALSURFCB_GETFLIPSTATUS) (LPDDHAL_GETFLIPSTATUSDATA); -typedef DWORD (PASCAL *LPDDHALSURFCB_UPDATEOVERLAY) (LPDDHAL_UPDATEOVERLAYDATA); -typedef DWORD (PASCAL *LPDDHALSURFCB_SETOVERLAYPOSITION)(LPDDHAL_SETOVERLAYPOSITIONDATA); -typedef DWORD (PASCAL *LPDDHALSURFCB_SETPALETTE) (LPDDHAL_SETPALETTEDATA); - -typedef struct _DDHAL_DDSURFACECALLBACKS { - DWORD dwSize; - DWORD dwFlags; - LPDDHALSURFCB_DESTROYSURFACE DestroySurface; - LPDDHALSURFCB_FLIP Flip; - LPDDHALSURFCB_SETCLIPLIST SetClipList; - LPDDHALSURFCB_LOCK Lock; - LPDDHALSURFCB_UNLOCK Unlock; - LPDDHALSURFCB_BLT Blt; - LPDDHALSURFCB_SETCOLORKEY SetColorKey; - LPDDHALSURFCB_ADDATTACHEDSURFACE AddAttachedSurface; - LPDDHALSURFCB_GETBLTSTATUS GetBltStatus; - LPDDHALSURFCB_GETFLIPSTATUS GetFlipStatus; - LPDDHALSURFCB_UPDATEOVERLAY UpdateOverlay; - LPDDHALSURFCB_SETOVERLAYPOSITION SetOverlayPosition; - LPVOID reserved4; - LPDDHALSURFCB_SETPALETTE SetPalette; -} DDHAL_DDSURFACECALLBACKS,*LPDDHAL_DDSURFACECALLBACKS; - - - -typedef struct _DDHAL_DESTROYPALETTEDATA *LPDDHAL_DESTROYPALETTEDATA; -typedef struct _DDHAL_SETENTRIESDATA *LPDDHAL_SETENTRIESDATA; - -typedef DWORD (PASCAL *LPDDHALPALCB_DESTROYPALETTE)(LPDDHAL_DESTROYPALETTEDATA); -typedef DWORD (PASCAL *LPDDHALPALCB_SETENTRIES) (LPDDHAL_SETENTRIESDATA); - -typedef struct _DDHAL_DDPALETTECALLBACKS { - DWORD dwSize; - DWORD dwFlags; - LPDDHALPALCB_DESTROYPALETTE DestroyPalette; - LPDDHALPALCB_SETENTRIES SetEntries; -} DDHAL_DDPALETTECALLBACKS,*LPDDHAL_DDPALETTECALLBACKS; - -typedef DWORD (PASCAL *LPDDHALEXEBUFCB_CANCREATEEXEBUF)(LPDDHAL_CANCREATESURFACEDATA); -typedef DWORD (PASCAL *LPDDHALEXEBUFCB_CREATEEXEBUF) (LPDDHAL_CREATESURFACEDATA); -typedef DWORD (PASCAL *LPDDHALEXEBUFCB_DESTROYEXEBUF) (LPDDHAL_DESTROYSURFACEDATA); -typedef DWORD (PASCAL *LPDDHALEXEBUFCB_LOCKEXEBUF) (LPDDHAL_LOCKDATA); -typedef DWORD (PASCAL *LPDDHALEXEBUFCB_UNLOCKEXEBUF) (LPDDHAL_UNLOCKDATA); - -typedef struct _DDHAL_DDEXEBUFCALLBACKS { - DWORD dwSize; - DWORD dwFlags; - LPDDHALEXEBUFCB_CANCREATEEXEBUF CanCreateExecuteBuffer; - LPDDHALEXEBUFCB_CREATEEXEBUF CreateExecuteBuffer; - LPDDHALEXEBUFCB_DESTROYEXEBUF DestroyExecuteBuffer; - LPDDHALEXEBUFCB_LOCKEXEBUF LockExecuteBuffer; - LPDDHALEXEBUFCB_UNLOCKEXEBUF UnlockExecuteBuffer; -} DDHAL_DDEXEBUFCALLBACKS,*LPDDHAL_DDEXEBUFCALLBACKS; - -typedef struct _DDHAL_GETAVAILDRIVERMEMORYDATA *LPDDHAL_GETAVAILDRIVERMEMORYDATA; -typedef struct _DDHAL_UPDATENONLOCALHEAPDATA *LPDDHAL_UPDATENONLOCALHEAPDATA; -typedef struct _DDHAL_GETHEAPALIGNMENTDATA *LPDDHAL_GETHEAPALIGNMENTDATA; - -typedef DWORD (PASCAL *LPDDHAL_GETAVAILDRIVERMEMORY)(LPDDHAL_GETAVAILDRIVERMEMORYDATA); -typedef DWORD (PASCAL *LPDDHAL_UPDATENONLOCALHEAP) (LPDDHAL_UPDATENONLOCALHEAPDATA); -typedef DWORD (PASCAL *LPDDHAL_GETHEAPALIGNMENT) (LPDDHAL_GETHEAPALIGNMENTDATA); - -typedef struct _DDHAL_DDMISCELLANEOUSCALLBACKS { - DWORD dwSize; - DWORD dwFlags; - LPDDHAL_GETAVAILDRIVERMEMORY GetAvailDriverMemory; - LPDDHAL_UPDATENONLOCALHEAP UpdateNonLocalHeap; - LPDDHAL_GETHEAPALIGNMENT GetHeapAlignment; - LPDDHALSURFCB_GETBLTSTATUS GetSysmemBltStatus; -} DDHAL_DDMISCELLANEOUSCALLBACKS,*LPDDHAL_DDMISCELLANEOUSCALLBACKS; - -typedef struct _DDHAL_CREATESURFACEEXDATA *LPDDHAL_CREATESURFACEEXDATA; -typedef struct _DDHAL_GETDRIVERSTATEDATA *LPDDHAL_GETDRIVERSTATEDATA; -typedef struct _DDHAL_DESTROYDDLOCALDATA *LPDDHAL_DESTROYDDLOCALDATA; - -typedef DWORD (PASCAL *LPDDHAL_CREATESURFACEEX)(LPDDHAL_CREATESURFACEEXDATA); -typedef DWORD (PASCAL *LPDDHAL_GETDRIVERSTATE) (LPDDHAL_GETDRIVERSTATEDATA); -typedef DWORD (PASCAL *LPDDHAL_DESTROYDDLOCAL) (LPDDHAL_DESTROYDDLOCALDATA); - -typedef struct _DDHAL_DDMISCELLANEOUS2CALLBACKS { - DWORD dwSize; - DWORD dwFlags; - LPVOID Reserved; - LPDDHAL_CREATESURFACEEX CreateSurfaceEx; - LPDDHAL_GETDRIVERSTATE GetDriverState; - LPDDHAL_DESTROYDDLOCAL DestroyDDLocal; -} DDHAL_DDMISCELLANEOUS2CALLBACKS,*LPDDHAL_DDMISCELLANEOUS2CALLBACKS; - - -typedef struct _DDHAL_CANCREATEVPORTDATA *LPDDHAL_CANCREATEVPORTDATA; -typedef struct _DDHAL_CREATEVPORTDATA *LPDDHAL_CREATEVPORTDATA; -typedef struct _DDHAL_FLIPVPORTDATA *LPDDHAL_FLIPVPORTDATA; -typedef struct _DDHAL_GETVPORTCONNECTDATA *LPDDHAL_GETVPORTCONNECTDATA; -typedef struct _DDHAL_GETVPORTBANDWIDTHDATA *LPDDHAL_GETVPORTBANDWIDTHDATA; -typedef struct _DDHAL_GETVPORTINPUTFORMATDATA *LPDDHAL_GETVPORTINPUTFORMATDATA; -typedef struct _DDHAL_GETVPORTOUTPUTFORMATDATA *LPDDHAL_GETVPORTOUTPUTFORMATDATA; -typedef struct _DDHAL_GETVPORTFIELDDATA *LPDDHAL_GETVPORTFIELDDATA; -typedef struct _DDHAL_GETVPORTLINEDATA *LPDDHAL_GETVPORTLINEDATA; -typedef struct _DDHAL_DESTROYVPORTDATA *LPDDHAL_DESTROYVPORTDATA; -typedef struct _DDHAL_GETVPORTFLIPSTATUSDATA *LPDDHAL_GETVPORTFLIPSTATUSDATA; -typedef struct _DDHAL_UPDATEVPORTDATA *LPDDHAL_UPDATEVPORTDATA; -typedef struct _DDHAL_WAITFORVPORTSYNCDATA *LPDDHAL_WAITFORVPORTSYNCDATA; -typedef struct _DDHAL_GETVPORTSIGNALDATA *LPDDHAL_GETVPORTSIGNALDATA; -typedef struct _DDHAL_VPORTCOLORDATA *LPDDHAL_VPORTCOLORDATA; - -typedef DWORD (PASCAL *LPDDHALVPORTCB_CANCREATEVIDEOPORT)(LPDDHAL_CANCREATEVPORTDATA); -typedef DWORD (PASCAL *LPDDHALVPORTCB_CREATEVIDEOPORT)(LPDDHAL_CREATEVPORTDATA); -typedef DWORD (PASCAL *LPDDHALVPORTCB_FLIP)(LPDDHAL_FLIPVPORTDATA); -typedef DWORD (PASCAL *LPDDHALVPORTCB_GETBANDWIDTH)(LPDDHAL_GETVPORTBANDWIDTHDATA); -typedef DWORD (PASCAL *LPDDHALVPORTCB_GETINPUTFORMATS)(LPDDHAL_GETVPORTINPUTFORMATDATA); -typedef DWORD (PASCAL *LPDDHALVPORTCB_GETOUTPUTFORMATS)(LPDDHAL_GETVPORTOUTPUTFORMATDATA); -typedef DWORD (PASCAL *LPDDHALVPORTCB_GETFIELD)(LPDDHAL_GETVPORTFIELDDATA); -typedef DWORD (PASCAL *LPDDHALVPORTCB_GETLINE)(LPDDHAL_GETVPORTLINEDATA); -typedef DWORD (PASCAL *LPDDHALVPORTCB_GETVPORTCONNECT)(LPDDHAL_GETVPORTCONNECTDATA); -typedef DWORD (PASCAL *LPDDHALVPORTCB_DESTROYVPORT)(LPDDHAL_DESTROYVPORTDATA); -typedef DWORD (PASCAL *LPDDHALVPORTCB_GETFLIPSTATUS)(LPDDHAL_GETVPORTFLIPSTATUSDATA); -typedef DWORD (PASCAL *LPDDHALVPORTCB_UPDATE)(LPDDHAL_UPDATEVPORTDATA); -typedef DWORD (PASCAL *LPDDHALVPORTCB_WAITFORSYNC)(LPDDHAL_WAITFORVPORTSYNCDATA); -typedef DWORD (PASCAL *LPDDHALVPORTCB_GETSIGNALSTATUS)(LPDDHAL_GETVPORTSIGNALDATA); -typedef DWORD (PASCAL *LPDDHALVPORTCB_COLORCONTROL)(LPDDHAL_VPORTCOLORDATA); - -typedef struct _DDHAL_DDVIDEOPORTCALLBACKS -{ - DWORD dwSize; - DWORD dwFlags; - LPDDHALVPORTCB_CANCREATEVIDEOPORT CanCreateVideoPort; - LPDDHALVPORTCB_CREATEVIDEOPORT CreateVideoPort; - LPDDHALVPORTCB_FLIP FlipVideoPort; - LPDDHALVPORTCB_GETBANDWIDTH GetVideoPortBandwidth; - LPDDHALVPORTCB_GETINPUTFORMATS GetVideoPortInputFormats; - LPDDHALVPORTCB_GETOUTPUTFORMATS GetVideoPortOutputFormats; - LPVOID lpReserved1; - LPDDHALVPORTCB_GETFIELD GetVideoPortField; - LPDDHALVPORTCB_GETLINE GetVideoPortLine; - LPDDHALVPORTCB_GETVPORTCONNECT GetVideoPortConnectInfo; - LPDDHALVPORTCB_DESTROYVPORT DestroyVideoPort; - LPDDHALVPORTCB_GETFLIPSTATUS GetVideoPortFlipStatus; - LPDDHALVPORTCB_UPDATE UpdateVideoPort; - LPDDHALVPORTCB_WAITFORSYNC WaitForVideoPortSync; - LPDDHALVPORTCB_GETSIGNALSTATUS GetVideoSignalStatus; - LPDDHALVPORTCB_COLORCONTROL ColorControl; -} DDHAL_DDVIDEOPORTCALLBACKS; - - -typedef struct _DDHAL_COLORCONTROLDATA *LPDDHAL_COLORCONTROLDATA; - -typedef DWORD (PASCAL *LPDDHALCOLORCB_COLORCONTROL)(LPDDHAL_COLORCONTROLDATA); - - -typedef struct _DDHAL_DDCOLORCONTROLCALLBACKS -{ - DWORD dwSize; - DWORD dwFlags; - LPDDHALCOLORCB_COLORCONTROL ColorControl; -} DDHAL_DDCOLORCONTROLCALLBACKS; - -typedef struct _DDHAL_SYNCSURFACEDATA *LPDDHAL_SYNCSURFACEDATA; -typedef struct _DDHAL_SYNCVIDEOPORTDATA *LPDDHAL_SYNCVIDEOPORTDATA; - -typedef DWORD (PASCAL *LPDDHALKERNELCB_SYNCSURFACE)(LPDDHAL_SYNCSURFACEDATA); -typedef DWORD (PASCAL *LPDDHALKERNELCB_SYNCVIDEOPORT)(LPDDHAL_SYNCVIDEOPORTDATA); - -typedef struct _DDHAL_DDKERNELCALLBACKS -{ - DWORD dwSize; - DWORD dwFlags; - LPDDHALKERNELCB_SYNCSURFACE SyncSurfaceData; - LPDDHALKERNELCB_SYNCVIDEOPORT SyncVideoPortData; -} DDHAL_DDKERNELCALLBACKS, *LPDDHAL_DDKERNELCALLBACKS; - -typedef struct _DDHAL_GETMOCOMPGUIDSDATA *LPDDHAL_GETMOCOMPGUIDSDATA; -typedef struct _DDHAL_GETMOCOMPFORMATSDATA *LPDDHAL_GETMOCOMPFORMATSDATA; -typedef struct _DDHAL_CREATEMOCOMPDATA *LPDDHAL_CREATEMOCOMPDATA; -typedef struct _DDHAL_GETMOCOMPCOMPBUFFDATA *LPDDHAL_GETMOCOMPCOMPBUFFDATA; -typedef struct _DDHAL_GETINTERNALMOCOMPDATA *LPDDHAL_GETINTERNALMOCOMPDATA; -typedef struct _DDHAL_BEGINMOCOMPFRAMEDATA *LPDDHAL_BEGINMOCOMPFRAMEDATA; -typedef struct _DDHAL_ENDMOCOMPFRAMEDATA *LPDDHAL_ENDMOCOMPFRAMEDATA; -typedef struct _DDHAL_RENDERMOCOMPDATA *LPDDHAL_RENDERMOCOMPDATA; -typedef struct _DDHAL_QUERYMOCOMPSTATUSDATA *LPDDHAL_QUERYMOCOMPSTATUSDATA; -typedef struct _DDHAL_DESTROYMOCOMPDATA *LPDDHAL_DESTROYMOCOMPDATA; - -typedef DWORD (PASCAL *LPDDHALMOCOMPCB_GETGUIDS)( LPDDHAL_GETMOCOMPGUIDSDATA); -typedef DWORD (PASCAL *LPDDHALMOCOMPCB_GETFORMATS)( LPDDHAL_GETMOCOMPFORMATSDATA); -typedef DWORD (PASCAL *LPDDHALMOCOMPCB_CREATE)( LPDDHAL_CREATEMOCOMPDATA); -typedef DWORD (PASCAL *LPDDHALMOCOMPCB_GETCOMPBUFFINFO)( LPDDHAL_GETMOCOMPCOMPBUFFDATA); -typedef DWORD (PASCAL *LPDDHALMOCOMPCB_GETINTERNALINFO)( LPDDHAL_GETINTERNALMOCOMPDATA); -typedef DWORD (PASCAL *LPDDHALMOCOMPCB_BEGINFRAME)( LPDDHAL_BEGINMOCOMPFRAMEDATA); -typedef DWORD (PASCAL *LPDDHALMOCOMPCB_ENDFRAME)( LPDDHAL_ENDMOCOMPFRAMEDATA); -typedef DWORD (PASCAL *LPDDHALMOCOMPCB_RENDER)( LPDDHAL_RENDERMOCOMPDATA); -typedef DWORD (PASCAL *LPDDHALMOCOMPCB_QUERYSTATUS)( LPDDHAL_QUERYMOCOMPSTATUSDATA); -typedef DWORD (PASCAL *LPDDHALMOCOMPCB_DESTROY)( LPDDHAL_DESTROYMOCOMPDATA); - -typedef struct _DDHAL_DDMOTIONCOMPCALLBACKS -{ - DWORD dwSize; - DWORD dwFlags; - LPDDHALMOCOMPCB_GETGUIDS GetMoCompGuids; - LPDDHALMOCOMPCB_GETFORMATS GetMoCompFormats; - LPDDHALMOCOMPCB_CREATE CreateMoComp; - LPDDHALMOCOMPCB_GETCOMPBUFFINFO GetMoCompBuffInfo; - LPDDHALMOCOMPCB_GETINTERNALINFO GetInternalMoCompInfo; - LPDDHALMOCOMPCB_BEGINFRAME BeginMoCompFrame; - LPDDHALMOCOMPCB_ENDFRAME EndMoCompFrame; - LPDDHALMOCOMPCB_RENDER RenderMoComp; - LPDDHALMOCOMPCB_QUERYSTATUS QueryMoCompStatus; - LPDDHALMOCOMPCB_DESTROY DestroyMoComp; -} DDHAL_DDMOTIONCOMPCALLBACKS, *LPDDHAL_DDMOTIONCOMPCALLBACKS; - - - -typedef HRESULT (WINAPI *LPDDGAMMACALIBRATORPROC)(LPDDGAMMARAMP, LPBYTE); - - - -/***************************************************************************** - * driver info structure - * - * The HAL is queried for additional callbacks via the GetDriverInfo callback. - */ -typedef struct _DDHAL_GETDRIVERINFODATA *LPDDHAL_GETDRIVERINFODATA; -typedef DWORD (PASCAL *LPDDHAL_GETDRIVERINFO)(LPDDHAL_GETDRIVERINFODATA); - - -typedef struct _DDHAL_GETDRIVERINFODATA { - DWORD dwSize; - DWORD dwFlags; - GUID guidInfo; - DWORD dwExpectedSize; - LPVOID lpvData; - DWORD dwActualSize; - HRESULT ddRVal; - ULONG_PTR dwContext; - -} DDHAL_GETDRIVERINFODATA; - -typedef struct _DDHALINFO { - DWORD dwSize; - LPDDHAL_DDCALLBACKS lpDDCallbacks; - LPDDHAL_DDSURFACECALLBACKS lpDDSurfaceCallbacks; - LPDDHAL_DDPALETTECALLBACKS lpDDPaletteCallbacks; - VIDMEMINFO vmiData; - DDCORECAPS ddCaps; - DWORD dwMonitorFrequency; - LPDDHAL_GETDRIVERINFO GetDriverInfo; - DWORD dwModeIndex; - LPDWORD lpdwFourCC; - DWORD dwNumModes; - LPDDHALMODEINFO lpModeInfo; - DWORD dwFlags; - LPVOID lpPDevice; - DWORD hInstance; - /* DirectX 2 */ - ULONG_PTR lpD3DGlobalDriverData; - ULONG_PTR lpD3DHALCallbacks; - LPDDHAL_DDEXEBUFCALLBACKS lpDDExeBufCallbacks; -} DDHALINFO; - - - -#define DDPALETTECALLBACKSSIZE sizeof( DDHAL_DDPALETTECALLBACKS ) -#define DDSURFACECALLBACKSSIZE sizeof( DDHAL_DDSURFACECALLBACKS ) -#define DDMISCELLANEOUSCALLBACKSSIZE sizeof(DDHAL_DDMISCELLANEOUSCALLBACKS) -#define DDMISCELLANEOUS2CALLBACKSSIZE sizeof(DDHAL_DDMISCELLANEOUS2CALLBACKS) -#define DDEXEBUFCALLBACKSSIZE sizeof( DDHAL_DDEXEBUFCALLBACKS ) -#define DDVIDEOPORTCALLBACKSSIZE sizeof( DDHAL_DDVIDEOPORTCALLBACKS ) -#define DDCOLORCONTROLCALLBACKSSIZE sizeof( DDHAL_DDCOLORCONTROLCALLBACKS ) -#define DDKERNELCALLBACKSSIZE sizeof(DDHAL_DDKERNELCALLBACKS) -#define DDMOTIONCOMPCALLBACKSSIZE sizeof( DDHAL_DDMOTIONCOMPCALLBACKS ) - -#define MAX_PALETTE_SIZE 256 - -#define MAX_AUTOFLIP_BUFFERS 10 -#define DDSCAPS2_INDEXBUFFER DDSCAPS2_RESERVED3 -#define DDSCAPS3_VIDEO DDSCAPS3_RESERVED2 -#define D3DFMT_INTERNAL_D32 71 -#define D3DFMT_INTERNAL_S1D15 72 -#define D3DFMT_INTERNAL_D15S1 73 -#define D3DFMT_INTERNAL_S8D24 74 -#define D3DFMT_INTERNAL_D24S8 75 -#define D3DFMT_INTERNAL_X8D24 76 -#define D3DFMT_INTERNAL_D24X8 77 -#define DDHAL_PLEASEALLOC_BLOCKSIZE 0x00000002l -#define DDHAL_PLEASEALLOC_LINEARSIZE 0x00000003l - -#define DDHAL_CB32_DESTROYDRIVER 0x00000001l -#define DDHAL_CB32_CREATESURFACE 0x00000002l -#define DDHAL_CB32_SETCOLORKEY 0x00000004l -#define DDHAL_CB32_SETMODE 0x00000008l -#define DDHAL_CB32_WAITFORVERTICALBLANK 0x00000010l -#define DDHAL_CB32_CANCREATESURFACE 0x00000020l -#define DDHAL_CB32_CREATEPALETTE 0x00000040l -#define DDHAL_CB32_GETSCANLINE 0x00000080l -#define DDHAL_CB32_SETEXCLUSIVEMODE 0x00000100l -#define DDHAL_CB32_FLIPTOGDISURFACE 0x00000200l -#define DDHAL_PALCB32_DESTROYPALETTE 0x00000001l -#define DDHAL_PALCB32_SETENTRIES 0x00000002l -#define DDHALINFO_ISPRIMARYDISPLAY 0x00000001 -#define DDHALINFO_MODEXILLEGAL 0x00000002 -#define DDHALINFO_GETDRIVERINFOSET 0x00000004 -#define DDHALINFO_GETDRIVERINFO2 0x00000008 -#define DDRAWI_VPORTSTART 0x0001 -#define DDRAWI_VPORTSTOP 0x0002 -#define DDRAWI_VPORTUPDATE 0x0003 -#define DDRAWI_VPORTGETCOLOR 0x0001 -#define DDRAWI_VPORTSETCOLOR 0x0002 -#define DDHAL_SURFCB32_DESTROYSURFACE 0x00000001 -#define DDHAL_SURFCB32_FLIP 0x00000002 -#define DDHAL_SURFCB32_SETCLIPLIST 0x00000004 -#define DDHAL_SURFCB32_LOCK 0x00000008 -#define DDHAL_SURFCB32_UNLOCK 0x00000010 -#define DDHAL_SURFCB32_BLT 0x00000020 -#define DDHAL_SURFCB32_SETCOLORKEY 0x00000040 -#define DDHAL_SURFCB32_ADDATTACHEDSURFACE 0x00000080 -#define DDHAL_SURFCB32_GETBLTSTATUS 0x00000100 -#define DDHAL_SURFCB32_GETFLIPSTATUS 0x00000200 -#define DDHAL_SURFCB32_UPDATEOVERLAY 0x00000400 -#define DDHAL_SURFCB32_SETOVERLAYPOSITION 0x00000800 -#define DDHAL_SURFCB32_RESERVED4 0x00001000 -#define DDHAL_SURFCB32_SETPALETTE 0x00002000 -#define DDHAL_MISCCB32_GETAVAILDRIVERMEMORY 0x00000001 -#define DDHAL_MISCCB32_UPDATENONLOCALHEAP 0x00000002 -#define DDHAL_MISCCB32_GETHEAPALIGNMENT 0x00000004 -#define DDHAL_MISCCB32_GETSYSMEMBLTSTATUS 0x00000008 -#define DDHAL_MISC2CB32_ALPHABLT 0x00000001 -#define DDHAL_MISC2CB32_CREATESURFACEEX 0x00000002 -#define DDHAL_MISC2CB32_GETDRIVERSTATE 0x00000004 -#define DDHAL_MISC2CB32_DESTROYDDLOCAL 0x00000008 -#define DDHAL_EXEBUFCB32_CANCREATEEXEBUF 0x00000001l -#define DDHAL_EXEBUFCB32_CREATEEXEBUF 0x00000002l -#define DDHAL_EXEBUFCB32_DESTROYEXEBUF 0x00000004l -#define DDHAL_EXEBUFCB32_LOCKEXEBUF 0x00000008l -#define DDHAL_EXEBUFCB32_UNLOCKEXEBUF 0x00000010l -#define DDHAL_VPORT32_CANCREATEVIDEOPORT 0x00000001 -#define DDHAL_VPORT32_CREATEVIDEOPORT 0x00000002 -#define DDHAL_VPORT32_FLIP 0x00000004 -#define DDHAL_VPORT32_GETBANDWIDTH 0x00000008 -#define DDHAL_VPORT32_GETINPUTFORMATS 0x00000010 -#define DDHAL_VPORT32_GETOUTPUTFORMATS 0x00000020 -#define DDHAL_VPORT32_GETFIELD 0x00000080 -#define DDHAL_VPORT32_GETLINE 0x00000100 -#define DDHAL_VPORT32_GETCONNECT 0x00000200 -#define DDHAL_VPORT32_DESTROY 0x00000400 -#define DDHAL_VPORT32_GETFLIPSTATUS 0x00000800 -#define DDHAL_VPORT32_UPDATE 0x00001000 -#define DDHAL_VPORT32_WAITFORSYNC 0x00002000 -#define DDHAL_VPORT32_GETSIGNALSTATUS 0x00004000 -#define DDHAL_VPORT32_COLORCONTROL 0x00008000 -#define DDHAL_COLOR_COLORCONTROL 0x00000001 -#define DDHAL_KERNEL_SYNCSURFACEDATA 0x00000001l -#define DDHAL_KERNEL_SYNCVIDEOPORTDATA 0x00000002l -#define DDHAL_MOCOMP32_GETGUIDS 0x00000001 -#define DDHAL_MOCOMP32_GETFORMATS 0x00000002 -#define DDHAL_MOCOMP32_CREATE 0x00000004 -#define DDHAL_MOCOMP32_GETCOMPBUFFINFO 0x00000008 -#define DDHAL_MOCOMP32_GETINTERNALINFO 0x00000010 -#define DDHAL_MOCOMP32_BEGINFRAME 0x00000020 -#define DDHAL_MOCOMP32_ENDFRAME 0x00000040 -#define DDHAL_MOCOMP32_RENDER 0x00000080 -#define DDHAL_MOCOMP32_QUERYSTATUS 0x00000100 -#define DDHAL_MOCOMP32_DESTROY 0x00000200 - - -/* where the high-level ddraw implementation stores the callbacks */ -typedef struct _DDHAL_CALLBACKS { - DDHAL_DDCALLBACKS cbDDCallbacks; - DDHAL_DDSURFACECALLBACKS cbDDSurfaceCallbacks; - DDHAL_DDPALETTECALLBACKS cbDDPaletteCallbacks; - DDHAL_DDCALLBACKS HALDD; - DDHAL_DDSURFACECALLBACKS HALDDSurface; - DDHAL_DDPALETTECALLBACKS HALDDPalette; - DDHAL_DDCALLBACKS HELDD; - DDHAL_DDSURFACECALLBACKS HELDDSurface; - DDHAL_DDPALETTECALLBACKS HELDDPalette; - DDHAL_DDEXEBUFCALLBACKS cbDDExeBufCallbacks; - DDHAL_DDEXEBUFCALLBACKS HALDDExeBuf; - DDHAL_DDEXEBUFCALLBACKS HELDDExeBuf; - DDHAL_DDVIDEOPORTCALLBACKS cbDDVideoPortCallbacks; - DDHAL_DDVIDEOPORTCALLBACKS HALDDVideoPort; - DDHAL_DDCOLORCONTROLCALLBACKS cbDDColorControlCallbacks; - DDHAL_DDCOLORCONTROLCALLBACKS HALDDColorControl; - DDHAL_DDMISCELLANEOUSCALLBACKS cbDDMiscellaneousCallbacks; - DDHAL_DDMISCELLANEOUSCALLBACKS HALDDMiscellaneous; - DDHAL_DDKERNELCALLBACKS cbDDKernelCallbacks; - DDHAL_DDKERNELCALLBACKS HALDDKernel; - DDHAL_DDMOTIONCOMPCALLBACKS cbDDMotionCompCallbacks; - DDHAL_DDMOTIONCOMPCALLBACKS HALDDMotionComp; -} DDHAL_CALLBACKS,*LPDDHAL_CALLBACKS; - -/***************************************************************************** - * parameter structures - */ -typedef struct _DDHAL_DESTROYDRIVERDATA { - LPDDRAWI_DIRECTDRAW_GBL lpDD; - HRESULT ddRVal; - LPDDHAL_DESTROYDRIVER DestroyDriver; -} DDHAL_DESTROYDRIVERDATA; - -typedef struct _DDHAL_SETMODEDATA { - LPDDRAWI_DIRECTDRAW_GBL lpDD; - DWORD dwModeIndex; - HRESULT ddRVal; - LPDDHAL_SETMODE SetMode; - BOOL inexcl; - BOOL useRefreshRate; -} DDHAL_SETMODEDATA; - -typedef struct _DDHAL_CREATESURFACEDATA { - LPDDRAWI_DIRECTDRAW_GBL lpDD; - LPDDSURFACEDESC lpDDSurfaceDesc; - LPDDRAWI_DDRAWSURFACE_LCL * lplpSList; - DWORD dwSCnt; - HRESULT ddRVal; - LPDDHAL_CREATESURFACE CreateSurface; -} DDHAL_CREATESURFACEDATA; - -typedef struct _DDHAL_CANCREATESURFACEDATA { - LPDDRAWI_DIRECTDRAW_GBL lpDD; - LPDDSURFACEDESC lpDDSurfaceDesc; - DWORD bIsDifferentPixelFormat; - HRESULT ddRVal; - LPDDHAL_CANCREATESURFACE CanCreateSurface; -} DDHAL_CANCREATESURFACEDATA; - -typedef struct _DDHAL_CREATEPALETTEDATA { - LPDDRAWI_DIRECTDRAW_GBL lpDD; - LPDDRAWI_DDRAWPALETTE_GBL lpDDPalette; - LPPALETTEENTRY lpColorTable; - HRESULT ddRVal; - LPDDHAL_CREATEPALETTE CreatePalette; - BOOL is_excl; -} DDHAL_CREATEPALETTEDATA; - -typedef struct _DDHAL_SETEXCLUSIVEMODEDATA { - LPDDRAWI_DIRECTDRAW_GBL lpDD; - DWORD dwEnterExcl; - DWORD dwReserved; - HRESULT ddRVal; - LPDDHAL_SETEXCLUSIVEMODE SetExclusiveMode; -} DDHAL_SETEXCLUSIVEMODEDATA; - -/* surfaces */ -typedef struct _DDHAL_DESTROYSURFACEDATA { - LPDDRAWI_DIRECTDRAW_GBL lpDD; - LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface; - HRESULT ddRVal; - LPDDHALSURFCB_DESTROYSURFACE DestroySurface; -} DDHAL_DESTROYSURFACEDATA; - -typedef struct _DDHAL_FLIPDATA { - LPDDRAWI_DIRECTDRAW_GBL lpDD; - LPDDRAWI_DDRAWSURFACE_LCL lpSurfCurr; - LPDDRAWI_DDRAWSURFACE_LCL lpSurfTarg; - DWORD dwFlags; - HRESULT ddRVal; - LPDDHALSURFCB_FLIP Flip; - LPDDRAWI_DDRAWSURFACE_LCL lpSurfCurrLeft; - LPDDRAWI_DDRAWSURFACE_LCL lpSurfTargLeft; -} DDHAL_FLIPDATA; - -typedef struct _DDHAL_LOCKDATA { - LPDDRAWI_DIRECTDRAW_GBL lpDD; - LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface; - DWORD bHasRect; - RECTL rArea; - LPVOID lpSurfData; - HRESULT ddRVal; - LPDDHALSURFCB_LOCK Lock; - DWORD dwFlags; -} DDHAL_LOCKDATA; - -typedef struct _DDHAL_UNLOCKDATA { - LPDDRAWI_DIRECTDRAW_GBL lpDD; - LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface; - HRESULT ddRVal; - LPDDHALSURFCB_UNLOCK Unlock; -} DDHAL_UNLOCKDATA; - -typedef struct _DDHAL_BLTDATA { - LPDDRAWI_DIRECTDRAW_GBL lpDD; - LPDDRAWI_DDRAWSURFACE_LCL lpDDDestSurface; - RECTL rDest; - LPDDRAWI_DDRAWSURFACE_LCL lpDDSrcSurface; - RECTL rSrc; - DWORD dwFlags; - DWORD dwROPFlags; - DDBLTFX bltFX; - HRESULT ddRVal; - LPDDHALSURFCB_BLT Blt; - BOOL IsClipped; - RECTL rOrigDest; - RECTL rOrigSrc; - DWORD dwRectCnt; - LPRECT prDestRects; -} DDHAL_BLTDATA; - -typedef struct _DDHAL_SETPALETTEDATA { - LPDDRAWI_DIRECTDRAW_GBL lpDD; - LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface; - LPDDRAWI_DDRAWPALETTE_GBL lpDDPalette; - HRESULT ddRVal; - LPDDHALSURFCB_SETPALETTE SetPalette; - BOOL Attach; -} DDHAL_SETPALETTEDATA; - -/* palettes */ -typedef struct _DDHAL_DESTROYPALETTEDATA { - LPDDRAWI_DIRECTDRAW_GBL lpDD; - LPDDRAWI_DDRAWPALETTE_GBL lpDDPalette; - HRESULT ddRVal; - LPDDHALPALCB_DESTROYPALETTE DestroyPalette; -} DDHAL_DESTROYPALETTEDATA; - -typedef struct _DDHAL_SETENTRIESDATA { - LPDDRAWI_DIRECTDRAW_GBL lpDD; - LPDDRAWI_DDRAWPALETTE_GBL lpDDPalette; - DWORD dwBase; - DWORD dwNumEntries; - LPPALETTEENTRY lpEntries; - HRESULT ddRVal; - LPDDHALPALCB_SETENTRIES SetEntries; -} DDHAL_SETENTRIESDATA; - - -typedef struct _DDHAL_CANCREATEVPORTDATA -{ - LPDDRAWI_DIRECTDRAW_LCL lpDD; - LPDDVIDEOPORTDESC lpDDVideoPortDesc; - HRESULT ddRVal; - LPDDHALVPORTCB_CANCREATEVIDEOPORT CanCreateVideoPort; -} DDHAL_CANCREATEVPORTDATA; - -typedef struct _DDHAL_CREATEVPORTDATA -{ - LPDDRAWI_DIRECTDRAW_LCL lpDD; - LPDDVIDEOPORTDESC lpDDVideoPortDesc; - LPDDRAWI_DDVIDEOPORT_LCL lpVideoPort; - HRESULT ddRVal; - LPDDHALVPORTCB_CREATEVIDEOPORT CreateVideoPort; -} DDHAL_CREATEVPORTDATA; - -typedef struct _DDHAL_GETVPORTBANDWIDTHDATA -{ - LPDDRAWI_DIRECTDRAW_LCL lpDD; - LPDDRAWI_DDVIDEOPORT_LCL lpVideoPort; - LPDDPIXELFORMAT lpddpfFormat; - DWORD dwWidth; - DWORD dwHeight; - DWORD dwFlags; - LPDDVIDEOPORTBANDWIDTH lpBandwidth; - HRESULT ddRVal; - LPDDHALVPORTCB_GETBANDWIDTH GetVideoPortBandwidth; -} DDHAL_GETVPORTBANDWIDTHDATA; - -typedef struct _DDHAL_GETVPORTINPUTFORMATDATA -{ - LPDDRAWI_DIRECTDRAW_LCL lpDD; - LPDDRAWI_DDVIDEOPORT_LCL lpVideoPort; - DWORD dwFlags; - LPDDPIXELFORMAT lpddpfFormat; - DWORD dwNumFormats; - HRESULT ddRVal; - LPDDHALVPORTCB_GETINPUTFORMATS GetVideoPortInputFormats; -} DDHAL_GETVPORTINPUTFORMATDATA; - -typedef struct _DDHAL_GETVPORTFIELDDATA -{ - LPDDRAWI_DIRECTDRAW_LCL lpDD; - LPDDRAWI_DDVIDEOPORT_LCL lpVideoPort; - BOOL bField; - HRESULT ddRVal; - LPDDHALVPORTCB_GETFIELD GetVideoPortField; -} DDHAL_GETVPORTFIELDDATA; - -typedef struct _DDHAL_GETVPORTOUTPUTFORMATDATA -{ - LPDDRAWI_DIRECTDRAW_LCL lpDD; - LPDDRAWI_DDVIDEOPORT_LCL lpVideoPort; - DWORD dwFlags; - LPDDPIXELFORMAT lpddpfInputFormat; - LPDDPIXELFORMAT lpddpfOutputFormats; - DWORD dwNumFormats; - HRESULT ddRVal; - LPDDHALVPORTCB_GETOUTPUTFORMATS GetVideoPortOutputFormats; -} DDHAL_GETVPORTOUTPUTFORMATDATA; - -typedef struct _DDHAL_GETVPORTLINEDATA -{ - LPDDRAWI_DIRECTDRAW_LCL lpDD; - LPDDRAWI_DDVIDEOPORT_LCL lpVideoPort; - DWORD dwLine; - HRESULT ddRVal; - LPDDHALVPORTCB_GETLINE GetVideoPortLine; -} DDHAL_GETVPORTLINEDATA; - -typedef struct _DDHAL_DESTROYVPORTDATA -{ - LPDDRAWI_DIRECTDRAW_LCL lpDD; - LPDDRAWI_DDVIDEOPORT_LCL lpVideoPort; - HRESULT ddRVal; - LPDDHALVPORTCB_DESTROYVPORT DestroyVideoPort; -} DDHAL_DESTROYVPORTDATA; - -typedef struct _DDHAL_GETVPORTFLIPSTATUSDATA -{ - LPDDRAWI_DIRECTDRAW_LCL lpDD; - FLATPTR fpSurface; - HRESULT ddRVal; - LPDDHALVPORTCB_GETFLIPSTATUS GetVideoPortFlipStatus; -} DDHAL_GETVPORTFLIPSTATUSDATA; - -typedef struct _DDHAL_UPDATEVPORTDATA -{ - LPDDRAWI_DIRECTDRAW_LCL lpDD; - LPDDRAWI_DDVIDEOPORT_LCL lpVideoPort; - LPDDRAWI_DDRAWSURFACE_INT *lplpDDSurface; - LPDDRAWI_DDRAWSURFACE_INT *lplpDDVBISurface; - LPDDVIDEOPORTINFO lpVideoInfo; - DWORD dwFlags; - DWORD dwNumAutoflip; - DWORD dwNumVBIAutoflip; - HRESULT ddRVal; - LPDDHALVPORTCB_UPDATE UpdateVideoPort; -} DDHAL_UPDATEVPORTDATA; - -typedef struct _DDHAL_WAITFORVPORTSYNCDATA -{ - LPDDRAWI_DIRECTDRAW_LCL lpDD; - LPDDRAWI_DDVIDEOPORT_LCL lpVideoPort; - DWORD dwFlags; - DWORD dwLine; - DWORD dwTimeOut; - HRESULT ddRVal; - LPDDHALVPORTCB_WAITFORSYNC WaitForVideoPortSync; -} DDHAL_WAITFORVPORTSYNCDATA; - -typedef struct _DDHAL_GETVPORTSIGNALDATA -{ - LPDDRAWI_DIRECTDRAW_LCL lpDD; - LPDDRAWI_DDVIDEOPORT_LCL lpVideoPort; - DWORD dwStatus; - HRESULT ddRVal; - LPDDHALVPORTCB_GETSIGNALSTATUS GetVideoSignalStatus; -} DDHAL_GETVPORTSIGNALDATA; - -typedef struct _DDHAL_VPORTCOLORDATA -{ - LPDDRAWI_DIRECTDRAW_LCL lpDD; - LPDDRAWI_DDVIDEOPORT_LCL lpVideoPort; - DWORD dwFlags; - LPDDCOLORCONTROL lpColorData; - HRESULT ddRVal; - LPDDHALVPORTCB_COLORCONTROL ColorControl; -} DDHAL_VPORTCOLORDATA; - -typedef struct _DDHAL_FLIPVPORTDATA -{ - LPDDRAWI_DIRECTDRAW_LCL lpDD; - LPDDRAWI_DDVIDEOPORT_LCL lpVideoPort; - LPDDRAWI_DDRAWSURFACE_LCL lpSurfCurr; - LPDDRAWI_DDRAWSURFACE_LCL lpSurfTarg; - HRESULT ddRVal; - LPDDHALVPORTCB_FLIP FlipVideoPort; -} DDHAL_FLIPVPORTDATA; - -typedef struct _DDHAL_GETVPORTCONNECTDATA -{ - LPDDRAWI_DIRECTDRAW_LCL lpDD; - DWORD dwPortId; - LPDDVIDEOPORTCONNECT lpConnect; - DWORD dwNumEntries; - HRESULT ddRVal; - LPDDHALVPORTCB_GETVPORTCONNECT GetVideoPortConnectInfo; -} DDHAL_GETVPORTCONNECTDATA; - -typedef struct _DDHAL_SYNCSURFACEDATA -{ - DWORD dwSize; - LPDDRAWI_DIRECTDRAW_LCL lpDD; - LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface; - DWORD dwSurfaceOffset; - ULONG_PTR fpLockPtr; - LONG lPitch; - DWORD dwOverlayOffset; - DWORD dwOverlaySrcWidth; - DWORD dwOverlaySrcHeight; - DWORD dwOverlayDestWidth; - DWORD dwOverlayDestHeight; - ULONG_PTR dwDriverReserved1; - ULONG_PTR dwDriverReserved2; - ULONG_PTR dwDriverReserved3; - HRESULT ddRVal; -} DDHAL_SYNCSURFACEDATA; - -typedef struct _DDHAL_SYNCVIDEOPORTDATA -{ - DWORD dwSize; - LPDDRAWI_DIRECTDRAW_LCL lpDD; - LPDDRAWI_DDVIDEOPORT_LCL lpVideoPort; - DWORD dwOriginOffset; - DWORD dwHeight; - DWORD dwVBIHeight; - ULONG_PTR dwDriverReserved1; - ULONG_PTR dwDriverReserved2; - ULONG_PTR dwDriverReserved3; - HRESULT ddRVal; -} DDHAL_SYNCVIDEOPORTDATA; - -typedef struct _DDHAL_DESTROYDDLOCALDATA -{ - DWORD dwFlags; - LPDDRAWI_DIRECTDRAW_LCL pDDLcl; - HRESULT ddRVal; -} DDHAL_DESTROYDDLOCALDATA; - -typedef struct _DDHAL_CREATESURFACEEXDATA { - DWORD dwFlags; - LPDDRAWI_DIRECTDRAW_LCL lpDDLcl; - LPDDRAWI_DDRAWSURFACE_LCL lpDDSLcl; - HRESULT ddRVal; -} DDHAL_CREATESURFACEEXDATA; - -typedef struct _DDHAL_GETHEAPALIGNMENTDATA -{ - ULONG_PTR dwInstance; - DWORD dwHeap; - HRESULT ddRVal; - LPDDHAL_GETHEAPALIGNMENT GetHeapAlignment; - HEAPALIGNMENT Alignment; -} DDHAL_GETHEAPALIGNMENTDATA; - - -typedef struct _DDMORESURFACECAPS -{ - DWORD dwSize; - DDSCAPSEX ddsCapsMore; - struct tagExtendedHeapRestrictions - { - DDSCAPSEX ddsCapsEx; - DDSCAPSEX ddsCapsExAlt; - } ddsExtendedHeapRestrictions[1]; -} DDMORESURFACECAPS, * LPDDMORESURFACECAPS; - -typedef struct _DDSTEREOMODE -{ - DWORD dwSize; - DWORD dwHeight; - DWORD dwWidth; - DWORD dwBpp; - DWORD dwRefreshRate; - BOOL bSupported; - -} DDSTEREOMODE, * LPDDSTEREOMODE; - -/***************************************************************************** - * high-level ddraw implementation structures - */ -typedef struct _IUNKNOWN_LIST { - struct _IUNKNOWN_LIST * lpLink; - LPGUID lpGuid; - -#ifndef _NO_COM - IUnknown * lpIUnknown; -#else - LPVOID lpIUnknown; -#endif /* _NO_COM */ -} IUNKNOWN_LIST,*LPIUNKNOWN_LIST; - - -typedef struct _PROCESS_LIST { - struct _PROCESS_LIST * lpLink; - DWORD dwProcessId; - DWORD dwRefCnt; - DWORD dwAlphaDepth; - DWORD dwZDepth; -} PROCESS_LIST,*LPPROCESS_LIST; - -typedef struct _ATTACHLIST { - DWORD dwFlags; - struct _ATTACHLIST * lpLink; - LPDDRAWI_DDRAWSURFACE_LCL lpAttached; - LPDDRAWI_DDRAWSURFACE_INT lpIAttached; -} ATTACHLIST,*LPATTACHLIST; - -#define DDAL_IMPLICIT 0x00000001 - -typedef struct _ACCESSRECTLIST { - struct _ACCESSRECTLIST * lpLink; - RECT rDest; - LPDDRAWI_DIRECTDRAW_LCL lpOwner; - LPVOID lpSurfaceData; - DWORD dwFlags; - LPHEAPALIASINFO lpHeapAliasInfo; -} ACCESSRECTLIST,*LPACCESSRECTLIST; - -#define ACCESSRECT_VRAMSTYLE 0x00000001 -#define ACCESSRECT_NOTHOLDINGWIN16LOCK 0x00000002 -#define ACCESSRECT_BROKEN 0x00000004 - -typedef struct _DBLNODE { - struct _DBLNODE * next; - struct _DBLNODE * prev; - LPDDRAWI_DDRAWSURFACE_LCL object; - LPDDRAWI_DDRAWSURFACE_INT object_int; -} DBLNODE,*LPDBLNODE; - -typedef struct _DDRAWI_DIRECTDRAW_INT { - LPVOID lpVtbl; - LPDDRAWI_DIRECTDRAW_LCL lpLcl; - LPDDRAWI_DIRECTDRAW_INT lpLink; - DWORD dwIntRefCnt; -} DDRAWI_DIRECTDRAW_INT; - - -typedef struct _DDRAWI_DIRECTDRAW_LCL { - DWORD lpDDMore; - LPDDRAWI_DIRECTDRAW_GBL lpGbl; - DWORD dwUnused0; - DWORD dwLocalFlags; - DWORD dwLocalRefCnt; - DWORD dwProcessId; -#ifndef _NO_COM - IUnknown * pUnkOuter; -#else - PVOID pUnkOuter; -#endif - DWORD dwObsolete1; - ULONG_PTR hWnd; - ULONG_PTR hDC; - DWORD dwErrorMode; - LPDDRAWI_DDRAWSURFACE_INT lpPrimary; - LPDDRAWI_DDRAWSURFACE_INT lpCB; - DWORD dwPreferredMode; - /* DirectX 2 */ - HINSTANCE hD3DInstance; -#ifndef _NO_COM - IUnknown * pD3DIUnknown; -#else - PVOID pD3DIUnknown; -#endif - LPDDHAL_CALLBACKS lpDDCB; - ULONG_PTR hDDVxd; - /* DirectX 5.0 */ - DWORD dwAppHackFlags; - /* DirectX 5.0A */ - ULONG_PTR hFocusWnd; - DWORD dwHotTracking; - DWORD dwIMEState; - /* DirectX 6.0 */ - ULONG_PTR hWndPopup; - ULONG_PTR hDD; - ULONG_PTR hGammaCalibrator; - LPDDGAMMACALIBRATORPROC lpGammaCalibrator; -} DDRAWI_DIRECTDRAW_LCL; - - -#define DDRAWILCL_HASEXCLUSIVEMODE 0x00000001 -#define DDRAWILCL_ISFULLSCREEN 0x00000002 -#define DDRAWILCL_SETCOOPCALLED 0x00000004 -#define DDRAWILCL_ACTIVEYES 0x00000008 -#define DDRAWILCL_ACTIVENO 0x00000010 -#define DDRAWILCL_HOOKEDHWND 0x00000020 -#define DDRAWILCL_ALLOWMODEX 0x00000040 -#define DDRAWILCL_V1SCLBEHAVIOUR 0x00000080 -#define DDRAWILCL_MODEHASBEENCHANGED 0x00000100 -#define DDRAWILCL_CREATEDWINDOW 0x00000200 -#define DDRAWILCL_DIRTYDC 0x00000400 -#define DDRAWILCL_DISABLEINACTIVATE 0x00000800 -#define DDRAWILCL_CURSORCLIPPED 0x00001000 -#define DDRAWILCL_EXPLICITMONITOR 0x00002000 -#define DDRAWILCL_MULTITHREADED 0x00004000 -#define DDRAWILCL_FPUSETUP 0x00008000 -#define DDRAWILCL_POWEREDDOWN 0x00010000 -#define DDRAWILCL_DIRECTDRAW7 0x00020000 -#define DDRAWILCL_ATTEMPTEDD3DCONTEXT 0x00040000 -#define DDRAWILCL_FPUPRESERVE 0x00080000 -#define DDRAWILCL_DX8DRIVER 0x00100000 -#define DDRAWILCL_DIRECTDRAW8 0x00200000 - - -typedef struct _DDRAWI_DIRECTDRAW_GBL { - DWORD dwRefCnt; - DWORD dwFlags; - FLATPTR fpPrimaryOrig; - DDCORECAPS ddCaps; - DWORD dwInternal1; - DWORD dwUnused1[9]; - LPDDHAL_CALLBACKS lpDDCBtmp; - LPDDRAWI_DDRAWSURFACE_INT dsList; - LPDDRAWI_DDRAWPALETTE_INT palList; - LPDDRAWI_DDRAWCLIPPER_INT clipperList; - LPDDRAWI_DIRECTDRAW_GBL lp16DD; - DWORD dwMaxOverlays; - DWORD dwCurrOverlays; - DWORD dwMonitorFrequency; - DDCORECAPS ddHELCaps; - DWORD dwUnused2[50]; - DDCOLORKEY ddckCKDestOverlay; - DDCOLORKEY ddckCKSrcOverlay; - VIDMEMINFO vmiData; - LPVOID lpDriverHandle; - LPDDRAWI_DIRECTDRAW_LCL lpExclusiveOwner; - DWORD dwModeIndex; - DWORD dwModeIndexOrig; - DWORD dwNumFourCC; - LPDWORD lpdwFourCC; - DWORD dwNumModes; - LPDDHALMODEINFO lpModeInfo; - PROCESS_LIST plProcessList; - DWORD dwSurfaceLockCount; - DWORD dwAliasedLockCnt; - ULONG_PTR dwReserved3; - ULONG_PTR hDD; - char cObsolete[12]; - DWORD dwReserved1; - DWORD dwReserved2; - DBLNODE dbnOverlayRoot; - volatile LPWORD lpwPDeviceFlags; - DWORD dwPDevice; - DWORD dwWin16LockCnt; - DWORD dwUnused3; - DWORD hInstance; - DWORD dwEvent16; - DWORD dwSaveNumModes; - /* DirectX 2 */ - ULONG_PTR lpD3DGlobalDriverData; - ULONG_PTR lpD3DHALCallbacks; - DDCORECAPS ddBothCaps; - /* DirectX 5.0 */ - LPDDVIDEOPORTCAPS lpDDVideoPortCaps; - LPDDRAWI_DDVIDEOPORT_INT dvpList; - ULONG_PTR lpD3DHALCallbacks2; - RECT rectDevice; - DWORD cMonitors; - LPVOID gpbmiSrc; - LPVOID gpbmiDest; - LPHEAPALIASINFO phaiHeapAliases; - ULONG_PTR hKernelHandle; - ULONG_PTR pfnNotifyProc; - LPDDKERNELCAPS lpDDKernelCaps; - LPDDNONLOCALVIDMEMCAPS lpddNLVCaps; - LPDDNONLOCALVIDMEMCAPS lpddNLVHELCaps; - LPDDNONLOCALVIDMEMCAPS lpddNLVBothCaps; - ULONG_PTR lpD3DExtendedCaps; - /* DirectX 5.0A */ - DWORD dwDOSBoxEvent; - RECT rectDesktop; - char cDriverName[MAX_DRIVER_NAME]; - /* DirectX 6.0 */ - ULONG_PTR lpD3DHALCallbacks3; - DWORD dwNumZPixelFormats; - LPDDPIXELFORMAT lpZPixelFormats; - LPDDRAWI_DDMOTIONCOMP_INT mcList; - DWORD hDDVxd; - DDSCAPSEX ddsCapsMore; -} DDRAWI_DIRECTDRAW_GBL; - -#define DDRAWI_xxxxxxxxx1 0x00000001 -#define DDRAWI_xxxxxxxxx2 0x00000002 -#define DDRAWI_VIRTUALDESKTOP 0x00000008 -#define DDRAWI_MODEX 0x00000010 -#define DDRAWI_DISPLAYDRV 0x00000020 -#define DDRAWI_FULLSCREEN 0x00000040 -#define DDRAWI_MODECHANGED 0x00000080 -#define DDRAWI_NOHARDWARE 0x00000100 -#define DDRAWI_PALETTEINIT 0x00000200 -#define DDRAWI_NOEMULATION 0x00000400 -#define DDRAWI_HASCKEYDESTOVERLAY 0x00000800 -#define DDRAWI_HASCKEYSRCOVERLAY 0x00001000 -#define DDRAWI_HASGDIPALETTE 0x00002000 -#define DDRAWI_EMULATIONINITIALIZED 0x00004000 -#define DDRAWI_HASGDIPALETTE_EXCLUSIVE 0x00008000 -#define DDRAWI_MODEXILLEGAL 0x00010000 -#define DDRAWI_FLIPPEDTOGDI 0x00020000 -#define DDRAWI_NEEDSWIN16FORVRAMLOCK 0x00040000 -#define DDRAWI_PDEVICEVRAMBITCLEARED 0x00080000 -#define DDRAWI_STANDARDVGA 0x00100000 -#define DDRAWI_EXTENDEDALIGNMENT 0x00200000 -#define DDRAWI_CHANGINGMODE 0x00400000 -#define DDRAWI_GDIDRV 0x00800000 -#define DDRAWI_ATTACHEDTODESKTOP 0x01000000 -#define DDRAWI_UMODELOADED 0x02000000 -#define DDRAWI_DDRAWDATANOTFETCHED 0x04000000 -#define DDRAWI_SECONDARYDRIVERLOADED 0x08000000 -#define DDRAWI_TESTINGMODES 0x10000000 -#define DDRAWI_DRIVERINFO2 0x20000000 -#define DDRAWI_BADPDEV 0x40000000 - - -/* surfaces */ -typedef struct _DDRAWI_DDRAWSURFACE_INT { - LPVOID lpVtbl; - LPDDRAWI_DDRAWSURFACE_LCL lpLcl; - LPDDRAWI_DDRAWSURFACE_INT lpLink; - DWORD dwIntRefCnt; -} DDRAWI_DDRAWSURFACE_INT; - -typedef struct _DDRAWI_DDRAWSURFACE_GBL { - DWORD dwRefCnt; - DWORD dwGlobalFlags; - __GNU_EXTENSION union { - LPACCESSRECTLIST lpRectList; - DWORD dwBlockSizeY; - LONG lSlicePitch; - }; - __GNU_EXTENSION union { - LPVMEMHEAP lpVidMemHeap; - DWORD dwBlockSizeX; - }; - __GNU_EXTENSION union { - LPDDRAWI_DIRECTDRAW_GBL lpDD; - LPVOID lpDDHandle; - }; - FLATPTR fpVidMem; - __GNU_EXTENSION union { - LONG lPitch; - DWORD dwLinearSize; - }; - WORD wHeight; - WORD wWidth; - DWORD dwUsageCount; - ULONG_PTR dwReserved1; - DDPIXELFORMAT ddpfSurface; -} DDRAWI_DDRAWSURFACE_GBL; - -#define DDRAWISURFGBL_MEMFREE 0x00000001L -#define DDRAWISURFGBL_SYSMEMREQUESTED 0x00000002L -#define DDRAWISURFGBL_ISGDISURFACE 0x00000004L -#define DDRAWISURFGBL_SOFTWAREAUTOFLIP 0x00000008L -#define DDRAWISURFGBL_LOCKNOTHOLDINGWIN16LOCK 0x00000010L -#define DDRAWISURFGBL_LOCKVRAMSTYLE 0x00000020L -#define DDRAWISURFGBL_LOCKBROKEN 0x00000040L -#define DDRAWISURFGBL_IMPLICITHANDLE 0x00000080L -#define DDRAWISURFGBL_ISCLIENTMEM 0x00000100L -#define DDRAWISURFGBL_HARDWAREOPSOURCE 0x00000200L -#define DDRAWISURFGBL_HARDWAREOPDEST 0x00000400L -#define DDRAWISURFGBL_HARDWAREOPSTARTED (DDRAWISURFGBL_HARDWAREOPSOURCE|DDRAWISURFGBL_HARDWAREOPDEST) -#define DDRAWISURFGBL_VPORTINTERLEAVED 0x00000800L -#define DDRAWISURFGBL_VPORTDATA 0x00001000L -#define DDRAWISURFGBL_LATEALLOCATELINEAR 0x00002000L -#define DDRAWISURFGBL_SYSMEMEXECUTEBUFFER 0x00004000L -#define DDRAWISURFGBL_FASTLOCKHELD 0x00008000L -#define DDRAWISURFGBL_READONLYLOCKHELD 0x00010000L -#define DDRAWISURFGBL_DX8SURFACE 0x00080000L -#define DDRAWISURFGBL_DDHELDONTFREE 0x00100000L -#define DDRAWISURFGBL_NOTIFYWHENUNLOCKED 0x00200000L -#define DDRAWISURFGBL_RESERVED0 0x80000000L // Reserved flag - -typedef struct _DDRAWI_DDRAWSURFACE_GBL_MORE { - DWORD dwSize; - __GNU_EXTENSION union { - DWORD dwPhysicalPageTable; - FLATPTR fpPhysicalVidMem; - }; - LPDWORD pPageTable; - DWORD cPages; - ULONG_PTR dwSavedDCContext; - FLATPTR fpAliasedVidMem; - ULONG_PTR dwDriverReserved; - ULONG_PTR dwHELReserved; - DWORD cPageUnlocks; - ULONG_PTR hKernelSurface; - DWORD dwKernelRefCnt; - LPDDCOLORCONTROL lpColorInfo; - FLATPTR fpNTAlias; - DWORD dwContentsStamp; - LPVOID lpvUnswappedDriverReserved; - LPVOID lpDDRAWReserved2; - DWORD dwDDRAWReserved1; - DWORD dwDDRAWReserved2; - FLATPTR fpAliasOfVidMem; -} DDRAWI_DDRAWSURFACE_GBL_MORE; - -/* the MS version of this macro was somewhat obfuscated and unreadable - * (possibly because of mediocre MS coders)... so I simplified it... - * (and so I commit no copyright violations either, hah) */ -#define GET_LPDDRAWSURFACE_GBL_MORE(psurf_gbl) \ - (*(((LPDDRAWI_DDRAWSURFACE_GBL_MORE *)(psurf_gbl)) - 1)) - -#define SURFACE_PHYSICALVIDMEM( psurf_gbl ) \ - ( GET_LPDDRAWSURFACE_GBL_MORE(psurf_gbl )->fpPhysicalVidMem ) - - -typedef struct _DISPLAYMODEINFO -{ - WORD wWidth; - WORD wHeight; - BYTE wBPP; - BYTE wMonitorsAttachedToDesktop; - WORD wRefreshRate; -} DISPLAYMODEINFO, *LPDISPLAYMODEINFO; - -#define EQUAL_DISPLAYMODE ( A, B ) (0 == memcmp(&(A), &(B), sizeof (DISPLAYMODEINFO))) - - - - -typedef struct _DDRAWI_DDRAWSURFACE_MORE { - DWORD dwSize; - IUNKNOWN_LIST * lpIUnknowns; - LPDDRAWI_DIRECTDRAW_LCL lpDD_lcl; - DWORD dwPageLockCount; - DWORD dwBytesAllocated; - LPDDRAWI_DIRECTDRAW_INT lpDD_int; - DWORD dwMipMapCount; - LPDDRAWI_DDRAWCLIPPER_INT lpDDIClipper; - /* DirectX 5.0 */ - LPHEAPALIASINFO lpHeapAliasInfo; - DWORD dwOverlayFlags; - VOID *rgjunc; - LPDDRAWI_DDVIDEOPORT_LCL lpVideoPort; - LPDDOVERLAYFX lpddOverlayFX; - DDSCAPSEX ddsCapsEx; - DWORD dwTextureStage; - LPVOID lpDDRAWReserved; - LPVOID lpDDRAWReserved2; - LPVOID lpDDrawReserved3; - DWORD dwDDrawReserved4; - LPVOID lpDDrawReserved5; - LPDWORD lpGammaRamp; - LPDWORD lpOriginalGammaRamp; - LPVOID lpDDrawReserved6; - #ifndef WIN95 - DISPLAYMODEINFO dmiDDrawReserved7; - #endif - DWORD dwSurfaceHandle; - DWORD qwDDrawReserved8[2]; - LPVOID lpDDrawReserved9; - DWORD cSurfaces; - LPDDSURFACEDESC2 pCreatedDDSurfaceDesc2; - LPDDRAWI_DDRAWSURFACE_LCL *slist; - DWORD dwFVF; - LPVOID lpVB; -} DDRAWI_DDRAWSURFACE_MORE; - - - -typedef struct _DDRAWI_DDRAWSURFACE_LCL { - LPDDRAWI_DDRAWSURFACE_MORE lpSurfMore; - LPDDRAWI_DDRAWSURFACE_GBL lpGbl; - ULONG_PTR hDDSurface; - LPATTACHLIST lpAttachList; - LPATTACHLIST lpAttachListFrom; - DWORD dwLocalRefCnt; - DWORD dwProcessId; - DWORD dwFlags; - DDSCAPS ddsCaps; - __GNU_EXTENSION union - { - LPDDRAWI_DDRAWPALETTE_INT lpDDPalette; - LPDDRAWI_DDRAWPALETTE_INT lp16DDPalette; - }; - __GNU_EXTENSION union - { - LPDDRAWI_DDRAWCLIPPER_LCL lpDDClipper; - LPDDRAWI_DDRAWCLIPPER_INT lp16DDClipper; - }; - DWORD dwModeCreatedIn; - DWORD dwBackBufferCount; - DDCOLORKEY ddckCKDestBlt; - DDCOLORKEY ddckCKSrcBlt; - ULONG_PTR hDC; - ULONG_PTR dwReserved1; - DDCOLORKEY ddckCKSrcOverlay; - DDCOLORKEY ddckCKDestOverlay; - LPDDRAWI_DDRAWSURFACE_INT lpSurfaceOverlaying; - DBLNODE dbnOverlayNode; - RECT rcOverlaySrc; - RECT rcOverlayDest; - DWORD dwClrXparent; - DWORD dwAlpha; - LONG lOverlayX; - LONG lOverlayY; -} DDRAWI_DDRAWSURFACE_LCL; - -#define DDRAWISURF_ATTACHED 0x00000001L -#define DDRAWISURF_IMPLICITCREATE 0x00000002L -#define DDRAWISURF_ISFREE 0x00000004L -#define DDRAWISURF_ATTACHED_FROM 0x00000008L -#define DDRAWISURF_IMPLICITROOT 0x00000010L -#define DDRAWISURF_PARTOFPRIMARYCHAIN 0x00000020L -#define DDRAWISURF_DATAISALIASED 0x00000040L -#define DDRAWISURF_HASDC 0x00000080L -#define DDRAWISURF_HASCKEYDESTOVERLAY 0x00000100L -#define DDRAWISURF_HASCKEYDESTBLT 0x00000200L -#define DDRAWISURF_HASCKEYSRCOVERLAY 0x00000400L -#define DDRAWISURF_HASCKEYSRCBLT 0x00000800L -#define DDRAWISURF_LOCKEXCLUDEDCURSOR 0x00001000L -#define DDRAWISURF_HASPIXELFORMAT 0x00002000L -#define DDRAWISURF_HASOVERLAYDATA 0x00004000L -#define DDRAWISURF_SETGAMMA 0x00008000L -#define DDRAWISURF_SW_CKEYDESTOVERLAY 0x00010000L -#define DDRAWISURF_SW_CKEYDESTBLT 0x00020000L -#define DDRAWISURF_SW_CKEYSRCOVERLAY 0x00040000L -#define DDRAWISURF_SW_CKEYSRCBLT 0x00080000L -#define DDRAWISURF_HW_CKEYDESTOVERLAY 0x00100000L -#define DDRAWISURF_HW_CKEYDESTBLT 0x00200000L -#define DDRAWISURF_HW_CKEYSRCOVERLAY 0x00400000L -#define DDRAWISURF_HW_CKEYSRCBLT 0x00800000L -#define DDRAWISURF_INMASTERSPRITELIST 0x01000000L -#define DDRAWISURF_HELCB 0x02000000L -#define DDRAWISURF_FRONTBUFFER 0x04000000L -#define DDRAWISURF_BACKBUFFER 0x08000000L -#define DDRAWISURF_INVALID 0x10000000L -#define DDRAWISURF_DCIBUSY 0x20000000L -#define DDRAWISURF_GETDCNULL 0x40000000L -#define DDRAWISURF_STEREOSURFACELEFT 0x20000000L -#define DDRAWISURF_DRIVERMANAGED 0x40000000L -#define DDRAWISURF_DCILOCK 0x80000000L - -/* palettes */ -typedef struct _DDRAWI_DDRAWPALETTE_INT { - LPVOID lpVtbl; - LPDDRAWI_DDRAWPALETTE_LCL lpLcl; - LPDDRAWI_DDRAWPALETTE_INT lpLink; - DWORD dwIntRefCnt; -} DDRAWI_DDRAWPALETTE_INT; - -typedef struct _DDRAWI_DDRAWPALETTE_GBL { - DWORD dwRefCnt; - DWORD dwFlags; - LPDDRAWI_DIRECTDRAW_LCL lpDD_lcl; - DWORD dwProcessId; - LPPALETTEENTRY lpColorTable; - __GNU_EXTENSION union { - ULONG_PTR dwReserved1; - HPALETTE hHELGDIPalette; - }; - DWORD dwDriverReserved; - DWORD dwContentsStamp; - DWORD dwSaveStamp; - DWORD dwHandle; -} DDRAWI_DDRAWPALETTE_GBL; - -#define DDRAWIPAL_256 0x00000001 -#define DDRAWIPAL_16 0x00000002 -#define DDRAWIPAL_GDI 0x00000004 -#define DDRAWIPAL_STORED_8 0x00000008 -#define DDRAWIPAL_STORED_16 0x00000010 -#define DDRAWIPAL_STORED_24 0x00000020 -#define DDRAWIPAL_EXCLUSIVE 0x00000040 -#define DDRAWIPAL_INHEL 0x00000080 -#define DDRAWIPAL_DIRTY 0x00000100 -#define DDRAWIPAL_ALLOW256 0x00000200 -#define DDRAWIPAL_4 0x00000400 -#define DDRAWIPAL_2 0x00000800 -#define DDRAWIPAL_STORED_8INDEX 0x00001000 -#define DDRAWIPAL_ALPHA 0x00002000 - -#define D3DFORMAT_OP_TEXTURE 0x00000001L -#define D3DFORMAT_OP_VOLUMETEXTURE 0x00000002L -#define D3DFORMAT_OP_CUBETEXTURE 0x00000004L -#define D3DFORMAT_OP_OFFSCREEN_RENDERTARGET 0x00000008L -#define D3DFORMAT_OP_SAME_FORMAT_RENDERTARGET 0x00000010L -#define D3DFORMAT_OP_ZSTENCIL 0x00000040L -#define D3DFORMAT_OP_ZSTENCIL_WITH_ARBITRARY_COLOR_DEPTH 0x00000080L -#define D3DFORMAT_OP_SAME_FORMAT_UP_TO_ALPHA_RENDERTARGET 0x00000100L -#define D3DFORMAT_OP_DISPLAYMODE 0x00000400L -#define D3DFORMAT_OP_3DACCELERATION 0x00000800L -#define D3DFORMAT_OP_PIXELSIZE 0x00001000L -#define D3DFORMAT_OP_CONVERT_TO_ARGB 0x00002000L -#define D3DFORMAT_OP_OFFSCREENPLAIN 0x00004000L -#define D3DFORMAT_OP_SRGBREAD 0x00008000L -#define D3DFORMAT_OP_BUMPMAP 0x00010000L -#define D3DFORMAT_OP_NOFILTER 0x00040000L -#define DDPF_D3DFORMAT 0x00200000l -#define DDPF_NOVEL_TEXTURE_FORMAT 0x00100000l -#define D3DFORMAT_MEMBEROFGROUP_ARGB 0x00080000L -#define D3DFORMAT_OP_SRGBWRITE 0x00100000L -#define D3DFORMAT_OP_NOALPHABLEND 0x00200000L -#define D3DFORMAT_OP_AUTOGENMIPMAP 0x00400000L -#define D3DFORMAT_OP_VERTEXTEXTURE 0x00800000L -#define D3DFORMAT_OP_NOTEXCOORDWRAPNORMIP 0x01000000L -#define DELETED_OK 0 -#define DELETED_LASTONE 1 -#define DELETED_NOTFOUND 2 -#define DDCALLBACKSSIZE_V1 ( offsetof( DDHAL_DDCALLBACKS, SetExclusiveMode ) ) -#define DDCALLBACKSSIZE sizeof( DDHAL_DDCALLBACKS ) -#define DDRAWICLIP_WATCHWINDOW 0x00000001 -#define DDRAWICLIP_ISINITIALIZED 0x00000002 -#define DDRAWICLIP_INMASTERSPRITELIST 0x00000004 -#define PFINDEX_UNINITIALIZED (0UL) -#define PFINDEX_UNSUPPORTED (~0UL) -#define ROP_HAS_SOURCE 0x00000001l -#define ROP_HAS_PATTERN 0x00000002l -#define ROP_HAS_SOURCEPATTERN ROP_HAS_SOURCE | ROP_HAS_PATTERN -#define DDRAWIVPORT_ON 0x00000001 -#define DDRAWIVPORT_SOFTWARE_AUTOFLIP 0x00000002 -#define DDRAWIVPORT_COLORKEYANDINTERP 0x00000004 -#define DDRAWIVPORT_NOKERNELHANDLES 0x00000008 -#define DDRAWIVPORT_SOFTWARE_BOB 0x00000010 -#define DDRAWIVPORT_VBION 0x00000020 -#define DDRAWIVPORT_VIDEOON 0x00000040 -#define DDRAWI_GETCOLOR 0x0001 -#define DDRAWI_SETCOLOR 0x0002 -#define DDMCQUERY_READ 0x00000001 -#define DDWAITVB_I_TESTVB 0x80000006 - - -#define DDBLT_ANYALPHA \ - (DDBLT_ALPHASRCSURFACEOVERRIDE | DDBLT_ALPHASRCCONSTOVERRIDE | \ - DDBLT_ALPHASRC | DDBLT_ALPHADESTSURFACEOVERRIDE | \ - DDBLT_ALPHADESTCONSTOVERRIDE | DDBLT_ALPHADEST) - -#define DDHAL_ALIGNVALIDCAPS (DDSCAPS_OFFSCREENPLAIN | DDSCAPS_EXECUTEBUFFER | \ - DDSCAPS_OVERLAY | DDSCAPS_TEXTURE | \ - DDSCAPS_ZBUFFER | DDSCAPS_ALPHA | DDSCAPS_FLIP ) - - -#define DDHALINFOSIZE_V2 sizeof(DDHALINFO) - -#define DDOVER_ANYALPHA \ - (DDOVER_ALPHASRCSURFACEOVERRIDE | DDOVER_ALPHASRCCONSTOVERRIDE | \ - DDOVER_ALPHASRC | DDOVER_ALPHADESTSURFACEOVERRIDE | \ - DDOVER_ALPHADESTCONSTOVERRIDE | DDOVER_ALPHADEST) - - -typedef struct _DDRAWI_DDRAWPALETTE_LCL { - DWORD lpPalMore; - LPDDRAWI_DDRAWPALETTE_GBL lpGbl; - ULONG_PTR dwUnused0; - DWORD dwLocalRefCnt; -#ifndef _NO_COM - IUnknown * pUnkOuter; -#else - PVOID pUnkOuter; -#endif - LPDDRAWI_DIRECTDRAW_LCL lpDD_lcl; - ULONG_PTR dwReserved1; - /* DirectX 6.0 */ - ULONG_PTR dwDDRAWReserved1; - ULONG_PTR dwDDRAWReserved2; - ULONG_PTR dwDDRAWReserved3; -} DDRAWI_DDRAWPALETTE_LCL; - - -typedef struct _DDMCCOMPBUFFERINFO -{ - DWORD dwSize; - DWORD dwNumCompBuffers; - DWORD dwWidthToCreate; - DWORD dwHeightToCreate; - DWORD dwBytesToAllocate; - DDSCAPS2 ddCompCaps; - DDPIXELFORMAT ddPixelFormat; -} DDMCCOMPBUFFERINFO, *LPDDMCCOMPBUFFERINFO; - -typedef struct _DDMCBUFFERINFO -{ - DWORD dwSize; - LPDDRAWI_DDRAWSURFACE_LCL lpCompSurface; - DWORD dwDataOffset; - DWORD dwDataSize; - LPVOID lpPrivate; -} DDMCBUFFERINFO, *LPDDMCBUFFERINFO; - -typedef struct _DDHAL_GETDRIVERSTATEDATA { - DWORD dwFlags; - __GNU_EXTENSION union - { - ULONG_PTR dwhContext; - }; - LPDWORD lpdwStates; - DWORD dwLength; - HRESULT ddRVal; -} DDHAL_GETDRIVERSTATEDATA; - -typedef struct _DDHAL_ADDATTACHEDSURFACEDATA -{ - LPDDRAWI_DIRECTDRAW_GBL lpDD; - LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface; - LPDDRAWI_DDRAWSURFACE_LCL lpSurfAttached; - HRESULT ddRVal; - LPDDHALSURFCB_ADDATTACHEDSURFACE AddAttachedSurface; -} DDHAL_ADDATTACHEDSURFACEDATA; - - - -typedef struct _DDHAL_BEGINMOCOMPFRAMEDATA -{ - LPDDRAWI_DIRECTDRAW_LCL lpDD; - LPDDRAWI_DDMOTIONCOMP_LCL lpMoComp; - LPDDRAWI_DDRAWSURFACE_LCL lpDestSurface; - DWORD dwInputDataSize; - LPVOID lpInputData; - DWORD dwOutputDataSize; - LPVOID lpOutputData; - HRESULT ddRVal; - LPDDHALMOCOMPCB_BEGINFRAME BeginMoCompFrame; -} DDHAL_BEGINMOCOMPFRAMEDATA; - -typedef struct _DDHAL_COLORCONTROLDATA -{ - LPDDRAWI_DIRECTDRAW_GBL lpDD; - LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface; - LPDDCOLORCONTROL lpColorData; - DWORD dwFlags; - HRESULT ddRVal; - LPDDHALCOLORCB_COLORCONTROL ColorControl; -} DDHAL_COLORCONTROLDATA; - -typedef struct _DDHAL_CREATEMOCOMPDATA -{ - LPDDRAWI_DIRECTDRAW_LCL lpDD; - LPDDRAWI_DDMOTIONCOMP_LCL lpMoComp; - LPGUID lpGuid; - DWORD dwUncompWidth; - DWORD dwUncompHeight; - DDPIXELFORMAT ddUncompPixelFormat; - LPVOID lpData; - DWORD dwDataSize; - HRESULT ddRVal; - LPDDHALMOCOMPCB_CREATE CreateMoComp; -} DDHAL_CREATEMOCOMPDATA; - -typedef struct _DDHAL_DESTROYMOCOMPDATA -{ - LPDDRAWI_DIRECTDRAW_LCL lpDD; - LPDDRAWI_DDMOTIONCOMP_LCL lpMoComp; - HRESULT ddRVal; - LPDDHALMOCOMPCB_DESTROY DestroyMoComp; -} DDHAL_DESTROYMOCOMPDATA; - -typedef struct _DDHAL_ENDMOCOMPFRAMEDATA -{ - LPDDRAWI_DIRECTDRAW_LCL lpDD; - LPDDRAWI_DDMOTIONCOMP_LCL lpMoComp; - LPVOID lpInputData; - DWORD dwInputDataSize; - HRESULT ddRVal; - LPDDHALMOCOMPCB_ENDFRAME EndMoCompFrame; -} DDHAL_ENDMOCOMPFRAMEDATA; - -typedef struct _DDHAL_FLIPTOGDISURFACEDATA -{ - LPDDRAWI_DIRECTDRAW_GBL lpDD; - DWORD dwToGDI; - DWORD dwReserved; - HRESULT ddRVal; - LPDDHAL_FLIPTOGDISURFACE FlipToGDISurface; -} DDHAL_FLIPTOGDISURFACEDATA; - -typedef struct _DDHAL_GETAVAILDRIVERMEMORYDATA -{ - LPDDRAWI_DIRECTDRAW_GBL lpDD; - DDSCAPS DDSCaps; - DWORD dwTotal; - DWORD dwFree; - HRESULT ddRVal; - LPDDHAL_GETAVAILDRIVERMEMORY GetAvailDriverMemory; - DDSCAPSEX ddsCapsEx; - -} DDHAL_GETAVAILDRIVERMEMORYDATA; - -typedef struct _DDHAL_GETBLTSTATUSDATA -{ - LPDDRAWI_DIRECTDRAW_GBL lpDD; - LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface; - DWORD dwFlags; - HRESULT ddRVal; - LPDDHALSURFCB_GETBLTSTATUS GetBltStatus; -} DDHAL_GETBLTSTATUSDATA; - -typedef struct _DDHAL_GETFLIPSTATUSDATA -{ - LPDDRAWI_DIRECTDRAW_GBL lpDD; - LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface; - DWORD dwFlags; - HRESULT ddRVal; - LPDDHALSURFCB_GETFLIPSTATUS GetFlipStatus; -} DDHAL_GETFLIPSTATUSDATA; - -typedef struct _DDHAL_GETINTERNALMOCOMPDATA -{ - LPDDRAWI_DIRECTDRAW_LCL lpDD; - LPGUID lpGuid; - DWORD dwWidth; - DWORD dwHeight; - DDPIXELFORMAT ddPixelFormat; - DWORD dwScratchMemAlloc; - HRESULT ddRVal; - LPDDHALMOCOMPCB_GETINTERNALINFO GetInternalMoCompInfo; -} DDHAL_GETINTERNALMOCOMPDATA; - -typedef struct _DDHAL_GETMOCOMPCOMPBUFFDATA -{ - LPDDRAWI_DIRECTDRAW_LCL lpDD; - LPGUID lpGuid; - DWORD dwWidth; - DWORD dwHeight; - DDPIXELFORMAT ddPixelFormat; - DWORD dwNumTypesCompBuffs; - LPDDMCCOMPBUFFERINFO lpCompBuffInfo; - HRESULT ddRVal; - LPDDHALMOCOMPCB_GETCOMPBUFFINFO GetMoCompBuffInfo; -} DDHAL_GETMOCOMPCOMPBUFFDATA; - -typedef struct _DDHAL_GETMOCOMPGUIDSDATA -{ - LPDDRAWI_DIRECTDRAW_LCL lpDD; - DWORD dwNumGuids; - LPGUID lpGuids; - HRESULT ddRVal; - LPDDHALMOCOMPCB_GETGUIDS GetMoCompGuids; -} DDHAL_GETMOCOMPGUIDSDATA; - -typedef struct _DDHAL_GETMOCOMPFORMATSDATA -{ - LPDDRAWI_DIRECTDRAW_LCL lpDD; - LPGUID lpGuid; - DWORD dwNumFormats; - LPDDPIXELFORMAT lpFormats; - HRESULT ddRVal; - LPDDHALMOCOMPCB_GETFORMATS GetMoCompFormats; -} DDHAL_GETMOCOMPFORMATSDATA; - -typedef struct _DDHAL_GETSCANLINEDATA -{ - LPDDRAWI_DIRECTDRAW_GBL lpDD; - DWORD dwScanLine; - HRESULT ddRVal; - LPDDHAL_GETSCANLINE GetScanLine; -} DDHAL_GETSCANLINEDATA; - -typedef struct _DDHAL_QUERYMOCOMPSTATUSDATA -{ - LPDDRAWI_DIRECTDRAW_LCL lpDD; - LPDDRAWI_DDMOTIONCOMP_LCL lpMoComp; - LPDDRAWI_DDRAWSURFACE_LCL lpSurface; - DWORD dwFlags; - HRESULT ddRVal; - LPDDHALMOCOMPCB_QUERYSTATUS QueryMoCompStatus; -} DDHAL_QUERYMOCOMPSTATUSDATA; - -typedef struct _DDHAL_RENDERMOCOMPDATA -{ - LPDDRAWI_DIRECTDRAW_LCL lpDD; - LPDDRAWI_DDMOTIONCOMP_LCL lpMoComp; - DWORD dwNumBuffers; - LPDDMCBUFFERINFO lpBufferInfo; - DWORD dwFunction; - LPVOID lpInputData; - DWORD dwInputDataSize; - LPVOID lpOutputData; - DWORD dwOutputDataSize; - HRESULT ddRVal; - LPDDHALMOCOMPCB_RENDER RenderMoComp; -} DDHAL_RENDERMOCOMPDATA; - -typedef struct _DDHAL_SETCOLORKEYDATA -{ - LPDDRAWI_DIRECTDRAW_GBL lpDD; - LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface; - DWORD dwFlags; - DDCOLORKEY ckNew; - HRESULT ddRVal; - LPDDHALSURFCB_SETCOLORKEY SetColorKey; -} DDHAL_SETCOLORKEYDATA; - -typedef struct _DDHAL_SETOVERLAYPOSITIONDATA -{ - LPDDRAWI_DIRECTDRAW_GBL lpDD; - LPDDRAWI_DDRAWSURFACE_LCL lpDDSrcSurface; - LPDDRAWI_DDRAWSURFACE_LCL lpDDDestSurface; - LONG lXPos; - LONG lYPos; - HRESULT ddRVal; - LPDDHALSURFCB_SETOVERLAYPOSITION SetOverlayPosition; -} DDHAL_SETOVERLAYPOSITIONDATA; - -typedef struct _DDHAL_UPDATEOVERLAYDATA -{ - LPDDRAWI_DIRECTDRAW_GBL lpDD; - LPDDRAWI_DDRAWSURFACE_LCL lpDDDestSurface; - RECTL rDest; - LPDDRAWI_DDRAWSURFACE_LCL lpDDSrcSurface; - RECTL rSrc; - DWORD dwFlags; - DDOVERLAYFX overlayFX; - HRESULT ddRVal; - LPDDHALSURFCB_UPDATEOVERLAY UpdateOverlay; -} DDHAL_UPDATEOVERLAYDATA; - -typedef struct _DDHAL_WAITFORVERTICALBLANKDATA -{ - LPDDRAWI_DIRECTDRAW_GBL lpDD; - DWORD dwFlags; - DWORD bIsInVB; - ULONG_PTR hEvent; - HRESULT ddRVal; - LPDDHAL_WAITFORVERTICALBLANK WaitForVerticalBlank; -} DDHAL_WAITFORVERTICALBLANKDATA; - -typedef struct _DDHAL_DRVSETCOLORKEYDATA -{ - LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface; - DWORD dwFlags; - DDCOLORKEY ckNew; - HRESULT ddRVal; - LPDDHAL_SETCOLORKEY SetColorKey; -} DDHAL_DRVSETCOLORKEYDATA; - -typedef struct _DDMONITORINFO -{ - WORD Manufacturer; - WORD Product; - DWORD SerialNumber; - GUID DeviceIdentifier; - int Mode640x480; - int Mode800x600; - int Mode1024x768; - int Mode1280x1024; - int Mode1600x1200; - int ModeReserved1; - int ModeReserved2; - int ModeReserved3; -} DDMONITORINFO, FAR *LPDDMONITORINFO; - -typedef struct _DDRAWI_DDRAWCLIPPER_INT -{ - LPVOID lpVtbl; - LPDDRAWI_DDRAWCLIPPER_LCL lpLcl; - LPDDRAWI_DDRAWCLIPPER_INT lpLink; - DWORD dwIntRefCnt; -} DDRAWI_DDRAWCLIPPER_INT; - -typedef struct _DDHAL_UPDATENONLOCALHEAPDATA -{ - LPDDRAWI_DIRECTDRAW_GBL lpDD; - DWORD dwHeap; - FLATPTR fpGARTLin; - FLATPTR fpGARTDev; - ULONG_PTR ulPolicyMaxBytes; - HRESULT ddRVal; - LPDDHAL_UPDATENONLOCALHEAP UpdateNonLocalHeap; -} DDHAL_UPDATENONLOCALHEAPDATA; - -typedef struct _DDHAL_SETCLIPLISTDATA -{ - LPDDRAWI_DIRECTDRAW_GBL lpDD; - LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface; - HRESULT ddRVal; - LPDDHALSURFCB_SETCLIPLIST SetClipList; -} DDHAL_SETCLIPLISTDATA; - -typedef struct _DDRAWI_DDMOTIONCOMP_LCL -{ - LPDDRAWI_DIRECTDRAW_LCL lpDD; - GUID guid; - DWORD dwUncompWidth; - DWORD dwUncompHeight; - DDPIXELFORMAT ddUncompPixelFormat; - DWORD dwInternalFlags; - DWORD dwRefCnt; - DWORD dwProcessId; - HANDLE hMoComp; - DWORD dwDriverReserved1; - DWORD dwDriverReserved2; - DWORD dwDriverReserved3; - LPVOID lpDriverReserved1; - LPVOID lpDriverReserved2; - LPVOID lpDriverReserved3; -} DDRAWI_DDMOTIONCOMP_LCL; - -typedef struct _DDRAWI_DDMOTIONCOMP_INT -{ - LPVOID lpVtbl; - LPDDRAWI_DDMOTIONCOMP_LCL lpLcl; - LPDDRAWI_DDMOTIONCOMP_INT lpLink; - DWORD dwIntRefCnt; -} DDRAWI_DDMOTIONCOMP_INT; - - -typedef struct _DDRAWI_DDVIDEOPORT_LCL -{ - LPDDRAWI_DIRECTDRAW_LCL lpDD; - DDVIDEOPORTDESC ddvpDesc; - DDVIDEOPORTINFO ddvpInfo; - LPDDRAWI_DDRAWSURFACE_INT lpSurface; - LPDDRAWI_DDRAWSURFACE_INT lpVBISurface; - LPDDRAWI_DDRAWSURFACE_INT *lpFlipInts; - DWORD dwNumAutoflip; - DWORD dwProcessID; - DWORD dwStateFlags; - DWORD dwFlags; - DWORD dwRefCnt; - FLATPTR fpLastFlip; - ULONG_PTR dwReserved1; - ULONG_PTR dwReserved2; - HANDLE hDDVideoPort; - DWORD dwNumVBIAutoflip; - LPDDVIDEOPORTDESC lpVBIDesc; - LPDDVIDEOPORTDESC lpVideoDesc; - LPDDVIDEOPORTINFO lpVBIInfo; - LPDDVIDEOPORTINFO lpVideoInfo; - DWORD dwVBIProcessID; - LPDDRAWI_DDVIDEOPORT_INT lpVPNotify; -} DDRAWI_DDVIDEOPORT_LCL; - - -typedef struct _DDRAWI_DDVIDEOPORT_INT -{ - LPVOID lpVtbl; - LPDDRAWI_DDVIDEOPORT_LCL lpLcl; - LPDDRAWI_DDVIDEOPORT_INT lpLink; - DWORD dwIntRefCnt; - DWORD dwFlags; -} DDRAWI_DDVIDEOPORT_INT; - - -typedef struct _DDRAWI_DDRAWCLIPPER_LCL -{ - DWORD lpClipMore; - LPDDRAWI_DDRAWCLIPPER_GBL lpGbl; - LPDDRAWI_DIRECTDRAW_LCL lpDD_lcl; - DWORD dwLocalRefCnt; -#ifndef _NO_COM - IUnknown *pUnkOuter; -#else - PVOID *pUnkOuter; -#endif - LPDDRAWI_DIRECTDRAW_INT lpDD_int; - ULONG_PTR dwReserved1; -#ifndef _NO_COM - IUnknown * pAddrefedThisOwner; -#else - PVOID pAddrefedThisOwner; -#endif -} DDRAWI_DDRAWCLIPPER_LCL; - - - -typedef struct _DDRAWI_DDRAWCLIPPER_GBL -{ - DWORD dwRefCnt; - DWORD dwFlags; - LPDDRAWI_DIRECTDRAW_GBL lpDD; - DWORD dwProcessId; - ULONG_PTR dwReserved1; - ULONG_PTR hWnd; - LPRGNDATA lpStaticClipList; -} DDRAWI_DDRAWCLIPPER_GBL; - -typedef BOOL (PASCAL *LPDDHEL_INIT)(LPDDRAWI_DIRECTDRAW_GBL,BOOL); - -extern HRESULT DDAPI - LateAllocateSurfaceMem( - LPDIRECTDRAWSURFACE lpSurface, - DWORD dwPleaseAllocType, - DWORD dwWidthInBytesOrSize, - DWORD dwHeight); - - LPDIRECTDRAWSURFACE GetNextMipMap( - LPDIRECTDRAWSURFACE lpLevel); - - - -typedef struct IDirectDrawClipperVtbl DIRECTDRAWCLIPPERCALLBACKS; -typedef struct IDirectDrawPaletteVtbl DIRECTDRAWPALETTECALLBACKS; -typedef struct IDirectDrawSurfaceVtbl DIRECTDRAWSURFACECALLBACKS; -typedef struct IDirectDrawSurface2Vtbl DIRECTDRAWSURFACE2CALLBACKS; -typedef struct IDirectDrawSurface3Vtbl DIRECTDRAWSURFACE3CALLBACKS; -typedef struct IDirectDrawSurface4Vtbl DIRECTDRAWSURFACE4CALLBACKS; -typedef struct IDirectDrawSurface7Vtbl DIRECTDRAWSURFACE7CALLBACKS; -typedef struct IDirectDrawColorControlVtbl DIRECTDRAWCOLORCONTROLCALLBACKS; -typedef struct IDirectDrawVtbl DIRECTDRAWCALLBACKS; -typedef struct IDirectDraw2Vtbl DIRECTDRAW2CALLBACKS; -typedef struct IDirectDraw4Vtbl DIRECTDRAW4CALLBACKS; -typedef struct IDirectDraw7Vtbl DIRECTDRAW7CALLBACKS; -typedef struct IDirectDrawKernelVtbl DIRECTDRAWKERNELCALLBACKS; -typedef struct IDirectDrawSurfaceKernelVtbl DIRECTDRAWSURFACEKERNELCALLBACKS; -typedef struct IDirectDrawGammaControlVtbl DIRECTDRAWGAMMACONTROLCALLBACKS; - - -typedef DIRECTDRAWCLIPPERCALLBACKS *LPDIRECTDRAWCLIPPERCALLBACKS; -typedef DIRECTDRAWPALETTECALLBACKS *LPDIRECTDRAWPALETTECALLBACKS; -typedef DIRECTDRAWSURFACECALLBACKS *LPDIRECTDRAWSURFACECALLBACKS; -typedef DIRECTDRAWCALLBACKS *LPDIRECTDRAWCALLBACKS; - - -HRESULT CALLBACK - D3DParseUnknownCommand (LPVOID lpvCommands, - LPVOID *lplpvReturnedCommand); - -#ifdef __cplusplus - /* extern "C" */ -#endif - -#endif /* __DDRAWI_INCLUDED__ */ diff --git a/include/ddk/ddrawint.h b/include/ddk/ddrawint.h deleted file mode 100644 index b78c209bc9d..00000000000 --- a/include/ddk/ddrawint.h +++ /dev/null @@ -1,1475 +0,0 @@ -/* - * DirectDraw NT driver interface - */ - -#ifndef __DD_INCLUDED__ -#define __DD_INCLUDED__ - -/* Helper macro to enable gcc's extension. */ -#ifndef __GNU_EXTENSION -#ifdef __GNUC__ -#define __GNU_EXTENSION __extension__ -#else -#define __GNU_EXTENSION -#endif -#endif - -DEFINE_GUID( GUID_MiscellaneousCallbacks, 0xEFD60CC0, 0x49e7, 0x11d0, 0x88, 0x9d, 0x0, 0xaa, 0x0, 0xbb, 0xb7, 0x6a); -DEFINE_GUID( GUID_Miscellaneous2Callbacks, 0x406B2F00, 0x3E5A, 0x11D1, 0xB6, 0x40, 0x00, 0xAA, 0x00, 0xA1, 0xF9, 0x6A); -DEFINE_GUID( GUID_VideoPortCallbacks, 0xefd60cc1, 0x49e7, 0x11d0, 0x88, 0x9d, 0x0, 0xaa, 0x0, 0xbb, 0xb7, 0x6a); -DEFINE_GUID( GUID_ColorControlCallbacks, 0xefd60cc2, 0x49e7, 0x11d0, 0x88, 0x9d, 0x0, 0xaa, 0x0, 0xbb, 0xb7, 0x6a); -DEFINE_GUID( GUID_MotionCompCallbacks, 0xb1122b40, 0x5dA5, 0x11d1, 0x8f, 0xcF, 0x00, 0xc0, 0x4f, 0xc2, 0x9b, 0x4e); -DEFINE_GUID( GUID_VideoPortCaps, 0xefd60cc3, 0x49e7, 0x11d0, 0x88, 0x9d, 0x0, 0xaa, 0x0, 0xbb, 0xb7, 0x6a); -DEFINE_GUID( GUID_D3DCaps, 0x7bf06991, 0x8794, 0x11d0, 0x91, 0x39, 0x08, 0x00, 0x36, 0xd2, 0xef, 0x02); -DEFINE_GUID( GUID_D3DExtendedCaps, 0x7de41f80, 0x9d93, 0x11d0, 0x89, 0xab, 0x00, 0xa0, 0xc9, 0x05, 0x41, 0x29); -DEFINE_GUID( GUID_D3DCallbacks, 0x7bf06990, 0x8794, 0x11d0, 0x91, 0x39, 0x08, 0x00, 0x36, 0xd2, 0xef, 0x02); -DEFINE_GUID( GUID_D3DCallbacks2, 0xba584e1, 0x70b6, 0x11d0, 0x88, 0x9d, 0x0, 0xaa, 0x0, 0xbb, 0xb7, 0x6a); -DEFINE_GUID( GUID_D3DCallbacks3, 0xddf41230, 0xec0a, 0x11d0, 0xa9, 0xb6, 0x00, 0xaa, 0x00, 0xc0, 0x99, 0x3e); -DEFINE_GUID( GUID_NonLocalVidMemCaps, 0x86c4fa80, 0x8d84, 0x11d0, 0x94, 0xe8, 0x00, 0xc0, 0x4f, 0xc3, 0x41, 0x37); -DEFINE_GUID( GUID_KernelCallbacks, 0x80863800, 0x6B06, 0x11D0, 0x9B, 0x06, 0x0, 0xA0, 0xC9, 0x03, 0xA3, 0xB8); -DEFINE_GUID( GUID_KernelCaps, 0xFFAA7540, 0x7AA8, 0x11D0, 0x9B, 0x06, 0x00, 0xA0, 0xC9, 0x03, 0xA3, 0xB8); -DEFINE_GUID( GUID_ZPixelFormats, 0x93869880, 0x36cf, 0x11d1, 0x9b, 0x1b, 0x0, 0xaa, 0x0, 0xbb, 0xb8, 0xae); -DEFINE_GUID( GUID_DDMoreCaps, 0x880baf30, 0xb030, 0x11d0, 0x8e, 0xa7, 0x00, 0x60, 0x97, 0x97, 0xea, 0x5b); -DEFINE_GUID( GUID_D3DParseUnknownCommandCallback, 0x2e04ffa0, 0x98e4, 0x11d1, 0x8c, 0xe1, 0x0, 0xa0, 0xc9, 0x6, 0x29, 0xa8); -DEFINE_GUID( GUID_NTCallbacks, 0x6fe9ecde, 0xdf89, 0x11d1, 0x9d, 0xb0, 0x00, 0x60, 0x08, 0x27, 0x71, 0xba); -DEFINE_GUID( GUID_DDMoreSurfaceCaps, 0x3b8a0466, 0xf269, 0x11d1, 0x88, 0x0b, 0x0, 0xc0, 0x4f, 0xd9, 0x30, 0xc5); -DEFINE_GUID( GUID_GetHeapAlignment, 0x42e02f16, 0x7b41, 0x11d2, 0x8b, 0xff, 0x0, 0xa0, 0xc9, 0x83, 0xea, 0xf6); -DEFINE_GUID( GUID_UpdateNonLocalHeap, 0x42e02f17, 0x7b41, 0x11d2, 0x8b, 0xff, 0x0, 0xa0, 0xc9, 0x83, 0xea, 0xf6); -DEFINE_GUID( GUID_NTPrivateDriverCaps, 0xfad16a23, 0x7b66, 0x11d2, 0x83, 0xd7, 0x0, 0xc0, 0x4f, 0x7c, 0xe5, 0x8c); -DEFINE_GUID( GUID_DDStereoMode, 0xf828169c, 0xa8e8, 0x11d2, 0xa1, 0xf2, 0x0, 0xa0, 0xc9, 0x83, 0xea, 0xf6); -DEFINE_GUID( GUID_VPE2Callbacks, 0x52882147, 0x2d47, 0x469a, 0xa0, 0xd1, 0x3, 0x45, 0x58, 0x90, 0xf6, 0xc8); - - -#ifndef GUID_DEFS_ONLY - -#ifndef _NO_DDRAWINT_NO_COM -#ifndef _NO_COM -#define _NO_COM -#include -#include -#undef _NO_COM -#else -#include -#include -#endif -#else -#include -#include -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef MAKE_HRESULT // fixme this if statment should not be here, but MAKE_HRESULT should be here -#define MAKE_HRESULT(sev,fac,code) ((HRESULT) (((unsigned long)(sev)<<31) | ((unsigned long)(fac)<<16) | ((unsigned long)(code))) ) -#endif - -#ifndef FLATPTR_DEFINED -typedef ULONG_PTR FLATPTR; -#define FLATPTR_DEFINED -#endif - -typedef struct _DD_VIDEOPORT_LOCAL *PDD_VIDEOPORT_LOCAL; - -/************************************************************************/ -/* _DD_GETHEAPALIGNMENTDATA is defined in dmemmgr.h */ - /************************************************************************/ -struct _DD_GETHEAPALIGNMENTDATA; -#ifndef DD_GETHEAPALIGNMENTDATA_DECLARED -typedef struct _DD_GETHEAPALIGNMENTDATA *PDD_GETHEAPALIGNMENTDATA; -#define DD_GETHEAPALIGNMENTDATA_DECLARED -#endif - -/************************************************************************/ -/* Video memory info structures */ -/************************************************************************/ - -typedef struct _VIDEOMEMORY -{ - DWORD dwFlags; - FLATPTR fpStart; - __GNU_EXTENSION union - { - FLATPTR fpEnd; - DWORD dwWidth; - }; - DDSCAPS ddsCaps; - DDSCAPS ddsCapsAlt; - __GNU_EXTENSION union - { - struct _VMEMHEAP *lpHeap; - DWORD dwHeight; - }; -} VIDEOMEMORY, *PVIDEOMEMORY; - -typedef struct _VIDEOMEMORYINFO -{ - FLATPTR fpPrimary; - DWORD dwFlags; - DWORD dwDisplayWidth; - DWORD dwDisplayHeight; - LONG lDisplayPitch; - DDPIXELFORMAT ddpfDisplay; - DWORD dwOffscreenAlign; - DWORD dwOverlayAlign; - DWORD dwTextureAlign; - DWORD dwZBufferAlign; - DWORD dwAlphaAlign; - PVOID pvPrimary; -} VIDEOMEMORYINFO; -typedef VIDEOMEMORYINFO *LPVIDEOMEMORYINFO; - -typedef struct _DD_DIRECTDRAW_GLOBAL -{ - PVOID dhpdev; - ULONG_PTR dwReserved1; - ULONG_PTR dwReserved2; - LPDDVIDEOPORTCAPS lpDDVideoPortCaps; -} DD_DIRECTDRAW_GLOBAL, *PDD_DIRECTDRAW_GLOBAL; - -typedef struct _DD_DIRECTDRAW_LOCAL -{ - PDD_DIRECTDRAW_GLOBAL lpGbl; -} DD_DIRECTDRAW_LOCAL, *PDD_DIRECTDRAW_LOCAL; - - -typedef struct _DD_SURFACE_GLOBAL -{ - __GNU_EXTENSION union - { - DWORD dwBlockSizeY; - LONG lSlicePitch; - }; - - __GNU_EXTENSION union - { - PVIDEOMEMORY lpVidMemHeap; - DWORD dwBlockSizeX; - DWORD dwUserMemSize; - }; - - FLATPTR fpVidMem; - __GNU_EXTENSION union - { - LONG lPitch; - DWORD dwLinearSize; - }; - LONG yHint; - LONG xHint; - DWORD wHeight; - DWORD wWidth; - ULONG_PTR dwReserved1; - DDPIXELFORMAT ddpfSurface; - FLATPTR fpHeapOffset; - HANDLE hCreatorProcess; -} DD_SURFACE_GLOBAL, *PDD_SURFACE_GLOBAL; - -typedef struct _DD_SURFACE_MORE -{ - DWORD dwMipMapCount; - PDD_VIDEOPORT_LOCAL lpVideoPort; - DWORD dwOverlayFlags; - DDSCAPSEX ddsCapsEx; - DWORD dwSurfaceHandle; -} DD_SURFACE_MORE, *PDD_SURFACE_MORE; - -typedef struct _DD_ATTACHLIST *PDD_ATTACHLIST; - -typedef struct _DD_SURFACE_LOCAL -{ - PDD_SURFACE_GLOBAL lpGbl; - DWORD dwFlags; - DDSCAPS ddsCaps; - ULONG_PTR dwReserved1; - __GNU_EXTENSION union - { - DDCOLORKEY ddckCKSrcOverlay; - DDCOLORKEY ddckCKSrcBlt; - }; - __GNU_EXTENSION union - { - DDCOLORKEY ddckCKDestOverlay; - DDCOLORKEY ddckCKDestBlt; - }; - PDD_SURFACE_MORE lpSurfMore; - PDD_ATTACHLIST lpAttachList; - PDD_ATTACHLIST lpAttachListFrom; - RECT rcOverlaySrc; -} DD_SURFACE_LOCAL, *PDD_SURFACE_LOCAL; - -typedef struct _DD_ATTACHLIST -{ - PDD_ATTACHLIST lpLink; - PDD_SURFACE_LOCAL lpAttached; -} DD_ATTACHLIST; - -typedef struct _DD_SURFACE_INT -{ - PDD_SURFACE_LOCAL lpLcl; -} DD_SURFACE_INT, *PDD_SURFACE_INT; - -/************************************************************************/ -/* DDI representation of the DirectDrawPalette object */ -/************************************************************************/ - -typedef struct _DD_PALETTE_GLOBAL -{ - ULONG_PTR Reserved1; -} DD_PALETTE_GLOBAL, *PDD_PALETTE_GLOBAL; - -/************************************************************************/ -/* DDI representation of the DirectDrawVideo object */ -/************************************************************************/ - -typedef struct -{ - PDD_DIRECTDRAW_LOCAL lpDD; - GUID guid; - DWORD dwUncompWidth; - DWORD dwUncompHeight; - DDPIXELFORMAT ddUncompPixelFormat; - DWORD dwDriverReserved1; - DWORD dwDriverReserved2; - DWORD dwDriverReserved3; - LPVOID lpDriverReserved1; - LPVOID lpDriverReserved2; - LPVOID lpDriverReserved3; -} DD_MOTIONCOMP_LOCAL, *PDD_MOTIONCOMP_LOCAL; - - -typedef struct _DD_VIDEOPORT_LOCAL -{ - PDD_DIRECTDRAW_LOCAL lpDD; - DDVIDEOPORTDESC ddvpDesc; - DDVIDEOPORTINFO ddvpInfo; - PDD_SURFACE_INT lpSurface; - PDD_SURFACE_INT lpVBISurface; - DWORD dwNumAutoflip; - DWORD dwNumVBIAutoflip; - ULONG_PTR dwReserved1; - ULONG_PTR dwReserved2; - ULONG_PTR dwReserved3; -} DD_VIDEOPORT_LOCAL ; - -/************************************************************************/ -/* IDirectDrawSurface callbacks */ -/************************************************************************/ - -typedef struct _DD_LOCKDATA -{ - PDD_DIRECTDRAW_GLOBAL lpDD; - PDD_SURFACE_LOCAL lpDDSurface; - DWORD bHasRect; - RECTL rArea; - LPVOID lpSurfData; - HRESULT ddRVal; - PVOID Lock; - DWORD dwFlags; - FLATPTR fpProcess; -} DD_LOCKDATA, *PDD_LOCKDATA; -typedef DWORD (WINAPI *PDD_SURFCB_LOCK)(PDD_LOCKDATA); - - -typedef struct _DD_UNLOCKDATA -{ - PDD_DIRECTDRAW_GLOBAL lpDD; - PDD_SURFACE_LOCAL lpDDSurface; - HRESULT ddRVal; - PVOID Unlock; -} DD_UNLOCKDATA, *PDD_UNLOCKDATA; -typedef DWORD (WINAPI *PDD_SURFCB_UNLOCK)(PDD_UNLOCKDATA); - -#define DDABLT_SRCOVERDEST 0x00000001 -#define DDBLT_AFLAGS 0x80000000 - - - -typedef struct _DD_BLTDATA -{ - PDD_DIRECTDRAW_GLOBAL lpDD; - PDD_SURFACE_LOCAL lpDDDestSurface; - RECTL rDest; - PDD_SURFACE_LOCAL lpDDSrcSurface; - RECTL rSrc; - DWORD dwFlags; - DWORD dwROPFlags; - DDBLTFX bltFX; - HRESULT ddRVal; - PVOID Blt; - BOOL IsClipped; - RECTL rOrigDest; - RECTL rOrigSrc; - DWORD dwRectCnt; - LPRECT prDestRects; - DWORD dwAFlags; - DDARGB ddargbScaleFactors; -} DD_BLTDATA, *PDD_BLTDATA; -typedef DWORD (WINAPI *PDD_SURFCB_BLT)(PDD_BLTDATA); - -typedef struct _DD_UPDATEOVERLAYDATA -{ - PDD_DIRECTDRAW_GLOBAL lpDD; - PDD_SURFACE_LOCAL lpDDDestSurface; - RECTL rDest; - PDD_SURFACE_LOCAL lpDDSrcSurface; - RECTL rSrc; - DWORD dwFlags; - DDOVERLAYFX overlayFX; - HRESULT ddRVal; - PVOID UpdateOverlay; -} DD_UPDATEOVERLAYDATA, *PDD_UPDATEOVERLAYDATA; -typedef DWORD (WINAPI *PDD_SURFCB_UPDATEOVERLAY)(PDD_UPDATEOVERLAYDATA); - -typedef struct _DD_SETOVERLAYPOSITIONDATA -{ - PDD_DIRECTDRAW_GLOBAL lpDD; - PDD_SURFACE_LOCAL lpDDSrcSurface; - PDD_SURFACE_LOCAL lpDDDestSurface; - LONG lXPos; - LONG lYPos; - HRESULT ddRVal; - PVOID SetOverlayPosition; -} DD_SETOVERLAYPOSITIONDATA, *PDD_SETOVERLAYPOSITIONDATA; -typedef DWORD (WINAPI *PDD_SURFCB_SETOVERLAYPOSITION)(PDD_SETOVERLAYPOSITIONDATA); - -typedef struct _DD_SETPALETTEDATA -{ - PDD_DIRECTDRAW_GLOBAL lpDD; - PDD_SURFACE_LOCAL lpDDSurface; - PDD_PALETTE_GLOBAL lpDDPalette; - HRESULT ddRVal; - PVOID SetPalette; - BOOL Attach; -} DD_SETPALETTEDATA, *PDD_SETPALETTEDATA; -typedef DWORD (WINAPI *PDD_SURFCB_SETPALETTE)(PDD_SETPALETTEDATA); - -typedef struct _DD_FLIPDATA -{ - PDD_DIRECTDRAW_GLOBAL lpDD; - PDD_SURFACE_LOCAL lpSurfCurr; - PDD_SURFACE_LOCAL lpSurfTarg; - DWORD dwFlags; - HRESULT ddRVal; - PVOID Flip; - PDD_SURFACE_LOCAL lpSurfCurrLeft; - PDD_SURFACE_LOCAL lpSurfTargLeft; -} DD_FLIPDATA, *PDD_FLIPDATA; -typedef DWORD (WINAPI *PDD_SURFCB_FLIP)(PDD_FLIPDATA); - -typedef struct _DD_DESTROYSURFACEDATA -{ - PDD_DIRECTDRAW_GLOBAL lpDD; - PDD_SURFACE_LOCAL lpDDSurface; - HRESULT ddRVal; - PVOID DestroySurface; -} DD_DESTROYSURFACEDATA, *PDD_DESTROYSURFACEDATA; -typedef DWORD (WINAPI *PDD_SURFCB_DESTROYSURFACE)(PDD_DESTROYSURFACEDATA); - -typedef struct _DD_SETCLIPLISTDATA -{ - PDD_DIRECTDRAW_GLOBAL lpDD; - PDD_SURFACE_LOCAL lpDDSurface; - HRESULT ddRVal; - PVOID SetClipList; -} DD_SETCLIPLISTDATA, *PDD_SETCLIPLISTDATA; -typedef DWORD (WINAPI *PDD_SURFCB_SETCLIPLIST)(PDD_SETCLIPLISTDATA); - -typedef struct _DD_ADDATTACHEDSURFACEDATA -{ - PDD_DIRECTDRAW_GLOBAL lpDD; - PDD_SURFACE_LOCAL lpDDSurface; - PDD_SURFACE_LOCAL lpSurfAttached; - HRESULT ddRVal; - PVOID AddAttachedSurface; -} DD_ADDATTACHEDSURFACEDATA, *PDD_ADDATTACHEDSURFACEDATA; -typedef DWORD (WINAPI *PDD_SURFCB_ADDATTACHEDSURFACE)(PDD_ADDATTACHEDSURFACEDATA); - -typedef struct _DD_SETCOLORKEYDATA -{ - PDD_DIRECTDRAW_GLOBAL lpDD; - PDD_SURFACE_LOCAL lpDDSurface; - DWORD dwFlags; - DDCOLORKEY ckNew; - HRESULT ddRVal; - PVOID SetColorKey; -} DD_SETCOLORKEYDATA, *PDD_SETCOLORKEYDATA; -typedef DWORD (WINAPI *PDD_SURFCB_SETCOLORKEY)(PDD_SETCOLORKEYDATA); - -typedef struct _DD_GETBLTSTATUSDATA -{ - PDD_DIRECTDRAW_GLOBAL lpDD; - PDD_SURFACE_LOCAL lpDDSurface; - DWORD dwFlags; - HRESULT ddRVal; - PVOID GetBltStatus; -} DD_GETBLTSTATUSDATA, *PDD_GETBLTSTATUSDATA; -typedef DWORD (WINAPI *PDD_SURFCB_GETBLTSTATUS)(PDD_GETBLTSTATUSDATA); - -typedef struct _DD_GETFLIPSTATUSDATA -{ - PDD_DIRECTDRAW_GLOBAL lpDD; - PDD_SURFACE_LOCAL lpDDSurface; - DWORD dwFlags; - HRESULT ddRVal; - PVOID GetFlipStatus; -} DD_GETFLIPSTATUSDATA, *PDD_GETFLIPSTATUSDATA; -typedef DWORD (WINAPI *PDD_SURFCB_GETFLIPSTATUS)(PDD_GETFLIPSTATUSDATA); - -typedef struct DD_SURFACECALLBACKS -{ - DWORD dwSize; - DWORD dwFlags; - PDD_SURFCB_DESTROYSURFACE DestroySurface; - PDD_SURFCB_FLIP Flip; - PDD_SURFCB_SETCLIPLIST SetClipList; - PDD_SURFCB_LOCK Lock; - PDD_SURFCB_UNLOCK Unlock; - PDD_SURFCB_BLT Blt; - PDD_SURFCB_SETCOLORKEY SetColorKey; - PDD_SURFCB_ADDATTACHEDSURFACE AddAttachedSurface; - PDD_SURFCB_GETBLTSTATUS GetBltStatus; - PDD_SURFCB_GETFLIPSTATUS GetFlipStatus; - PDD_SURFCB_UPDATEOVERLAY UpdateOverlay; - PDD_SURFCB_SETOVERLAYPOSITION SetOverlayPosition; - PVOID reserved4; - PDD_SURFCB_SETPALETTE SetPalette; -} DD_SURFACECALLBACKS, *PDD_SURFACECALLBACKS; - - -#define DDHAL_SURFCB32_DESTROYSURFACE 0x00000001 -#define DDHAL_SURFCB32_FLIP 0x00000002 -#define DDHAL_SURFCB32_SETCLIPLIST 0x00000004 -#define DDHAL_SURFCB32_LOCK 0x00000008 -#define DDHAL_SURFCB32_UNLOCK 0x00000010 -#define DDHAL_SURFCB32_BLT 0x00000020 -#define DDHAL_SURFCB32_SETCOLORKEY 0x00000040 -#define DDHAL_SURFCB32_ADDATTACHEDSURFACE 0x00000080 -#define DDHAL_SURFCB32_GETBLTSTATUS 0x00000100 -#define DDHAL_SURFCB32_GETFLIPSTATUS 0x00000200 -#define DDHAL_SURFCB32_UPDATEOVERLAY 0x00000400 -#define DDHAL_SURFCB32_SETOVERLAYPOSITION 0x00000800 -#define DDHAL_SURFCB32_RESERVED4 0x00001000 -#define DDHAL_SURFCB32_SETPALETTE 0x00002000 -/************************************************************************/ -/* IDirectDraw callbacks */ -/************************************************************************/ - -typedef struct _DD_CREATESURFACEDATA -{ - PDD_DIRECTDRAW_GLOBAL lpDD; - DDSURFACEDESC *lpDDSurfaceDesc; - PDD_SURFACE_LOCAL *lplpSList; - DWORD dwSCnt; - HRESULT ddRVal; - PVOID CreateSurface; -} DD_CREATESURFACEDATA, *PDD_CREATESURFACEDATA; -typedef DWORD (WINAPI *PDD_CREATESURFACE)(PDD_CREATESURFACEDATA); - -typedef struct _DD_DRVSETCOLORKEYDATA -{ - PDD_SURFACE_LOCAL lpDDSurface; - DWORD dwFlags; - DDCOLORKEY ckNew; - HRESULT ddRVal; - PVOID SetColorKey; -} DD_DRVSETCOLORKEYDATA, *PDD_DRVSETCOLORKEYDATA; -typedef DWORD (WINAPI *PDD_SETCOLORKEY)(PDD_DRVSETCOLORKEYDATA); - -#define DDWAITVB_I_TESTVB 0x80000006 - -typedef struct _DD_WAITFORVERTICALBLANKDATA -{ - PDD_DIRECTDRAW_GLOBAL lpDD; - DWORD dwFlags; - DWORD bIsInVB; - DWORD hEvent; - HRESULT ddRVal; - PVOID WaitForVerticalBlank; -} DD_WAITFORVERTICALBLANKDATA, *PDD_WAITFORVERTICALBLANKDATA; -typedef DWORD (WINAPI *PDD_WAITFORVERTICALBLANK)(PDD_WAITFORVERTICALBLANKDATA); - -typedef struct _DD_CANCREATESURFACEDATA -{ - PDD_DIRECTDRAW_GLOBAL lpDD; - DDSURFACEDESC *lpDDSurfaceDesc; - DWORD bIsDifferentPixelFormat; - HRESULT ddRVal; - PVOID CanCreateSurface; -} DD_CANCREATESURFACEDATA, *PDD_CANCREATESURFACEDATA; -typedef DWORD (WINAPI *PDD_CANCREATESURFACE)(PDD_CANCREATESURFACEDATA); - -typedef struct _DD_CREATEPALETTEDATA -{ - PDD_DIRECTDRAW_GLOBAL lpDD; - PDD_PALETTE_GLOBAL lpDDPalette; - LPPALETTEENTRY lpColorTable; - HRESULT ddRVal; - PVOID CreatePalette; - BOOL is_excl; -} DD_CREATEPALETTEDATA, *PDD_CREATEPALETTEDATA; -typedef DWORD (WINAPI *PDD_CREATEPALETTE)(PDD_CREATEPALETTEDATA); - -typedef struct _DD_GETSCANLINEDATA -{ - PDD_DIRECTDRAW_GLOBAL lpDD; - DWORD dwScanLine; - HRESULT ddRVal; - PVOID GetScanLine; -} DD_GETSCANLINEDATA, *PDD_GETSCANLINEDATA; -typedef DWORD (WINAPI *PDD_GETSCANLINE)(PDD_GETSCANLINEDATA); - -typedef struct _DD_MAPMEMORYDATA -{ - PDD_DIRECTDRAW_GLOBAL lpDD; - BOOL bMap; - HANDLE hProcess; - FLATPTR fpProcess; - HRESULT ddRVal; -} DD_MAPMEMORYDATA, *PDD_MAPMEMORYDATA; -typedef DWORD (WINAPI *PDD_MAPMEMORY)(PDD_MAPMEMORYDATA); - - - - -typedef struct _DD_DESTROYDRIVERDATA *PDD_DESTROYDRIVERDATA; -typedef struct _DD_SETMODEDATA *PDD_SETMODEDATA; - -typedef DWORD (APIENTRY *PDD_DESTROYDRIVER)(PDD_DESTROYDRIVERDATA); -typedef DWORD (APIENTRY *PDD_SETMODE)(PDD_SETMODEDATA); - -typedef struct DD_CALLBACKS -{ - DWORD dwSize; - DWORD dwFlags; - PDD_DESTROYDRIVER DestroyDriver; - PDD_CREATESURFACE CreateSurface; - PDD_SETCOLORKEY SetColorKey; - PDD_SETMODE SetMode; - PDD_WAITFORVERTICALBLANK WaitForVerticalBlank; - PDD_CANCREATESURFACE CanCreateSurface; - PDD_CREATEPALETTE CreatePalette; - PDD_GETSCANLINE GetScanLine; - PDD_MAPMEMORY MapMemory; -} DD_CALLBACKS, *PDD_CALLBACKS; - - - -#define DDHAL_CB32_DESTROYDRIVER 0x00000001l -#define DDHAL_CB32_CREATESURFACE 0x00000002l -#define DDHAL_CB32_SETCOLORKEY 0x00000004l -#define DDHAL_CB32_SETMODE 0x00000008l -#define DDHAL_CB32_WAITFORVERTICALBLANK 0x00000010l -#define DDHAL_CB32_CANCREATESURFACE 0x00000020l -#define DDHAL_CB32_CREATEPALETTE 0x00000040l -#define DDHAL_CB32_GETSCANLINE 0x00000080l -#define DDHAL_CB32_MAPMEMORY 0x80000000l - -typedef struct _DD_GETAVAILDRIVERMEMORYDATA -{ - PDD_DIRECTDRAW_GLOBAL lpDD; - DDSCAPS DDSCaps; - DWORD dwTotal; - DWORD dwFree; - HRESULT ddRVal; - PVOID GetAvailDriverMemory; -} DD_GETAVAILDRIVERMEMORYDATA, *PDD_GETAVAILDRIVERMEMORYDATA; -typedef DWORD (WINAPI *PDD_GETAVAILDRIVERMEMORY)(PDD_GETAVAILDRIVERMEMORYDATA); - -typedef struct _DD_MISCELLANEOUSCALLBACKS -{ - DWORD dwSize; - DWORD dwFlags; - PDD_GETAVAILDRIVERMEMORY GetAvailDriverMemory; -} DD_MISCELLANEOUSCALLBACKS, *PDD_MISCELLANEOUSCALLBACKS; - -#define DDHAL_MISCCB32_GETAVAILDRIVERMEMORY 0x00000001 - -typedef DWORD (WINAPI *PDD_ALPHABLT)(PDD_BLTDATA); - -typedef struct _DD_CREATESURFACEEXDATA -{ - DWORD dwFlags; - PDD_DIRECTDRAW_LOCAL lpDDLcl; - PDD_SURFACE_LOCAL lpDDSLcl; - HRESULT ddRVal; -} DD_CREATESURFACEEXDATA, *PDD_CREATESURFACEEXDATA; -typedef DWORD (WINAPI *PDD_CREATESURFACEEX)(PDD_CREATESURFACEEXDATA); - -typedef struct _DD_GETDRIVERSTATEDATA -{ - DWORD dwFlags; - __GNU_EXTENSION union - { - PDD_DIRECTDRAW_GLOBAL lpDD; - DWORD_PTR dwhContext; - }; - LPDWORD lpdwStates; - DWORD dwLength; - HRESULT ddRVal; -} DD_GETDRIVERSTATEDATA, *PDD_GETDRIVERSTATEDATA; -typedef DWORD (WINAPI *PDD_GETDRIVERSTATE)(PDD_GETDRIVERSTATEDATA); - -typedef struct _DD_DESTROYDDLOCALDATA -{ - DWORD dwFlags; - PDD_DIRECTDRAW_LOCAL pDDLcl; - HRESULT ddRVal; -} DD_DESTROYDDLOCALDATA, *PDD_DESTROYDDLOCALDATA; -typedef DWORD (WINAPI *PDD_DESTROYDDLOCAL)(PDD_DESTROYDDLOCALDATA); - - - -typedef struct _DD_MISCELLANEOUS2CALLBACKS -{ - DWORD dwSize; - DWORD dwFlags; - PDD_ALPHABLT AlphaBlt; - PDD_CREATESURFACEEX CreateSurfaceEx; - PDD_GETDRIVERSTATE GetDriverState; - PDD_DESTROYDDLOCAL DestroyDDLocal; -} DD_MISCELLANEOUS2CALLBACKS, *PDD_MISCELLANEOUS2CALLBACKS; - - -#define DDHAL_MISC2CB32_ALPHABLT 0x00000001 -#define DDHAL_MISC2CB32_CREATESURFACEEX 0x00000002 -#define DDHAL_MISC2CB32_GETDRIVERSTATE 0x00000004 -#define DDHAL_MISC2CB32_DESTROYDDLOCAL 0x00000008 - - -typedef struct _DD_FREEDRIVERMEMORYDATA -{ - PDD_DIRECTDRAW_GLOBAL lpDD; - PDD_SURFACE_LOCAL lpDDSurface; - HRESULT ddRVal; - PVOID FreeDriverMemory; -} DD_FREEDRIVERMEMORYDATA, *PDD_FREEDRIVERMEMORYDATA; -typedef DWORD (WINAPI *PDD_FREEDRIVERMEMORY)(PDD_FREEDRIVERMEMORYDATA); - -typedef struct _DD_SETEXCLUSIVEMODEDATA -{ - PDD_DIRECTDRAW_GLOBAL lpDD; - DWORD dwEnterExcl; - DWORD dwReserved; - HRESULT ddRVal; - PVOID SetExclusiveMode; -} DD_SETEXCLUSIVEMODEDATA, *PDD_SETEXCLUSIVEMODEDATA; -typedef DWORD (WINAPI *PDD_SETEXCLUSIVEMODE)(PDD_SETEXCLUSIVEMODEDATA); - -typedef struct _DD_FLIPTOGDISURFACEDATA -{ - PDD_DIRECTDRAW_GLOBAL lpDD; - DWORD dwToGDI; - DWORD dwReserved; - HRESULT ddRVal; - PVOID FlipToGDISurface; -} DD_FLIPTOGDISURFACEDATA, *PDD_FLIPTOGDISURFACEDATA; -typedef DWORD (WINAPI *PDD_FLIPTOGDISURFACE)(PDD_FLIPTOGDISURFACEDATA); - - - -typedef struct _DD_NTCALLBACKS -{ - DWORD dwSize; - DWORD dwFlags; - PDD_FREEDRIVERMEMORY FreeDriverMemory; - PDD_SETEXCLUSIVEMODE SetExclusiveMode; - PDD_FLIPTOGDISURFACE FlipToGDISurface; -} DD_NTCALLBACKS, *PDD_NTCALLBACKS; - - -#define DDHAL_NTCB32_FREEDRIVERMEMORY 0x00000001 -#define DDHAL_NTCB32_SETEXCLUSIVEMODE 0x00000002 -#define DDHAL_NTCB32_FLIPTOGDISURFACE 0x00000004 - -/************************************************************************/ -/* IDirectDrawPalette callbacks */ -/************************************************************************/ - -typedef struct _DD_DESTROYPALETTEDATA -{ - PDD_DIRECTDRAW_GLOBAL lpDD; - PDD_PALETTE_GLOBAL lpDDPalette; - HRESULT ddRVal; - PVOID DestroyPalette; -} DD_DESTROYPALETTEDATA, *PDD_DESTROYPALETTEDATA; -typedef DWORD (WINAPI *PDD_PALCB_DESTROYPALETTE)(PDD_DESTROYPALETTEDATA); - -typedef struct _DD_SETENTRIESDATA -{ - PDD_DIRECTDRAW_GLOBAL lpDD; - PDD_PALETTE_GLOBAL lpDDPalette; - DWORD dwBase; - DWORD dwNumEntries; - LPPALETTEENTRY lpEntries; - HRESULT ddRVal; - PVOID SetEntries; -} DD_SETENTRIESDATA, *PDD_SETENTRIESDATA; -typedef DWORD (WINAPI *PDD_PALCB_SETENTRIES)(PDD_SETENTRIESDATA); - -typedef struct DD_PALETTECALLBACKS -{ - DWORD dwSize; - DWORD dwFlags; - PDD_PALCB_DESTROYPALETTE DestroyPalette; - PDD_PALCB_SETENTRIES SetEntries; -} DD_PALETTECALLBACKS, *PDD_PALETTECALLBACKS; - -#define DDHAL_PALCB32_DESTROYPALETTE 0x00000001l -#define DDHAL_PALCB32_SETENTRIES 0x00000002l - -/************************************************************************/ -/* IDirectDrawVideoport callbacks */ -/************************************************************************/ - -typedef struct _DD_CANCREATEVPORTDATA -{ - PDD_DIRECTDRAW_LOCAL lpDD; - LPDDVIDEOPORTDESC lpDDVideoPortDesc; - HRESULT ddRVal; - PVOID CanCreateVideoPort; -} DD_CANCREATEVPORTDATA, *PDD_CANCREATEVPORTDATA; -typedef DWORD (WINAPI *PDD_VPORTCB_CANCREATEVIDEOPORT)(PDD_CANCREATEVPORTDATA); - -typedef struct _DD_CREATEVPORTDATA -{ - PDD_DIRECTDRAW_LOCAL lpDD; - LPDDVIDEOPORTDESC lpDDVideoPortDesc; - PDD_VIDEOPORT_LOCAL lpVideoPort; - HRESULT ddRVal; - PVOID CreateVideoPort; -} DD_CREATEVPORTDATA, *PDD_CREATEVPORTDATA; -typedef DWORD (WINAPI *PDD_VPORTCB_CREATEVIDEOPORT)(PDD_CREATEVPORTDATA); - -typedef struct _DD_FLIPVPORTDATA -{ - PDD_DIRECTDRAW_LOCAL lpDD; - PDD_VIDEOPORT_LOCAL lpVideoPort; - PDD_SURFACE_LOCAL lpSurfCurr; - PDD_SURFACE_LOCAL lpSurfTarg; - HRESULT ddRVal; - PVOID FlipVideoPort; -} DD_FLIPVPORTDATA, *PDD_FLIPVPORTDATA; -typedef DWORD (WINAPI *PDD_VPORTCB_FLIP)(PDD_FLIPVPORTDATA); - -typedef struct _DD_GETVPORTBANDWIDTHDATA -{ - PDD_DIRECTDRAW_LOCAL lpDD; - PDD_VIDEOPORT_LOCAL lpVideoPort; - LPDDPIXELFORMAT lpddpfFormat; - DWORD dwWidth; - DWORD dwHeight; - DWORD dwFlags; - LPDDVIDEOPORTBANDWIDTH lpBandwidth; - HRESULT ddRVal; - PVOID GetVideoPortBandwidth; -} DD_GETVPORTBANDWIDTHDATA, *PDD_GETVPORTBANDWIDTHDATA; -typedef DWORD (WINAPI *PDD_VPORTCB_GETBANDWIDTH)(PDD_GETVPORTBANDWIDTHDATA); - -typedef struct _DD_GETVPORTINPUTFORMATDATA -{ - PDD_DIRECTDRAW_LOCAL lpDD; - PDD_VIDEOPORT_LOCAL lpVideoPort; - DWORD dwFlags; - LPDDPIXELFORMAT lpddpfFormat; - DWORD dwNumFormats; - HRESULT ddRVal; - PVOID GetVideoPortInputFormats; -} DD_GETVPORTINPUTFORMATDATA, *PDD_GETVPORTINPUTFORMATDATA; -typedef DWORD (WINAPI *PDD_VPORTCB_GETINPUTFORMATS)(PDD_GETVPORTINPUTFORMATDATA); - -typedef struct _DD_GETVPORTOUTPUTFORMATDATA -{ - PDD_DIRECTDRAW_LOCAL lpDD; - PDD_VIDEOPORT_LOCAL lpVideoPort; - DWORD dwFlags; - LPDDPIXELFORMAT lpddpfInputFormat; - LPDDPIXELFORMAT lpddpfOutputFormats; - DWORD dwNumFormats; - HRESULT ddRVal; - PVOID GetVideoPortInputFormats; -} DD_GETVPORTOUTPUTFORMATDATA, *PDD_GETVPORTOUTPUTFORMATDATA; -typedef DWORD (WINAPI *PDD_VPORTCB_GETOUTPUTFORMATS)(PDD_GETVPORTOUTPUTFORMATDATA); - -typedef struct _DD_GETVPORTFIELDDATA -{ - PDD_DIRECTDRAW_LOCAL lpDD; - PDD_VIDEOPORT_LOCAL lpVideoPort; - BOOL bField; - HRESULT ddRVal; - PVOID GetVideoPortField; -} DD_GETVPORTFIELDDATA, *PDD_GETVPORTFIELDDATA; -typedef DWORD (WINAPI *PDD_VPORTCB_GETFIELD)(PDD_GETVPORTFIELDDATA); - -typedef struct _DD_GETVPORTLINEDATA -{ - PDD_DIRECTDRAW_LOCAL lpDD; - PDD_VIDEOPORT_LOCAL lpVideoPort; - DWORD dwLine; - HRESULT ddRVal; - PVOID GetVideoPortLine; -} DD_GETVPORTLINEDATA, *PDD_GETVPORTLINEDATA; -typedef DWORD (WINAPI *PDD_VPORTCB_GETLINE)(PDD_GETVPORTLINEDATA); - -typedef struct _DD_GETVPORTCONNECTDATA -{ - PDD_DIRECTDRAW_LOCAL lpDD; - DWORD dwPortId; - LPDDVIDEOPORTCONNECT lpConnect; - DWORD dwNumEntries; - HRESULT ddRVal; - PVOID GetVideoPortConnectInfo; -} DD_GETVPORTCONNECTDATA, *PDD_GETVPORTCONNECTDATA; -typedef DWORD (WINAPI *PDD_VPORTCB_GETVPORTCONNECT)(PDD_GETVPORTCONNECTDATA); - -typedef struct _DD_DESTROYVPORTDATA -{ - PDD_DIRECTDRAW_LOCAL lpDD; - PDD_VIDEOPORT_LOCAL lpVideoPort; - HRESULT ddRVal; - PVOID DestroyVideoPort; -} DD_DESTROYVPORTDATA, *PDD_DESTROYVPORTDATA; -typedef DWORD (WINAPI *PDD_VPORTCB_DESTROYVPORT)(PDD_DESTROYVPORTDATA); - -typedef struct _DD_GETVPORTFLIPSTATUSDATA -{ - PDD_DIRECTDRAW_LOCAL lpDD; - FLATPTR fpSurface; - HRESULT ddRVal; - PVOID GetVideoPortFlipStatus; -} DD_GETVPORTFLIPSTATUSDATA, *PDD_GETVPORTFLIPSTATUSDATA; -typedef DWORD (WINAPI *PDD_VPORTCB_GETFLIPSTATUS)(PDD_GETVPORTFLIPSTATUSDATA); - - - -typedef struct _DD_UPDATEVPORTDATA -{ - PDD_DIRECTDRAW_LOCAL lpDD; - PDD_VIDEOPORT_LOCAL lpVideoPort; - PDD_SURFACE_INT *lplpDDSurface; - PDD_SURFACE_INT *lplpDDVBISurface; - LPDDVIDEOPORTINFO lpVideoInfo; - DWORD dwFlags; - DWORD dwNumAutoflip; - DWORD dwNumVBIAutoflip; - HRESULT ddRVal; - PVOID UpdateVideoPort; -} DD_UPDATEVPORTDATA, *PDD_UPDATEVPORTDATA; -typedef DWORD (WINAPI *PDD_VPORTCB_UPDATE)(PDD_UPDATEVPORTDATA); - -typedef struct _DD_WAITFORVPORTSYNCDATA -{ - PDD_DIRECTDRAW_LOCAL lpDD; - PDD_VIDEOPORT_LOCAL lpVideoPort; - DWORD dwFlags; - DWORD dwLine; - DWORD dwTimeOut; - HRESULT ddRVal; - PVOID UpdateVideoPort; -} DD_WAITFORVPORTSYNCDATA, *PDD_WAITFORVPORTSYNCDATA; -typedef DWORD (WINAPI *PDD_VPORTCB_WAITFORSYNC)(PDD_WAITFORVPORTSYNCDATA); - -typedef struct _DD_GETVPORTSIGNALDATA -{ - PDD_DIRECTDRAW_LOCAL lpDD; - PDD_VIDEOPORT_LOCAL lpVideoPort; - DWORD dwStatus; - HRESULT ddRVal; - PVOID GetVideoSignalStatus; -} DD_GETVPORTSIGNALDATA, *PDD_GETVPORTSIGNALDATA; -typedef DWORD (WINAPI *PDD_VPORTCB_GETSIGNALSTATUS)(PDD_GETVPORTSIGNALDATA); - - - -typedef struct _DD_VPORTCOLORDATA -{ - PDD_DIRECTDRAW_LOCAL lpDD; - PDD_VIDEOPORT_LOCAL lpVideoPort; - DWORD dwFlags; - LPDDCOLORCONTROL lpColorData; - HRESULT ddRVal; - PVOID ColorControl; -} DD_VPORTCOLORDATA, *PDD_VPORTCOLORDATA; -typedef DWORD (WINAPI *PDD_VPORTCB_COLORCONTROL)(PDD_VPORTCOLORDATA); - - -typedef struct DD_VIDEOPORTCALLBACKS -{ - DWORD dwSize; - DWORD dwFlags; - PDD_VPORTCB_CANCREATEVIDEOPORT CanCreateVideoPort; - PDD_VPORTCB_CREATEVIDEOPORT CreateVideoPort; - PDD_VPORTCB_FLIP FlipVideoPort; - PDD_VPORTCB_GETBANDWIDTH GetVideoPortBandwidth; - PDD_VPORTCB_GETINPUTFORMATS GetVideoPortInputFormats; - PDD_VPORTCB_GETOUTPUTFORMATS GetVideoPortOutputFormats; - PVOID lpReserved1; - PDD_VPORTCB_GETFIELD GetVideoPortField; - PDD_VPORTCB_GETLINE GetVideoPortLine; - PDD_VPORTCB_GETVPORTCONNECT GetVideoPortConnectInfo; - PDD_VPORTCB_DESTROYVPORT DestroyVideoPort; - PDD_VPORTCB_GETFLIPSTATUS GetVideoPortFlipStatus; - PDD_VPORTCB_UPDATE UpdateVideoPort; - PDD_VPORTCB_WAITFORSYNC WaitForVideoPortSync; - PDD_VPORTCB_GETSIGNALSTATUS GetVideoSignalStatus; - PDD_VPORTCB_COLORCONTROL ColorControl; -} DD_VIDEOPORTCALLBACKS, *PDD_VIDEOPORTCALLBACKS; - -#define DDHAL_VPORT32_CANCREATEVIDEOPORT 0x00000001 -#define DDHAL_VPORT32_CREATEVIDEOPORT 0x00000002 -#define DDHAL_VPORT32_FLIP 0x00000004 -#define DDHAL_VPORT32_GETBANDWIDTH 0x00000008 -#define DDHAL_VPORT32_GETINPUTFORMATS 0x00000010 -#define DDHAL_VPORT32_GETOUTPUTFORMATS 0x00000020 -#define DDHAL_VPORT32_GETFIELD 0x00000080 -#define DDHAL_VPORT32_GETLINE 0x00000100 -#define DDHAL_VPORT32_GETCONNECT 0x00000200 -#define DDHAL_VPORT32_DESTROY 0x00000400 -#define DDHAL_VPORT32_GETFLIPSTATUS 0x00000800 -#define DDHAL_VPORT32_UPDATE 0x00001000 -#define DDHAL_VPORT32_WAITFORSYNC 0x00002000 -#define DDHAL_VPORT32_GETSIGNALSTATUS 0x00004000 -#define DDHAL_VPORT32_COLORCONTROL 0x00008000 - - -/************************************************************************/ -/* IDirectDrawColorControl callbacks */ -/************************************************************************/ - -#define DDRAWI_GETCOLOR 0x0001 -#define DDRAWI_SETCOLOR 0x0002 - -typedef struct _DD_COLORCONTROLDATA -{ - PDD_DIRECTDRAW_GLOBAL lpDD; - PDD_SURFACE_LOCAL lpDDSurface; - LPDDCOLORCONTROL lpColorData; - DWORD dwFlags; - HRESULT ddRVal; - PVOID ColorControl; -} DD_COLORCONTROLDATA, *PDD_COLORCONTROLDATA; -typedef DWORD (WINAPI *PDD_COLORCB_COLORCONTROL)(PDD_COLORCONTROLDATA); - - - -typedef struct _DD_COLORCONTROLCALLBACKS -{ - DWORD dwSize; - DWORD dwFlags; - PDD_COLORCB_COLORCONTROL ColorControl; -} DD_COLORCONTROLCALLBACKS, *PDD_COLORCONTROLCALLBACKS; - -#define DDHAL_COLOR_COLORCONTROL 0x00000001 - -/************************************************************************/ -/* IDirectDrawVideo callbacks */ -/************************************************************************/ - -typedef struct _DD_GETMOCOMPGUIDSDATA -{ - PDD_DIRECTDRAW_LOCAL lpDD; - DWORD dwNumGuids; - GUID *lpGuids; - HRESULT ddRVal; -} DD_GETMOCOMPGUIDSDATA, *PDD_GETMOCOMPGUIDSDATA; -typedef DWORD (WINAPI *PDD_MOCOMPCB_GETGUIDS)(PDD_GETMOCOMPGUIDSDATA); - -typedef struct _DD_GETMOCOMPFORMATSDATA -{ - PDD_DIRECTDRAW_LOCAL lpDD; - GUID *lpGuid; - DWORD dwNumFormats; - LPDDPIXELFORMAT lpFormats; - HRESULT ddRVal; -} DD_GETMOCOMPFORMATSDATA, *PDD_GETMOCOMPFORMATSDATA; -typedef DWORD (WINAPI *PDD_MOCOMPCB_GETFORMATS)(PDD_GETMOCOMPFORMATSDATA); - -typedef struct _DD_CREATEMOCOMPDATA -{ - PDD_DIRECTDRAW_LOCAL lpDD; - PDD_MOTIONCOMP_LOCAL lpMoComp; - GUID *lpGuid; - DWORD dwUncompWidth; - DWORD dwUncompHeight; - DDPIXELFORMAT ddUncompPixelFormat; - LPVOID lpData; - DWORD dwDataSize; - HRESULT ddRVal; -} DD_CREATEMOCOMPDATA, *PDD_CREATEMOCOMPDATA; -typedef DWORD (WINAPI *PDD_MOCOMPCB_CREATE)(PDD_CREATEMOCOMPDATA); - -typedef struct _DDCOMPBUFFERINFO -{ - DWORD dwSize; - DWORD dwNumCompBuffers; - DWORD dwWidthToCreate; - DWORD dwHeightToCreate; - DWORD dwBytesToAllocate; - DDSCAPS2 ddCompCaps; - DDPIXELFORMAT ddPixelFormat; -} DDCOMPBUFFERINFO, *LPDDCOMPBUFFERINFO; - -typedef struct _DD_GETMOCOMPCOMPBUFFDATA -{ - PDD_DIRECTDRAW_LOCAL lpDD; - GUID *lpGuid; - DWORD dwWidth; - DWORD dwHeight; - DDPIXELFORMAT ddPixelFormat; - DWORD dwNumTypesCompBuffs; - LPDDCOMPBUFFERINFO lpCompBuffInfo; - HRESULT ddRVal; -} DD_GETMOCOMPCOMPBUFFDATA, *PDD_GETMOCOMPCOMPBUFFDATA; -typedef DWORD (WINAPI *PDD_MOCOMPCB_GETCOMPBUFFINFO)(PDD_GETMOCOMPCOMPBUFFDATA); - -typedef struct _DD_GETINTERNALMOCOMPDATA -{ - PDD_DIRECTDRAW_LOCAL lpDD; - GUID *lpGuid; - DWORD dwWidth; - DWORD dwHeight; - DDPIXELFORMAT ddPixelFormat; - DWORD dwScratchMemAlloc; - HRESULT ddRVal; -} DD_GETINTERNALMOCOMPDATA, *PDD_GETINTERNALMOCOMPDATA; -typedef DWORD (WINAPI *PDD_MOCOMPCB_GETINTERNALINFO)(PDD_GETINTERNALMOCOMPDATA); - -typedef struct _DD_BEGINMOCOMPFRAMEDATA -{ - PDD_DIRECTDRAW_LOCAL lpDD; - PDD_MOTIONCOMP_LOCAL lpMoComp; - PDD_SURFACE_LOCAL lpDestSurface; - DWORD dwInputDataSize; - LPVOID lpInputData; - DWORD dwOutputDataSize; - LPVOID lpOutputData; - HRESULT ddRVal; -} DD_BEGINMOCOMPFRAMEDATA, *PDD_BEGINMOCOMPFRAMEDATA; -typedef DWORD (WINAPI *PDD_MOCOMPCB_BEGINFRAME)(PDD_BEGINMOCOMPFRAMEDATA); - -typedef struct _DD_ENDMOCOMPFRAMEDATA -{ - PDD_DIRECTDRAW_LOCAL lpDD; - PDD_MOTIONCOMP_LOCAL lpMoComp; - LPVOID lpInputData; - DWORD dwInputDataSize; - HRESULT ddRVal; -} DD_ENDMOCOMPFRAMEDATA, *PDD_ENDMOCOMPFRAMEDATA; -typedef DWORD (WINAPI *PDD_MOCOMPCB_ENDFRAME)(PDD_ENDMOCOMPFRAMEDATA); - -typedef struct _DDMOCOMPBUFFERINFO -{ - DWORD dwSize; - PDD_SURFACE_LOCAL lpCompSurface; - DWORD dwDataOffset; - DWORD dwDataSize; - LPVOID lpPrivate; -} DDMOCOMPBUFFERINFO, *LPDDMOCOMPBUFFERINFO; - -typedef struct _DD_RENDERMOCOMPDATA -{ - PDD_DIRECTDRAW_LOCAL lpDD; - PDD_MOTIONCOMP_LOCAL lpMoComp; - DWORD dwNumBuffers; - LPDDMOCOMPBUFFERINFO lpBufferInfo; - DWORD dwFunction; - LPVOID lpInputData; - DWORD dwInputDataSize; - LPVOID lpOutputData; - DWORD dwOutputDataSize; - HRESULT ddRVal; -} DD_RENDERMOCOMPDATA, *PDD_RENDERMOCOMPDATA; -typedef DWORD (WINAPI *PDD_MOCOMPCB_RENDER)(PDD_RENDERMOCOMPDATA); - -#define DDMCQUERY_READ 0x00000001 - -typedef struct _DD_QUERYMOCOMPSTATUSDATA -{ - PDD_DIRECTDRAW_LOCAL lpDD; - PDD_MOTIONCOMP_LOCAL lpMoComp; - PDD_SURFACE_LOCAL lpSurface; - DWORD dwFlags; - HRESULT ddRVal; -} DD_QUERYMOCOMPSTATUSDATA, *PDD_QUERYMOCOMPSTATUSDATA; -typedef DWORD (WINAPI *PDD_MOCOMPCB_QUERYSTATUS)(PDD_QUERYMOCOMPSTATUSDATA); - -typedef struct _DD_DESTROYMOCOMPDATA -{ - PDD_DIRECTDRAW_LOCAL lpDD; - PDD_MOTIONCOMP_LOCAL lpMoComp; - HRESULT ddRVal; -} DD_DESTROYMOCOMPDATA, *PDD_DESTROYMOCOMPDATA; -typedef DWORD (WINAPI *PDD_MOCOMPCB_DESTROY)(PDD_DESTROYMOCOMPDATA); - - - -typedef struct DD_MOTIONCOMPCALLBACKS -{ - DWORD dwSize; - DWORD dwFlags; - PDD_MOCOMPCB_GETGUIDS GetMoCompGuids; - PDD_MOCOMPCB_GETFORMATS GetMoCompFormats; - PDD_MOCOMPCB_CREATE CreateMoComp; - PDD_MOCOMPCB_GETCOMPBUFFINFO GetMoCompBuffInfo; - PDD_MOCOMPCB_GETINTERNALINFO GetInternalMoCompInfo; - PDD_MOCOMPCB_BEGINFRAME BeginMoCompFrame; - PDD_MOCOMPCB_ENDFRAME EndMoCompFrame; - PDD_MOCOMPCB_RENDER RenderMoComp; - PDD_MOCOMPCB_QUERYSTATUS QueryMoCompStatus; - PDD_MOCOMPCB_DESTROY DestroyMoComp; -} DD_MOTIONCOMPCALLBACKS, *PDD_MOTIONCOMPCALLBACKS; - -#define DDHAL_MOCOMP32_GETGUIDS 0x00000001 -#define DDHAL_MOCOMP32_GETFORMATS 0x00000002 -#define DDHAL_MOCOMP32_CREATE 0x00000004 -#define DDHAL_MOCOMP32_GETCOMPBUFFINFO 0x00000008 -#define DDHAL_MOCOMP32_GETINTERNALINFO 0x00000010 -#define DDHAL_MOCOMP32_BEGINFRAME 0x00000020 -#define DDHAL_MOCOMP32_ENDFRAME 0x00000040 -#define DDHAL_MOCOMP32_RENDER 0x00000080 -#define DDHAL_MOCOMP32_QUERYSTATUS 0x00000100 -#define DDHAL_MOCOMP32_DESTROY 0x00000200 - -/************************************************************************/ -/* D3D buffer callbacks */ -/************************************************************************/ - -typedef struct _DD_D3DBUFCALLBACKS -{ - DWORD dwSize; - DWORD dwFlags; - PDD_CANCREATESURFACE CanCreateD3DBuffer; - PDD_CREATESURFACE CreateD3DBuffer; - PDD_SURFCB_DESTROYSURFACE DestroyD3DBuffer; - PDD_SURFCB_LOCK LockD3DBuffer; - PDD_SURFCB_UNLOCK UnlockD3DBuffer; -} DD_D3DBUFCALLBACKS, *PDD_D3DBUFCALLBACKS; - -/************************************************************************/ -/* DdGetDriverInfo callback */ -/************************************************************************/ - -typedef struct _DD_GETDRIVERINFODATA -{ - // Input: - PVOID dhpdev; - DWORD dwSize; - DWORD dwFlags; - GUID guidInfo; - DWORD dwExpectedSize; - PVOID lpvData; - // Output: - DWORD dwActualSize; - HRESULT ddRVal; -} DD_GETDRIVERINFODATA, *PDD_GETDRIVERINFODATA; -typedef DWORD (WINAPI *PDD_GETDRIVERINFO)(PDD_GETDRIVERINFODATA); - - - - -/************************************************************************/ -/* Driver info structures */ -/************************************************************************/ - -typedef struct _DDNTCORECAPS -{ - DWORD dwSize; - DWORD dwCaps; - DWORD dwCaps2; - DWORD dwCKeyCaps; - DWORD dwFXCaps; - DWORD dwFXAlphaCaps; - DWORD dwPalCaps; - DWORD dwSVCaps; - DWORD dwAlphaBltConstBitDepths; - DWORD dwAlphaBltPixelBitDepths; - DWORD dwAlphaBltSurfaceBitDepths; - DWORD dwAlphaOverlayConstBitDepths; - DWORD dwAlphaOverlayPixelBitDepths; - DWORD dwAlphaOverlaySurfaceBitDepths; - DWORD dwZBufferBitDepths; - DWORD dwVidMemTotal; - DWORD dwVidMemFree; - DWORD dwMaxVisibleOverlays; - DWORD dwCurrVisibleOverlays; - DWORD dwNumFourCCCodes; - DWORD dwAlignBoundarySrc; - DWORD dwAlignSizeSrc; - DWORD dwAlignBoundaryDest; - DWORD dwAlignSizeDest; - DWORD dwAlignStrideAlign; - DWORD dwRops[DD_ROP_SPACE]; - DDSCAPS ddsCaps; - DWORD dwMinOverlayStretch; - DWORD dwMaxOverlayStretch; - DWORD dwMinLiveVideoStretch; - DWORD dwMaxLiveVideoStretch; - DWORD dwMinHwCodecStretch; - DWORD dwMaxHwCodecStretch; - DWORD dwReserved1; - DWORD dwReserved2; - DWORD dwReserved3; - DWORD dwSVBCaps; - DWORD dwSVBCKeyCaps; - DWORD dwSVBFXCaps; - DWORD dwSVBRops[DD_ROP_SPACE]; - DWORD dwVSBCaps; - DWORD dwVSBCKeyCaps; - DWORD dwVSBFXCaps; - DWORD dwVSBRops[DD_ROP_SPACE]; - DWORD dwSSBCaps; - DWORD dwSSBCKeyCaps; - DWORD dwSSBFXCaps; - DWORD dwSSBRops[DD_ROP_SPACE]; - DWORD dwMaxVideoPorts; - DWORD dwCurrVideoPorts; - DWORD dwSVBCaps2; -} DDNTCORECAPS, *PDDNTCORECAPS; - - -typedef struct _DD_HALINFO_V4 -{ - DWORD dwSize; - VIDEOMEMORYINFO vmiData; - DDNTCORECAPS ddCaps; - PDD_GETDRIVERINFO GetDriverInfo; - DWORD dwFlags; -} DD_HALINFO_V4, *PDD_HALINFO_V4; - -typedef struct _DD_HALINFO -{ - DWORD dwSize; - VIDEOMEMORYINFO vmiData; - DDNTCORECAPS ddCaps; - PDD_GETDRIVERINFO GetDriverInfo; - DWORD dwFlags; - PVOID lpD3DGlobalDriverData; - PVOID lpD3DHALCallbacks; - PDD_D3DBUFCALLBACKS lpD3DBufCallbacks; -} DD_HALINFO, *PDD_HALINFO; - - - -typedef struct _DD_NONLOCALVIDMEMCAPS -{ - DWORD dwSize; - DWORD dwNLVBCaps; - DWORD dwNLVBCaps2; - DWORD dwNLVBCKeyCaps; - DWORD dwNLVBFXCaps; - DWORD dwNLVBRops[DD_ROP_SPACE]; -} DD_NONLOCALVIDMEMCAPS, *PDD_NONLOCALVIDMEMCAPS; - - - -typedef struct _DD_MORESURFACECAPS -{ - DWORD dwSize; - DDSCAPSEX ddsCapsMore; - struct tagNTExtendedHeapRestrictions - { - DDSCAPSEX ddsCapsEx; - DDSCAPSEX ddsCapsExAlt; - } ddsExtendedHeapRestrictions[1]; -} DD_MORESURFACECAPS, *PDD_MORESURFACECAPS; - - -/*********************************************************/ -/* Kernel Callbacks */ -/*********************************************************/ -typedef struct _DD_SYNCSURFACEDATA -{ - PDD_DIRECTDRAW_LOCAL lpDD; - PDD_SURFACE_LOCAL lpDDSurface; - DWORD dwSurfaceOffset; - ULONG_PTR fpLockPtr; - LONG lPitch; - DWORD dwOverlayOffset; - ULONG dwDriverReserved1; - ULONG dwDriverReserved2; - ULONG dwDriverReserved3; - ULONG dwDriverReserved4; - HRESULT ddRVal; -} DD_SYNCSURFACEDATA, *PDD_SYNCSURFACEDATA; -typedef DWORD (WINAPI *PDD_KERNELCB_SYNCSURFACE)(PDD_SYNCSURFACEDATA); - -typedef struct _DD_SYNCVIDEOPORTDATA -{ - PDD_DIRECTDRAW_LOCAL lpDD; - PDD_VIDEOPORT_LOCAL lpVideoPort; - DWORD dwOriginOffset; - DWORD dwHeight; - DWORD dwVBIHeight; - ULONG dwDriverReserved1; - ULONG dwDriverReserved2; - ULONG dwDriverReserved3; - HRESULT ddRVal; -} DD_SYNCVIDEOPORTDATA, *PDD_SYNCVIDEOPORTDATA; -typedef DWORD (WINAPI *PDD_KERNELCB_SYNCVIDEOPORT)(PDD_SYNCVIDEOPORTDATA); - - -typedef struct DD_NTPRIVATEDRIVERCAPS -{ - DWORD dwSize; - DWORD dwPrivateCaps; -} DD_NTPRIVATEDRIVERCAPS; - -typedef struct _DD_UPDATENONLOCALHEAPDATA -{ - PDD_DIRECTDRAW_GLOBAL lpDD; - DWORD dwHeap; - FLATPTR fpGARTLin; - FLATPTR fpGARTDev; - ULONG_PTR ulPolicyMaxBytes; - HRESULT ddRVal; - VOID* UpdateNonLocalHeap; -} DD_UPDATENONLOCALHEAPDATA, *PDD_UPDATENONLOCALHEAPDATA; - -typedef struct _DD_STEREOMODE -{ - DWORD dwSize; - DWORD dwHeight; - DWORD dwWidth; - DWORD dwBpp; - DWORD dwRefreshRate; - BOOL bSupported; -} DD_STEREOMODE, *PDD_STEREOMODE; - -typedef struct _DD_MORECAPS -{ - DWORD dwSize; - DWORD dwAlphaCaps; - DWORD dwSVBAlphaCaps; - DWORD dwVSBAlphaCaps; - DWORD dwSSBAlphaCaps; - DWORD dwFilterCaps; - DWORD dwSVBFilterCaps; - DWORD dwVSBFilterCaps; - DWORD dwSSBFilterCaps; -} DD_MORECAPS, *PDD_MORECAPS; - -typedef struct _DD_CLIPPER_GLOBAL -{ - ULONG_PTR dwReserved1; -} DD_CLIPPER_GLOBAL; - -typedef struct _DD_CLIPPER_LOCAL -{ - ULONG_PTR dwReserved1; -} DD_CLIPPER_LOCAL; - -typedef struct _DD_PALETTE_LOCAL -{ - ULONG dwReserved0; - ULONG_PTR dwReserved1; -} DD_PALETTE_LOCAL; - - -typedef struct DD_KERNELCALLBACKS -{ - DWORD dwSize; - DWORD dwFlags; - PDD_KERNELCB_SYNCSURFACE SyncSurfaceData; - PDD_KERNELCB_SYNCVIDEOPORT SyncVideoPortData; -} DD_KERNELCALLBACKS, *PDD_KERNELCALLBACKS; - - -#define MAX_AUTOFLIP_BUFFERS 10 -#define DDSCAPS_EXECUTEBUFFER DDSCAPS_RESERVED2 -#define DDSCAPS_COMMANDBUFFER DDSCAPS_RESERVED3 -#define DDSCAPS_VERTEXBUFFER DDSCAPS_RESERVED4 -#define DDPF_D3DFORMAT 0x00200000l -#define D3DFORMAT_OP_TEXTURE 0x00000001L -#define D3DFORMAT_OP_VOLUMETEXTURE 0x00000002L -#define D3DFORMAT_OP_CUBETEXTURE 0x00000004L -#define D3DFORMAT_OP_OFFSCREEN_RENDERTARGET 0x00000008L -#define D3DFORMAT_OP_SAME_FORMAT_RENDERTARGET 0x00000010L -#define D3DFORMAT_OP_ZSTENCIL 0x00000040L -#define D3DFORMAT_OP_ZSTENCIL_WITH_ARBITRARY_COLOR_DEPTH 0x00000080L -#define D3DFORMAT_OP_SAME_FORMAT_UP_TO_ALPHA_RENDERTARGET 0x00000100L -#define D3DFORMAT_OP_DISPLAYMODE 0x00000400L -#define D3DFORMAT_OP_3DACCELERATION 0x00000800L -#define D3DFORMAT_OP_PIXELSIZE 0x00001000L -#define D3DFORMAT_OP_CONVERT_TO_ARGB 0x00002000L -#define D3DFORMAT_OP_OFFSCREENPLAIN 0x00004000L -#define D3DFORMAT_OP_SRGBREAD 0x00008000L -#define D3DFORMAT_OP_BUMPMAP 0x00010000L -#define D3DFORMAT_OP_DMAP 0x00020000L -#define D3DFORMAT_OP_NOFILTER 0x00040000L -#define D3DFORMAT_MEMBEROFGROUP_ARGB 0x00080000L -#define D3DFORMAT_OP_SRGBWRITE 0x00100000L -#define D3DFORMAT_OP_NOALPHABLEND 0x00200000L -#define D3DFORMAT_OP_AUTOGENMIPMAP 0x00400000L -#define D3DFORMAT_OP_VERTEXTEXTURE 0x00800000L -#define D3DFORMAT_OP_NOTEXCOORDWRAPNORMIP 0x01000000L -#define DDHAL_PLEASEALLOC_BLOCKSIZE 0x00000002l -#define DDHAL_PLEASEALLOC_USERMEM 0x00000004l - - -#define VIDMEM_ISLINEAR 0x00000001l -#define VIDMEM_ISRECTANGULAR 0x00000002l -#define VIDMEM_ISHEAP 0x00000004l -#define VIDMEM_ISNONLOCAL 0x00000008l -#define VIDMEM_ISWC 0x00000010l -#define VIDMEM_HEAPDISABLED 0x00000020l - -#define DDHAL_CREATESURFACEEX_SWAPHANDLES 0x00000001l - -#define DDHAL_KERNEL_SYNCSURFACEDATA 0x00000001l -#define DDHAL_KERNEL_SYNCVIDEOPORTDATA 0x00000002l - -#define DDHAL_DRIVER_NOTHANDLED 0x00000000l -#define DDHAL_DRIVER_HANDLED 0x00000001l -#define DDHAL_DRIVER_NOCKEYHW 0x00000002l - -#define DDRAWISURF_HASCKEYSRCBLT 0x00000800L -#define DDRAWISURF_HASPIXELFORMAT 0x00002000L -#define DDRAWISURF_HASOVERLAYDATA 0x00004000L -#define DDRAWISURF_FRONTBUFFER 0x04000000L -#define DDRAWISURF_BACKBUFFER 0x08000000L -#define DDRAWISURF_INVALID 0x10000000L -#define DDRAWISURF_DRIVERMANAGED 0x40000000L - -#define ROP_HAS_SOURCE 0x00000001l -#define ROP_HAS_PATTERN 0x00000002l -#define ROP_HAS_SOURCEPATTERN ROP_HAS_SOURCE | ROP_HAS_PATTERN - -#define DDHAL_EXEBUFCB32_CANCREATEEXEBUF 0x00000001l -#define DDHAL_EXEBUFCB32_CREATEEXEBUF 0x00000002l -#define DDHAL_EXEBUFCB32_DESTROYEXEBUF 0x00000004l -#define DDHAL_EXEBUFCB32_LOCKEXEBUF 0x00000008l -#define DDHAL_EXEBUFCB32_UNLOCKEXEBUF 0x00000010l - -#define DDHAL_D3DBUFCB32_CANCREATED3DBUF DDHAL_EXEBUFCB32_CANCREATEEXEBUF -#define DDHAL_D3DBUFCB32_CREATED3DBUF DDHAL_EXEBUFCB32_CREATEEXEBUF -#define DDHAL_D3DBUFCB32_DESTROYD3DBUF DDHAL_EXEBUFCB32_DESTROYEXEBUF -#define DDHAL_D3DBUFCB32_LOCKD3DBUF DDHAL_EXEBUFCB32_LOCKEXEBUF -#define DDHAL_D3DBUFCB32_UNLOCKD3DBUF DDHAL_EXEBUFCB32_UNLOCKEXEBUF - -#define DDHALINFO_ISPRIMARYDISPLAY 0x00000001 -#define DDHALINFO_MODEXILLEGAL 0x00000002 -#define DDHALINFO_GETDRIVERINFOSET 0x00000004 -#define DDHALINFO_GETDRIVERINFO2 0x00000008 - -#define DDRAWIVPORT_ON 0x00000001 -#define DDRAWIVPORT_SOFTWARE_AUTOFLIP 0x00000002 -#define DDRAWIVPORT_COLORKEYANDINTERP 0x00000004 - -#define DDHAL_PRIVATECAP_ATOMICSURFACECREATION 0x00000001l -#define DDHAL_PRIVATECAP_NOTIFYPRIMARYCREATION 0x00000002l -#define DDHAL_PRIVATECAP_RESERVED1 0x00000004l - -#define DDRAWI_VPORTSTART 0x0001 -#define DDRAWI_VPORTSTOP 0x0002 -#define DDRAWI_VPORTUPDATE 0x0003 -#define DDRAWI_VPORTGETCOLOR 0x0001 -#define DDRAWI_VPORTSETCOLOR 0x0002 - - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* GUID_DEFS_ONLY */ - -#endif /* __DD_INCLUDED__ */ diff --git a/include/ddk/dmusicks.h b/include/ddk/dmusicks.h index 64fac3b34b4..27cd6ac06d9 100644 --- a/include/ddk/dmusicks.h +++ b/include/ddk/dmusicks.h @@ -7,33 +7,30 @@ typedef LONGLONG REFERENCE_TIME; #endif -typedef struct _DMUS_KERNEL_EVENT -{ - BYTE bReserved; - BYTE cbStruct; - USHORT cbEvent; - USHORT usChannelGroup; - USHORT usFlags; - REFERENCE_TIME ullPresTime100ns; - ULONGLONG ullBytePosition; - struct _DMUS_KERNEL_EVENT *pNextEvt; - union - { - BYTE abData[sizeof(PBYTE)]; - PBYTE pbData; - struct _DMUS_KERNEL_EVENT *pPackageEvt; - }uData; -}DMUS_KERNEL_EVENT, *PDMUS_KERNEL_EVENT; +typedef struct _DMUS_KERNEL_EVENT { + BYTE bReserved; + BYTE cbStruct; + USHORT cbEvent; + USHORT usChannelGroup; + USHORT usFlags; + REFERENCE_TIME ullPresTime100ns; + ULONGLONG ullBytePosition; + struct _DMUS_KERNEL_EVENT *pNextEvt; + union { + BYTE abData[sizeof(PBYTE)]; + PBYTE pbData; + struct _DMUS_KERNEL_EVENT *pPackageEvt; + } uData; +} DMUS_KERNEL_EVENT, *PDMUS_KERNEL_EVENT; -typedef enum -{ - DMUS_STREAM_MIDI_INVALID = -1, - DMUS_STREAM_MIDI_RENDER = 0, - DMUS_STREAM_MIDI_CAPTURE, - DMUS_STREAM_WAVE_SINK -}DMUS_STREAM_TYPE; +typedef enum { + DMUS_STREAM_MIDI_INVALID = -1, + DMUS_STREAM_MIDI_RENDER = 0, + DMUS_STREAM_MIDI_CAPTURE, + DMUS_STREAM_WAVE_SINK +} DMUS_STREAM_TYPE; -DEFINE_GUID(CLSID_MiniportDriverDMusUART, 0xd3f0ce1c, 0xFFFC, 0x11D1, 0x81, 0xB0, 0x00, 0x60, 0x08, 0x33, 0x16, 0xC1); +DEFINE_GUID(CLSID_MiniportDriverDMusUART, 0xd3f0ce1c, 0xFFFC, 0x11D1, 0x81, 0xB0, 0x00, 0x60, 0x08, 0x33, 0x16, 0xC1); DEFINE_GUID(CLSID_MiniportDriverDMusUARTCapture, 0xD3F0CE1D, 0xFFFC, 0x11D1, 0x81, 0xB0, 0x00, 0x60, 0x08, 0x33, 0x16, 0xC1); /* =============================================================== @@ -43,21 +40,20 @@ DEFINE_GUID(CLSID_MiniportDriverDMusUARTCapture, 0xD3F0CE1D, 0xFFFC, 0x11D1, 0x8 #undef INTERFACE #define INTERFACE IMasterClock -DECLARE_INTERFACE_(IMasterClock,IUnknown) -{ - DEFINE_ABSTRACT_UNKNOWN() +DECLARE_INTERFACE_(IMasterClock,IUnknown) { + DEFINE_ABSTRACT_UNKNOWN() - STDMETHOD_(NTSTATUS,GetTime)( THIS_ - OUT REFERENCE_TIME * pTime - ) PURE; + STDMETHOD_(NTSTATUS,GetTime)( THIS_ + OUT REFERENCE_TIME *pTime + ) PURE; }; typedef IMasterClock *PMASTERCLOCK; -#define IMP_IMasterClock \ - STDMETHODIMP_(NTSTATUS) GetTime( \ - OUT REFERENCE_TIME * pTime \ - ) +#define IMP_IMasterClock \ + STDMETHODIMP_(NTSTATUS) GetTime( \ + OUT REFERENCE_TIME *pTime \ + ) /* =============================================================== IMXF Interface @@ -70,46 +66,32 @@ struct IMXF; typedef struct IMXF *PMXF; #define DEFINE_ABSTRACT_IMXF() \ - STDMETHOD_(NTSTATUS,SetState)(THIS_ \ - IN KSSTATE State \ - ) PURE; \ - STDMETHOD_(NTSTATUS,PutMessage) \ - ( THIS_ \ - IN PDMUS_KERNEL_EVENT pDMKEvt \ - ) PURE; \ - STDMETHOD_(NTSTATUS,ConnectOutput) \ - ( THIS_ \ - IN PMXF sinkMXF \ - ) PURE; \ - STDMETHOD_(NTSTATUS,DisconnectOutput) \ - ( THIS_ \ - IN PMXF sinkMXF \ - ) PURE; + STDMETHOD_(NTSTATUS,SetState)(THIS_ \ + IN KSSTATE State \ + ) PURE; \ + STDMETHOD_(NTSTATUS,PutMessage)(THIS_ \ + IN PDMUS_KERNEL_EVENT pDMKEvt \ + ) PURE; \ + STDMETHOD_(NTSTATUS,ConnectOutput)(THIS_ \ + IN PMXF sinkMXF \ + ) PURE; \ + STDMETHOD_(NTSTATUS,DisconnectOutput)(THIS_ \ + IN PMXF sinkMXF \ + ) PURE; -#define IMP_IMXF \ - STDMETHODIMP_(NTSTATUS) SetState \ - ( \ - IN KSSTATE State \ - ); \ - STDMETHODIMP_(NTSTATUS) PutMessage \ - ( THIS_ \ - IN PDMUS_KERNEL_EVENT pDMKEvt \ - ); \ - STDMETHODIMP_(NTSTATUS) ConnectOutput \ - ( THIS_ \ - IN PMXF sinkMXF \ - ); \ - STDMETHODIMP_(NTSTATUS) DisconnectOutput \ - ( THIS_ \ - IN PMXF sinkMXF \ - ) +#define IMP_IMXF \ + STDMETHODIMP_(NTSTATUS) SetState ( \ + IN KSSTATE State); \ + STDMETHODIMP_(NTSTATUS) PutMessage (THIS_ \ + IN PDMUS_KERNEL_EVENT pDMKEvt); \ + STDMETHODIMP_(NTSTATUS) ConnectOutput (THIS_ \ + IN PMXF sinkMXF); \ + STDMETHODIMP_(NTSTATUS) DisconnectOutput (THIS_ \ + IN PMXF sinkMXF) - -DECLARE_INTERFACE_(IMXF,IUnknown) -{ - DEFINE_ABSTRACT_UNKNOWN() - - DEFINE_ABSTRACT_IMXF() +DECLARE_INTERFACE_(IMXF,IUnknown) { + DEFINE_ABSTRACT_UNKNOWN() + DEFINE_ABSTRACT_IMXF() }; /* =============================================================== @@ -123,47 +105,43 @@ struct IAllocatorMXF; typedef struct IAllocatorMXF *PAllocatorMXF; #define STATIC_IID_IAllocatorMXF\ - 0xa5f0d62c, 0xb30f, 0x11d2, 0xb7, 0xa3, 0x00, 0x60, 0x08, 0x33, 0x16, 0xc1 + 0xa5f0d62c, 0xb30f, 0x11d2, 0xb7, 0xa3, 0x00, 0x60, 0x08, 0x33, 0x16, 0xc1 DEFINE_GUIDSTRUCT("a5f0d62c-b30f-11d2-b7a3-0060083316c1", IID_IAllocatorMXF); #define IID_IAllocatorMXF DEFINE_GUIDNAMED(IID_IAllocatorMXF) -DECLARE_INTERFACE_(IAllocatorMXF, IMXF) -{ - DEFINE_ABSTRACT_UNKNOWN() +DECLARE_INTERFACE_(IAllocatorMXF, IMXF) { + DEFINE_ABSTRACT_UNKNOWN() - DEFINE_ABSTRACT_IMXF() + DEFINE_ABSTRACT_IMXF() - STDMETHOD_(NTSTATUS,GetMessage)(THIS_ - OUT PDMUS_KERNEL_EVENT * ppDMKEvt - ) PURE; + STDMETHOD_(NTSTATUS,GetMessage)(THIS_ + OUT PDMUS_KERNEL_EVENT *ppDMKEvt + ) PURE; - STDMETHOD_(USHORT,GetBufferSize)(THIS) PURE; + STDMETHOD_(USHORT,GetBufferSize)(THIS) PURE; - STDMETHOD_(NTSTATUS,GetBuffer)(THIS_ - OUT PBYTE * ppBuffer - )PURE; + STDMETHOD_(NTSTATUS,GetBuffer)(THIS_ + OUT PBYTE *ppBuffer + )PURE; - STDMETHOD_(NTSTATUS,PutBuffer)(THIS_ - IN PBYTE pBuffer - ) PURE; + STDMETHOD_(NTSTATUS,PutBuffer)(THIS_ + IN PBYTE pBuffer + ) PURE; }; -#define IMP_IAllocatorMXF \ - IMP_IMXF; \ - STDMETHODIMP_(NTSTATUS) GetMessage( \ - OUT PDMUS_KERNEL_EVENT * ppDMKEvt \ - ); \ - \ - STDMETHODIMP_(USHORT) GetBufferSize(void); \ - \ - STDMETHODIMP_(NTSTATUS) GetBuffer( \ - OUT PBYTE * ppBuffer \ - ); \ - \ - STDMETHODIMP_(NTSTATUS) PutBuffer( \ - IN PBYTE pBuffer \ - ) +#define IMP_IAllocatorMXF \ + IMP_IMXF; \ + STDMETHODIMP_(NTSTATUS) GetMessage( \ + OUT PDMUS_KERNEL_EVENT *ppDMKEvt); \ + \ + STDMETHODIMP_(USHORT) GetBufferSize(void); \ + \ + STDMETHODIMP_(NTSTATUS) GetBuffer( \ + OUT PBYTE *ppBuffer); \ + \ + STDMETHODIMP_(NTSTATUS) PutBuffer( \ + IN PBYTE pBuffer) #undef INTERFACE #define INTERFACE IPortDMus @@ -171,91 +149,85 @@ DECLARE_INTERFACE_(IAllocatorMXF, IMXF) DEFINE_GUID(IID_IPortDMus, 0xc096df9c, 0xfb09, 0x11d1, 0x81, 0xb0, 0x00, 0x60, 0x08, 0x33, 0x16, 0xc1); DEFINE_GUID(CLSID_PortDMus, 0xb7902fe9, 0xfb0a, 0x11d1, 0x81, 0xb0, 0x00, 0x60, 0x08, 0x33, 0x16, 0xc1); -DECLARE_INTERFACE_(IPortDMus, IPort) -{ - DEFINE_ABSTRACT_UNKNOWN() +DECLARE_INTERFACE_(IPortDMus, IPort) { + DEFINE_ABSTRACT_UNKNOWN() - DEFINE_ABSTRACT_PORT() + DEFINE_ABSTRACT_PORT() - STDMETHOD_(void,Notify)(THIS_ - IN PSERVICEGROUP ServiceGroup OPTIONAL - )PURE; + STDMETHOD_(void,Notify)(THIS_ + IN PSERVICEGROUP ServiceGroup OPTIONAL + ) PURE; - STDMETHOD_(void,RegisterServiceGroup)(THIS_ - IN PSERVICEGROUP ServiceGroup - ) PURE; + STDMETHOD_(void,RegisterServiceGroup)(THIS_ + IN PSERVICEGROUP ServiceGroup + ) PURE; }; typedef IPortDMus *PPORTDMUS; -#define IMP_IPortDMus \ - IMP_IPort; \ - STDMETHODIMP_(void) Notify( \ - IN PSERVICEGROUP ServiceGroup OPTIONAL \ - ); \ - \ - STDMETHODIMP_(void) RegisterServiceGroup( \ - IN PSERVICEGROUP ServiceGroup \ - ) +#define IMP_IPortDMus \ + IMP_IPort; \ + STDMETHODIMP_(void) Notify( \ + IN PSERVICEGROUP ServiceGroup OPTIONAL); \ + \ + STDMETHODIMP_(void) RegisterServiceGroup( \ + IN PSERVICEGROUP ServiceGroup) #undef INTERFACE #define INTERFACE IMiniportDMus DEFINE_GUID(IID_IMiniportDMus, 0xc096df9d, 0xfb09, 0x11d1, 0x81, 0xb0, 0x00, 0x60, 0x08, 0x33, 0x16, 0xc1); -DECLARE_INTERFACE_(IMiniportDMus, IMiniport) -{ - DEFINE_ABSTRACT_UNKNOWN() - DEFINE_ABSTRACT_MINIPORT() - +DECLARE_INTERFACE_(IMiniportDMus, IMiniport) { + DEFINE_ABSTRACT_UNKNOWN() - STDMETHOD_(NTSTATUS,Init)(THIS_ - IN PUNKNOWN UnknownAdapter, - IN PRESOURCELIST ResourceList, - IN PPORTDMUS Port, - OUT PSERVICEGROUP * ServiceGroup - ) PURE; + DEFINE_ABSTRACT_MINIPORT() - STDMETHOD_(void,Service)(THIS) PURE; + STDMETHOD_(NTSTATUS,Init)(THIS_ + IN PUNKNOWN UnknownAdapter, + IN PRESOURCELIST ResourceList, + IN PPORTDMUS Port, + OUT PSERVICEGROUP *ServiceGroup + ) PURE; - STDMETHOD_(NTSTATUS,NewStream)(THIS_ - OUT PMXF * MXF, - IN PUNKNOWN OuterUnknown OPTIONAL, - IN POOL_TYPE PoolType, - IN ULONG PinID, - IN DMUS_STREAM_TYPE StreamType, - IN PKSDATAFORMAT DataFormat, - OUT PSERVICEGROUP * ServiceGroup, - IN PAllocatorMXF AllocatorMXF, - IN PMASTERCLOCK MasterClock, - OUT PULONGLONG SchedulePreFetch - ) PURE; + STDMETHOD_(void,Service)(THIS) PURE; + + STDMETHOD_(NTSTATUS,NewStream)(THIS_ + OUT PMXF *MXF, + IN PUNKNOWN OuterUnknown OPTIONAL, + IN POOL_TYPE PoolType, + IN ULONG PinID, + IN DMUS_STREAM_TYPE StreamType, + IN PKSDATAFORMAT DataFormat, + OUT PSERVICEGROUP *ServiceGroup, + IN PAllocatorMXF AllocatorMXF, + IN PMASTERCLOCK MasterClock, + OUT PULONGLONG SchedulePreFetch + ) PURE; }; typedef IMiniportDMus *PMINIPORTDMUS; #undef INTERFACE -#define IMP_IMiniportDMus \ - IMP_IMiniport; \ - STDMETHODIMP_(NTSTATUS) Init( \ - IN PUNKNOWN UnknownAdapter, \ - IN PRESOURCELIST ResourceList, \ - IN PPORTDMUS Port, \ - OUT PSERVICEGROUP * ServiceGroup \ - ); \ - \ - STDMETHODIMP_(void) Service(THIS); \ - \ - STDMETHODIMP_(NTSTATUS) NewStream( \ - OUT PMXF * MXF, \ - IN PUNKNOWN OuterUnknown, \ - IN POOL_TYPE PoolType, \ - IN ULONG PinID, \ - IN DMUS_STREAM_TYPE StreamType, \ - IN PKSDATAFORMAT DataFormat, \ - OUT PSERVICEGROUP * ServiceGroup, \ - IN PAllocatorMXF AllocatorMXF, \ - IN PMASTERCLOCK MasterClock, \ - OUT PULONGLONG SchedulePreFetch \ - ) +#define IMP_IMiniportDMus \ + IMP_IMiniport; \ + STDMETHODIMP_(NTSTATUS) Init( \ + IN PUNKNOWN UnknownAdapter, \ + IN PRESOURCELIST ResourceList, \ + IN PPORTDMUS Port, \ + OUT PSERVICEGROUP *ServiceGroup); \ + \ + STDMETHODIMP_(void) Service(THIS); \ + \ + STDMETHODIMP_(NTSTATUS) NewStream( \ + OUT PMXF *MXF, \ + IN PUNKNOWN OuterUnknown, \ + IN POOL_TYPE PoolType, \ + IN ULONG PinID, \ + IN DMUS_STREAM_TYPE StreamType, \ + IN PKSDATAFORMAT DataFormat, \ + OUT PSERVICEGROUP *ServiceGroup, \ + IN PAllocatorMXF AllocatorMXF, \ + IN PMASTERCLOCK MasterClock, \ + OUT PULONGLONG SchedulePreFetch) -#endif +#endif /* _DMUSICKS_ */ diff --git a/include/ddk/drivinit.h b/include/ddk/drivinit.h index fb6cdc39092..44248a3f5e1 100644 --- a/include/ddk/drivinit.h +++ b/include/ddk/drivinit.h @@ -1,4 +1,2 @@ /* This are empty and is left for be compatible with building some older windows nt4/2000/2003/XP drivers */ - - diff --git a/include/ddk/drmk.h b/include/ddk/drmk.h index 5c18ec5ca38..19659e34234 100644 --- a/include/ddk/drmk.h +++ b/include/ddk/drmk.h @@ -8,19 +8,17 @@ #ifndef DRMK_H #define DRMK_H -typedef struct -{ - DWORD Flags; - PDEVICE_OBJECT DeviceObject; - PFILE_OBJECT FileObject; - PVOID Context; +typedef struct { + DWORD Flags; + PDEVICE_OBJECT DeviceObject; + PFILE_OBJECT FileObject; + PVOID Context; } DRMFORWARD, *PDRMFORWARD, *PCDRMFORWARD; -typedef struct -{ - BOOL CopyProtect; - ULONG Reserved; - BOOL DigitalOutputDisable; +typedef struct { + BOOL CopyProtect; + ULONG Reserved; + BOOL DigitalOutputDisable; } DRMRIGHTS, *PDRMRIGHTS; typedef const DRMRIGHTS *PCDRMRIGHTS; @@ -31,87 +29,82 @@ typedef const DRMRIGHTS *PCDRMRIGHTS; */ #ifdef __cplusplus -extern "C" -{ +extern "C" { #endif NTSTATUS NTAPI DrmAddContentHandlers( - IN ULONG ContentId, - IN PVOID *paHandlers, - IN ULONG NumHandlers); + IN ULONG ContentId, + IN PVOID *paHandlers, + IN ULONG NumHandlers); NTSTATUS NTAPI DrmCreateContentMixed( - IN PULONG paContentId, - IN ULONG cContentId, - OUT PULONG pMixedContentId); + IN PULONG paContentId, + IN ULONG cContentId, + OUT PULONG pMixedContentId); NTSTATUS NTAPI DrmDestroyContent( - IN ULONG ContentId); + IN ULONG ContentId); NTSTATUS NTAPI DrmForwardContentToDeviceObject( - IN ULONG ContentId, - IN PVOID Reserved, - IN PCDRMFORWARD DrmForward); + IN ULONG ContentId, + IN PVOID Reserved, + IN PCDRMFORWARD DrmForward); NTSTATUS NTAPI DrmForwardContentToFileObject( - IN ULONG ContentId, - IN PFILE_OBJECT FileObject); + IN ULONG ContentId, + IN PFILE_OBJECT FileObject); NTSTATUS NTAPI DrmForwardContentToInterface( - IN ULONG ContentId, - IN PUNKNOWN pUnknown, - IN ULONG NumMethods); + IN ULONG ContentId, + IN PUNKNOWN pUnknown, + IN ULONG NumMethods); NTSTATUS NTAPI DrmGetContentRights( - IN ULONG ContentId, - OUT PDRMRIGHTS DrmRights); + IN ULONG ContentId, + OUT PDRMRIGHTS DrmRights); #ifdef __cplusplus } #endif - - DEFINE_GUID(IID_IDrmAudioStream, - 0x1915c967, 0x3299, 0x48cb, 0xa3, 0xe4, 0x69, 0xfd, 0x1d, 0x1b, 0x30, 0x6e); + 0x1915c967, 0x3299, 0x48cb, 0xa3, 0xe4, 0x69, 0xfd, 0x1d, 0x1b, 0x30, 0x6e); #undef INTERFACE #define INTERFACE IDrmAudioStream -DECLARE_INTERFACE_(IDrmAudioStream, IUnknown) -{ - STDMETHOD_(NTSTATUS, QueryInterface)(THIS_ - REFIID InterfaceId, - PVOID* Interface - ) PURE; - STDMETHOD_(ULONG,AddRef)(THIS) PURE; - STDMETHOD_(ULONG,Release)(THIS) PURE; - STDMETHOD_(NTSTATUS,SetContentId)(THIS_ - IN ULONG ContentId, - IN PCDRMRIGHTS DrmRights) PURE; +DECLARE_INTERFACE_(IDrmAudioStream, IUnknown) { + STDMETHOD_(NTSTATUS, QueryInterface)(THIS_ + REFIID InterfaceId, + PVOID* Interface + ) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + STDMETHOD_(NTSTATUS,SetContentId)(THIS_ + IN ULONG ContentId, + IN PCDRMRIGHTS DrmRights + ) PURE; }; typedef IDrmAudioStream *PDRMAUDIOSTREAM; -#define IMP_IDrmAudioStream \ - STDMETHODIMP_(NTSTATUS) SetContentId \ - ( IN ULONG ContentId, \ - IN PCDRMRIGHTS DrmRights \ - ); +#define IMP_IDrmAudioStream \ + STDMETHODIMP_(NTSTATUS) SetContentId( \ + IN ULONG ContentId, \ + IN PCDRMRIGHTS DrmRights); - -#endif +#endif /* DRMK_H */ diff --git a/include/ddk/dxapi.h b/include/ddk/dxapi.h index 58c29ac2dc5..6108fe8d379 100644 --- a/include/ddk/dxapi.h +++ b/include/ddk/dxapi.h @@ -1,5 +1,5 @@ ULONG -DxApiGetVersion(); +DxApiGetVersion(void); ULONG DxApi( diff --git a/include/ddk/hubbusif.h b/include/ddk/hubbusif.h index cf97c5cf64f..be7b12e6b48 100644 --- a/include/ddk/hubbusif.h +++ b/include/ddk/hubbusif.h @@ -22,15 +22,15 @@ typedef struct _ROOTHUB_PDO_EXTENSION { #define USB_BUSIFFN __stdcall #endif -#define CD_ERR_V1 0x00000001 +#define CD_ERR_V1 0x00000001 -#define ID_ERR_V1 0x00000001 +#define ID_ERR_V1 0x00000001 #define USBD_KEEP_DEVICE_DATA 0x00000001 #define USBD_MARK_DEVICE_BUSY 0x00000002 -#define USB_IDLE_NOT_READY 0 -#define USB_IDLE_READY 1 +#define USB_IDLE_NOT_READY 0 +#define USB_IDLE_READY 1 typedef NTSTATUS @@ -41,7 +41,6 @@ USB_BUSIFFN_CREATE_USB_DEVICE ( IN PUSB_DEVICE_HANDLE HubDeviceHandle, IN USHORT PortStatus, IN USHORT PortNumber); - typedef USB_BUSIFFN_CREATE_USB_DEVICE *PUSB_BUSIFFN_CREATE_USB_DEVICE; typedef enum _USBPORT_CREATEDEV_ERROR { @@ -56,47 +55,45 @@ typedef enum _USBPORT_CREATEDEV_ERROR { } USBPORT_CREATEDEV_ERROR; typedef struct _USB_CD_ERROR_INFORMATION { - ULONG Version; - USBPORT_CREATEDEV_ERROR PathError; - ULONG UlongArg1; - ULONG UlongArg2; - NTSTATUS NtStatus; - UCHAR XtraInfo[64]; + ULONG Version; + USBPORT_CREATEDEV_ERROR PathError; + ULONG UlongArg1; + ULONG UlongArg2; + NTSTATUS NtStatus; + UCHAR XtraInfo[64]; } USB_CD_ERROR_INFORMATION, *PUSB_CD_ERROR_INFORMATION; typedef NTSTATUS USB_BUSIFFN USB_BUSIFFN_CREATE_USB_DEVICE_EX ( - IN PVOID BusContext, - OUT PUSB_DEVICE_HANDLE *NewDeviceHandle, - IN PUSB_DEVICE_HANDLE HsHubDeviceHandle, - IN USHORT PortStatus, - IN USHORT PortNumber, - OUT PUSB_CD_ERROR_INFORMATION CdErrorInfo, + IN PVOID BusContext, + OUT PUSB_DEVICE_HANDLE *NewDeviceHandle, + IN PUSB_DEVICE_HANDLE HsHubDeviceHandle, + IN USHORT PortStatus, + IN USHORT PortNumber, + OUT PUSB_CD_ERROR_INFORMATION CdErrorInfo, IN USHORT TtPortNumber); - typedef USB_BUSIFFN_CREATE_USB_DEVICE_EX *PUSB_BUSIFFN_CREATE_USB_DEVICE_EX; typedef struct _USB_PORT_PATH { - ULONG PortPathDepth; - ULONG PortPath[6]; + ULONG PortPathDepth; + ULONG PortPath[6]; } USB_PORT_PATH, *PUSB_PORT_PATH; typedef NTSTATUS USB_BUSIFFN USB_BUSIFFN_CREATE_USB_DEVICE_V7 ( - IN PVOID BusContext, - OUT PUSB_DEVICE_HANDLE *NewDeviceHandle, - IN PUSB_DEVICE_HANDLE HsHubDeviceHandle, - IN USHORT PortStatus, - IN PUSB_PORT_PATH PortPath, - OUT PUSB_CD_ERROR_INFORMATION CdErrorInfo, - IN USHORT TtPortNumber, - IN PDEVICE_OBJECT PdoDeviceObject, - IN PUNICODE_STRING PhysicalDeviceObjectName); - + IN PVOID BusContext, + OUT PUSB_DEVICE_HANDLE *NewDeviceHandle, + IN PUSB_DEVICE_HANDLE HsHubDeviceHandle, + IN USHORT PortStatus, + IN PUSB_PORT_PATH PortPath, + OUT PUSB_CD_ERROR_INFORMATION CdErrorInfo, + IN USHORT TtPortNumber, + IN PDEVICE_OBJECT PdoDeviceObject, + IN PUNICODE_STRING PhysicalDeviceObjectName); typedef USB_BUSIFFN_CREATE_USB_DEVICE_V7 *PUSB_BUSIFFN_CREATE_USB_DEVICE_V7; typedef enum _USBPORT_INITDEV_ERROR { @@ -120,29 +117,26 @@ typedef NTSTATUS USB_BUSIFFN USB_BUSIFFN_INITIALIZE_USB_DEVICE ( - IN PVOID BusContext, - IN OUT PUSB_DEVICE_HANDLE DeviceHandle); - + IN PVOID BusContext, + IN OUT PUSB_DEVICE_HANDLE DeviceHandle); typedef USB_BUSIFFN_INITIALIZE_USB_DEVICE *PUSB_BUSIFFN_INITIALIZE_USB_DEVICE; typedef NTSTATUS USB_BUSIFFN USB_BUSIFFN_INITIALIZE_USB_DEVICE_EX ( - IN PVOID BusContext, - IN OUT PUSB_DEVICE_HANDLE DeviceHandle, - OUT PUSB_ID_ERROR_INFORMATION IdErrInfo); - + IN PVOID BusContext, + IN OUT PUSB_DEVICE_HANDLE DeviceHandle, + OUT PUSB_ID_ERROR_INFORMATION IdErrInfo); typedef USB_BUSIFFN_INITIALIZE_USB_DEVICE_EX *PUSB_BUSIFFN_INITIALIZE_USB_DEVICE_EX; typedef NTSTATUS USB_BUSIFFN USB_BUSIFFN_REMOVE_USB_DEVICE ( - IN PVOID BusContext, - IN OUT PUSB_DEVICE_HANDLE DeviceHandle, - IN ULONG Flags); - + IN PVOID BusContext, + IN OUT PUSB_DEVICE_HANDLE DeviceHandle, + IN ULONG Flags); typedef USB_BUSIFFN_REMOVE_USB_DEVICE *PUSB_BUSIFFN_REMOVE_USB_DEVICE; typedef @@ -155,7 +149,6 @@ USB_BUSIFFN_GET_USB_DESCRIPTORS ( IN OUT PULONG DeviceDescriptorBufferLength, OUT PUCHAR ConfigDescriptorBuffer, IN OUT PULONG ConfigDescriptorBufferLength); - typedef USB_BUSIFFN_GET_USB_DESCRIPTORS *PUSB_BUSIFFN_GET_USB_DESCRIPTORS; typedef @@ -165,7 +158,6 @@ USB_BUSIFFN_RESTORE_DEVICE ( IN PVOID BusContext, IN OUT PUSB_DEVICE_HANDLE OldDeviceHandle, IN OUT PUSB_DEVICE_HANDLE NewDeviceHandle); - typedef USB_BUSIFFN_RESTORE_DEVICE *PUSB_BUSIFFN_RESTORE_DEVICE; typedef @@ -174,7 +166,6 @@ USB_BUSIFFN USB_BUSIFFN_GET_POTRTHACK_FLAGS ( IN PVOID BusContext, IN OUT PULONG Flags); - typedef USB_BUSIFFN_GET_POTRTHACK_FLAGS *PUSB_BUSIFFN_GET_POTRTHACK_FLAGS; typedef @@ -186,7 +177,6 @@ USB_BUSIFFN_GET_DEVICE_INFORMATION ( OUT PVOID DeviceInformationBuffer, IN ULONG DeviceInformationBufferLength, IN OUT PULONG LengthOfDataCopied); - typedef USB_BUSIFFN_GET_DEVICE_INFORMATION *PUSB_BUSIFFN_GET_DEVICE_INFORMATION; typedef @@ -197,7 +187,6 @@ USB_BUSIFFN_GET_CONTROLLER_INFORMATION ( IN OUT PVOID ControllerInformationBuffer, IN ULONG ControllerInformationBufferLength, IN OUT PULONG LengthOfDataCopied); - typedef USB_BUSIFFN_GET_CONTROLLER_INFORMATION *PUSB_BUSIFFN_GET_CONTROLLER_INFORMATION; typedef @@ -206,7 +195,6 @@ USB_BUSIFFN USB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND ( IN PVOID BusContext, IN BOOLEAN Enable); - typedef USB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND *PUSB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND; typedef @@ -218,7 +206,6 @@ USB_BUSIFFN_GET_EXTENDED_HUB_INFO ( IN PVOID HubInformationBuffer, IN ULONG HubInformationBufferLength, OUT PULONG LengthOfDataCopied); - typedef USB_BUSIFFN_GET_EXTENDED_HUB_INFO *PUSB_BUSIFFN_GET_EXTENDED_HUB_INFO; typedef @@ -229,7 +216,6 @@ USB_BUSIFFN_GET_ROOTHUB_SYM_NAME ( IN PVOID HubSymNameBuffer, IN ULONG HubSymNameBufferLength, OUT PULONG HubSymNameActualLength); - typedef USB_BUSIFFN_GET_ROOTHUB_SYM_NAME *PUSB_BUSIFFN_GET_ROOTHUB_SYM_NAME; typedef @@ -238,7 +224,6 @@ USB_BUSIFFN USB_BUSIFFN_GET_DEVICE_BUSCONTEXT ( IN PVOID HubBusContext, IN PVOID DeviceHandle); - typedef USB_BUSIFFN_GET_DEVICE_BUSCONTEXT *PUSB_BUSIFFN_GET_DEVICE_BUSCONTEXT; typedef @@ -248,7 +233,6 @@ USB_BUSIFFN_INITIALIZE_20HUB ( IN PVOID BusContext, IN PUSB_DEVICE_HANDLE HubDeviceHandle, IN ULONG TtCount); - typedef USB_BUSIFFN_INITIALIZE_20HUB *PUSB_BUSIFFN_INITIALIZE_20HUB; typedef @@ -257,7 +241,6 @@ USB_BUSIFFN USB_BUSIFFN_IS_ROOT ( IN PVOID BusContext, IN PVOID DeviceObject); - typedef USB_BUSIFFN_IS_ROOT *PUSB_BUSIFFN_IS_ROOT; typedef @@ -265,7 +248,6 @@ VOID USB_BUSIFFN USB_BUSIFFN_ACQUIRE_SEMAPHORE ( IN PVOID BusContext); - typedef USB_BUSIFFN_ACQUIRE_SEMAPHORE *PUSB_BUSIFFN_ACQUIRE_SEMAPHORE; typedef @@ -273,7 +255,6 @@ VOID USB_BUSIFFN USB_BUSIFFN_RELEASE_SEMAPHORE ( IN PVOID BusContext); - typedef USB_BUSIFFN_RELEASE_SEMAPHORE *PUSB_BUSIFFN_RELEASE_SEMAPHORE; typedef @@ -281,7 +262,6 @@ VOID __stdcall RH_INIT_CALLBACK ( IN PVOID CallBackContext); - typedef RH_INIT_CALLBACK *PRH_INIT_CALLBACK; typedef @@ -291,7 +271,6 @@ USB_BUSIFFN_ROOTHUB_INIT_NOTIFY ( IN PVOID BusContext, IN PVOID CallbackContext, IN PRH_INIT_CALLBACK CallbackRoutine); - typedef USB_BUSIFFN_ROOTHUB_INIT_NOTIFY *PUSB_BUSIFFN_ROOTHUB_INIT_NOTIFY; typedef @@ -300,7 +279,6 @@ USB_BUSIFFN USB_BUSIFFN_FLUSH_TRANSFERS ( IN PVOID BusContext, IN PVOID DeviceHandle); - typedef USB_BUSIFFN_FLUSH_TRANSFERS *PUSB_BUSIFFN_FLUSH_TRANSFERS; typedef @@ -310,7 +288,6 @@ USB_BUSIFFN_CALC_PIPE_BANDWIDTH ( IN PVOID BusContext, IN PUSBD_PIPE_INFORMATION PipeInfo, IN USB_DEVICE_SPEED DeviceSpeed); - typedef USB_BUSIFFN_CALC_PIPE_BANDWIDTH *PUSB_BUSIFFN_CALC_PIPE_BANDWIDTH; typedef @@ -319,7 +296,6 @@ USB_BUSIFFN USB_BUSIFFN_SET_BUS_WAKE_MODE ( IN PVOID BusContext, IN ULONG Mode); - typedef USB_BUSIFFN_SET_BUS_WAKE_MODE *PUSB_BUSIFFN_SET_BUS_WAKE_MODE; typedef @@ -330,7 +306,6 @@ USB_BUSIFFN_SET_DEVICE_FLAG ( IN GUID *DeviceFlagGuid, IN PVOID ValueData, IN ULONG ValueLength); - typedef USB_BUSIFFN_SET_DEVICE_FLAG *PUSB_BUSIFFN_SET_DEVICE_FLAG; typedef @@ -340,7 +315,6 @@ USB_BUSIFFN_SET_DEVHANDLE_DATA ( IN PVOID BusContext, IN PVOID DeviceHandle, IN PDEVICE_OBJECT UsbDevicePdo); - typedef USB_BUSIFFN_SET_DEVHANDLE_DATA *PUSB_BUSIFFN_SET_DEVHANDLE_DATA; typedef @@ -351,7 +325,6 @@ USB_BUSIFFN_TEST_POINT ( IN PVOID DeviceHandle, IN ULONG Opcode, IN PVOID TestData); - typedef USB_BUSIFFN_TEST_POINT *PUSB_BUSIFFN_TEST_POINT; typedef @@ -363,7 +336,6 @@ USB_BUSIFFN_GET_DEVICE_PERFORMANCE_INFO ( OUT PVOID DeviceInformationBuffer, IN ULONG DeviceInformationBufferLength, IN OUT PULONG LengthOfDataCopied); - typedef USB_BUSIFFN_GET_DEVICE_PERFORMANCE_INFO *PUSB_BUSIFFN_GET_DEVICE_PERFORMANCE_INFO; typedef @@ -371,7 +343,6 @@ NTSTATUS USB_BUSIFFN USB_BUSIFFN_WAIT_ASYNC_POWERUP ( IN PVOID BusContext); - typedef USB_BUSIFFN_WAIT_ASYNC_POWERUP *PUSB_BUSIFFN_WAIT_ASYNC_POWERUP; typedef @@ -381,7 +352,6 @@ USB_BUSIFFN_GET_DEVICE_ADDRESS ( IN PVOID BusContext, IN PUSB_DEVICE_HANDLE DeviceHandle, OUT PUSHORT DeviceAddress); - typedef USB_BUSIFFN_GET_DEVICE_ADDRESS *PUSB_BUSIFFN_GET_DEVICE_ADDRESS; typedef @@ -392,7 +362,6 @@ USB_BUSIFFN_DEREF_DEVICE_HANDLE ( IN PUSB_DEVICE_HANDLE DeviceHandle, IN PVOID Object, IN ULONG Tag); - typedef USB_BUSIFFN_DEREF_DEVICE_HANDLE *PUSB_BUSIFFN_DEREF_DEVICE_HANDLE; typedef @@ -403,7 +372,6 @@ USB_BUSIFFN_REF_DEVICE_HANDLE ( IN PUSB_DEVICE_HANDLE DeviceHandle, IN PVOID Object, IN ULONG Tag); - typedef USB_BUSIFFN_REF_DEVICE_HANDLE *PUSB_BUSIFFN_REF_DEVICE_HANDLE; typedef @@ -413,7 +381,6 @@ USB_BUSIFFN_SET_DEVICE_HANDLE_IDLE_READY_STATE ( IN PVOID BusContext, IN PUSB_DEVICE_HANDLE DeviceHandle, IN ULONG NewIdleReadyState); - typedef USB_BUSIFFN_SET_DEVICE_HANDLE_IDLE_READY_STATE *PUSB_BUSIFFN_SET_DEVICE_HANDLE_IDLE_READY_STATE; typedef @@ -423,7 +390,6 @@ USB_BUSIFFN_GET_CONTAINER_ID_FOR_PORT ( IN PVOID BusContext, IN USHORT PortNumber, OUT LPGUID ContainerId); - typedef USB_BUSIFFN_GET_CONTAINER_ID_FOR_PORT *PUSB_BUSIFFN_GET_CONTAINER_ID_FOR_PORT; typedef @@ -433,7 +399,6 @@ USB_BUSIFFN_SET_CONTAINER_ID_FOR_PORT ( IN PVOID BusContext, IN USHORT PortNumber, IN LPGUID ContainerId); - typedef USB_BUSIFFN_SET_CONTAINER_ID_FOR_PORT *PUSB_BUSIFFN_SET_CONTAINER_ID_FOR_PORT; typedef @@ -442,7 +407,6 @@ USB_BUSIFFN USB_BUSIFFN_ABORT_ALL_DEVICE_PIPES ( IN PVOID BusContext, IN PUSB_DEVICE_HANDLE DeviceHandle); - typedef USB_BUSIFFN_ABORT_ALL_DEVICE_PIPES *PUSB_BUSIFFN_ABORT_ALL_DEVICE_PIPES; #define ERRATA_FLAG_RESET_TT_ON_CANCEL 1 @@ -468,11 +432,10 @@ USB_BUSIFFN_SET_DEVICE_ERRATA_FLAG ( IN PVOID BusContext, IN PUSB_DEVICE_HANDLE DeviceHandle, IN ULONG DeviceErrataFlag); - typedef USB_BUSIFFN_SET_DEVICE_ERRATA_FLAG *PUSB_BUSIFFN_SET_DEVICE_ERRATA_FLAG; DEFINE_GUID(USB_BUS_INTERFACE_HUB_GUID, -0xb2bb8c0a, 0x5ab4, 0x11d3, 0xa8, 0xcd, 0x0, 0xc0, 0x4f, 0x68, 0x74, 0x7a); + 0xb2bb8c0a, 0x5ab4, 0x11d3, 0xa8, 0xcd, 0x0, 0xc0, 0x4f, 0x68, 0x74, 0x7a); typedef struct _USB_BUS_INTERFACE_HUB_V0 { USHORT Size; @@ -667,7 +630,7 @@ typedef struct _USB_BUS_INTERFACE_HUB_V7 { } USB_BUS_INTERFACE_HUB_V7, *PUSB_BUS_INTERFACE_HUB_V7; DEFINE_GUID(USB_BUS_INTERFACE_HUB_MINIDUMP_GUID, -0xc5485f21, 0x4e81, 0x4a23, 0xa8, 0xf9, 0xd8, 0x51, 0x8a, 0xf4, 0x5c, 0x38); + 0xc5485f21, 0x4e81, 0x4a23, 0xa8, 0xf9, 0xd8, 0x51, 0x8a, 0xf4, 0x5c, 0x38); typedef VOID (USB_BUSIFFN *PUSB_BUSIFFN_SET_MINIDUMP_FLAGS) ( @@ -683,7 +646,7 @@ typedef struct _USB_BUS_INTERFACE_HUB_MINIDUMP { } USB_BUS_INTERFACE_HUB_MINIDUMP, *PUSB_BUS_INTERFACE_HUB_MINIDUMP; DEFINE_GUID(USB_BUS_INTERFACE_HUB_SS_GUID, -0xbfc3f363, 0x8ba1, 0x4c7b, 0x97, 0xba, 0x9b, 0x12, 0xb1, 0xca, 0x13, 0x2f); + 0xbfc3f363, 0x8ba1, 0x4c7b, 0x97, 0xba, 0x9b, 0x12, 0xb1, 0xca, 0x13, 0x2f); typedef NTSTATUS (USB_BUSIFFN *PUSB_BUSIFFN_SUSPEND_HUB) ( @@ -694,95 +657,95 @@ typedef NTSTATUS PDEVICE_OBJECT Pdo); typedef struct _USB_BUS_INTERFACE_HUB_SELECTIVE_SUSPEND { - USHORT Size; - USHORT Version; - PVOID BusContext; - PINTERFACE_REFERENCE InterfaceReference; - PINTERFACE_DEREFERENCE InterfaceDereference; - PUSB_BUSIFFN_SUSPEND_HUB SuspendHub; - PUSB_BUSIFFN_RESUME_HUB ResumeHub; + USHORT Size; + USHORT Version; + PVOID BusContext; + PINTERFACE_REFERENCE InterfaceReference; + PINTERFACE_DEREFERENCE InterfaceDereference; + PUSB_BUSIFFN_SUSPEND_HUB SuspendHub; + PUSB_BUSIFFN_RESUME_HUB ResumeHub; } USB_BUS_INTERFACE_HUB_SELECTIVE_SUSPEND, *PUSB_BUS_INTERFACE_HUB_SELECTIVE_SUSPEND; #include typedef struct _USB_PIPE_INFORMATION_0 { - USB_ENDPOINT_DESCRIPTOR EndpointDescriptor; - UCHAR ED_Pad[1]; - ULONG ScheduleOffset; + USB_ENDPOINT_DESCRIPTOR EndpointDescriptor; + UCHAR ED_Pad[1]; + ULONG ScheduleOffset; } USB_PIPE_INFORMATION_0, *PUSB_PIPE_INFORMATION_0; typedef struct _USB_LEVEL_INFORMATION { - ULONG InformationLevel; - ULONG ActualLength; + ULONG InformationLevel; + ULONG ActualLength; } USB_LEVEL_INFORMATION, *PUSB_LEVEL_INFORMATION; typedef struct _USB_DEVICE_INFORMATION_0 { - ULONG InformationLevel; - ULONG ActualLength; - ULONG PortNumber; - USB_DEVICE_DESCRIPTOR DeviceDescriptor; - UCHAR DD_pad[2]; - UCHAR CurrentConfigurationValue; - UCHAR ReservedMBZ; - USHORT DeviceAddress; - ULONG HubAddress; - USB_DEVICE_SPEED DeviceSpeed; - USB_DEVICE_TYPE DeviceType; - ULONG NumberOfOpenPipes; - USB_PIPE_INFORMATION_0 PipeList[1]; + ULONG InformationLevel; + ULONG ActualLength; + ULONG PortNumber; + USB_DEVICE_DESCRIPTOR DeviceDescriptor; + UCHAR DD_pad[2]; + UCHAR CurrentConfigurationValue; + UCHAR ReservedMBZ; + USHORT DeviceAddress; + ULONG HubAddress; + USB_DEVICE_SPEED DeviceSpeed; + USB_DEVICE_TYPE DeviceType; + ULONG NumberOfOpenPipes; + USB_PIPE_INFORMATION_0 PipeList[1]; } USB_DEVICE_INFORMATION_0, *PUSB_DEVICE_INFORMATION_0; typedef struct _USB_CONTROLLER_INFORMATION_0 { - ULONG InformationLevel; - ULONG ActualLength; - BOOLEAN SelectiveSuspendEnabled; - BOOLEAN IsHighSpeedController; + ULONG InformationLevel; + ULONG ActualLength; + BOOLEAN SelectiveSuspendEnabled; + BOOLEAN IsHighSpeedController; } USB_CONTROLLER_INFORMATION_0, *PUSB_CONTROLLER_INFORMATION_0; typedef struct _USB_CONTROLLER_INFORMATION_1 { - ULONG InformationLevel; - ULONG ActualLength; - BOOLEAN SelectiveSuspendEnabled; - BOOLEAN IsHighSpeedController; - ULONG HcBusNumber; - ULONG HcBusDevice; - ULONG HcBusFunction; + ULONG InformationLevel; + ULONG ActualLength; + BOOLEAN SelectiveSuspendEnabled; + BOOLEAN IsHighSpeedController; + ULONG HcBusNumber; + ULONG HcBusDevice; + ULONG HcBusFunction; } USB_CONTROLLER_INFORMATION_1, *PUSB_CONTROLLER_INFORMATION_1; typedef struct _USB_EXTPORT_INFORMATION_0 { - ULONG PhysicalPortNumber; - ULONG PortLabelNumber; - USHORT VidOverride; - USHORT PidOverride; - ULONG PortAttributes; + ULONG PhysicalPortNumber; + ULONG PortLabelNumber; + USHORT VidOverride; + USHORT PidOverride; + ULONG PortAttributes; } USB_EXTPORT_INFORMATION_0, *PUSB_EXTPORT_INFORMATION; typedef struct _USB_EXTHUB_INFORMATION_0 { - ULONG InformationLevel; - ULONG NumberOfPorts; - USB_EXTPORT_INFORMATION_0 Port[255]; + ULONG InformationLevel; + ULONG NumberOfPorts; + USB_EXTPORT_INFORMATION_0 Port[255]; } USB_EXTHUB_INFORMATION_0, *PUSB_EXTHUB_INFORMATION_0; typedef struct _USB_DEVICE_PERFORMANCE_INFO_0 { - ULONG InformationLevel; - ULONG ActualLength; - ULONG BulkBytes; - ULONG BulkUrbCount; - ULONG ControlDataBytes; - ULONG ControlUrbCount; - ULONG IsoBytes; - ULONG IsoUrbCount; - ULONG InterruptBytes; - ULONG InterruptUrbCount; - ULONG AllocedInterrupt[6]; - ULONG AllocedIso; - ULONG Total32secBandwidth; - ULONG TotalTtBandwidth; - ULONG TotalIsoLatency; - ULONG DroppedIsoPackets; - ULONG TransferErrors; + ULONG InformationLevel; + ULONG ActualLength; + ULONG BulkBytes; + ULONG BulkUrbCount; + ULONG ControlDataBytes; + ULONG ControlUrbCount; + ULONG IsoBytes; + ULONG IsoUrbCount; + ULONG InterruptBytes; + ULONG InterruptUrbCount; + ULONG AllocedInterrupt[6]; + ULONG AllocedIso; + ULONG Total32secBandwidth; + ULONG TotalTtBandwidth; + ULONG TotalIsoLatency; + ULONG DroppedIsoPackets; + ULONG TransferErrors; } USB_DEVICE_PERFORMANCE_INFO_0, *PUSB_DEVICE_PERFORMANCE_INFO_0; #include -#endif +#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ diff --git a/include/ddk/ide.h b/include/ddk/ide.h index 5744a3fc0eb..7b99cedf43b 100644 --- a/include/ddk/ide.h +++ b/include/ddk/ide.h @@ -23,15 +23,6 @@ #ifndef __IDE_H #define __IDE_H -/* Helper macro to enable gcc's extension. */ -#ifndef __GNU_EXTENSION -#ifdef __GNUC__ -#define __GNU_EXTENSION __extension__ -#else -#define __GNU_EXTENSION -#endif -#endif - #ifdef __cplusplus extern "C" { #endif diff --git a/include/ddk/imm.h b/include/ddk/imm.h deleted file mode 100644 index 6e4d42fb447..00000000000 --- a/include/ddk/imm.h +++ /dev/null @@ -1,173 +0,0 @@ -/* - * Copyright (C) 2007 CodeWeavers, Aric Stewart - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#ifndef _DDKIMM_H_ -#define _DDKIMM_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct _tagINPUTCONTEXT { - HWND hWnd; - BOOL fOpen; - POINT ptStatusWndPos; - POINT ptSoftKbdPos; - DWORD fdwConversion; - DWORD fdwSentence; - union { - LOGFONTA A; - LOGFONTW W; - } lfFont; - COMPOSITIONFORM cfCompForm; - CANDIDATEFORM cfCandForm[4]; - HIMCC hCompStr; - HIMCC hCandInfo; - HIMCC hGuideLine; - HIMCC hPrivate; - DWORD dwNumMsgBuf; - HIMCC hMsgBuf; - DWORD fdwInit; - DWORD dwReserve[3]; -} INPUTCONTEXT, *LPINPUTCONTEXT; - -typedef struct _tagIMEINFO { - DWORD dwPrivateDataSize; - DWORD fdwProperty; - DWORD fdwConversionCaps; - DWORD fdwSentenceCaps; - DWORD fdwUICaps; - DWORD fdwSCSCaps; - DWORD fdwSelectCaps; -} IMEINFO, *LPIMEINFO; - -typedef struct tagCOMPOSITIONSTRING { - DWORD dwSize; - DWORD dwCompReadAttrLen; - DWORD dwCompReadAttrOffset; - DWORD dwCompReadClauseLen; - DWORD dwCompReadClauseOffset; - DWORD dwCompReadStrLen; - DWORD dwCompReadStrOffset; - DWORD dwCompAttrLen; - DWORD dwCompAttrOffset; - DWORD dwCompClauseLen; - DWORD dwCompClauseOffset; - DWORD dwCompStrLen; - DWORD dwCompStrOffset; - DWORD dwCursorPos; - DWORD dwDeltaStart; - DWORD dwResultReadClauseLen; - DWORD dwResultReadClauseOffset; - DWORD dwResultReadStrLen; - DWORD dwResultReadStrOffset; - DWORD dwResultClauseLen; - DWORD dwResultClauseOffset; - DWORD dwResultStrLen; - DWORD dwResultStrOffset; - DWORD dwPrivateSize; - DWORD dwPrivateOffset; -} COMPOSITIONSTRING, *LPCOMPOSITIONSTRING; - -typedef struct tagGUIDELINE { - DWORD dwSize; - DWORD dwLevel; - DWORD dwIndex; - DWORD dwStrLen; - DWORD dwStrOffset; - DWORD dwPrivateSize; - DWORD dwPrivateOffset; -} GUIDELINE, *LPGUIDELINE; - -typedef struct tagCANDIDATEINFO { - DWORD dwSize; - DWORD dwCount; - DWORD dwOffset[32]; - DWORD dwPrivateSize; - DWORD dwPrivateOffset; -} CANDIDATEINFO, *LPCANDIDATEINFO; - -LPINPUTCONTEXT WINAPI ImmLockIMC(HIMC); -BOOL WINAPI ImmUnlockIMC(HIMC); -DWORD WINAPI ImmGetIMCLockCount(HIMC); -HIMCC WINAPI ImmCreateIMCC(DWORD); -HIMCC WINAPI ImmDestroyIMCC(HIMCC); -LPVOID WINAPI ImmLockIMCC(HIMCC); -BOOL WINAPI ImmUnlockIMCC(HIMCC); -DWORD WINAPI ImmGetIMCCLockCount(HIMCC); -HIMCC WINAPI ImmReSizeIMCC(HIMCC, DWORD); -DWORD WINAPI ImmGetIMCCSize(HIMCC); - -#define IMMGWL_IMC 0 -#define IMMGWL_PRIVATE (sizeof(LONG)) - -/* IME Property bits */ -#define IME_PROP_END_UNLOAD 0x0001 -#define IME_PROP_KBD_CHAR_FIRST 0x0002 -#define IME_PROP_IGNORE_UPKEYS 0x0004 -#define IME_PROP_NEED_ALTKEY 0x0008 -#define IME_PROP_NO_KEYS_ON_CLOSE 0x0010 - -/* for NI_CONTEXTUPDATED */ -#define IMC_SETCONVERSIONMODE 0x0002 -#define IMC_SETSENTENCEMODE 0x0004 -#define IMC_SETOPENSTATUS 0x0006 - -/* dwAction for ImmNotifyIME */ -#define NI_CONTEXTUPDATED 0x0003 -#define NI_OPENCANDIDATE 0x0010 -#define NI_CLOSECANDIDATE 0x0011 -#define NI_SELECTCANDIDATESTR 0x0012 -#define NI_CHANGECANDIDATELIST 0x0013 -#define NI_FINALIZECONVERSIONRESULT 0x0014 -#define NI_COMPOSITIONSTR 0x0015 -#define NI_SETCANDIDATE_PAGESTART 0x0016 -#define NI_SETCANDIDATE_PAGESIZE 0x0017 -#define NI_IMEMENUSELECTED 0x0018 - -BOOL WINAPI ImmGenerateMessage(HIMC); -LRESULT WINAPI ImmRequestMessageA(HIMC, WPARAM, LPARAM); -LRESULT WINAPI ImmRequestMessageW(HIMC, WPARAM, LPARAM); -#define ImmRequestMessage WINELIB_NAME_AW(ImmRequestMessage); -BOOL WINAPI ImmTranslateMessage(HWND, UINT, WPARAM, LPARAM); -HWND WINAPI ImmCreateSoftKeyboard(UINT, UINT, int, int); -BOOL WINAPI ImmDestroySoftKeyboard(HWND); -BOOL WINAPI ImmShowSoftKeyboard(HWND, int); - -BOOL WINAPI ImeInquire(LPIMEINFO, LPWSTR, LPCWSTR lpszOptions); -BOOL WINAPI ImeConfigure (HKL, HWND, DWORD, LPVOID); -DWORD WINAPI ImeConversionList(HIMC, LPCWSTR, LPCANDIDATELIST,DWORD,UINT); -BOOL WINAPI ImeDestroy(UINT); -LRESULT WINAPI ImeEscape(HIMC, UINT, LPVOID); -BOOL WINAPI ImeProcessKey(HIMC, UINT, LPARAM, CONST LPBYTE); -BOOL WINAPI ImeSelect(HIMC, BOOL); -BOOL WINAPI ImeSetActiveContext(HIMC, BOOL); -UINT WINAPI ImeToAsciiEx(UINT, UINT, CONST LPBYTE, LPDWORD, UINT, HIMC); -BOOL WINAPI NotifyIME(HIMC, DWORD, DWORD, DWORD); -BOOL WINAPI ImeRegisterWord(LPCWSTR, DWORD, LPCWSTR); -BOOL WINAPI ImeUnregisterWord(LPCWSTR, DWORD, LPCWSTR); -UINT WINAPI ImeGetRegisterWordStyle(UINT, LPSTYLEBUFW); -UINT WINAPI ImeEnumRegisterWord(REGISTERWORDENUMPROCW, LPCWSTR, DWORD, LPCWSTR, LPVOID); -BOOL WINAPI ImeSetCompositionString(HIMC, DWORD, LPCVOID, DWORD, LPCVOID, DWORD); -DWORD WINAPI ImeGetImeMenuItems(HIMC, DWORD, DWORD, LPIMEMENUITEMINFOW, LPIMEMENUITEMINFOW, DWORD); - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* _DDKIMM_H_ */ diff --git a/include/ddk/ioaccess.h b/include/ddk/ioaccess.h index 0f1877f6c19..d1247302c0a 100755 --- a/include/ddk/ioaccess.h +++ b/include/ddk/ioaccess.h @@ -24,7 +24,7 @@ extern "C" { #endif #define H2I(p) PtrToUshort(p) - + #ifndef NO_PORT_MACROS #if defined(_X86_) || defined(_M_AMD64) @@ -41,7 +41,7 @@ extern "C" { #define WRITE_PORT_USHORT(p, v) __outword (H2I(p), (v)) #define WRITE_PORT_ULONG(p, v) __outdword (H2I(p), (v)) -#define MEMORY_BARRIER() +#define MEMORY_BARRIER() #elif defined(_PPC_) || defined(_MIPS_) || defined(_ARM_) @@ -59,10 +59,15 @@ extern "C" { #define WRITE_PORT_ULONG(p, v) WRITE_REGISTER_ULONG(p, (ULONG) (v)) #else - + #error Unsupported architecture #endif #endif /* NO_PORT_MACROS */ + +#ifdef __cplusplus +} +#endif + #endif /* __IOACCESS_H */ diff --git a/include/ddk/isguids.h b/include/ddk/isguids.h deleted file mode 100644 index 550207fad48..00000000000 --- a/include/ddk/isguids.h +++ /dev/null @@ -1,17 +0,0 @@ - - -#ifndef _ISGUIDS_H_ -#define _ISGUIDS_H_ - -DEFINE_GUID(CLSID_InternetShortcut, 0xFBF23B40L, 0xE3F0, 0x101B, 0x84, 0x88, 0x00, 0xAA, 0x00, 0x3E, 0x56, 0xF8); -DEFINE_GUID(IID_IUniformResourceLocatorA, 0xFBF23B80L, 0xE3F0, 0x101B, 0x84, 0x88, 0x00, 0xAA, 0x00, 0x3E, 0x56, 0xF8); -DEFINE_GUID(IID_IUniformResourceLocatorW, 0xCABB0DA0L, 0xDA57, 0x11CF, 0x99, 0x74, 0x00, 0x20, 0xAF, 0xD7, 0x97, 0x62); - -#ifdef UNICODE - #define IID_IUniformResourceLocator IID_IUniformResourceLocatorW -#else - #define IID_IUniformResourceLocator IID_IUniformResourceLocatorA -#endif - -#endif - diff --git a/include/ddk/mcd.h b/include/ddk/mcd.h index eb3e5427bd4..44c0b9329ab 100644 --- a/include/ddk/mcd.h +++ b/include/ddk/mcd.h @@ -32,9 +32,9 @@ extern "C" { #endif #if defined(_MCD_) - #define CHANGERAPI +#define CHANGERAPI #else - #define CHANGERAPI DECLSPEC_IMPORT +#define CHANGERAPI DECLSPEC_IMPORT #endif #ifdef DebugPrint @@ -47,41 +47,41 @@ extern "C" { #define DebugPrint(x) #endif -#define MAXIMUM_CHANGER_INQUIRY_DATA 252 +#define MAXIMUM_CHANGER_INQUIRY_DATA 252 CHANGERAPI PVOID NTAPI ChangerClassAllocatePool( - IN POOL_TYPE PoolType, - IN ULONG NumberOfBytes); + IN POOL_TYPE PoolType, + IN ULONG NumberOfBytes); VOID ChangerClassDebugPrint( - ULONG DebugPrintLevel, - PCCHAR DebugMessage, + ULONG DebugPrintLevel, + PCCHAR DebugMessage, ...); CHANGERAPI PVOID NTAPI ChangerClassFreePool( - IN PVOID PoolToFree); + IN PVOID PoolToFree); CHANGERAPI NTSTATUS NTAPI ChangerClassSendSrbSynchronous( - IN PDEVICE_OBJECT DeviceObject, - IN PSCSI_REQUEST_BLOCK Srb, - IN PVOID Buffer, - IN ULONG BufferSize, - IN BOOLEAN WriteToDevice); + IN PDEVICE_OBJECT DeviceObject, + IN PSCSI_REQUEST_BLOCK Srb, + IN PVOID Buffer, + IN ULONG BufferSize, + IN BOOLEAN WriteToDevice); typedef NTSTATUS NTAPI (*CHANGER_INITIALIZE)( - IN PDEVICE_OBJECT DeviceObject); + IN PDEVICE_OBJECT DeviceObject); typedef ULONG NTAPI (*CHANGER_EXTENSION_SIZE)( @@ -89,47 +89,47 @@ typedef ULONG NTAPI typedef VOID NTAPI (*CHANGER_ERROR_ROUTINE)( - PDEVICE_OBJECT DeviceObject, - PSCSI_REQUEST_BLOCK Srb, - NTSTATUS *Status, - BOOLEAN *Retry); + PDEVICE_OBJECT DeviceObject, + PSCSI_REQUEST_BLOCK Srb, + NTSTATUS *Status, + BOOLEAN *Retry); typedef NTSTATUS NTAPI (*CHANGER_COMMAND_ROUTINE)( - IN PDEVICE_OBJECT DeviceObject, - IN PIRP Irp); + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp); typedef NTSTATUS NTAPI (*CHANGER_PERFORM_DIAGNOSTICS)( - IN PDEVICE_OBJECT DeviceObject, - OUT PWMI_CHANGER_PROBLEM_DEVICE_ERROR ChangerDeviceError); + IN PDEVICE_OBJECT DeviceObject, + OUT PWMI_CHANGER_PROBLEM_DEVICE_ERROR ChangerDeviceError); typedef struct _MCD_INIT_DATA { - ULONG InitDataSize; - CHANGER_EXTENSION_SIZE ChangerAdditionalExtensionSize; - CHANGER_INITIALIZE ChangerInitialize; - CHANGER_ERROR_ROUTINE ChangerError; - CHANGER_PERFORM_DIAGNOSTICS ChangerPerformDiagnostics; - CHANGER_COMMAND_ROUTINE ChangerGetParameters; - CHANGER_COMMAND_ROUTINE ChangerGetStatus; - CHANGER_COMMAND_ROUTINE ChangerGetProductData; - CHANGER_COMMAND_ROUTINE ChangerSetAccess; - CHANGER_COMMAND_ROUTINE ChangerGetElementStatus; - CHANGER_COMMAND_ROUTINE ChangerInitializeElementStatus; - CHANGER_COMMAND_ROUTINE ChangerSetPosition; - CHANGER_COMMAND_ROUTINE ChangerExchangeMedium; - CHANGER_COMMAND_ROUTINE ChangerMoveMedium; - CHANGER_COMMAND_ROUTINE ChangerReinitializeUnit; - CHANGER_COMMAND_ROUTINE ChangerQueryVolumeTags; + ULONG InitDataSize; + CHANGER_EXTENSION_SIZE ChangerAdditionalExtensionSize; + CHANGER_INITIALIZE ChangerInitialize; + CHANGER_ERROR_ROUTINE ChangerError; + CHANGER_PERFORM_DIAGNOSTICS ChangerPerformDiagnostics; + CHANGER_COMMAND_ROUTINE ChangerGetParameters; + CHANGER_COMMAND_ROUTINE ChangerGetStatus; + CHANGER_COMMAND_ROUTINE ChangerGetProductData; + CHANGER_COMMAND_ROUTINE ChangerSetAccess; + CHANGER_COMMAND_ROUTINE ChangerGetElementStatus; + CHANGER_COMMAND_ROUTINE ChangerInitializeElementStatus; + CHANGER_COMMAND_ROUTINE ChangerSetPosition; + CHANGER_COMMAND_ROUTINE ChangerExchangeMedium; + CHANGER_COMMAND_ROUTINE ChangerMoveMedium; + CHANGER_COMMAND_ROUTINE ChangerReinitializeUnit; + CHANGER_COMMAND_ROUTINE ChangerQueryVolumeTags; } MCD_INIT_DATA, *PMCD_INIT_DATA; CHANGERAPI NTSTATUS NTAPI ChangerClassInitialize( - IN PDRIVER_OBJECT DriverObject, - IN PUNICODE_STRING RegistryPath, - IN PMCD_INIT_DATA MCDInitData); + IN PDRIVER_OBJECT DriverObject, + IN PUNICODE_STRING RegistryPath, + IN PMCD_INIT_DATA MCDInitData); #ifdef __cplusplus } diff --git a/include/ddk/mce.h b/include/ddk/mce.h index e2d8407da10..5178395bda8 100644 --- a/include/ddk/mce.h +++ b/include/ddk/mce.h @@ -3,7 +3,7 @@ #if defined(_X86_) || defined(_IA64_) || defined(_AMD64_) typedef union _MCI_ADDR { - struct { + _ANONYMOUS_STRUCT struct { ULONG Address; ULONG Reserved; } DUMMYSTRUCTNAME; @@ -157,7 +157,7 @@ typedef enum _ERROR_SEVERITY_VALUE { typedef union _ERROR_REVISION { USHORT Revision; - struct { + _ANONYMOUS_STRUCT struct { UCHAR Minor; UCHAR Major; } DUMMYSTRUCTNAME; @@ -174,7 +174,7 @@ typedef union _ERROR_REVISION { typedef union _ERROR_TIMESTAMP { ULONGLONG TimeStamp; - struct { + _ANONYMOUS_STRUCT struct { UCHAR Seconds; UCHAR Minutes; UCHAR Hours; @@ -201,7 +201,7 @@ typedef _ERROR_PLATFORM_GUID ERROR_PLATFORM_GUID, *PERROR_PLATFORM_GUID; typedef union _ERROR_RECORD_VALID { UCHAR Valid; - struct { + _ANONYMOUS_STRUCT struct { UCHAR OemPlatformID:1; UCHAR Reserved:7; } DUMMYSTRUCTNAME; @@ -219,7 +219,7 @@ typedef struct _ERROR_RECORD_HEADER { typedef union _ERROR_RECOVERY_INFO { UCHAR RecoveryInfo; - struct { + _ANONYMOUS_STRUCT struct { UCHAR Corrected:1; UCHAR NotContained:1; UCHAR Reset:1; @@ -236,7 +236,7 @@ typedef struct _ERROR_SECTION_HEADER { ULONG Length; } ERROR_SECTION_HEADER, *PERROR_SECTION_HEADER; -#if !defined(__midl) && defined(_MSC_EXTENSIONS) +#if !defined(__midl) __inline USHORT NTAPI @@ -245,16 +245,20 @@ GetFwMceLogProcessorNumber( { PERROR_SECTION_HEADER section = (PERROR_SECTION_HEADER)((ULONG64)Log + sizeof(*Log)); USHORT lid = (USHORT)((UCHAR)(section->Reserved)); +#ifdef NONAMELESSUNION + lid |= (USHORT)((UCHAR)(Log->TimeStamp.s.Reserved) << 8); +#else lid |= (USHORT)((UCHAR)(Log->TimeStamp.Reserved) << 8); +#endif return( lid ); } -#endif +#endif /* !__midl */ #define ERROR_PROCESSOR_GUID {0xe429faf1, 0x3cb7, 0x11d4, {0xbc, 0xa7, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81}} typedef union _ERROR_MODINFO_VALID { ULONGLONG Valid; - struct { + _ANONYMOUS_STRUCT struct { ULONGLONG CheckInfo:1; ULONGLONG RequestorIdentifier:1; ULONGLONG ResponderIdentifier:1; @@ -291,7 +295,7 @@ typedef enum _ERROR_CACHE_CHECK_MESI { typedef union _ERROR_CACHE_CHECK { ULONGLONG CacheCheck; - struct { + _ANONYMOUS_STRUCT struct { ULONGLONG Operation:4; ULONGLONG Level:2; ULONGLONG Reserved1:2; @@ -324,7 +328,7 @@ typedef union _ERROR_CACHE_CHECK { typedef union _ERROR_CACHE_CHECK { ULONGLONG CacheCheck; - struct { + _ANONYMOUS_STRUCT struct { ULONGLONG Operation:4; ULONGLONG Level:2; ULONGLONG Reserved1:2; @@ -367,7 +371,7 @@ typedef enum _ERROR_TLB_CHECK_OPERATION { typedef union _ERROR_TLB_CHECK { ULONGLONG TlbCheck; - struct { + _ANONYMOUS_STRUCT struct { ULONGLONG TRSlot:8; ULONGLONG TRSlotValid:1; ULONGLONG Reserved1:1; @@ -407,7 +411,7 @@ typedef enum _ERROR_BUS_CHECK_OPERATION { typedef union _ERROR_BUS_CHECK { ULONGLONG BusCheck; - struct { + _ANONYMOUS_STRUCT struct { ULONGLONG Size:5; ULONGLONG Internal:1; ULONGLONG External:1; @@ -434,7 +438,7 @@ typedef union _ERROR_BUS_CHECK { typedef union _ERROR_BUS_CHECK { ULONGLONG BusCheck; - struct { + _ANONYMOUS_STRUCT struct { ULONGLONG Size:5; ULONGLONG Internal:1; ULONGLONG External:1; @@ -484,7 +488,7 @@ typedef enum _ERROR_REGFILE_CHECK_OPERATION { typedef union _ERROR_REGFILE_CHECK { ULONGLONG RegFileCheck; - struct { + _ANONYMOUS_STRUCT struct { ULONGLONG Identifier:4; ULONGLONG Operation:4; ULONGLONG RegisterNumber:7; @@ -518,7 +522,7 @@ typedef enum _ERROR_MS_CHECK_OPERATION { typedef union _ERROR_MS_CHECK { ULONGLONG MsCheck; - struct { + _ANONYMOUS_STRUCT struct { ULONGLONG StructureIdentifier:5; ULONGLONG Level:3; ULONGLONG ArrayId:4; @@ -561,7 +565,7 @@ typedef struct _ERROR_MODINFO { typedef union _ERROR_PROCESSOR_VALID { ULONGLONG Valid; - struct { + _ANONYMOUS_STRUCT struct { ULONGLONG ErrorMap:1; ULONGLONG StateParameter:1; ULONGLONG CRLid:1; @@ -578,7 +582,7 @@ typedef union _ERROR_PROCESSOR_VALID { typedef union _ERROR_PROCESSOR_ERROR_MAP { ULONGLONG ErrorMap; - struct { + _ANONYMOUS_STRUCT struct { ULONGLONG Cid:4; ULONGLONG Tid:4; ULONGLONG Eic:4; @@ -597,7 +601,7 @@ typedef _ERROR_PROCESSOR_LEVEL_INDEX ERROR_PROCESSOR_LEVEL_INDEX, *PERROR_PROCES typedef union _ERROR_PROCESSOR_STATE_PARAMETER { ULONGLONG StateParameter; - struct { + _ANONYMOUS_STRUCT struct { ULONGLONG reserved0:2; ULONGLONG rz:1; ULONGLONG ra:1; @@ -641,7 +645,7 @@ typedef union _ERROR_PROCESSOR_STATE_PARAMETER { typedef union _PROCESSOR_LOCAL_ID { ULONGLONG LocalId; - struct { + _ANONYMOUS_STRUCT struct { ULONGLONG reserved:16; ULONGLONG eid:8; ULONGLONG id:8; @@ -664,7 +668,7 @@ typedef struct _ERROR_PROCESSOR_CPUID_INFO { typedef union _ERROR_PROCESSOR_STATIC_INFO_VALID { ULONGLONG Valid; - struct { + _ANONYMOUS_STRUCT struct { ULONGLONG MinState:1; ULONGLONG BR:1; ULONGLONG CR:1; @@ -730,7 +734,7 @@ typedef enum _ERR_TYPES { typedef union _ERROR_STATUS { ULONGLONG Status; - struct { + _ANONYMOUS_STRUCT struct { ULONGLONG Reserved0:8; ULONGLONG Type:8; ULONGLONG Address:1; @@ -750,7 +754,7 @@ typedef struct _ERROR_OEM_DATA { typedef union _ERROR_BUS_SPECIFIC_DATA { ULONGLONG BusSpecificData; - struct { + _ANONYMOUS_STRUCT struct { ULONGLONG LockAsserted:1; ULONGLONG DeferLogged:1; ULONGLONG IOQEmpty:1; @@ -777,7 +781,7 @@ typedef union _ERROR_BUS_SPECIFIC_DATA { typedef union _ERROR_MEMORY_VALID { ULONGLONG Valid; - struct { + _ANONYMOUS_STRUCT struct { ULONGLONG ErrorStatus:1; ULONGLONG PhysicalAddress:1; ULONGLONG AddressMask:1; @@ -825,7 +829,7 @@ typedef struct _ERROR_MEMORY { typedef union _ERROR_PCI_BUS_VALID { ULONGLONG Valid; - struct { + _ANONYMOUS_STRUCT struct { ULONGLONG ErrorStatus:1; ULONGLONG ErrorType:1; ULONGLONG Id:1; @@ -881,7 +885,7 @@ typedef struct _ERROR_PCI_BUS { typedef union _ERROR_PCI_COMPONENT_VALID { ULONGLONG Valid; - struct { + _ANONYMOUS_STRUCT struct { ULONGLONG ErrorStatus:1; ULONGLONG Info:1; ULONGLONG MemoryMappedRegistersPairs:1; @@ -919,7 +923,7 @@ typedef struct _ERROR_PCI_COMPONENT { typedef union _ERROR_SYSTEM_EVENT_LOG_VALID { ULONGLONG Valid; - struct { + _ANONYMOUS_STRUCT struct { ULONGLONG RecordId:1; ULONGLONG RecordType:1; ULONGLONG GeneratorId:1; @@ -954,7 +958,7 @@ typedef struct _ERROR_SYSTEM_EVENT_LOG { typedef union _ERROR_SMBIOS_VALID { ULONGLONG Valid; - struct { + _ANONYMOUS_STRUCT struct { ULONGLONG EventType:1; ULONGLONG Length:1; ULONGLONG TimeStamp:1; @@ -978,7 +982,7 @@ typedef struct _ERROR_SMBIOS { typedef union _ERROR_PLATFORM_SPECIFIC_VALID { ULONGLONG Valid; - struct { + _ANONYMOUS_STRUCT struct { ULONGLONG ErrorStatus:1; ULONGLONG RequestorId:1; ULONGLONG ResponderId:1; @@ -1007,7 +1011,7 @@ typedef struct _ERROR_PLATFORM_SPECIFIC { typedef union _ERROR_PLATFORM_BUS_VALID { ULONGLONG Valid; - struct { + _ANONYMOUS_STRUCT struct { ULONGLONG ErrorStatus:1; ULONGLONG RequestorId:1; ULONGLONG ResponderId:1; @@ -1036,7 +1040,7 @@ typedef struct _ERROR_PLATFORM_BUS { typedef union _ERROR_PLATFORM_HOST_CONTROLLER_VALID { ULONGLONG Valid; - struct { + _ANONYMOUS_STRUCT struct { ULONGLONG ErrorStatus:1; ULONGLONG RequestorId:1; ULONGLONG ResponderId:1; diff --git a/include/ddk/miniport.h b/include/ddk/miniport.h index f3f90a7bfae..afeafabd93d 100644 --- a/include/ddk/miniport.h +++ b/include/ddk/miniport.h @@ -31,213 +31,197 @@ extern "C" { #define EMULATOR_WRITE_ACCESS 0x02 typedef enum _EMULATOR_PORT_ACCESS_TYPE { - Uchar, - Ushort, - Ulong + Uchar, + Ushort, + Ulong } EMULATOR_PORT_ACCESS_TYPE, *PEMULATOR_PORT_ACCESS_TYPE; typedef struct _EMULATOR_ACCESS_ENTRY { - ULONG BasePort; - ULONG NumConsecutivePorts; - EMULATOR_PORT_ACCESS_TYPE AccessType; - UCHAR AccessMode; - UCHAR StringSupport; - PVOID Routine; + ULONG BasePort; + ULONG NumConsecutivePorts; + EMULATOR_PORT_ACCESS_TYPE AccessType; + UCHAR AccessMode; + UCHAR StringSupport; + PVOID Routine; } EMULATOR_ACCESS_ENTRY, *PEMULATOR_ACCESS_ENTRY; typedef VOID (NTAPI *PBANKED_SECTION_ROUTINE)( - IN ULONG ReadBank, - IN ULONG WriteBank, - IN PVOID Context); - + IN ULONG ReadBank, + IN ULONG WriteBank, + IN PVOID Context); + #ifndef __BROKEN__ typedef enum _INTERFACE_TYPE { - InterfaceTypeUndefined = -1, - Internal, - Isa, - Eisa, - MicroChannel, - TurboChannel, - PCIBus, - VMEBus, - NuBus, - PCMCIABus, - CBus, - MPIBus, - MPSABus, - ProcessorInternal, - InternalPowerBus, - PNPISABus, - PNPBus, - Vmcs, - MaximumInterfaceType -}INTERFACE_TYPE, *PINTERFACE_TYPE; + InterfaceTypeUndefined = -1, + Internal, + Isa, + Eisa, + MicroChannel, + TurboChannel, + PCIBus, + VMEBus, + NuBus, + PCMCIABus, + CBus, + MPIBus, + MPSABus, + ProcessorInternal, + InternalPowerBus, + PNPISABus, + PNPBus, + Vmcs, + MaximumInterfaceType +} INTERFACE_TYPE, *PINTERFACE_TYPE; typedef enum _KINTERRUPT_MODE { - LevelSensitive, - Latched + LevelSensitive, + Latched } KINTERRUPT_MODE; typedef VOID (*PINTERFACE_REFERENCE)(PVOID Context); typedef VOID (*PINTERFACE_DEREFERENCE)(PVOID Context); typedef enum _BUS_DATA_TYPE { - ConfigurationSpaceUndefined = -1, - Cmos, - EisaConfiguration, - Pos, - CbusConfiguration, - PCIConfiguration, - VMEConfiguration, - NuBusConfiguration, - PCMCIAConfiguration, - MPIConfiguration, - MPSAConfiguration, - PNPISAConfiguration, - SgiInternalConfiguration, - MaximumBusDataType + ConfigurationSpaceUndefined = -1, + Cmos, + EisaConfiguration, + Pos, + CbusConfiguration, + PCIConfiguration, + VMEConfiguration, + NuBusConfiguration, + PCMCIAConfiguration, + MPIConfiguration, + MPSAConfiguration, + PNPISAConfiguration, + SgiInternalConfiguration, + MaximumBusDataType } BUS_DATA_TYPE, *PBUS_DATA_TYPE; typedef enum _DMA_WIDTH { - Width8Bits, - Width16Bits, - Width32Bits, - MaximumDmaWidth -}DMA_WIDTH, *PDMA_WIDTH; + Width8Bits, + Width16Bits, + Width32Bits, + MaximumDmaWidth +} DMA_WIDTH, *PDMA_WIDTH; typedef enum _DMA_SPEED { - Compatible, - TypeA, - TypeB, - TypeC, - TypeF, - MaximumDmaSpeed -}DMA_SPEED, *PDMA_SPEED; + Compatible, + TypeA, + TypeB, + TypeC, + TypeF, + MaximumDmaSpeed +} DMA_SPEED, *PDMA_SPEED; typedef struct _INTERFACE { - USHORT Size; - USHORT Version; - PVOID Context; - PINTERFACE_REFERENCE InterfaceReference; - PINTERFACE_DEREFERENCE InterfaceDereference; + USHORT Size; + USHORT Version; + PVOID Context; + PINTERFACE_REFERENCE InterfaceReference; + PINTERFACE_DEREFERENCE InterfaceDereference; } INTERFACE, *PINTERFACE; typedef enum _IRQ_DEVICE_POLICY { - IrqPolicyMachineDefault = 0, - IrqPolicyAllCloseProcessors, - IrqPolicyOneCloseProcessor, - IrqPolicyAllProcessorsInMachine, - IrqPolicySpecifiedProcessors, - IrqPolicySpreadMessagesAcrossAllProcessors + IrqPolicyMachineDefault = 0, + IrqPolicyAllCloseProcessors, + IrqPolicyOneCloseProcessor, + IrqPolicyAllProcessorsInMachine, + IrqPolicySpecifiedProcessors, + IrqPolicySpreadMessagesAcrossAllProcessors } IRQ_DEVICE_POLICY, *PIRQ_DEVICE_POLICY; typedef enum _IRQ_PRIORITY { - IrqPriorityUndefined = 0, - IrqPriorityLow, - IrqPriorityNormal, - IrqPriorityHigh + IrqPriorityUndefined = 0, + IrqPriorityLow, + IrqPriorityNormal, + IrqPriorityHigh } IRQ_PRIORITY, *PIRQ_PRIORITY; typedef struct _IO_RESOURCE_DESCRIPTOR { - UCHAR Option; - UCHAR Type; // use CM_RESOURCE_TYPE - UCHAR ShareDisposition; // use CM_SHARE_DISPOSITION - UCHAR Spare1; - USHORT Flags; // use CM resource flag defines - USHORT Spare2; // align - - union { - struct { - ULONG Length; - ULONG Alignment; - PHYSICAL_ADDRESS MinimumAddress; - PHYSICAL_ADDRESS MaximumAddress; - } Port; - - struct { - ULONG Length; - ULONG Alignment; - PHYSICAL_ADDRESS MinimumAddress; - PHYSICAL_ADDRESS MaximumAddress; - } Memory; - - struct { - ULONG MinimumVector; - ULONG MaximumVector; - IRQ_DEVICE_POLICY AffinityPolicy; - IRQ_PRIORITY PriorityPolicy; - KAFFINITY TargetedProcessors; - } Interrupt; - - struct { - ULONG MinimumChannel; - ULONG MaximumChannel; - } Dma; - - struct { - ULONG Length; - ULONG Alignment; - PHYSICAL_ADDRESS MinimumAddress; - PHYSICAL_ADDRESS MaximumAddress; - } Generic; - - struct { - ULONG Data[3]; - } DevicePrivate; - - // - // Bus Number information. - // - - struct { - ULONG Length; - ULONG MinBusNumber; - ULONG MaxBusNumber; - ULONG Reserved; - } BusNumber; - - struct { - ULONG Priority; // use LCPRI_Xxx values in cfg.h - ULONG Reserved1; - ULONG Reserved2; - } ConfigData; - - // - // The following structures provide descriptions - // for memory resource requirement greater than MAXULONG - // - - struct { - ULONG Length40; - ULONG Alignment40; - PHYSICAL_ADDRESS MinimumAddress; - PHYSICAL_ADDRESS MaximumAddress; - } Memory40; - - struct { - ULONG Length48; - ULONG Alignment48; - PHYSICAL_ADDRESS MinimumAddress; - PHYSICAL_ADDRESS MaximumAddress; - } Memory48; - - struct { - ULONG Length64; - ULONG Alignment64; - PHYSICAL_ADDRESS MinimumAddress; - PHYSICAL_ADDRESS MaximumAddress; - } Memory64; - - - } u; - + UCHAR Option; + UCHAR Type; // use CM_RESOURCE_TYPE + UCHAR ShareDisposition; // use CM_SHARE_DISPOSITION + UCHAR Spare1; + USHORT Flags; // use CM resource flag defines + USHORT Spare2; // align + union { + struct { + ULONG Length; + ULONG Alignment; + PHYSICAL_ADDRESS MinimumAddress; + PHYSICAL_ADDRESS MaximumAddress; + } Port; + struct { + ULONG Length; + ULONG Alignment; + PHYSICAL_ADDRESS MinimumAddress; + PHYSICAL_ADDRESS MaximumAddress; + } Memory; + struct { + ULONG MinimumVector; + ULONG MaximumVector; + IRQ_DEVICE_POLICY AffinityPolicy; + IRQ_PRIORITY PriorityPolicy; + KAFFINITY TargetedProcessors; + } Interrupt; + struct { + ULONG MinimumChannel; + ULONG MaximumChannel; + } Dma; + struct { + ULONG Length; + ULONG Alignment; + PHYSICAL_ADDRESS MinimumAddress; + PHYSICAL_ADDRESS MaximumAddress; + } Generic; + struct { + ULONG Data[3]; + } DevicePrivate; + // + // Bus Number information. + // + struct { + ULONG Length; + ULONG MinBusNumber; + ULONG MaxBusNumber; + ULONG Reserved; + } BusNumber; + struct { + ULONG Priority; // use LCPRI_Xxx values in cfg.h + ULONG Reserved1; + ULONG Reserved2; + } ConfigData; + // + // The following structures provide descriptions + // for memory resource requirement greater than MAXULONG + // + struct { + ULONG Length40; + ULONG Alignment40; + PHYSICAL_ADDRESS MinimumAddress; + PHYSICAL_ADDRESS MaximumAddress; + } Memory40; + struct { + ULONG Length48; + ULONG Alignment48; + PHYSICAL_ADDRESS MinimumAddress; + PHYSICAL_ADDRESS MaximumAddress; + } Memory48; + struct { + ULONG Length64; + ULONG Alignment64; + PHYSICAL_ADDRESS MinimumAddress; + PHYSICAL_ADDRESS MaximumAddress; + } Memory64; + } u; } IO_RESOURCE_DESCRIPTOR, *PIO_RESOURCE_DESCRIPTOR; #include -#endif +#endif /* ! __BROKEN__ */ #ifdef __cplusplus } diff --git a/include/ddk/minitape.h b/include/ddk/minitape.h index 43b1b030a9b..6d8e5d223e7 100644 --- a/include/ddk/minitape.h +++ b/include/ddk/minitape.h @@ -22,15 +22,6 @@ #ifndef __MINITAPE_H #define __MINITAPE_H -/* Helper macro to enable gcc's extension. */ -#ifndef __GNU_EXTENSION -#ifdef __GNUC__ -#define __GNU_EXTENSION __extension__ -#else -#define __GNU_EXTENSION -#endif -#endif - #ifdef __cplusplus extern "C" { #endif @@ -45,176 +36,179 @@ extern "C" { #define MEDIA_CURRENTLY_MOUNTED 0x80000000 typedef enum _TAPE_STATUS { - TAPE_STATUS_SEND_SRB_AND_CALLBACK, - TAPE_STATUS_CALLBACK, - TAPE_STATUS_CHECK_TEST_UNIT_READY, - TAPE_STATUS_SUCCESS, - TAPE_STATUS_INSUFFICIENT_RESOURCES, - TAPE_STATUS_NOT_IMPLEMENTED, - TAPE_STATUS_INVALID_DEVICE_REQUEST, - TAPE_STATUS_INVALID_PARAMETER, - TAPE_STATUS_MEDIA_CHANGED, - TAPE_STATUS_BUS_RESET, - TAPE_STATUS_SETMARK_DETECTED, - TAPE_STATUS_FILEMARK_DETECTED, - TAPE_STATUS_BEGINNING_OF_MEDIA, - TAPE_STATUS_END_OF_MEDIA, - TAPE_STATUS_BUFFER_OVERFLOW, - TAPE_STATUS_NO_DATA_DETECTED, - TAPE_STATUS_EOM_OVERFLOW, - TAPE_STATUS_NO_MEDIA, - TAPE_STATUS_IO_DEVICE_ERROR, - TAPE_STATUS_UNRECOGNIZED_MEDIA, - TAPE_STATUS_DEVICE_NOT_READY, - TAPE_STATUS_MEDIA_WRITE_PROTECTED, - TAPE_STATUS_DEVICE_DATA_ERROR, - TAPE_STATUS_NO_SUCH_DEVICE, - TAPE_STATUS_INVALID_BLOCK_LENGTH, - TAPE_STATUS_IO_TIMEOUT, - TAPE_STATUS_DEVICE_NOT_CONNECTED, - TAPE_STATUS_DATA_OVERRUN, - TAPE_STATUS_DEVICE_BUSY, - TAPE_STATUS_REQUIRES_CLEANING, - TAPE_STATUS_CLEANER_CARTRIDGE_INSTALLED + TAPE_STATUS_SEND_SRB_AND_CALLBACK, + TAPE_STATUS_CALLBACK, + TAPE_STATUS_CHECK_TEST_UNIT_READY, + TAPE_STATUS_SUCCESS, + TAPE_STATUS_INSUFFICIENT_RESOURCES, + TAPE_STATUS_NOT_IMPLEMENTED, + TAPE_STATUS_INVALID_DEVICE_REQUEST, + TAPE_STATUS_INVALID_PARAMETER, + TAPE_STATUS_MEDIA_CHANGED, + TAPE_STATUS_BUS_RESET, + TAPE_STATUS_SETMARK_DETECTED, + TAPE_STATUS_FILEMARK_DETECTED, + TAPE_STATUS_BEGINNING_OF_MEDIA, + TAPE_STATUS_END_OF_MEDIA, + TAPE_STATUS_BUFFER_OVERFLOW, + TAPE_STATUS_NO_DATA_DETECTED, + TAPE_STATUS_EOM_OVERFLOW, + TAPE_STATUS_NO_MEDIA, + TAPE_STATUS_IO_DEVICE_ERROR, + TAPE_STATUS_UNRECOGNIZED_MEDIA, + TAPE_STATUS_DEVICE_NOT_READY, + TAPE_STATUS_MEDIA_WRITE_PROTECTED, + TAPE_STATUS_DEVICE_DATA_ERROR, + TAPE_STATUS_NO_SUCH_DEVICE, + TAPE_STATUS_INVALID_BLOCK_LENGTH, + TAPE_STATUS_IO_TIMEOUT, + TAPE_STATUS_DEVICE_NOT_CONNECTED, + TAPE_STATUS_DATA_OVERRUN, + TAPE_STATUS_DEVICE_BUSY, + TAPE_STATUS_REQUIRES_CLEANING, + TAPE_STATUS_CLEANER_CARTRIDGE_INSTALLED } TAPE_STATUS, *PTAPE_STATUS; #define INQUIRYDATABUFFERSIZE 36 + #ifndef _INQUIRYDATA_DEFINED /* also in scsi.h */ #define _INQUIRYDATA_DEFINED + typedef struct _INQUIRYDATA { - UCHAR DeviceType : 5; - UCHAR DeviceTypeQualifier : 3; - UCHAR DeviceTypeModifier : 7; - UCHAR RemovableMedia : 1; - __GNU_EXTENSION union { - UCHAR Versions; - __GNU_EXTENSION struct { - UCHAR ANSIVersion : 3; - UCHAR ECMAVersion : 3; - UCHAR ISOVersion : 2; - }; - }; - UCHAR ResponseDataFormat : 4; - UCHAR HiSupport : 1; - UCHAR NormACA : 1; - UCHAR TerminateTask : 1; - UCHAR AERC : 1; - UCHAR AdditionalLength; - UCHAR Reserved; - UCHAR Addr16 : 1; - UCHAR Addr32 : 1; - UCHAR AckReqQ: 1; - UCHAR MediumChanger : 1; - UCHAR MultiPort : 1; - UCHAR ReservedBit2 : 1; - UCHAR EnclosureServices : 1; - UCHAR ReservedBit3 : 1; - UCHAR SoftReset : 1; - UCHAR CommandQueue : 1; - UCHAR TransferDisable : 1; - UCHAR LinkedCommands : 1; - UCHAR Synchronous : 1; - UCHAR Wide16Bit : 1; - UCHAR Wide32Bit : 1; - UCHAR RelativeAddressing : 1; - UCHAR VendorId[8]; - UCHAR ProductId[16]; - UCHAR ProductRevisionLevel[4]; - UCHAR VendorSpecific[20]; - UCHAR Reserved3[40]; + UCHAR DeviceType:5; + UCHAR DeviceTypeQualifier:3; + UCHAR DeviceTypeModifier:7; + UCHAR RemovableMedia:1; + __GNU_EXTENSION union { + UCHAR Versions; + __GNU_EXTENSION struct { + UCHAR ANSIVersion:3; + UCHAR ECMAVersion:3; + UCHAR ISOVersion:2; + }; + }; + UCHAR ResponseDataFormat:4; + UCHAR HiSupport:1; + UCHAR NormACA:1; + UCHAR TerminateTask:1; + UCHAR AERC:1; + UCHAR AdditionalLength; + UCHAR Reserved; + UCHAR Addr16:1; + UCHAR Addr32:1; + UCHAR AckReqQ:1; + UCHAR MediumChanger:1; + UCHAR MultiPort:1; + UCHAR ReservedBit2:1; + UCHAR EnclosureServices:1; + UCHAR ReservedBit3:1; + UCHAR SoftReset:1; + UCHAR CommandQueue:1; + UCHAR TransferDisable:1; + UCHAR LinkedCommands:1; + UCHAR Synchronous:1; + UCHAR Wide16Bit:1; + UCHAR Wide32Bit:1; + UCHAR RelativeAddressing:1; + UCHAR VendorId[8]; + UCHAR ProductId[16]; + UCHAR ProductRevisionLevel[4]; + UCHAR VendorSpecific[20]; + UCHAR Reserved3[40]; } INQUIRYDATA, *PINQUIRYDATA; -#endif + +#endif /* _INQUIRYDATA_DEFINED */ typedef struct _MODE_CAPABILITIES_PAGE { - UCHAR PageCode : 6; - UCHAR Reserved1 : 2; - UCHAR PageLength; - UCHAR Reserved2[2]; - UCHAR RO : 1; - UCHAR Reserved3 : 4; - UCHAR SPREV : 1; - UCHAR Reserved4 : 2; - UCHAR Reserved5 : 3; - UCHAR EFMT : 1; - UCHAR Reserved6 : 1; - UCHAR QFA : 1; - UCHAR Reserved7 : 2; - UCHAR LOCK : 1; - UCHAR LOCKED : 1; - UCHAR PREVENT : 1; - UCHAR UNLOAD : 1; - UCHAR Reserved8 : 2; - UCHAR ECC : 1; - UCHAR CMPRS : 1; - UCHAR Reserved9 : 1; - UCHAR BLK512 : 1; - UCHAR BLK1024 : 1; - UCHAR Reserved10 : 4; - UCHAR SLOWB : 1; - UCHAR MaximumSpeedSupported[2]; - UCHAR MaximumStoredDefectedListEntries[2]; - UCHAR ContinuousTransferLimit[2]; - UCHAR CurrentSpeedSelected[2]; - UCHAR BufferSize[2]; - UCHAR Reserved11[2]; + UCHAR PageCode:6; + UCHAR Reserved1:2; + UCHAR PageLength; + UCHAR Reserved2[2]; + UCHAR RO:1; + UCHAR Reserved3:4; + UCHAR SPREV:1; + UCHAR Reserved4:2; + UCHAR Reserved5:3; + UCHAR EFMT:1; + UCHAR Reserved6:1; + UCHAR QFA:1; + UCHAR Reserved7:2; + UCHAR LOCK:1; + UCHAR LOCKED:1; + UCHAR PREVENT:1; + UCHAR UNLOAD:1; + UCHAR Reserved8:2; + UCHAR ECC:1; + UCHAR CMPRS:1; + UCHAR Reserved9:1; + UCHAR BLK512:1; + UCHAR BLK1024:1; + UCHAR Reserved10:4; + UCHAR SLOWB:1; + UCHAR MaximumSpeedSupported[2]; + UCHAR MaximumStoredDefectedListEntries[2]; + UCHAR ContinuousTransferLimit[2]; + UCHAR CurrentSpeedSelected[2]; + UCHAR BufferSize[2]; + UCHAR Reserved11[2]; } MODE_CAPABILITIES_PAGE, *PMODE_CAPABILITIES_PAGE; typedef BOOLEAN NTAPI (*TAPE_VERIFY_INQUIRY_ROUTINE)( - IN PINQUIRYDATA InquiryData, - IN PMODE_CAPABILITIES_PAGE ModeCapabilitiesPage); + IN PINQUIRYDATA InquiryData, + IN PMODE_CAPABILITIES_PAGE ModeCapabilitiesPage); typedef VOID NTAPI (*TAPE_EXTENSION_INIT_ROUTINE)( - IN PVOID MinitapeExtension, - IN PINQUIRYDATA InquiryData, - IN PMODE_CAPABILITIES_PAGE ModeCapabilitiesPage); + IN PVOID MinitapeExtension, + IN PINQUIRYDATA InquiryData, + IN PMODE_CAPABILITIES_PAGE ModeCapabilitiesPage); typedef VOID NTAPI (*TAPE_ERROR_ROUTINE)( - IN PVOID MinitapeExtension, - IN PSCSI_REQUEST_BLOCK Srb, - IN OUT PTAPE_STATUS TapeStatus); + IN PVOID MinitapeExtension, + IN PSCSI_REQUEST_BLOCK Srb, + IN OUT PTAPE_STATUS TapeStatus); typedef TAPE_STATUS NTAPI (*TAPE_PROCESS_COMMAND_ROUTINE)( - IN OUT PVOID MinitapeExtension, - IN OUT PVOID CommandExtension, - IN OUT PVOID CommandParameters, - IN OUT PSCSI_REQUEST_BLOCK Srb, - IN ULONG CallNumber, - IN TAPE_STATUS StatusOfLastCommand, - IN OUT PULONG RetryFlags); + IN OUT PVOID MinitapeExtension, + IN OUT PVOID CommandExtension, + IN OUT PVOID CommandParameters, + IN OUT PSCSI_REQUEST_BLOCK Srb, + IN ULONG CallNumber, + IN TAPE_STATUS StatusOfLastCommand, + IN OUT PULONG RetryFlags); #define TAPE_RETRY_MASK 0x0000FFFF #define IGNORE_ERRORS 0x00010000 #define RETURN_ERRORS 0x00020000 typedef struct _TAPE_INIT_DATA { - TAPE_VERIFY_INQUIRY_ROUTINE VerifyInquiry; - BOOLEAN QueryModeCapabilitiesPage; - ULONG MinitapeExtensionSize; - TAPE_EXTENSION_INIT_ROUTINE ExtensionInit; - ULONG DefaultTimeOutValue; - TAPE_ERROR_ROUTINE TapeError; - ULONG CommandExtensionSize; - TAPE_PROCESS_COMMAND_ROUTINE CreatePartition; - TAPE_PROCESS_COMMAND_ROUTINE Erase; - TAPE_PROCESS_COMMAND_ROUTINE GetDriveParameters; - TAPE_PROCESS_COMMAND_ROUTINE GetMediaParameters; - TAPE_PROCESS_COMMAND_ROUTINE GetPosition; - TAPE_PROCESS_COMMAND_ROUTINE GetStatus; - TAPE_PROCESS_COMMAND_ROUTINE Prepare; - TAPE_PROCESS_COMMAND_ROUTINE SetDriveParameters; - TAPE_PROCESS_COMMAND_ROUTINE SetMediaParameters; - TAPE_PROCESS_COMMAND_ROUTINE SetPosition; - TAPE_PROCESS_COMMAND_ROUTINE WriteMarks; - TAPE_PROCESS_COMMAND_ROUTINE PreProcessReadWrite; /* optional */ + TAPE_VERIFY_INQUIRY_ROUTINE VerifyInquiry; + BOOLEAN QueryModeCapabilitiesPage; + ULONG MinitapeExtensionSize; + TAPE_EXTENSION_INIT_ROUTINE ExtensionInit; + ULONG DefaultTimeOutValue; + TAPE_ERROR_ROUTINE TapeError; + ULONG CommandExtensionSize; + TAPE_PROCESS_COMMAND_ROUTINE CreatePartition; + TAPE_PROCESS_COMMAND_ROUTINE Erase; + TAPE_PROCESS_COMMAND_ROUTINE GetDriveParameters; + TAPE_PROCESS_COMMAND_ROUTINE GetMediaParameters; + TAPE_PROCESS_COMMAND_ROUTINE GetPosition; + TAPE_PROCESS_COMMAND_ROUTINE GetStatus; + TAPE_PROCESS_COMMAND_ROUTINE Prepare; + TAPE_PROCESS_COMMAND_ROUTINE SetDriveParameters; + TAPE_PROCESS_COMMAND_ROUTINE SetMediaParameters; + TAPE_PROCESS_COMMAND_ROUTINE SetPosition; + TAPE_PROCESS_COMMAND_ROUTINE WriteMarks; + TAPE_PROCESS_COMMAND_ROUTINE PreProcessReadWrite; /* optional */ } TAPE_INIT_DATA, *PTAPE_INIT_DATA; typedef struct _TAPE_PHYS_POSITION { - ULONG SeekBlockAddress; - ULONG SpaceBlockCount; + ULONG SeekBlockAddress; + ULONG SpaceBlockCount; } TAPE_PHYS_POSITION, PTAPE_PHYS_POSITION; #pragma pack(pop) diff --git a/include/ddk/mountmgr.h b/include/ddk/mountmgr.h index 7c6739000da..5d29083fdd7 100644 --- a/include/ddk/mountmgr.h +++ b/include/ddk/mountmgr.h @@ -12,6 +12,17 @@ DEFINE_GUID(MOUNTDEV_MOUNTED_DEVICE_GUID, 0x53F5630D, 0xB6BF, 0x11D0, 0x94, 0xF2 #define MOUNTMGRCONTROLTYPE ((ULONG) 'm') #define MOUNTDEVCONTROLTYPE ((ULONG) 'M') +#define IOCTL_MOUNTMGR_DEFINE_UNIX_DRIVE CTL_CODE(MOUNTMGRCONTROLTYPE, 32, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) +#define IOCTL_MOUNTMGR_QUERY_UNIX_DRIVE CTL_CODE(MOUNTMGRCONTROLTYPE, 33, METHOD_BUFFERED, FILE_READ_ACCESS) + +struct mountmgr_unix_drive { + ULONG size; + ULONG type; + WCHAR letter; + USHORT mount_point_offset; + USHORT device_offset; +}; + #define IOCTL_MOUNTMGR_CREATE_POINT \ CTL_CODE(MOUNTMGRCONTROLTYPE, 0, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) #define IOCTL_MOUNTMGR_DELETE_POINTS \ @@ -39,20 +50,22 @@ DEFINE_GUID(MOUNTDEV_MOUNTED_DEVICE_GUID, 0x53F5630D, 0xB6BF, 0x11D0, 0x94, 0xF2 #define IOCTL_MOUNTDEV_QUERY_DEVICE_NAME \ CTL_CODE(MOUNTDEVCONTROLTYPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS) -#define MOUNTMGR_IS_DRIVE_LETTER(s) ((s)->Length == 28 && (s)->Buffer[0] == '\\' && (s)->Buffer[1] == 'D' && \ - (s)->Buffer[2] == 'o' && (s)->Buffer[3] == 's' && (s)->Buffer[4] == 'D' && \ - (s)->Buffer[5] == 'e' && \ (s)->Buffer[6] == 'v' && (s)->Buffer[7] == 'i' && \ - (s)->Buffer[8] == 'c' && (s)->Buffer[9] == 'e' && (s)->Buffer[10] == 's' && \ - (s)->Buffer[11] == '\\' && (s)->Buffer[12] >= 'A' && \ - (s)->Buffer[12] <= 'Z' && (s)->Buffer[13] == ':') +#define MOUNTMGR_IS_DRIVE_LETTER(s) \ + ((s)->Length == 28 && (s)->Buffer[0] == '\\' && (s)->Buffer[1] == 'D' && \ + (s)->Buffer[2] == 'o' && (s)->Buffer[3] == 's' && (s)->Buffer[4] == 'D' && \ + (s)->Buffer[5] == 'e' && \ (s)->Buffer[6] == 'v' && (s)->Buffer[7] == 'i' && \ + (s)->Buffer[8] == 'c' && (s)->Buffer[9] == 'e' && (s)->Buffer[10] == 's' && \ + (s)->Buffer[11] == '\\' && (s)->Buffer[12] >= 'A' && \ + (s)->Buffer[12] <= 'Z' && (s)->Buffer[13] == ':') -#define MOUNTMGR_IS_VOLUME_NAME(s) (((s)->Length == 96 || ((s)->Length == 98 && (s)->Buffer[48] == '\\')) && \ - (s)->Buffer[0] == '\\'&& ((s)->Buffer[1] == '?' || (s)->Buffer[1] == '\\') && \ - (s)->Buffer[2] == '?' && (s)->Buffer[3] == '\\' && (s)->Buffer[4] == 'V' && \ - (s)->Buffer[5] == 'o' && (s)->Buffer[6] == 'l' && (s)->Buffer[7] == 'u' && \ - (s)->Buffer[8] == 'm' && (s)->Buffer[9] == 'e' && (s)->Buffer[10] == '{' && \ - (s)->Buffer[19] == '-' && (s)->Buffer[24] == '-' && (s)->Buffer[29] == '-' && \ - (s)->Buffer[34] == '-' && (s)->Buffer[47] == '}') +#define MOUNTMGR_IS_VOLUME_NAME(s) \ + (((s)->Length == 96 || ((s)->Length == 98 && (s)->Buffer[48] == '\\')) && \ + (s)->Buffer[0] == '\\'&& ((s)->Buffer[1] == '?' || (s)->Buffer[1] == '\\') && \ + (s)->Buffer[2] == '?' && (s)->Buffer[3] == '\\' && (s)->Buffer[4] == 'V' && \ + (s)->Buffer[5] == 'o' && (s)->Buffer[6] == 'l' && (s)->Buffer[7] == 'u' && \ + (s)->Buffer[8] == 'm' && (s)->Buffer[9] == 'e' && (s)->Buffer[10] == '{' && \ + (s)->Buffer[19] == '-' && (s)->Buffer[24] == '-' && (s)->Buffer[29] == '-' && \ + (s)->Buffer[34] == '-' && (s)->Buffer[47] == '}') typedef struct _MOUNTMGR_CREATE_POINT_INPUT { USHORT SymbolicLinkNameOffset; @@ -116,10 +129,14 @@ typedef struct _MOUNTDEV_NAME { #define IOCTL_MOUNTMGR_QUERY_DOS_VOLUME_PATHS \ CTL_CODE(MOUNTMGRCONTROLTYPE, 13, METHOD_BUFFERED, FILE_ANY_ACCESS) -#define MOUNTMGR_IS_DOS_VOLUME_NAME(s) (MOUNTMGR_IS_VOLUME_NAME(s) && (s)->Length == 96 && (s)->Buffer[1] == '\\') -#define MOUNTMGR_IS_DOS_VOLUME_NAME_WB(s) (MOUNTMGR_IS_VOLUME_NAME(s) && (s)->Length == 98 && (s)->Buffer[1] == '\\') -#define MOUNTMGR_IS_NT_VOLUME_NAME(s) ( MOUNTMGR_IS_VOLUME_NAME(s) && (s)->Length == 96 && (s)->Buffer[1] == '?') -#define MOUNTMGR_IS_NT_VOLUME_NAME_WB(s) (MOUNTMGR_IS_VOLUME_NAME(s) && (s)->Length == 98 && (s)->Buffer[1] == '?') +#define MOUNTMGR_IS_DOS_VOLUME_NAME(s) \ + (MOUNTMGR_IS_VOLUME_NAME(s) && (s)->Length == 96 && (s)->Buffer[1] == '\\') +#define MOUNTMGR_IS_DOS_VOLUME_NAME_WB(s) \ + (MOUNTMGR_IS_VOLUME_NAME(s) && (s)->Length == 98 && (s)->Buffer[1] == '\\') +#define MOUNTMGR_IS_NT_VOLUME_NAME(s) \ + ( MOUNTMGR_IS_VOLUME_NAME(s) && (s)->Length == 96 && (s)->Buffer[1] == '?') +#define MOUNTMGR_IS_NT_VOLUME_NAME_WB(s) \ + (MOUNTMGR_IS_VOLUME_NAME(s) && (s)->Length == 98 && (s)->Buffer[1] == '?') typedef struct _MOUNTMGR_VOLUME_PATHS { ULONG MultiSzLength; @@ -159,7 +176,7 @@ typedef struct _MOUNTMGR_SET_AUTO_MOUNT { #define IOCTL_MOUNTMGR_TRACELOG_CACHE \ CTL_CODE(MOUNTMGRCONTROLTYPE, 18, METHOD_BUFFERED, FILE_READ_ACCESS) -#endif +#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ #endif /* _MOUNTMGR_ */ diff --git a/include/ddk/ndis.h b/include/ddk/ndis.h index 1edfaace36c..1df0998f115 100644 --- a/include/ddk/ndis.h +++ b/include/ddk/ndis.h @@ -29,22 +29,13 @@ * NDIS51_MINIPORT - Building NDIS 5.1 miniport driver */ -#ifndef __NDIS_H -#define __NDIS_H +#ifndef _NDIS_ +#define _NDIS_ #ifndef NDIS_WDM #define NDIS_WDM 0 #endif -/* Helper macro to enable gcc's extension. */ -#ifndef __GNU_EXTENSION -#ifdef __GNUC__ -#define __GNU_EXTENSION __extension__ -#else -#define __GNU_EXTENSION -#endif -#endif - #include "ntddk.h" #include "netpnp.h" #include "ntstatus.h" @@ -280,7 +271,7 @@ typedef struct _NET_PNP_EVENT { #else #define NDIS_SUPPORT_NDIS61 0 #endif -#endif // !defined(NDIS_SUPPORT_NDIS61) +#endif /* !defined(NDIS_SUPPORT_NDIS61) */ #if !defined(NDIS_SUPPORT_NDIS620) @@ -312,9 +303,9 @@ typedef struct _NET_PNP_EVENT { #endif #if defined(NDIS_WRAPPER) - #define NDISAPI +#define NDISAPI #else - #define NDISAPI DECLSPEC_IMPORT +#define NDISAPI DECLSPEC_IMPORT #endif typedef PVOID QUEUED_CLOSE; //FIXME : Doesn't exist in public headers @@ -695,7 +686,7 @@ typedef CM_PARTIAL_RESOURCE_LIST NDIS_RESOURCE_LIST, *PNDIS_RESOURCE_LIST; #define NDIS_GUID_TO_STATUS 0x00000002 #define NDIS_GUID_ANSI_STRING 0x00000004 #define NDIS_GUID_UNICODE_STRING 0x00000008 -#define NDIS_GUID_ARRAY 0x00000010 +#define NDIS_GUID_ARRAY 0x00000010 #if NDIS_LEGACY_DRIVER @@ -1002,7 +993,7 @@ typedef enum _NDIS_PNP_DEVICE_STATE { #define NDIS_DEVICE_NOT_STOPPABLE 0x00000001 #define NDIS_DEVICE_NOT_REMOVEABLE 0x00000002 -#define NDIS_DEVICE_NOT_SUSPENDABLE 0x00000004 +#define NDIS_DEVICE_NOT_SUSPENDABLE 0x00000004 #define NDIS_DEVICE_DISABLE_PM 0x00000008 #define NDIS_DEVICE_DISABLE_WAKE_UP 0x00000010 #define NDIS_DEVICE_DISABLE_WAKE_ON_RECONNECT 0x00000020 @@ -1053,12 +1044,12 @@ typedef struct _CO_CALL_MANAGER_PARAMETERS { /* CO_MEDIA_PARAMETERS.Flags constants */ #define RECEIVE_TIME_INDICATION 0x00000001 #define USE_TIME_STAMPS 0x00000002 -#define TRANSMIT_VC 0x00000004 +#define TRANSMIT_VC 0x00000004 #define RECEIVE_VC 0x00000008 #define INDICATE_ERRED_PACKETS 0x00000010 #define INDICATE_END_OF_TX 0x00000020 #define RESERVE_RESOURCES_VC 0x00000040 -#define ROUND_DOWN_FLOW 0x00000080 +#define ROUND_DOWN_FLOW 0x00000080 #define ROUND_UP_FLOW 0x00000100 typedef struct _CO_MEDIA_PARAMETERS { @@ -2895,8 +2886,8 @@ NdisGetPoolFromPacket( IN PNDIS_PACKET Packet); NDISAPI -NTAPI PNDIS_PACKET_STACK +NTAPI NdisIMGetCurrentPacketStack( IN PNDIS_PACKET Packet, OUT BOOLEAN * StacksRemaining); @@ -5987,6 +5978,6 @@ typedef NDIS_WAN_MAC_CHARACTERISTICS *PNDIS_WAN_MAC_CHARACTERISTICS; } #endif -#endif /* __NDIS_H */ +#endif /* _NDIS_ */ /* EOF */ diff --git a/include/ddk/ndistapi.h b/include/ddk/ndistapi.h index 2b432fc7bfb..68c15c2a0f7 100644 --- a/include/ddk/ndistapi.h +++ b/include/ddk/ndistapi.h @@ -20,8 +20,10 @@ * */ -#ifndef __NDISTAPI_H -#define __NDISTAPI_H +#pragma once + +#ifndef _NDIS_TAPI_ +#define _NDIS_TAPI_ #include "ndis.h" @@ -81,7 +83,7 @@ typedef ULONG_PTR HDRV_CALL; #define NDIS_STATUS_TAPI_DISCONNECTMODE_CONGESTION ((NDIS_STATUS)0xC0012029L) #define NDIS_STATUS_TAPI_DISCONNECTMODE_INCOMPATIBLE ((NDIS_STATUS)0xC001202AL) #define NDIS_STATUS_TAPI_DISCONNECTMODE_UNAVAIL ((NDIS_STATUS)0xC001202BL) -#define NDIS_STATUS_TAPI_RECV_DIGIT ((NDIS_STATUS)0x40010020L) +#define NDIS_STATUS_TAPI_RECV_DIGIT ((NDIS_STATUS)0x40010020L) #define LINE_ADDRESSSTATE 0L #define LINE_CALLINFO 1L @@ -603,615 +605,612 @@ typedef ULONG_PTR HDRV_CALL; #define LINETRANSLATERESULT_NOTRANSLATION 0x00000800 #endif - -typedef struct _NDIS_VAR_DATA_DESC { - USHORT Length; - USHORT MaximumLength; - LONG Offset; +typedef struct _NDIS_VAR_DATA_DESC { + USHORT Length; + USHORT MaximumLength; + LONG Offset; } NDIS_VAR_DATA_DESC, *PNDIS_VAR_DATA_DESC; typedef struct _LINE_DIAL_PARAMS { - ULONG ulDialPause; - ULONG ulDialSpeed; - ULONG ulDigitDuration; - ULONG ulWaitForDialtone; + ULONG ulDialPause; + ULONG ulDialSpeed; + ULONG ulDigitDuration; + ULONG ulWaitForDialtone; } LINE_DIAL_PARAMS, *PLINE_DIAL_PARAMS; typedef struct _LINE_ADDRESS_CAPS { - ULONG ulTotalSize; - ULONG ulNeededSize; - ULONG ulUsedSize; - ULONG ulLineDeviceID; - ULONG ulAddressSize; - ULONG ulAddressOffset; - ULONG ulDevSpecificSize; - ULONG ulDevSpecificOffset; - ULONG ulAddressSharing; - ULONG ulAddressStates; - ULONG ulCallInfoStates; - ULONG ulCallerIDFlags; - ULONG ulCalledIDFlags; - ULONG ulConnectedIDFlags; - ULONG ulRedirectionIDFlags; - ULONG ulRedirectingIDFlags; - ULONG ulCallStates; - ULONG ulDialToneModes; - ULONG ulBusyModes; - ULONG ulSpecialInfo; - ULONG ulDisconnectModes; - ULONG ulMaxNumActiveCalls; - ULONG ulMaxNumOnHoldCalls; - ULONG ulMaxNumOnHoldPendingCalls; - ULONG ulMaxNumConference; - ULONG ulMaxNumTransConf; - ULONG ulAddrCapFlags; - ULONG ulCallFeatures; - ULONG ulRemoveFromConfCaps; - ULONG ulRemoveFromConfState; - ULONG ulTransferModes; - ULONG ulParkModes; - ULONG ulForwardModes; - ULONG ulMaxForwardEntries; - ULONG ulMaxSpecificEntries; - ULONG ulMinFwdNumRings; - ULONG ulMaxFwdNumRings; - ULONG ulMaxCallCompletions; - ULONG ulCallCompletionConds; - ULONG ulCallCompletionModes; - ULONG ulNumCompletionMessages; - ULONG ulCompletionMsgTextEntrySize; - ULONG ulCompletionMsgTextSize; - ULONG ulCompletionMsgTextOffset; + ULONG ulTotalSize; + ULONG ulNeededSize; + ULONG ulUsedSize; + ULONG ulLineDeviceID; + ULONG ulAddressSize; + ULONG ulAddressOffset; + ULONG ulDevSpecificSize; + ULONG ulDevSpecificOffset; + ULONG ulAddressSharing; + ULONG ulAddressStates; + ULONG ulCallInfoStates; + ULONG ulCallerIDFlags; + ULONG ulCalledIDFlags; + ULONG ulConnectedIDFlags; + ULONG ulRedirectionIDFlags; + ULONG ulRedirectingIDFlags; + ULONG ulCallStates; + ULONG ulDialToneModes; + ULONG ulBusyModes; + ULONG ulSpecialInfo; + ULONG ulDisconnectModes; + ULONG ulMaxNumActiveCalls; + ULONG ulMaxNumOnHoldCalls; + ULONG ulMaxNumOnHoldPendingCalls; + ULONG ulMaxNumConference; + ULONG ulMaxNumTransConf; + ULONG ulAddrCapFlags; + ULONG ulCallFeatures; + ULONG ulRemoveFromConfCaps; + ULONG ulRemoveFromConfState; + ULONG ulTransferModes; + ULONG ulParkModes; + ULONG ulForwardModes; + ULONG ulMaxForwardEntries; + ULONG ulMaxSpecificEntries; + ULONG ulMinFwdNumRings; + ULONG ulMaxFwdNumRings; + ULONG ulMaxCallCompletions; + ULONG ulCallCompletionConds; + ULONG ulCallCompletionModes; + ULONG ulNumCompletionMessages; + ULONG ulCompletionMsgTextEntrySize; + ULONG ulCompletionMsgTextSize; + ULONG ulCompletionMsgTextOffset; #if (NDIS_TAPI_CURRENT_VERSION >= 0x00010004) - ULONG ulAddressFeatures; + ULONG ulAddressFeatures; #if (NDIS_TAPI_CURRENT_VERSION >= 0x00020000) - ULONG ulPredictiveAutoTransferStates; - ULONG ulNumCallTreatments; - ULONG ulCallTreatmentListSize; - ULONG ulCallTreatmentListOffset; - ULONG ulDeviceClassesSize; - ULONG ulDeviceClassesOffset; - ULONG ulMaxCallDataSize; - ULONG ulCallFeatures2; - ULONG ulMaxNoAnswerTimeout; - ULONG ulConnectedModes; - ULONG ulOfferingModes; - ULONG ulAvailableMediaModes; -#endif + ULONG ulPredictiveAutoTransferStates; + ULONG ulNumCallTreatments; + ULONG ulCallTreatmentListSize; + ULONG ulCallTreatmentListOffset; + ULONG ulDeviceClassesSize; + ULONG ulDeviceClassesOffset; + ULONG ulMaxCallDataSize; + ULONG ulCallFeatures2; + ULONG ulMaxNoAnswerTimeout; + ULONG ulConnectedModes; + ULONG ulOfferingModes; + ULONG ulAvailableMediaModes; #endif +#endif /* (NDIS_TAPI_CURRENT_VERSION >= 0x00010004) */ } LINE_ADDRESS_CAPS, *PLINE_ADDRESS_CAPS; typedef struct _LINE_ADDRESS_STATUS { - ULONG ulTotalSize; - ULONG ulNeededSize; - ULONG ulUsedSize; - ULONG ulNumInUse; - ULONG ulNumActiveCalls; - ULONG ulNumOnHoldCalls; - ULONG ulNumOnHoldPendCalls; - ULONG ulAddressFeatures; - ULONG ulNumRingsNoAnswer; - ULONG ulForwardNumEntries; - ULONG ulForwardSize; - ULONG ulForwardOffset; - ULONG ulTerminalModesSize; - ULONG ulTerminalModesOffset; - ULONG ulDevSpecificSize; - ULONG ulDevSpecificOffset; + ULONG ulTotalSize; + ULONG ulNeededSize; + ULONG ulUsedSize; + ULONG ulNumInUse; + ULONG ulNumActiveCalls; + ULONG ulNumOnHoldCalls; + ULONG ulNumOnHoldPendCalls; + ULONG ulAddressFeatures; + ULONG ulNumRingsNoAnswer; + ULONG ulForwardNumEntries; + ULONG ulForwardSize; + ULONG ulForwardOffset; + ULONG ulTerminalModesSize; + ULONG ulTerminalModesOffset; + ULONG ulDevSpecificSize; + ULONG ulDevSpecificOffset; } LINE_ADDRESS_STATUS, *PLINE_ADDRESS_STATUS; typedef struct _LINE_CALL_INFO { - ULONG ulTotalSize; - ULONG ulNeededSize; - ULONG ulUsedSize; - ULONG hLine; - ULONG ulLineDeviceID; - ULONG ulAddressID; - ULONG ulBearerMode; - ULONG ulRate; - ULONG ulMediaMode; - ULONG ulAppSpecific; - ULONG ulCallID; - ULONG ulRelatedCallID; - ULONG ulCallParamFlags; - ULONG ulCallStates; - ULONG ulMonitorDigitModes; - ULONG ulMonitorMediaModes; - LINE_DIAL_PARAMS DialParams; - ULONG ulOrigin; - ULONG ulReason; - ULONG ulCompletionID; - ULONG ulNumOwners; - ULONG ulNumMonitors; - ULONG ulCountryCode; - ULONG ulTrunk; - ULONG ulCallerIDFlags; - ULONG ulCallerIDSize; - ULONG ulCallerIDOffset; - ULONG ulCallerIDNameSize; - ULONG ulCallerIDNameOffset; - ULONG ulCalledIDFlags; - ULONG ulCalledIDSize; - ULONG ulCalledIDOffset; - ULONG ulCalledIDNameSize; - ULONG ulCalledIDNameOffset; - ULONG ulConnectedIDFlags; - ULONG ulConnectedIDSize; - ULONG ulConnectedIDOffset; - ULONG ulConnectedIDNameSize; - ULONG ulConnectedIDNameOffset; - ULONG ulRedirectionIDFlags; - ULONG ulRedirectionIDSize; - ULONG ulRedirectionIDOffset; - ULONG ulRedirectionIDNameSize; - ULONG ulRedirectionIDNameOffset; - ULONG ulRedirectingIDFlags; - ULONG ulRedirectingIDSize; - ULONG ulRedirectingIDOffset; - ULONG ulRedirectingIDNameSize; - ULONG ulRedirectingIDNameOffset; - ULONG ulAppNameSize; - ULONG ulAppNameOffset; - ULONG ulDisplayableAddressSize; - ULONG ulDisplayableAddressOffset; - ULONG ulCalledPartySize; - ULONG ulCalledPartyOffset; - ULONG ulCommentSize; - ULONG ulCommentOffset; - ULONG ulDisplaySize; - ULONG ulDisplayOffset; - ULONG ulUserUserInfoSize; - ULONG ulUserUserInfoOffset; - ULONG ulHighLevelCompSize; - ULONG ulHighLevelCompOffset; - ULONG ulLowLevelCompSize; - ULONG ulLowLevelCompOffset; - ULONG ulChargingInfoSize; - ULONG ulChargingInfoOffset; - ULONG ulTerminalModesSize; - ULONG ulTerminalModesOffset; - ULONG ulDevSpecificSize; - ULONG ulDevSpecificOffset; + ULONG ulTotalSize; + ULONG ulNeededSize; + ULONG ulUsedSize; + ULONG hLine; + ULONG ulLineDeviceID; + ULONG ulAddressID; + ULONG ulBearerMode; + ULONG ulRate; + ULONG ulMediaMode; + ULONG ulAppSpecific; + ULONG ulCallID; + ULONG ulRelatedCallID; + ULONG ulCallParamFlags; + ULONG ulCallStates; + ULONG ulMonitorDigitModes; + ULONG ulMonitorMediaModes; + LINE_DIAL_PARAMS DialParams; + ULONG ulOrigin; + ULONG ulReason; + ULONG ulCompletionID; + ULONG ulNumOwners; + ULONG ulNumMonitors; + ULONG ulCountryCode; + ULONG ulTrunk; + ULONG ulCallerIDFlags; + ULONG ulCallerIDSize; + ULONG ulCallerIDOffset; + ULONG ulCallerIDNameSize; + ULONG ulCallerIDNameOffset; + ULONG ulCalledIDFlags; + ULONG ulCalledIDSize; + ULONG ulCalledIDOffset; + ULONG ulCalledIDNameSize; + ULONG ulCalledIDNameOffset; + ULONG ulConnectedIDFlags; + ULONG ulConnectedIDSize; + ULONG ulConnectedIDOffset; + ULONG ulConnectedIDNameSize; + ULONG ulConnectedIDNameOffset; + ULONG ulRedirectionIDFlags; + ULONG ulRedirectionIDSize; + ULONG ulRedirectionIDOffset; + ULONG ulRedirectionIDNameSize; + ULONG ulRedirectionIDNameOffset; + ULONG ulRedirectingIDFlags; + ULONG ulRedirectingIDSize; + ULONG ulRedirectingIDOffset; + ULONG ulRedirectingIDNameSize; + ULONG ulRedirectingIDNameOffset; + ULONG ulAppNameSize; + ULONG ulAppNameOffset; + ULONG ulDisplayableAddressSize; + ULONG ulDisplayableAddressOffset; + ULONG ulCalledPartySize; + ULONG ulCalledPartyOffset; + ULONG ulCommentSize; + ULONG ulCommentOffset; + ULONG ulDisplaySize; + ULONG ulDisplayOffset; + ULONG ulUserUserInfoSize; + ULONG ulUserUserInfoOffset; + ULONG ulHighLevelCompSize; + ULONG ulHighLevelCompOffset; + ULONG ulLowLevelCompSize; + ULONG ulLowLevelCompOffset; + ULONG ulChargingInfoSize; + ULONG ulChargingInfoOffset; + ULONG ulTerminalModesSize; + ULONG ulTerminalModesOffset; + ULONG ulDevSpecificSize; + ULONG ulDevSpecificOffset; #if (NDIS_TAPI_CURRENT_VERSION >= 0x00020000) - ULONG ulCallTreatment; - ULONG ulCallDataSize; - ULONG ulCallDataOffset; - ULONG ulSendingFlowspecSize; - ULONG ulSendingFlowspecOffset; - ULONG ulReceivingFlowspecSize; - ULONG ulReceivingFlowspecOffset; + ULONG ulCallTreatment; + ULONG ulCallDataSize; + ULONG ulCallDataOffset; + ULONG ulSendingFlowspecSize; + ULONG ulSendingFlowspecOffset; + ULONG ulReceivingFlowspecSize; + ULONG ulReceivingFlowspecOffset; #endif #if (NDIS_TAPI_CURRENT_VERSION >= 0x00030000) - ULONG ulCallerIDAddressType; - ULONG ulCalledIDAddressType; - ULONG ulConnectedIDAddressType; - ULONG ulRedirectionIDAddressType; - ULONG ulRedirectingIDAddressType; + ULONG ulCallerIDAddressType; + ULONG ulCalledIDAddressType; + ULONG ulConnectedIDAddressType; + ULONG ulRedirectionIDAddressType; + ULONG ulRedirectingIDAddressType; #endif } LINE_CALL_INFO, *PLINE_CALL_INFO; typedef struct _LINE_CALL_PARAMS { - ULONG ulTotalSize; - ULONG ulBearerMode; - ULONG ulMinRate; - ULONG ulMaxRate; - ULONG ulMediaMode; - ULONG ulCallParamFlags; - ULONG ulAddressMode; - ULONG ulAddressID; - LINE_DIAL_PARAMS DialParams; - ULONG ulOrigAddressSize; - ULONG ulOrigAddressOffset; - ULONG ulDisplayableAddressSize; - ULONG ulDisplayableAddressOffset; - ULONG ulCalledPartySize; - ULONG ulCalledPartyOffset; - ULONG ulCommentSize; - ULONG ulCommentOffset; - ULONG ulUserUserInfoSize; - ULONG ulUserUserInfoOffset; - ULONG ulHighLevelCompSize; - ULONG ulHighLevelCompOffset; - ULONG ulLowLevelCompSize; - ULONG ulLowLevelCompOffset; - ULONG ulDevSpecificSize; - ULONG ulDevSpecificOffset; + ULONG ulTotalSize; + ULONG ulBearerMode; + ULONG ulMinRate; + ULONG ulMaxRate; + ULONG ulMediaMode; + ULONG ulCallParamFlags; + ULONG ulAddressMode; + ULONG ulAddressID; + LINE_DIAL_PARAMS DialParams; + ULONG ulOrigAddressSize; + ULONG ulOrigAddressOffset; + ULONG ulDisplayableAddressSize; + ULONG ulDisplayableAddressOffset; + ULONG ulCalledPartySize; + ULONG ulCalledPartyOffset; + ULONG ulCommentSize; + ULONG ulCommentOffset; + ULONG ulUserUserInfoSize; + ULONG ulUserUserInfoOffset; + ULONG ulHighLevelCompSize; + ULONG ulHighLevelCompOffset; + ULONG ulLowLevelCompSize; + ULONG ulLowLevelCompOffset; + ULONG ulDevSpecificSize; + ULONG ulDevSpecificOffset; #if (NDIS_TAPI_CURRENT_VERSION >= 0x00020000) - ULONG ulPredictiveAutoTransferStates; - ULONG ulTargetAddressSize; - ULONG ulTargetAddressOffset; - ULONG ulSendingFlowspecSize; - ULONG ulSendingFlowspecOffset; - ULONG ulReceivingFlowspecSize; - ULONG ulReceivingFlowspecOffset; - ULONG ulDeviceClassSize; - ULONG ulDeviceClassOffset; - ULONG ulDeviceConfigSize; - ULONG ulDeviceConfigOffset; - ULONG ulCallDataSize; - ULONG ulCallDataOffset; - ULONG ulNoAnswerTimeout; - ULONG ulCallingPartyIDSize; - ULONG ulCallingPartyIDOffset; + ULONG ulPredictiveAutoTransferStates; + ULONG ulTargetAddressSize; + ULONG ulTargetAddressOffset; + ULONG ulSendingFlowspecSize; + ULONG ulSendingFlowspecOffset; + ULONG ulReceivingFlowspecSize; + ULONG ulReceivingFlowspecOffset; + ULONG ulDeviceClassSize; + ULONG ulDeviceClassOffset; + ULONG ulDeviceConfigSize; + ULONG ulDeviceConfigOffset; + ULONG ulCallDataSize; + ULONG ulCallDataOffset; + ULONG ulNoAnswerTimeout; + ULONG ulCallingPartyIDSize; + ULONG ulCallingPartyIDOffset; #endif #if (NDIS_TAPI_CURRENT_VERSION >= 0x00030000) - ULONG ulAddressType; + ULONG ulAddressType; #endif } LINE_CALL_PARAMS, *PLINE_CALL_PARAMS; typedef struct _LINE_CALL_STATUS { - ULONG ulTotalSize; - ULONG ulNeededSize; - ULONG ulUsedSize; - ULONG ulCallState; - ULONG ulCallStateMode; - ULONG ulCallPrivilege; - ULONG ulCallFeatures; - ULONG ulDevSpecificSize; - ULONG ulDevSpecificOffset; + ULONG ulTotalSize; + ULONG ulNeededSize; + ULONG ulUsedSize; + ULONG ulCallState; + ULONG ulCallStateMode; + ULONG ulCallPrivilege; + ULONG ulCallFeatures; + ULONG ulDevSpecificSize; + ULONG ulDevSpecificOffset; } LINE_CALL_STATUS, *PLINE_CALL_STATUS; typedef struct _LINE_DEV_CAPS { - ULONG ulTotalSize; - ULONG ulNeededSize; - ULONG ulUsedSize; - ULONG ulProviderInfoSize; - ULONG ulProviderInfoOffset; - ULONG ulSwitchInfoSize; - ULONG ulSwitchInfoOffset; - ULONG ulPermanentLineID; - ULONG ulLineNameSize; - ULONG ulLineNameOffset; - ULONG ulStringFormat; - ULONG ulAddressModes; - ULONG ulNumAddresses; - ULONG ulBearerModes; - ULONG ulMaxRate; - ULONG ulMediaModes; - ULONG ulGenerateToneModes; - ULONG ulGenerateToneMaxNumFreq; - ULONG ulGenerateDigitModes; - ULONG ulMonitorToneMaxNumFreq; - ULONG ulMonitorToneMaxNumEntries; - ULONG ulMonitorDigitModes; - ULONG ulGatherDigitsMinTimeout; - ULONG ulGatherDigitsMaxTimeout; - ULONG ulMedCtlDigitMaxListSize; - ULONG ulMedCtlMediaMaxListSize; - ULONG ulMedCtlToneMaxListSize; - ULONG ulMedCtlCallStateMaxListSize; - ULONG ulDevCapFlags; - ULONG ulMaxNumActiveCalls; - ULONG ulAnswerMode; - ULONG ulRingModes; - ULONG ulLineStates; - ULONG ulUUIAcceptSize; - ULONG ulUUIAnswerSize; - ULONG ulUUIMakeCallSize; - ULONG ulUUIDropSize; - ULONG ulUUISendUserUserInfoSize; - ULONG ulUUICallInfoSize; - LINE_DIAL_PARAMS MinDialParams; - LINE_DIAL_PARAMS MaxDialParams; - LINE_DIAL_PARAMS DefaultDialParams; - ULONG ulNumTerminals; - ULONG ulTerminalCapsSize; - ULONG ulTerminalCapsOffset; - ULONG ulTerminalTextEntrySize; - ULONG ulTerminalTextSize; - ULONG ulTerminalTextOffset; - ULONG ulDevSpecificSize; - ULONG ulDevSpecificOffset; + ULONG ulTotalSize; + ULONG ulNeededSize; + ULONG ulUsedSize; + ULONG ulProviderInfoSize; + ULONG ulProviderInfoOffset; + ULONG ulSwitchInfoSize; + ULONG ulSwitchInfoOffset; + ULONG ulPermanentLineID; + ULONG ulLineNameSize; + ULONG ulLineNameOffset; + ULONG ulStringFormat; + ULONG ulAddressModes; + ULONG ulNumAddresses; + ULONG ulBearerModes; + ULONG ulMaxRate; + ULONG ulMediaModes; + ULONG ulGenerateToneModes; + ULONG ulGenerateToneMaxNumFreq; + ULONG ulGenerateDigitModes; + ULONG ulMonitorToneMaxNumFreq; + ULONG ulMonitorToneMaxNumEntries; + ULONG ulMonitorDigitModes; + ULONG ulGatherDigitsMinTimeout; + ULONG ulGatherDigitsMaxTimeout; + ULONG ulMedCtlDigitMaxListSize; + ULONG ulMedCtlMediaMaxListSize; + ULONG ulMedCtlToneMaxListSize; + ULONG ulMedCtlCallStateMaxListSize; + ULONG ulDevCapFlags; + ULONG ulMaxNumActiveCalls; + ULONG ulAnswerMode; + ULONG ulRingModes; + ULONG ulLineStates; + ULONG ulUUIAcceptSize; + ULONG ulUUIAnswerSize; + ULONG ulUUIMakeCallSize; + ULONG ulUUIDropSize; + ULONG ulUUISendUserUserInfoSize; + ULONG ulUUICallInfoSize; + LINE_DIAL_PARAMS MinDialParams; + LINE_DIAL_PARAMS MaxDialParams; + LINE_DIAL_PARAMS DefaultDialParams; + ULONG ulNumTerminals; + ULONG ulTerminalCapsSize; + ULONG ulTerminalCapsOffset; + ULONG ulTerminalTextEntrySize; + ULONG ulTerminalTextSize; + ULONG ulTerminalTextOffset; + ULONG ulDevSpecificSize; + ULONG ulDevSpecificOffset; #if (NDIS_TAPI_CURRENT_VERSION >= 0x00010004) - ULONG ulLineFeatures; + ULONG ulLineFeatures; #endif #if (NDIS_TAPI_CURRENT_VERSION >= 0x00020000) - ULONG ulSettableDevStatus; - ULONG ulDeviceClassesSize; - ULONG ulDeviceClassesOffset; + ULONG ulSettableDevStatus; + ULONG ulDeviceClassesSize; + ULONG ulDeviceClassesOffset; #endif #if (NDIS_TAPI_CURRENT_VERSION >= 0x00020002) - GUID PermanentLineGuid; + GUID PermanentLineGuid; #endif #if (NDIS_TAPI_CURRENT_VERSION >= 0x00030000) - ULONG ulAddressTypes; - GUID ProtocolGuid; - ULONG ulAvailableTracking; + ULONG ulAddressTypes; + GUID ProtocolGuid; + ULONG ulAvailableTracking; #endif } LINE_DEV_CAPS, *PLINE_DEV_CAPS; typedef struct _LINE_DEV_STATUS { - ULONG ulTotalSize; - ULONG ulNeededSize; - ULONG ulUsedSize; - ULONG ulNumOpens; - ULONG ulOpenMediaModes; - ULONG ulNumActiveCalls; - ULONG ulNumOnHoldCalls; - ULONG ulNumOnHoldPendCalls; - ULONG ulLineFeatures; - ULONG ulNumCallCompletions; - ULONG ulRingMode; - ULONG ulSignalLevel; - ULONG ulBatteryLevel; - ULONG ulRoamMode; - ULONG ulDevStatusFlags; - ULONG ulTerminalModesSize; - ULONG ulTerminalModesOffset; - ULONG ulDevSpecificSize; - ULONG ulDevSpecificOffset; + ULONG ulTotalSize; + ULONG ulNeededSize; + ULONG ulUsedSize; + ULONG ulNumOpens; + ULONG ulOpenMediaModes; + ULONG ulNumActiveCalls; + ULONG ulNumOnHoldCalls; + ULONG ulNumOnHoldPendCalls; + ULONG ulLineFeatures; + ULONG ulNumCallCompletions; + ULONG ulRingMode; + ULONG ulSignalLevel; + ULONG ulBatteryLevel; + ULONG ulRoamMode; + ULONG ulDevStatusFlags; + ULONG ulTerminalModesSize; + ULONG ulTerminalModesOffset; + ULONG ulDevSpecificSize; + ULONG ulDevSpecificOffset; } LINE_DEV_STATUS, *PLINE_DEV_STATUS; typedef struct _LINE_EXTENSION_ID { - ULONG ulExtensionID0; - ULONG ulExtensionID1; - ULONG ulExtensionID2; - ULONG ulExtensionID3; + ULONG ulExtensionID0; + ULONG ulExtensionID1; + ULONG ulExtensionID2; + ULONG ulExtensionID3; } LINE_EXTENSION_ID, *PLINE_EXTENSION_ID; typedef struct _VAR_STRING { - ULONG ulTotalSize; - ULONG ulNeededSize; - ULONG ulUsedSize; - ULONG ulStringFormat; - ULONG ulStringSize; - ULONG ulStringOffset; + ULONG ulTotalSize; + ULONG ulNeededSize; + ULONG ulUsedSize; + ULONG ulStringFormat; + ULONG ulStringSize; + ULONG ulStringOffset; } VAR_STRING, *PVAR_STRING; typedef struct _NDIS_TAPI_ANSWER { - IN ULONG ulRequestID; - IN HDRV_CALL hdCall; - IN ULONG ulUserUserInfoSize; - IN UCHAR UserUserInfo[1]; + IN ULONG ulRequestID; + IN HDRV_CALL hdCall; + IN ULONG ulUserUserInfoSize; + IN UCHAR UserUserInfo[1]; } NDIS_TAPI_ANSWER, *PNDIS_TAPI_ANSWER; typedef struct _NDIS_TAPI_CLOSE { - IN ULONG ulRequestID; - IN HDRV_LINE hdLine; + IN ULONG ulRequestID; + IN HDRV_LINE hdLine; } NDIS_TAPI_CLOSE, *PNDIS_TAPI_CLOSE; typedef struct _NDIS_TAPI_CLOSE_CALL { - IN ULONG ulRequestID; - IN HDRV_CALL hdCall; + IN ULONG ulRequestID; + IN HDRV_CALL hdCall; } NDIS_TAPI_CLOSE_CALL, *PNDIS_TAPI_CLOSE_CALL; typedef struct _NDIS_TAPI_CONDITIONAL_MEDIA_DETECTION { - IN ULONG ulRequestID; - IN HDRV_LINE hdLine; - IN ULONG ulMediaModes; - IN LINE_CALL_PARAMS LineCallParams; + IN ULONG ulRequestID; + IN HDRV_LINE hdLine; + IN ULONG ulMediaModes; + IN LINE_CALL_PARAMS LineCallParams; } NDIS_TAPI_CONDITIONAL_MEDIA_DETECTION, *PNDIS_TAPI_CONDITIONAL_MEDIA_DETECTION; typedef struct _NDIS_TAPI_DROP { - IN ULONG ulRequestID; - IN HDRV_CALL hdCall; - IN ULONG ulUserUserInfoSize; - IN UCHAR UserUserInfo[1]; + IN ULONG ulRequestID; + IN HDRV_CALL hdCall; + IN ULONG ulUserUserInfoSize; + IN UCHAR UserUserInfo[1]; } NDIS_TAPI_DROP, *PNDIS_TAPI_DROP; typedef struct _NDIS_TAPI_PROVIDER_SHUTDOWN { - IN ULONG ulRequestID; + IN ULONG ulRequestID; } NDIS_TAPI_PROVIDER_SHUTDOWN, *PNDIS_TAPI_PROVIDER_SHUTDOWN; typedef struct _NDIS_TAPI_SET_APP_SPECIFIC { - IN ULONG ulRequestID; - IN HDRV_CALL hdCall; - IN ULONG ulAppSpecific; + IN ULONG ulRequestID; + IN HDRV_CALL hdCall; + IN ULONG ulAppSpecific; } NDIS_TAPI_SET_APP_SPECIFIC, *PNDIS_TAPI_SET_APP_SPECIFIC; typedef struct _NDIS_TAPI_SET_CALL_PARAMS { - IN ULONG ulRequestID; - IN HDRV_CALL hdCall; - IN ULONG ulBearerMode; - IN ULONG ulMinRate; - IN ULONG ulMaxRate; - IN BOOLEAN bSetLineDialParams; - IN LINE_DIAL_PARAMS LineDialParams; + IN ULONG ulRequestID; + IN HDRV_CALL hdCall; + IN ULONG ulBearerMode; + IN ULONG ulMinRate; + IN ULONG ulMaxRate; + IN BOOLEAN bSetLineDialParams; + IN LINE_DIAL_PARAMS LineDialParams; } NDIS_TAPI_SET_CALL_PARAMS, *PNDIS_TAPI_SET_CALL_PARAMS; typedef struct _NDIS_TAPI_SET_DEFAULT_MEDIA_DETECTION { - IN ULONG ulRequestID; - IN HDRV_LINE hdLine; - IN ULONG ulMediaModes; + IN ULONG ulRequestID; + IN HDRV_LINE hdLine; + IN ULONG ulMediaModes; } NDIS_TAPI_SET_DEFAULT_MEDIA_DETECTION, *PNDIS_TAPI_SET_DEFAULT_MEDIA_DETECTION; typedef struct _NDIS_TAPI_SET_DEV_CONFIG { - IN ULONG ulRequestID; - IN ULONG ulDeviceID; - IN ULONG ulDeviceClassSize; - IN ULONG ulDeviceClassOffset; - IN ULONG ulDeviceConfigSize; - IN UCHAR DeviceConfig[1]; + IN ULONG ulRequestID; + IN ULONG ulDeviceID; + IN ULONG ulDeviceClassSize; + IN ULONG ulDeviceClassOffset; + IN ULONG ulDeviceConfigSize; + IN UCHAR DeviceConfig[1]; } NDIS_TAPI_SET_DEV_CONFIG, *PNDIS_TAPI_SET_DEV_CONFIG; typedef struct _NDIS_TAPI_SET_MEDIA_MODE { - IN ULONG ulRequestID; - IN HDRV_CALL hdCall; - IN ULONG ulMediaMode; + IN ULONG ulRequestID; + IN HDRV_CALL hdCall; + IN ULONG ulMediaMode; } NDIS_TAPI_SET_MEDIA_MODE, *PNDIS_TAPI_SET_MEDIA_MODE; typedef struct _NDIS_TAPI_SET_STATUS_MESSAGES { - IN ULONG ulRequestID; - IN HDRV_LINE hdLine; - IN ULONG ulLineStates; - IN ULONG ulAddressStates; + IN ULONG ulRequestID; + IN HDRV_LINE hdLine; + IN ULONG ulLineStates; + IN ULONG ulAddressStates; } NDIS_TAPI_SET_STATUS_MESSAGES, *PNDIS_TAPI_SET_STATUS_MESSAGES; typedef struct _NDIS_TAPI_ACCEPT { - IN ULONG ulRequestID; - IN HDRV_CALL hdCall; - IN ULONG ulUserUserInfoSize; - IN UCHAR UserUserInfo[1]; + IN ULONG ulRequestID; + IN HDRV_CALL hdCall; + IN ULONG ulUserUserInfoSize; + IN UCHAR UserUserInfo[1]; } NDIS_TAPI_ACCEPT, *PNDIS_TAPI_ACCEPT; typedef struct _NDIS_TAPI_DIAL { - IN ULONG ulRequestID; - IN HDRV_CALL hdCall; - IN ULONG ulDestAddressSize; - IN CHAR szDestAddress[1]; + IN ULONG ulRequestID; + IN HDRV_CALL hdCall; + IN ULONG ulDestAddressSize; + IN CHAR szDestAddress[1]; } NDIS_TAPI_DIAL, *PNDIS_TAPI_DIAL; typedef struct _NDIS_TAPI_EVENT { - IN HTAPI_LINE htLine; - IN HTAPI_CALL htCall; - IN ULONG ulMsg; - IN ULONG ulParam1; - IN ULONG ulParam2; - IN ULONG ulParam3; + IN HTAPI_LINE htLine; + IN HTAPI_CALL htCall; + IN ULONG ulMsg; + IN ULONG ulParam1; + IN ULONG ulParam2; + IN ULONG ulParam3; } NDIS_TAPI_EVENT, *PNDIS_TAPI_EVENT; typedef struct _NDIS_TAPI_OPEN { - IN ULONG ulRequestID; - IN ULONG ulDeviceID; - IN HTAPI_LINE htLine; - OUT HDRV_LINE hdLine; + IN ULONG ulRequestID; + IN ULONG ulDeviceID; + IN HTAPI_LINE htLine; + OUT HDRV_LINE hdLine; } NDIS_TAPI_OPEN, *PNDIS_TAPI_OPEN; typedef struct _NDIS_TAPI_SECURE_CALL { - IN ULONG ulRequestID; - IN HDRV_CALL hdCall; + IN ULONG ulRequestID; + IN HDRV_CALL hdCall; } NDIS_TAPI_SECURE_CALL, *PNDIS_TAPI_SECURE_CALL; typedef struct _NDIS_TAPI_SELECT_EXT_VERSION { - IN ULONG ulRequestID; - IN HDRV_LINE hdLine; - IN ULONG ulExtVersion; + IN ULONG ulRequestID; + IN HDRV_LINE hdLine; + IN ULONG ulExtVersion; } NDIS_TAPI_SELECT_EXT_VERSION, *PNDIS_TAPI_SELECT_EXT_VERSION; typedef struct _NDIS_TAPI_SEND_USER_USER_INFO { - IN ULONG ulRequestID; - IN HDRV_CALL hdCall; - IN ULONG ulUserUserInfoSize; - IN UCHAR UserUserInfo[1]; + IN ULONG ulRequestID; + IN HDRV_CALL hdCall; + IN ULONG ulUserUserInfoSize; + IN UCHAR UserUserInfo[1]; } NDIS_TAPI_SEND_USER_USER_INFO, *PNDIS_TAPI_SEND_USER_USER_INFO; - typedef struct _NDIS_TAPI_CONFIG_DIALOG { - IN ULONG ulRequestID; - IN ULONG ulDeviceID; - IN ULONG ulDeviceClassSize; - IN ULONG ulDeviceClassOffset; - IN ULONG ulLibraryNameTotalSize; + IN ULONG ulRequestID; + IN ULONG ulDeviceID; + IN ULONG ulDeviceClassSize; + IN ULONG ulDeviceClassOffset; + IN ULONG ulLibraryNameTotalSize; OUT ULONG ulLibraryNameNeededSize; - OUT CHAR szLibraryName[1]; + OUT CHAR szLibraryName[1]; } NDIS_TAPI_CONFIG_DIALOG, *PNDIS_TAPI_CONFIG_DIALOG; typedef struct _NDIS_TAPI_DEV_SPECIFIC { - IN ULONG ulRequestID; - IN HDRV_LINE hdLine; - IN ULONG ulAddressID; - IN HDRV_CALL hdCall; - IN OUT ULONG ulParamsSize; - IN OUT UCHAR Params[1]; + IN ULONG ulRequestID; + IN HDRV_LINE hdLine; + IN ULONG ulAddressID; + IN HDRV_CALL hdCall; + IN OUT ULONG ulParamsSize; + IN OUT UCHAR Params[1]; } NDIS_TAPI_DEV_SPECIFIC, *PNDIS_TAPI_DEV_SPECIFIC; typedef struct _NDIS_TAPI_GET_ADDRESS_CAPS { - IN ULONG ulRequestID; - IN ULONG ulDeviceID; - IN ULONG ulAddressID; - IN ULONG ulExtVersion; - OUT LINE_ADDRESS_CAPS LineAddressCaps; + IN ULONG ulRequestID; + IN ULONG ulDeviceID; + IN ULONG ulAddressID; + IN ULONG ulExtVersion; + OUT LINE_ADDRESS_CAPS LineAddressCaps; } NDIS_TAPI_GET_ADDRESS_CAPS, *PNDIS_TAPI_GET_ADDRESS_CAPS; typedef struct _NDIS_TAPI_GET_ADDRESS_ID { - IN ULONG ulRequestID; - IN HDRV_LINE hdLine; - OUT ULONG ulAddressID; - IN ULONG ulAddressMode; - IN ULONG ulAddressSize; - IN CHAR szAddress[1]; + IN ULONG ulRequestID; + IN HDRV_LINE hdLine; + OUT ULONG ulAddressID; + IN ULONG ulAddressMode; + IN ULONG ulAddressSize; + IN CHAR szAddress[1]; } NDIS_TAPI_GET_ADDRESS_ID, *PNDIS_TAPI_GET_ADDRESS_ID; typedef struct _NDIS_TAPI_GET_ADDRESS_STATUS { - IN ULONG ulRequestID; - IN HDRV_LINE hdLine; - IN ULONG ulAddressID; - OUT LINE_ADDRESS_STATUS LineAddressStatus; + IN ULONG ulRequestID; + IN HDRV_LINE hdLine; + IN ULONG ulAddressID; + OUT LINE_ADDRESS_STATUS LineAddressStatus; } NDIS_TAPI_GET_ADDRESS_STATUS, *PNDIS_TAPI_GET_ADDRESS_STATUS; typedef struct _NDIS_TAPI_GET_CALL_ADDRESS_ID { - IN ULONG ulRequestID; - IN HDRV_CALL hdCall; - OUT ULONG ulAddressID; + IN ULONG ulRequestID; + IN HDRV_CALL hdCall; + OUT ULONG ulAddressID; } NDIS_TAPI_GET_CALL_ADDRESS_ID, *PNDIS_TAPI_GET_CALL_ADDRESS_ID; typedef struct _NDIS_TAPI_GET_CALL_INFO { - ULONG ulRequestID; - IN HDRV_CALL hdCall; - OUT LINE_CALL_INFO LineCallInfo; + ULONG ulRequestID; + IN HDRV_CALL hdCall; + OUT LINE_CALL_INFO LineCallInfo; } NDIS_TAPI_GET_CALL_INFO, *PNDIS_TAPI_GET_CALL_INFO; typedef struct _NDIS_TAPI_GET_CALL_STATUS { - IN ULONG ulRequestID; - IN HDRV_CALL hdCall; - OUT LINE_CALL_STATUS LineCallStatus; + IN ULONG ulRequestID; + IN HDRV_CALL hdCall; + OUT LINE_CALL_STATUS LineCallStatus; } NDIS_TAPI_GET_CALL_STATUS, *PNDIS_TAPI_GET_CALL_STATUS; typedef struct _NDIS_TAPI_GET_DEV_CAPS { - IN ULONG ulRequestID; - IN ULONG ulDeviceID; - IN ULONG ulExtVersion; - OUT LINE_DEV_CAPS LineDevCaps; + IN ULONG ulRequestID; + IN ULONG ulDeviceID; + IN ULONG ulExtVersion; + OUT LINE_DEV_CAPS LineDevCaps; } NDIS_TAPI_GET_DEV_CAPS, *PNDIS_TAPI_GET_DEV_CAPS; typedef struct _NDIS_TAPI_GET_DEV_CONFIG { - IN ULONG ulRequestID; - IN ULONG ulDeviceID; - IN ULONG ulDeviceClassSize; - IN ULONG ulDeviceClassOffset; - OUT VAR_STRING DeviceConfig; + IN ULONG ulRequestID; + IN ULONG ulDeviceID; + IN ULONG ulDeviceClassSize; + IN ULONG ulDeviceClassOffset; + OUT VAR_STRING DeviceConfig; } NDIS_TAPI_GET_DEV_CONFIG, *PNDIS_TAPI_GET_DEV_CONFIG; typedef struct _NDIS_TAPI_GET_EXTENSION_ID { - IN ULONG ulRequestID; - IN ULONG ulDeviceID; - OUT LINE_EXTENSION_ID LineExtensionID; + IN ULONG ulRequestID; + IN ULONG ulDeviceID; + OUT LINE_EXTENSION_ID LineExtensionID; } NDIS_TAPI_GET_EXTENSION_ID, *PNDIS_TAPI_GET_EXTENSION_ID; typedef struct _NDIS_TAPI_GET_ID { - IN ULONG ulRequestID; - IN HDRV_LINE hdLine; - IN ULONG ulAddressID; - IN HDRV_CALL hdCall; - IN ULONG ulSelect; - IN ULONG ulDeviceClassSize; - IN ULONG ulDeviceClassOffset; - OUT VAR_STRING DeviceID; + IN ULONG ulRequestID; + IN HDRV_LINE hdLine; + IN ULONG ulAddressID; + IN HDRV_CALL hdCall; + IN ULONG ulSelect; + IN ULONG ulDeviceClassSize; + IN ULONG ulDeviceClassOffset; + OUT VAR_STRING DeviceID; } NDIS_TAPI_GET_ID, *PNDIS_TAPI_GET_ID; typedef struct _NDIS_TAPI_GET_LINE_DEV_STATUS { - IN ULONG ulRequestID; - IN HDRV_LINE hdLine; - OUT LINE_DEV_STATUS LineDevStatus; + IN ULONG ulRequestID; + IN HDRV_LINE hdLine; + OUT LINE_DEV_STATUS LineDevStatus; } NDIS_TAPI_GET_LINE_DEV_STATUS, *PNDIS_TAPI_GET_LINE_DEV_STATUS; typedef struct _NDIS_TAPI_MAKE_CALL { - IN ULONG ulRequestID; - IN HDRV_LINE hdLine; - IN HTAPI_CALL htCall; - OUT HDRV_CALL hdCall; - IN ULONG ulDestAddressSize; - IN ULONG ulDestAddressOffset; - IN BOOLEAN bUseDefaultLineCallParams; - IN LINE_CALL_PARAMS LineCallParams; + IN ULONG ulRequestID; + IN HDRV_LINE hdLine; + IN HTAPI_CALL htCall; + OUT HDRV_CALL hdCall; + IN ULONG ulDestAddressSize; + IN ULONG ulDestAddressOffset; + IN BOOLEAN bUseDefaultLineCallParams; + IN LINE_CALL_PARAMS LineCallParams; } NDIS_TAPI_MAKE_CALL, *PNDIS_TAPI_MAKE_CALL; typedef struct _NDIS_TAPI_NEGOTIATE_EXT_VERSION { - IN ULONG ulRequestID; - IN ULONG ulDeviceID; - IN ULONG ulLowVersion; - IN ULONG ulHighVersion; - OUT ULONG ulExtVersion; + IN ULONG ulRequestID; + IN ULONG ulDeviceID; + IN ULONG ulLowVersion; + IN ULONG ulHighVersion; + OUT ULONG ulExtVersion; } NDIS_TAPI_NEGOTIATE_EXT_VERSION, *PNDIS_TAPI_NEGOTIATE_EXT_VERSION; typedef struct _NDIS_TAPI_PROVIDER_INITIALIZE { - IN ULONG ulRequestID; - IN ULONG ulDeviceIDBase; - OUT ULONG ulNumLineDevs; - OUT ULONG ulProviderID; + IN ULONG ulRequestID; + IN ULONG ulDeviceIDBase; + OUT ULONG ulNumLineDevs; + OUT ULONG ulProviderID; } NDIS_TAPI_PROVIDER_INITIALIZE, *PNDIS_TAPI_PROVIDER_INITIALIZE; - #define CO_TAPI_VERSION NDIS_TAPI_CURRENT_VERSION #define CO_TAPI_FLAG_OUTGOING_CALL 0x00000001 @@ -1221,50 +1220,49 @@ typedef struct _NDIS_TAPI_PROVIDER_INITIALIZE { #define AF_TAPI_SAP_TYPE 0x00008000 typedef struct _CO_TAPI_ADDRESS_CAPS { - IN ULONG ulLineID; - IN ULONG ulAddressID; - OUT ULONG ulFlags; - OUT LINE_ADDRESS_CAPS LineAddressCaps; + IN ULONG ulLineID; + IN ULONG ulAddressID; + OUT ULONG ulFlags; + OUT LINE_ADDRESS_CAPS LineAddressCaps; } CO_TAPI_ADDRESS_CAPS, *PCO_TAPI_ADDRESS_CAPS; /* CO_TAPI_CM_CAPS.ulFlags constants */ #define CO_TAPI_FLAG_PER_LINE_CAPS 0x00000001 typedef struct _CO_TAPI_CM_CAPS { - OUT ULONG ulCoTapiVersion; - OUT ULONG ulNumLines; - OUT ULONG ulFlags; + OUT ULONG ulCoTapiVersion; + OUT ULONG ulNumLines; + OUT ULONG ulFlags; } CO_TAPI_CM_CAPS, *PCO_TAPI_CM_CAPS; typedef struct _CO_TAPI_CALL_DIAGNOSTICS { - OUT ULONG ulOrigin; - OUT ULONG ulReason; - OUT NDIS_VAR_DATA_DESC DiagInfo; + OUT ULONG ulOrigin; + OUT ULONG ulReason; + OUT NDIS_VAR_DATA_DESC DiagInfo; } CO_TAPI_CALL_DIAGNOSTICS, *PCO_TAPI_CALL_DIAGNOSTICS; - /* CO_TAPI_LINE_CAPS.ulFlags constants */ #define CO_TAPI_FLAG_PER_ADDRESS_CAPS 0x00000001 typedef struct _CO_TAPI_LINE_CAPS { - IN ULONG ulLineID; - OUT ULONG ulFlags; - OUT LINE_DEV_CAPS LineDevCaps; + IN ULONG ulLineID; + OUT ULONG ulFlags; + OUT LINE_DEV_CAPS LineDevCaps; } CO_TAPI_LINE_CAPS, *PCO_TAPI_LINE_CAPS; typedef struct _CO_TAPI_TRANSLATE_NDIS_CALLPARAMS { - IN ULONG ulFlags; - IN NDIS_VAR_DATA_DESC NdisCallParams; - OUT NDIS_VAR_DATA_DESC LineCallInfo; + IN ULONG ulFlags; + IN NDIS_VAR_DATA_DESC NdisCallParams; + OUT NDIS_VAR_DATA_DESC LineCallInfo; } CO_TAPI_TRANSLATE_NDIS_CALLPARAMS, *PCO_TAPI_TRANSLATE_NDIS_CALLPARAMS; typedef struct _CO_TAPI_TRANSLATE_TAPI_CALLPARAMS { - IN ULONG ulLineID; - IN ULONG ulAddressID; - IN ULONG ulFlags; - IN NDIS_VAR_DATA_DESC DestAddress; - IN NDIS_VAR_DATA_DESC LineCallParams; - OUT NDIS_VAR_DATA_DESC NdisCallParams; + IN ULONG ulLineID; + IN ULONG ulAddressID; + IN ULONG ulFlags; + IN NDIS_VAR_DATA_DESC DestAddress; + IN NDIS_VAR_DATA_DESC LineCallParams; + OUT NDIS_VAR_DATA_DESC NdisCallParams; } CO_TAPI_TRANSLATE_TAPI_CALLPARAMS, *PCO_TAPI_TRANSLATE_TAPI_CALLPARAMS; /* CO_TAPI_TRANSLATE_SAP.ulLineID constants */ @@ -1274,31 +1272,31 @@ typedef struct _CO_TAPI_TRANSLATE_TAPI_CALLPARAMS { #define CO_TAPI_ADDRESS_ID_UNSPECIFIED 0xFFFFFFFF typedef struct _CO_TAPI_TRANSLATE_SAP { - IN ULONG ulLineID; - IN ULONG ulAddressID; - IN ULONG ulMediaModes; - IN ULONG Reserved; - OUT ULONG NumberOfSaps; - OUT NDIS_VAR_DATA_DESC NdisSapParams[1]; + IN ULONG ulLineID; + IN ULONG ulAddressID; + IN ULONG ulMediaModes; + IN ULONG Reserved; + OUT ULONG NumberOfSaps; + OUT NDIS_VAR_DATA_DESC NdisSapParams[1]; } CO_AF_TAPI_SAP, *PCO_AF_TAPI_SAP; typedef struct _CO_AF_TAPI_INCOMING_CALL_PARAMETERS { - IN ULONG ulLineID; - IN ULONG ulAddressID; - IN ULONG ulFlags; - IN NDIS_VAR_DATA_DESC LineCallInfo; + IN ULONG ulLineID; + IN ULONG ulAddressID; + IN ULONG ulFlags; + IN NDIS_VAR_DATA_DESC LineCallInfo; } CO_AF_TAPI_INCOMING_CALL_PARAMETERS, *PCO_AF_TAPI_INCOMING_CALL_PARAMETERS; typedef struct _CO_AF_TAPI_MAKE_CALL_PARAMETERS { - IN ULONG ulLineID; - IN ULONG ulAddressID; - IN ULONG ulFlags; - IN NDIS_VAR_DATA_DESC DestAddress; - IN NDIS_VAR_DATA_DESC LineCallParams; + IN ULONG ulLineID; + IN ULONG ulAddressID; + IN ULONG ulFlags; + IN NDIS_VAR_DATA_DESC DestAddress; + IN NDIS_VAR_DATA_DESC LineCallParams; } CO_AF_TAPI_MAKE_CALL_PARAMETERS, *PCO_AF_TAPI_MAKE_CALL_PARAMETERS; #ifdef __cplusplus } #endif -#endif /* __NDISTAPI_H */ +#endif /* _NDIS_TAPI_ */ diff --git a/include/ddk/ndiswan.h b/include/ddk/ndiswan.h index 924c49f0386..5fa5322958e 100644 --- a/include/ddk/ndiswan.h +++ b/include/ddk/ndiswan.h @@ -22,6 +22,9 @@ #pragma once +#ifndef _NDIS_WAN_ +#define _NDIS_WAN_ + #ifdef __cplusplus extern "C" { #endif @@ -352,3 +355,6 @@ typedef struct _WAN_CO_MTULINKPARAMS { #ifdef __cplusplus } #endif + +#endif /* _NDIS_WAN_ */ + diff --git a/include/ddk/ntddbeep.h b/include/ddk/ntddbeep.h deleted file mode 100644 index 9e10b0682c0..00000000000 --- a/include/ddk/ntddbeep.h +++ /dev/null @@ -1,26 +0,0 @@ - -#ifndef _NTDDBEEP_ -#define _NTDDBEEP_ - - -#ifdef __cplusplus -extern "C" { -#endif - -#define DD_BEEP_DEVICE_NAME "\\Device\\Beep" -#define DD_BEEP_DEVICE_NAME_U L"\\Device\\Beep" -#define BEEP_FREQUENCY_MINIMUM 0x25 -#define BEEP_FREQUENCY_MAXIMUM 0x7FFF -#define IOCTL_BEEP_SET CTL_CODE(FILE_DEVICE_BEEP, 0, METHOD_BUFFERED, FILE_ANY_ACCESS) - -typedef struct _BEEP_SET_PARAMETERS -{ - ULONG Frequency; - ULONG Duration; -} BEEP_SET_PARAMETERS, *PBEEP_SET_PARAMETERS; - -#ifdef __cplusplus -} -#endif -#endif - diff --git a/include/ddk/ntddpcm.h b/include/ddk/ntddpcm.h index 7c6e55c41f4..139ec96992a 100644 --- a/include/ddk/ntddpcm.h +++ b/include/ddk/ntddpcm.h @@ -20,8 +20,8 @@ * */ -#ifndef __NTDDPCM_H -#define __NTDDPCM_H +#ifndef _NTDDPCMH_ +#define _NTDDPCMH_ #ifdef __cplusplus extern "C" { @@ -156,4 +156,4 @@ typedef struct _PCMCIA_INTERFACE_STANDARD { } #endif -#endif /* __NTDDPCM_H */ +#endif /* _NTDDPCMH_ */ diff --git a/include/ddk/ntddsnd.h b/include/ddk/ntddsnd.h index 0de798e37b2..bee1310fa47 100644 --- a/include/ddk/ntddsnd.h +++ b/include/ddk/ntddsnd.h @@ -32,7 +32,6 @@ #define SOUND_MAX_DEVICES 100 #define SOUND_MAX_DEVICE_NAME 80 - /* Base control codes */ @@ -43,80 +42,78 @@ #define IOCTL_AUX_BASE 0x0100 #define IOCTL_MIX_BASE 0x0180 - /* Helper macros for defining control codes */ #define WAVE_CTL_CODE(subcode, iomethod, access) \ - CTL_CODE(FILE_DEVICE_SOUND, IOCTL_WAVE_BASE + subcode, iomethod, access) + CTL_CODE(FILE_DEVICE_SOUND, IOCTL_WAVE_BASE + subcode, iomethod, access) #define MIDI_CTL_CODE(subcode, iomethod, access) \ - CTL_CODE(FILE_DEVICE_SOUND, IOCTL_MIDI_BASE + subcode, iomethod, access) + CTL_CODE(FILE_DEVICE_SOUND, IOCTL_MIDI_BASE + subcode, iomethod, access) #define MIX_CTL_CODE(subcode, iomethod, access) \ - CTL_CODE(FILE_DEVICE_SOUND, IOCTL_MIX_BASE + subcode, iomethod, access) + CTL_CODE(FILE_DEVICE_SOUND, IOCTL_MIX_BASE + subcode, iomethod, access) #define AUX_CTL_CODE(subcode, iomethod, access) \ - CTL_CODE(FILE_DEVICE_SOUND, IOCTL_AUX_BASE + subcode, iomethod, access) - + CTL_CODE(FILE_DEVICE_SOUND, IOCTL_AUX_BASE + subcode, iomethod, access) /* Wave device control codes */ #define IOCTL_WAVE_QUERY_FORMAT \ - WAVE_CTL_CODE(0x0001, METHOD_BUFFERED, FILE_READ_ACCESS) + WAVE_CTL_CODE(0x0001, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_WAVE_SET_FORMAT \ - WAVE_CTL_CODE(0x0002, METHOD_BUFFERED, FILE_WRITE_ACCESS) + WAVE_CTL_CODE(0x0002, METHOD_BUFFERED, FILE_WRITE_ACCESS) #define IOCTL_WAVE_GET_CAPABILITIES \ - WAVE_CTL_CODE(0x0003, METHOD_BUFFERED, FILE_READ_ACCESS) + WAVE_CTL_CODE(0x0003, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_WAVE_SET_STATE \ - WAVE_CTL_CODE(0x0004, METHOD_BUFFERED, FILE_WRITE_ACCESS) + WAVE_CTL_CODE(0x0004, METHOD_BUFFERED, FILE_WRITE_ACCESS) #define IOCTL_WAVE_GET_STATE \ - WAVE_CTL_CODE(0x0005, METHOD_BUFFERED, FILE_WRITE_ACCESS) + WAVE_CTL_CODE(0x0005, METHOD_BUFFERED, FILE_WRITE_ACCESS) #define IOCTL_WAVE_GET_POSITION \ - WAVE_CTL_CODE(0x0006, METHOD_BUFFERED, FILE_WRITE_ACCESS) + WAVE_CTL_CODE(0x0006, METHOD_BUFFERED, FILE_WRITE_ACCESS) #define IOCTL_WAVE_SET_VOLUME \ - WAVE_CTL_CODE(0x0007, METHOD_BUFFERED, FILE_READ_ACCESS) + WAVE_CTL_CODE(0x0007, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_WAVE_GET_VOLUME \ - WAVE_CTL_CODE(0x0008, METHOD_BUFFERED, FILE_READ_ACCESS) + WAVE_CTL_CODE(0x0008, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_WAVE_SET_PITCH \ - WAVE_CTL_CODE(0x0009, METHOD_BUFFERED, FILE_WRITE_ACCESS) + WAVE_CTL_CODE(0x0009, METHOD_BUFFERED, FILE_WRITE_ACCESS) #define IOCTL_WAVE_GET_PITCH \ - WAVE_CTL_CODE(0x000A, METHOD_BUFFERED, FILE_WRITE_ACCESS) + WAVE_CTL_CODE(0x000A, METHOD_BUFFERED, FILE_WRITE_ACCESS) #define IOCTL_WAVE_SET_PLAYBACK_RATE \ - WAVE_CTL_CODE(0x000B, METHOD_BUFFERED, FILE_WRITE_ACCESS) + WAVE_CTL_CODE(0x000B, METHOD_BUFFERED, FILE_WRITE_ACCESS) #define IOCTL_WAVE_GET_PLAYBACK_RATE \ - WAVE_CTL_CODE(0x000C, METHOD_BUFFERED, FILE_WRITE_ACCESS) + WAVE_CTL_CODE(0x000C, METHOD_BUFFERED, FILE_WRITE_ACCESS) #define IOCTL_WAVE_PLAY \ - WAVE_CTL_CODE(0x000D, METHOD_IN_DIRECT, FILE_WRITE_ACCESS) + WAVE_CTL_CODE(0x000D, METHOD_IN_DIRECT, FILE_WRITE_ACCESS) #define IOCTL_WAVE_RECORD \ - WAVE_CTL_CODE(0x000E, METHOD_OUT_DIRECT, FILE_WRITE_ACCESS) + WAVE_CTL_CODE(0x000E, METHOD_OUT_DIRECT, FILE_WRITE_ACCESS) #define IOCTL_WAVE_BREAK_LOOP \ - WAVE_CTL_CODE(0x000F, METHOD_BUFFERED, FILE_WRITE_ACCESS) + WAVE_CTL_CODE(0x000F, METHOD_BUFFERED, FILE_WRITE_ACCESS) #define IOCTL_WAVE_SET_LOW_PRIORITY \ - WAVE_CTL_CODE(0x0010, METHOD_BUFFERED, FILE_WRITE_ACCESS) + WAVE_CTL_CODE(0x0010, METHOD_BUFFERED, FILE_WRITE_ACCESS) #if DBG - /* Debug-only control code */ - #define IOCTL_WAVE_SET_DEBUG_LEVEL \ - WAVE_CTL_CODE(0x0040, METHOD_BUFFERED, FILE_READ_ACCESS) +/* Debug-only control code */ +#define IOCTL_WAVE_SET_DEBUG_LEVEL \ + WAVE_CTL_CODE(0x0040, METHOD_BUFFERED, FILE_READ_ACCESS) #endif @@ -125,72 +122,69 @@ */ #define IOCTL_MIDI_GET_CAPABILITIES \ - MIDI_CTL_CODE(0x0001, METHOD_BUFFERED, FILE_READ_ACCESS) + MIDI_CTL_CODE(0x0001, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_MIDI_SET_STATE \ - MIDI_CTL_CODE(0x0002, METHOD_BUFFERED, FILE_WRITE_ACCESS) + MIDI_CTL_CODE(0x0002, METHOD_BUFFERED, FILE_WRITE_ACCESS) #define IOCTL_MIDI_GET_STATE \ - MIDI_CTL_CODE(0x0003, METHOD_BUFFERED, FILE_WRITE_ACCESS) + MIDI_CTL_CODE(0x0003, METHOD_BUFFERED, FILE_WRITE_ACCESS) #define IOCTL_MIDI_SET_VOLUME \ - MIDI_CTL_CODE(0x0004, METHOD_BUFFERED, FILE_READ_ACCESS) + MIDI_CTL_CODE(0x0004, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_MIDI_GET_VOLUME \ - MIDI_CTL_CODE(0x0005, METHOD_BUFFERED, FILE_READ_ACCESS) + MIDI_CTL_CODE(0x0005, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_MIDI_PLAY \ - MIDI_CTL_CODE(0x0006, METHOD_NEITHER, FILE_WRITE_ACCESS) + MIDI_CTL_CODE(0x0006, METHOD_NEITHER, FILE_WRITE_ACCESS) #define IOCTL_MIDI_RECORD \ - MIDI_CTL_CODE(0x0007, METHOD_BUFFERED, FILE_WRITE_ACCESS) + MIDI_CTL_CODE(0x0007, METHOD_BUFFERED, FILE_WRITE_ACCESS) #define IOCTL_MIDI_CACHE_PATCHES \ - MIDI_CTL_CODE(0x0008, METHOD_BUFFERED, FILE_WRITE_ACCESS) + MIDI_CTL_CODE(0x0008, METHOD_BUFFERED, FILE_WRITE_ACCESS) #define IOCTL_MIDI_CACHE_DRUM_PATCHES \ - MIDI_CTL_CODE(0x0009, METHOD_BUFFERED, FILE_WRITE_ACCESS) + MIDI_CTL_CODE(0x0009, METHOD_BUFFERED, FILE_WRITE_ACCESS) #if DBG - /* Debug-only control code */ - #define IOCTL_MIDI_SET_DEBUG_LEVEL \ - WAVE_CTL_CODE(0x0040, METHOD_BUFFERED, FILE_READ_ACCESS) +/* Debug-only control code */ +#define IOCTL_MIDI_SET_DEBUG_LEVEL \ + WAVE_CTL_CODE(0x0040, METHOD_BUFFERED, FILE_READ_ACCESS) #endif - /* Mixer device control codes */ #define IOCTL_MIX_GET_CONFIGURATION \ - MIX_CTL_CODE(0x0001, METHOD_BUFFERED, FILE_READ_ACCESS) + MIX_CTL_CODE(0x0001, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_MIX_GET_CONTROL_DATA \ - MIX_CTL_CODE(0x0002, METHOD_BUFFERED, FILE_READ_ACCESS) + MIX_CTL_CODE(0x0002, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_MIX_GET_LINE_DATA \ - MIX_CTL_CODE(0x0003, METHOD_BUFFERED, FILE_READ_ACCESS) + MIX_CTL_CODE(0x0003, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_MIX_REQUEST_NOTIFY \ - MIX_CTL_CODE(0x0004, METHOD_BUFFERED, FILE_READ_ACCESS) - + MIX_CTL_CODE(0x0004, METHOD_BUFFERED, FILE_READ_ACCESS) /* Auxiliary device control codes */ #define IOCTL_AUX_GET_CAPABILITIES \ - AUX_CTL_CODE(0x0001, METHOD_BUFFERED, FILE_READ_ACCESS) + AUX_CTL_CODE(0x0001, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_AUX_SET_VOLUME \ - AUX_CTL_CODE(0x0002, METHOD_BUFFERED, FILE_READ_ACCESS) + AUX_CTL_CODE(0x0002, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_AUX_GET_VOLUME \ - AUX_CTL_CODE(0x0003, METHOD_BUFFERED, FILE_READ_ACCESS) + AUX_CTL_CODE(0x0003, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_SOUND_GET_CHANGED_VOLUME \ - AUX_CTL_CODE(0x0004, METHOD_BUFFERED, FILE_READ_ACCESS) - + AUX_CTL_CODE(0x0004, METHOD_BUFFERED, FILE_READ_ACCESS) /* Wave structures & states @@ -198,20 +192,17 @@ #define WAVE_DD_MAX_VOLUME 0xFFFFFFFF -typedef struct _WAVE_DD_VOLUME -{ - ULONG Left; - ULONG Right; +typedef struct _WAVE_DD_VOLUME { + ULONG Left; + ULONG Right; } WAVE_DD_VOLUME, *PWAVE_DD_VOLUME; -typedef struct _WAVE_DD_PITCH -{ - ULONG Pitch; +typedef struct _WAVE_DD_PITCH { + ULONG Pitch; } WAVE_DD_PITCH, *PWAVE_DD_PITCH; -typedef struct _WAVE_DD_PLAYBACK_RATE -{ - ULONG Rate; +typedef struct _WAVE_DD_PLAYBACK_RATE { + ULONG Rate; } WAVE_DD_PLAYBACK_RATE, *PWAVE_DD_PLAYBACK_RATE; /* IOCTL_WAVE_SET_STATE commands */ @@ -226,35 +217,30 @@ typedef struct _WAVE_DD_PLAYBACK_RATE #define WAVE_DD_PLAYING 0x0002 #define WAVE_DD_RECORDING 0x0003 - /* MIDI structures & states */ -typedef struct _MIDI_DD_INPUT_DATA -{ - LARGE_INTEGER Time; - UCHAR Data[sizeof(ULONG)]; +typedef struct _MIDI_DD_INPUT_DATA { + LARGE_INTEGER Time; + UCHAR Data[sizeof(ULONG)]; } MIDI_DD_INPUT_DATA, *PMIDI_DD_INPUT_DATA; -typedef struct _MIDI_DD_VOLUME -{ - ULONG Left; - ULONG Right; +typedef struct _MIDI_DD_VOLUME { + ULONG Left; + ULONG Right; } MIDI_DD_VOLUME, *PMIDI_DD_VOLUME; -typedef struct _MIDI_DD_CACHE_PATCHES -{ - ULONG Bank; - ULONG Flags; - ULONG Patches[128]; +typedef struct _MIDI_DD_CACHE_PATCHES { + ULONG Bank; + ULONG Flags; + ULONG Patches[128]; } MIDI_DD_CACHE_PATCHES, *PMIDI_DD_CACHE_PATCHES; -typedef struct _MIDI_DD_CACHE_DRUM_PATCHES -{ - ULONG Patch; - ULONG Flags; - ULONG DrumPatches[128]; +typedef struct _MIDI_DD_CACHE_DRUM_PATCHES { + ULONG Patch; + ULONG Flags; + ULONG DrumPatches[128]; } MIDI_DD_CACHE_DRUM_PATCHES, *PMIDI_DD_CACHE_DRUM_PATCHES; /* IOCTL_MIDI_SET_STATE commands */ @@ -269,34 +255,29 @@ typedef struct _MIDI_DD_CACHE_DRUM_PATCHES #define MIDI_DD_PLAYING 0x0002 #define MIDI_DD_RECORDING 0x0003 - /* Mixer structures TODO: This is incomplete (see NTDDMIX.H in NT4 DDK) */ -typedef struct _MIXER_DD_READ_DATA -{ - ULONG Id; +typedef struct _MIXER_DD_READ_DATA { + ULONG Id; } MIXER_DD_READ_DATA, *PMIXER_DD_READ_DATA; -typedef struct _MIXER_DD_LINE_DATA -{ - ULONG fdwLine; +typedef struct _MIXER_DD_LINE_DATA { + ULONG fdwLine; } MIXER_DD_LINE_DATA, *PMIXER_DD_LINE_DATA; - /* Auxiliary structures */ #define AUX_DD_MAX_VOLUME 0xFFFFFFFF -typedef struct _AUX_DD_VOLUME -{ - ULONG Left; - ULONG Right; +typedef struct _AUX_DD_VOLUME { + ULONG Left; + ULONG Right; } AUX_DD_VOLUME, *PAUX_DD_VOLUME; -#endif +#endif /* NTDDSND_H */ diff --git a/include/ddk/ntimage.h b/include/ddk/ntimage.h index 8df984763f7..2dac14a3053 100644 --- a/include/ddk/ntimage.h +++ b/include/ddk/ntimage.h @@ -43,115 +43,108 @@ #define IMAGE_FILE_MACHINE_CEF 0x0CEF - // // DOS Image Header Format // #include typedef struct _IMAGE_DOS_HEADER { - USHORT e_magic; - USHORT e_cblp; - USHORT e_cp; - USHORT e_crlc; - USHORT e_cparhdr; - USHORT e_minalloc; - USHORT e_maxalloc; - USHORT e_ss; - USHORT e_sp; - USHORT e_csum; - USHORT e_ip; - USHORT e_cs; - USHORT e_lfarlc; - USHORT e_ovno; - USHORT e_res[4]; - USHORT e_oemid; - USHORT e_oeminfo; - USHORT e_res2[10]; - LONG e_lfanew; + USHORT e_magic; + USHORT e_cblp; + USHORT e_cp; + USHORT e_crlc; + USHORT e_cparhdr; + USHORT e_minalloc; + USHORT e_maxalloc; + USHORT e_ss; + USHORT e_sp; + USHORT e_csum; + USHORT e_ip; + USHORT e_cs; + USHORT e_lfarlc; + USHORT e_ovno; + USHORT e_res[4]; + USHORT e_oemid; + USHORT e_oeminfo; + USHORT e_res2[10]; + LONG e_lfanew; } IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER; #include - - // // Export/Import Format // #include typedef struct _IMAGE_EXPORT_DIRECTORY { - ULONG Characteristics; - ULONG TimeDateStamp; - USHORT MajorVersion; - USHORT MinorVersion; - ULONG Name; - ULONG Base; - ULONG NumberOfFunctions; - ULONG NumberOfNames; - ULONG AddressOfFunctions; - ULONG AddressOfNames; - ULONG AddressOfNameOrdinals; + ULONG Characteristics; + ULONG TimeDateStamp; + USHORT MajorVersion; + USHORT MinorVersion; + ULONG Name; + ULONG Base; + ULONG NumberOfFunctions; + ULONG NumberOfNames; + ULONG AddressOfFunctions; + ULONG AddressOfNames; + ULONG AddressOfNameOrdinals; } IMAGE_EXPORT_DIRECTORY, *PIMAGE_EXPORT_DIRECTORY; - - // // Resource Data Entry Format // typedef struct _IMAGE_RESOURCE_DATA_ENTRY { - ULONG OffsetToData; - ULONG Size; - ULONG CodePage; - ULONG Reserved; + ULONG OffsetToData; + ULONG Size; + ULONG CodePage; + ULONG Reserved; } IMAGE_RESOURCE_DATA_ENTRY, *PIMAGE_RESOURCE_DATA_ENTRY; - - // // Load Configuration Directory Entry Format // typedef struct { - ULONG Size; - ULONG TimeDateStamp; - USHORT MajorVersion; - USHORT MinorVersion; - ULONG GlobalFlagsClear; - ULONG GlobalFlagsSet; - ULONG CriticalSectionDefaultTimeout; - ULONG DeCommitFreeBlockThreshold; - ULONG DeCommitTotalFreeThreshold; - ULONG LockPrefixTable; - ULONG MaximumAllocationSize; - ULONG VirtualMemoryThreshold; - ULONG ProcessHeapFlags; - ULONG ProcessAffinityMask; - USHORT CSDVersion; - USHORT Reserved1; - ULONG EditList; - ULONG SecurityCookie; - ULONG SEHandlerTable; - ULONG SEHandlerCount; + ULONG Size; + ULONG TimeDateStamp; + USHORT MajorVersion; + USHORT MinorVersion; + ULONG GlobalFlagsClear; + ULONG GlobalFlagsSet; + ULONG CriticalSectionDefaultTimeout; + ULONG DeCommitFreeBlockThreshold; + ULONG DeCommitTotalFreeThreshold; + ULONG LockPrefixTable; + ULONG MaximumAllocationSize; + ULONG VirtualMemoryThreshold; + ULONG ProcessHeapFlags; + ULONG ProcessAffinityMask; + USHORT CSDVersion; + USHORT Reserved1; + ULONG EditList; + ULONG SecurityCookie; + ULONG SEHandlerTable; + ULONG SEHandlerCount; } IMAGE_LOAD_CONFIG_DIRECTORY32, *PIMAGE_LOAD_CONFIG_DIRECTORY32; typedef struct { - ULONG Size; - ULONG TimeDateStamp; - USHORT MajorVersion; - USHORT MinorVersion; - ULONG GlobalFlagsClear; - ULONG GlobalFlagsSet; - ULONG CriticalSectionDefaultTimeout; - ULONGLONG DeCommitFreeBlockThreshold; - ULONGLONG DeCommitTotalFreeThreshold; - ULONGLONG LockPrefixTable; - ULONGLONG MaximumAllocationSize; - ULONGLONG VirtualMemoryThreshold; - ULONGLONG ProcessAffinityMask; - ULONG ProcessHeapFlags; - USHORT CSDVersion; - USHORT Reserved1; - ULONGLONG EditList; - ULONGLONG SecurityCookie; - ULONGLONG SEHandlerTable; - ULONGLONG SEHandlerCount; + ULONG Size; + ULONG TimeDateStamp; + USHORT MajorVersion; + USHORT MinorVersion; + ULONG GlobalFlagsClear; + ULONG GlobalFlagsSet; + ULONG CriticalSectionDefaultTimeout; + ULONGLONG DeCommitFreeBlockThreshold; + ULONGLONG DeCommitTotalFreeThreshold; + ULONGLONG LockPrefixTable; + ULONGLONG MaximumAllocationSize; + ULONGLONG VirtualMemoryThreshold; + ULONGLONG ProcessAffinityMask; + ULONG ProcessHeapFlags; + USHORT CSDVersion; + USHORT Reserved1; + ULONGLONG EditList; + ULONGLONG SecurityCookie; + ULONGLONG SEHandlerTable; + ULONGLONG SEHandlerCount; } IMAGE_LOAD_CONFIG_DIRECTORY64, *PIMAGE_LOAD_CONFIG_DIRECTORY64; #ifdef _WIN64 @@ -162,36 +155,31 @@ typedef IMAGE_LOAD_CONFIG_DIRECTORY32 IMAGE_LOAD_CONFIG_DIRECTORY; typedef PIMAGE_LOAD_CONFIG_DIRECTORY32 PIMAGE_LOAD_CONFIG_DIRECTORY; #endif - // // Base Relocation Format // typedef struct _IMAGE_BASE_RELOCATION { - ULONG VirtualAddress; - ULONG SizeOfBlock; + ULONG VirtualAddress; + ULONG SizeOfBlock; } IMAGE_BASE_RELOCATION, *PIMAGE_BASE_RELOCATION; - - // // Resource Format // typedef struct _IMAGE_RESOURCE_DIRECTORY { - ULONG Characteristics; - ULONG TimeDateStamp; - USHORT MajorVersion; - USHORT MinorVersion; - USHORT NumberOfNamedEntries; - USHORT NumberOfIdEntries; + ULONG Characteristics; + ULONG TimeDateStamp; + USHORT MajorVersion; + USHORT MinorVersion; + USHORT NumberOfNamedEntries; + USHORT NumberOfIdEntries; } IMAGE_RESOURCE_DIRECTORY, *PIMAGE_RESOURCE_DIRECTORY; typedef struct _IMAGE_RESOURCE_DIRECTORY_STRING { - USHORT Length; - CHAR NameString[ANYSIZE_ARRAY]; + USHORT Length; + CHAR NameString[ANYSIZE_ARRAY]; } IMAGE_RESOURCE_DIRECTORY_STRING, *PIMAGE_RESOURCE_DIRECTORY_STRING; - - // // Section Header Format // @@ -199,20 +187,19 @@ typedef struct _IMAGE_RESOURCE_DIRECTORY_STRING { #define IMAGE_SIZEOF_SECTION_HEADER 40 typedef struct _IMAGE_SECTION_HEADER { - UCHAR Name[IMAGE_SIZEOF_SHORT_NAME]; - union - { - ULONG PhysicalAddress; - ULONG VirtualSize; - } Misc; - ULONG VirtualAddress; - ULONG SizeOfRawData; - ULONG PointerToRawData; - ULONG PointerToRelocations; - ULONG PointerToLinenumbers; - USHORT NumberOfRelocations; - USHORT NumberOfLinenumbers; - ULONG Characteristics; + UCHAR Name[IMAGE_SIZEOF_SHORT_NAME]; + union { + ULONG PhysicalAddress; + ULONG VirtualSize; + } Misc; + ULONG VirtualAddress; + ULONG SizeOfRawData; + ULONG PointerToRawData; + ULONG PointerToRelocations; + ULONG PointerToLinenumbers; + USHORT NumberOfRelocations; + USHORT NumberOfLinenumbers; + ULONG Characteristics; } IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER; // @@ -231,21 +218,19 @@ typedef struct _IMAGE_SECTION_HEADER { #define IMAGE_SCN_MEM_READ 0x40000000 #define IMAGE_SCN_MEM_WRITE 0x80000000 - - // // File Header Format // #define IMAGE_SIZEOF_FILE_HEADER 20 typedef struct _IMAGE_FILE_HEADER { - USHORT Machine; - USHORT NumberOfSections; - ULONG TimeDateStamp; - ULONG PointerToSymbolTable; - ULONG NumberOfSymbols; - USHORT SizeOfOptionalHeader; - USHORT Characteristics; + USHORT Machine; + USHORT NumberOfSections; + ULONG TimeDateStamp; + ULONG PointerToSymbolTable; + ULONG NumberOfSymbols; + USHORT SizeOfOptionalHeader; + USHORT Characteristics; } IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER; // @@ -267,104 +252,100 @@ typedef struct _IMAGE_FILE_HEADER { #define IMAGE_FILE_UP_SYSTEM_ONLY 0x4000 #define IMAGE_FILE_BYTES_REVERSED_HI 0x8000 - - // // Directory format. // #define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 16 typedef struct _IMAGE_DATA_DIRECTORY { - ULONG VirtualAddress; - ULONG Size; + ULONG VirtualAddress; + ULONG Size; } IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY; - - // // Optional Header Formats // typedef struct _IMAGE_OPTIONAL_HEADER { - USHORT Magic; - UCHAR MajorLinkerVersion; - UCHAR MinorLinkerVersion; - ULONG SizeOfCode; - ULONG SizeOfInitializedData; - ULONG SizeOfUninitializedData; - ULONG AddressOfEntryPoint; - ULONG BaseOfCode; - ULONG BaseOfData; - ULONG ImageBase; - ULONG SectionAlignment; - ULONG FileAlignment; - USHORT MajorOperatingSystemVersion; - USHORT MinorOperatingSystemVersion; - USHORT MajorImageVersion; - USHORT MinorImageVersion; - USHORT MajorSubsystemVersion; - USHORT MinorSubsystemVersion; - ULONG Win32VersionValue; - ULONG SizeOfImage; - ULONG SizeOfHeaders; - ULONG CheckSum; - USHORT Subsystem; - USHORT DllCharacteristics; - ULONG SizeOfStackReserve; - ULONG SizeOfStackCommit; - ULONG SizeOfHeapReserve; - ULONG SizeOfHeapCommit; - ULONG LoaderFlags; - ULONG NumberOfRvaAndSizes; - IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]; + USHORT Magic; + UCHAR MajorLinkerVersion; + UCHAR MinorLinkerVersion; + ULONG SizeOfCode; + ULONG SizeOfInitializedData; + ULONG SizeOfUninitializedData; + ULONG AddressOfEntryPoint; + ULONG BaseOfCode; + ULONG BaseOfData; + ULONG ImageBase; + ULONG SectionAlignment; + ULONG FileAlignment; + USHORT MajorOperatingSystemVersion; + USHORT MinorOperatingSystemVersion; + USHORT MajorImageVersion; + USHORT MinorImageVersion; + USHORT MajorSubsystemVersion; + USHORT MinorSubsystemVersion; + ULONG Win32VersionValue; + ULONG SizeOfImage; + ULONG SizeOfHeaders; + ULONG CheckSum; + USHORT Subsystem; + USHORT DllCharacteristics; + ULONG SizeOfStackReserve; + ULONG SizeOfStackCommit; + ULONG SizeOfHeapReserve; + ULONG SizeOfHeapCommit; + ULONG LoaderFlags; + ULONG NumberOfRvaAndSizes; + IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]; } IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32; typedef struct _IMAGE_ROM_OPTIONAL_HEADER { - USHORT Magic; - UCHAR MajorLinkerVersion; - UCHAR MinorLinkerVersion; - ULONG SizeOfCode; - ULONG SizeOfInitializedData; - ULONG SizeOfUninitializedData; - ULONG AddressOfEntryPoint; - ULONG BaseOfCode; - ULONG BaseOfData; - ULONG BaseOfBss; - ULONG GprMask; - ULONG CprMask[4]; - ULONG GpValue; + USHORT Magic; + UCHAR MajorLinkerVersion; + UCHAR MinorLinkerVersion; + ULONG SizeOfCode; + ULONG SizeOfInitializedData; + ULONG SizeOfUninitializedData; + ULONG AddressOfEntryPoint; + ULONG BaseOfCode; + ULONG BaseOfData; + ULONG BaseOfBss; + ULONG GprMask; + ULONG CprMask[4]; + ULONG GpValue; } IMAGE_ROM_OPTIONAL_HEADER, *PIMAGE_ROM_OPTIONAL_HEADER; typedef struct _IMAGE_OPTIONAL_HEADER64 { - USHORT Magic; - UCHAR MajorLinkerVersion; - UCHAR MinorLinkerVersion; - ULONG SizeOfCode; - ULONG SizeOfInitializedData; - ULONG SizeOfUninitializedData; - ULONG AddressOfEntryPoint; - ULONG BaseOfCode; - ULONGLONG ImageBase; - ULONG SectionAlignment; - ULONG FileAlignment; - USHORT MajorOperatingSystemVersion; - USHORT MinorOperatingSystemVersion; - USHORT MajorImageVersion; - USHORT MinorImageVersion; - USHORT MajorSubsystemVersion; - USHORT MinorSubsystemVersion; - ULONG Win32VersionValue; - ULONG SizeOfImage; - ULONG SizeOfHeaders; - ULONG CheckSum; - USHORT Subsystem; - USHORT DllCharacteristics; - ULONGLONG SizeOfStackReserve; - ULONGLONG SizeOfStackCommit; - ULONGLONG SizeOfHeapReserve; - ULONGLONG SizeOfHeapCommit; - ULONG LoaderFlags; - ULONG NumberOfRvaAndSizes; - IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]; + USHORT Magic; + UCHAR MajorLinkerVersion; + UCHAR MinorLinkerVersion; + ULONG SizeOfCode; + ULONG SizeOfInitializedData; + ULONG SizeOfUninitializedData; + ULONG AddressOfEntryPoint; + ULONG BaseOfCode; + ULONGLONG ImageBase; + ULONG SectionAlignment; + ULONG FileAlignment; + USHORT MajorOperatingSystemVersion; + USHORT MinorOperatingSystemVersion; + USHORT MajorImageVersion; + USHORT MinorImageVersion; + USHORT MajorSubsystemVersion; + USHORT MinorSubsystemVersion; + ULONG Win32VersionValue; + ULONG SizeOfImage; + ULONG SizeOfHeaders; + ULONG CheckSum; + USHORT Subsystem; + USHORT DllCharacteristics; + ULONGLONG SizeOfStackReserve; + ULONGLONG SizeOfStackCommit; + ULONGLONG SizeOfHeapReserve; + ULONGLONG SizeOfHeapCommit; + ULONG LoaderFlags; + ULONG NumberOfRvaAndSizes; + IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]; } IMAGE_OPTIONAL_HEADER64, *PIMAGE_OPTIONAL_HEADER64; // @@ -374,7 +355,6 @@ typedef struct _IMAGE_OPTIONAL_HEADER64 { #define IMAGE_NT_OPTIONAL_HDR64_MAGIC 0x20b #define IMAGE_ROM_OPTIONAL_HDR_MAGIC 0x107 - #ifdef _WIN64 typedef IMAGE_OPTIONAL_HEADER64 IMAGE_OPTIONAL_HEADER; typedef PIMAGE_OPTIONAL_HEADER64 PIMAGE_OPTIONAL_HEADER; @@ -385,21 +365,19 @@ typedef PIMAGE_OPTIONAL_HEADER32 PIMAGE_OPTIONAL_HEADER; #define IMAGE_NT_OPTIONAL_HDR_MAGIC IMAGE_NT_OPTIONAL_HDR32_MAGIC #endif - - // // Nt Header Formats // typedef struct _IMAGE_NT_HEADERS64 { - ULONG Signature; - IMAGE_FILE_HEADER FileHeader; - IMAGE_OPTIONAL_HEADER64 OptionalHeader; + ULONG Signature; + IMAGE_FILE_HEADER FileHeader; + IMAGE_OPTIONAL_HEADER64 OptionalHeader; } IMAGE_NT_HEADERS64; typedef struct _IMAGE_NT_HEADERS { - ULONG Signature; - IMAGE_FILE_HEADER FileHeader; - IMAGE_OPTIONAL_HEADER32 OptionalHeader; + ULONG Signature; + IMAGE_FILE_HEADER FileHeader; + IMAGE_OPTIONAL_HEADER32 OptionalHeader; } IMAGE_NT_HEADERS32; #ifdef _WIN64 @@ -424,11 +402,10 @@ typedef PIMAGE_NT_HEADERS32 PIMAGE_NT_HEADERS; // // Retreives the first image section header from the Nt Header // -#define IMAGE_FIRST_SECTION( NtHeader ) ((PIMAGE_SECTION_HEADER) \ - ((ULONG_PTR)(NtHeader) + \ - FIELD_OFFSET( IMAGE_NT_HEADERS, OptionalHeader ) + \ - ((NtHeader))->FileHeader.SizeOfOptionalHeader \ - )) +#define IMAGE_FIRST_SECTION( NtHeader ) \ + ((PIMAGE_SECTION_HEADER) ((ULONG_PTR)(NtHeader) + \ + FIELD_OFFSET( IMAGE_NT_HEADERS, OptionalHeader ) + \ + ((NtHeader))->FileHeader.SizeOfOptionalHeader)) // // Dll Characteristics @@ -461,34 +438,32 @@ typedef PIMAGE_NT_HEADERS32 PIMAGE_NT_HEADERS; #define IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT 13 #define IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR 14 - - // // Import Formats // typedef struct _IMAGE_IMPORT_BY_NAME { - USHORT Hint; - UCHAR Name[1]; + USHORT Hint; + UCHAR Name[1]; } IMAGE_IMPORT_BY_NAME, *PIMAGE_IMPORT_BY_NAME; #include typedef struct _IMAGE_THUNK_DATA64 { - union { - ULONGLONG ForwarderString; - ULONGLONG Function; - ULONGLONG Ordinal; - ULONGLONG AddressOfData; - } u1; + union { + ULONGLONG ForwarderString; + ULONGLONG Function; + ULONGLONG Ordinal; + ULONGLONG AddressOfData; + } u1; } IMAGE_THUNK_DATA64, *PIMAGE_THUNK_DATA64; #include typedef struct _IMAGE_THUNK_DATA32 { - union { - ULONG ForwarderString; - ULONG Function; - ULONG Ordinal; - ULONG AddressOfData; - } u1; + union { + ULONG ForwarderString; + ULONG Function; + ULONG Ordinal; + ULONG AddressOfData; + } u1; } IMAGE_THUNK_DATA32, *PIMAGE_THUNK_DATA32; #define IMAGE_ORDINAL_FLAG64 0x8000000000000000ULL @@ -498,35 +473,32 @@ typedef struct _IMAGE_THUNK_DATA32 { #define IMAGE_SNAP_BY_ORDINAL64(Ordinal) ((Ordinal & IMAGE_ORDINAL_FLAG64) != 0) #define IMAGE_SNAP_BY_ORDINAL32(Ordinal) ((Ordinal & IMAGE_ORDINAL_FLAG32) != 0) - - // // Thread Local Storage (TLS) // typedef VOID (NTAPI *PIMAGE_TLS_CALLBACK) ( - PVOID DllHandle, - ULONG Reason, - PVOID Reserved -); + PVOID DllHandle, + ULONG Reason, + PVOID Reserved); typedef struct _IMAGE_TLS_DIRECTORY64 { - ULONGLONG StartAddressOfRawData; - ULONGLONG EndAddressOfRawData; - ULONGLONG AddressOfIndex; - ULONGLONG AddressOfCallBacks; - ULONG SizeOfZeroFill; - ULONG Characteristics; + ULONGLONG StartAddressOfRawData; + ULONGLONG EndAddressOfRawData; + ULONGLONG AddressOfIndex; + ULONGLONG AddressOfCallBacks; + ULONG SizeOfZeroFill; + ULONG Characteristics; } IMAGE_TLS_DIRECTORY64, *PIMAGE_TLS_DIRECTORY64; typedef struct _IMAGE_TLS_DIRECTORY32 { - ULONG StartAddressOfRawData; - ULONG EndAddressOfRawData; - ULONG AddressOfIndex; - ULONG AddressOfCallBacks; - ULONG SizeOfZeroFill; - ULONG Characteristics; + ULONG StartAddressOfRawData; + ULONG EndAddressOfRawData; + ULONG AddressOfIndex; + ULONG AddressOfCallBacks; + ULONG SizeOfZeroFill; + ULONG Characteristics; } IMAGE_TLS_DIRECTORY32, *PIMAGE_TLS_DIRECTORY32; #ifdef _WIN64 @@ -548,18 +520,16 @@ typedef PIMAGE_TLS_DIRECTORY32 PIMAGE_TLS_DIRECTORY; #endif typedef struct _IMAGE_IMPORT_DESCRIPTOR { - _ANONYMOUS_UNION union { - ULONG Characteristics; - ULONG OriginalFirstThunk; - } DUMMYUNIONNAME; - ULONG TimeDateStamp; - ULONG ForwarderChain; - ULONG Name; - ULONG FirstThunk; + _ANONYMOUS_UNION union { + ULONG Characteristics; + ULONG OriginalFirstThunk; + } DUMMYUNIONNAME; + ULONG TimeDateStamp; + ULONG ForwarderChain; + ULONG Name; + ULONG FirstThunk; } IMAGE_IMPORT_DESCRIPTOR, *PIMAGE_IMPORT_DESCRIPTOR; #include - - -#endif +#endif /* _NTIMAGE_ */ diff --git a/include/ddk/ntnls.h b/include/ddk/ntnls.h index aa75009a7c0..688b3de4492 100644 --- a/include/ddk/ntnls.h +++ b/include/ddk/ntnls.h @@ -2,38 +2,37 @@ #ifndef _NTNLS_ #define _NTNLS_ - #ifdef __cplusplus extern "C" { #endif + #define MAXIMUM_LEADBYTES 12 /* Some documentation can be found here: http://www.ping.uio.no/~ovehk/nls/ */ -typedef struct _CPTABLEINFO -{ - USHORT CodePage; - USHORT MaximumCharacterSize; /* 1 = SBCS, 2 = DBCS */ - USHORT DefaultChar; /* Default MultiByte Character for the CP->Unicode conversion */ - USHORT UniDefaultChar; /* Default Unicode Character for the CP->Unicode conversion */ - USHORT TransDefaultChar; /* Default MultiByte Character for the Unicode->CP conversion */ - USHORT TransUniDefaultChar; /* Default Unicode Character for the Unicode->CP conversion */ - USHORT DBCSCodePage; - UCHAR LeadByte[MAXIMUM_LEADBYTES]; - PUSHORT MultiByteTable; /* Table for CP->Unicode conversion */ - PVOID WideCharTable; /* Table for Unicode->CP conversion */ - PUSHORT DBCSRanges; - PUSHORT DBCSOffsets; +typedef struct _CPTABLEINFO { + USHORT CodePage; + USHORT MaximumCharacterSize; /* 1 = SBCS, 2 = DBCS */ + USHORT DefaultChar; /* Default MultiByte Character for the CP->Unicode conversion */ + USHORT UniDefaultChar; /* Default Unicode Character for the CP->Unicode conversion */ + USHORT TransDefaultChar; /* Default MultiByte Character for the Unicode->CP conversion */ + USHORT TransUniDefaultChar; /* Default Unicode Character for the Unicode->CP conversion */ + USHORT DBCSCodePage; + UCHAR LeadByte[MAXIMUM_LEADBYTES]; + PUSHORT MultiByteTable; /* Table for CP->Unicode conversion */ + PVOID WideCharTable; /* Table for Unicode->CP conversion */ + PUSHORT DBCSRanges; + PUSHORT DBCSOffsets; } CPTABLEINFO, *PCPTABLEINFO; -typedef struct _NLSTABLEINFO -{ - CPTABLEINFO OemTableInfo; - CPTABLEINFO AnsiTableInfo; - PUSHORT UpperCaseTable; - PUSHORT LowerCaseTable; +typedef struct _NLSTABLEINFO { + CPTABLEINFO OemTableInfo; + CPTABLEINFO AnsiTableInfo; + PUSHORT UpperCaseTable; + PUSHORT LowerCaseTable; } NLSTABLEINFO, *PNLSTABLEINFO; #ifdef __cplusplus } #endif -#endif + +#endif /* _NTNLS_ */ diff --git a/include/ddk/ntpoapi.h b/include/ddk/ntpoapi.h index c4a4b28ec6f..ae1665610ba 100644 --- a/include/ddk/ntpoapi.h +++ b/include/ddk/ntpoapi.h @@ -32,29 +32,30 @@ extern "C" { /* Power States/Levels */ typedef enum _SYSTEM_POWER_STATE { - PowerSystemUnspecified, - PowerSystemWorking, - PowerSystemSleeping1, - PowerSystemSleeping2, - PowerSystemSleeping3, - PowerSystemHibernate, - PowerSystemShutdown, - PowerSystemMaximum + PowerSystemUnspecified, + PowerSystemWorking, + PowerSystemSleeping1, + PowerSystemSleeping2, + PowerSystemSleeping3, + PowerSystemHibernate, + PowerSystemShutdown, + PowerSystemMaximum } SYSTEM_POWER_STATE, *PSYSTEM_POWER_STATE; + #define POWER_SYSTEM_MAXIMUM PowerSystemMaximum typedef enum _DEVICE_POWER_STATE { - PowerDeviceUnspecified, - PowerDeviceD0, - PowerDeviceD1, - PowerDeviceD2, - PowerDeviceD3, - PowerDeviceMaximum + PowerDeviceUnspecified, + PowerDeviceD0, + PowerDeviceD1, + PowerDeviceD2, + PowerDeviceD3, + PowerDeviceMaximum } DEVICE_POWER_STATE, *PDEVICE_POWER_STATE; typedef union _POWER_STATE { - SYSTEM_POWER_STATE SystemState; - DEVICE_POWER_STATE DeviceState; + SYSTEM_POWER_STATE SystemState; + DEVICE_POWER_STATE DeviceState; } POWER_STATE, *PPOWER_STATE; typedef enum _POWER_STATE_TYPE { @@ -63,76 +64,76 @@ typedef enum _POWER_STATE_TYPE { } POWER_STATE_TYPE, *PPOWER_STATE_TYPE; typedef enum _POWER_INFORMATION_LEVEL { - SystemPowerPolicyAc, - SystemPowerPolicyDc, - VerifySystemPolicyAc, - VerifySystemPolicyDc, - SystemPowerCapabilities, - SystemBatteryState, - SystemPowerStateHandler, - ProcessorStateHandler, - SystemPowerPolicyCurrent, - AdministratorPowerPolicy, - SystemReserveHiberFile, - ProcessorInformation, - SystemPowerInformation, - ProcessorStateHandler2, - LastWakeTime, - LastSleepTime, - SystemExecutionState, - SystemPowerStateNotifyHandler, - ProcessorPowerPolicyAc, - ProcessorPowerPolicyDc, - VerifyProcessorPowerPolicyAc, - VerifyProcessorPowerPolicyDc, - ProcessorPowerPolicyCurrent, - SystemPowerStateLogging, - SystemPowerLoggingEntry, - SetPowerSettingValue, - NotifyUserPowerSetting, - PowerInformationLevelUnused0, - PowerInformationLevelUnused1, - SystemVideoState, - TraceApplicationPowerMessage, - TraceApplicationPowerMessageEnd, - ProcessorPerfStates, - ProcessorIdleStates, - ProcessorCap, - SystemWakeSource, - SystemHiberFileInformation, - TraceServicePowerMessage, - ProcessorLoad, - PowerShutdownNotification, - MonitorCapabilities, - SessionPowerInit, - SessionDisplayState, - PowerRequestCreate, - PowerRequestAction, - GetPowerRequestList, - ProcessorInformationEx, - NotifyUserModeLegacyPowerEvent, - GroupPark, - ProcessorIdleDomains, - WakeTimerList, - SystemHiberFileSize, - PowerInformationLevelMaximum + SystemPowerPolicyAc, + SystemPowerPolicyDc, + VerifySystemPolicyAc, + VerifySystemPolicyDc, + SystemPowerCapabilities, + SystemBatteryState, + SystemPowerStateHandler, + ProcessorStateHandler, + SystemPowerPolicyCurrent, + AdministratorPowerPolicy, + SystemReserveHiberFile, + ProcessorInformation, + SystemPowerInformation, + ProcessorStateHandler2, + LastWakeTime, + LastSleepTime, + SystemExecutionState, + SystemPowerStateNotifyHandler, + ProcessorPowerPolicyAc, + ProcessorPowerPolicyDc, + VerifyProcessorPowerPolicyAc, + VerifyProcessorPowerPolicyDc, + ProcessorPowerPolicyCurrent, + SystemPowerStateLogging, + SystemPowerLoggingEntry, + SetPowerSettingValue, + NotifyUserPowerSetting, + PowerInformationLevelUnused0, + PowerInformationLevelUnused1, + SystemVideoState, + TraceApplicationPowerMessage, + TraceApplicationPowerMessageEnd, + ProcessorPerfStates, + ProcessorIdleStates, + ProcessorCap, + SystemWakeSource, + SystemHiberFileInformation, + TraceServicePowerMessage, + ProcessorLoad, + PowerShutdownNotification, + MonitorCapabilities, + SessionPowerInit, + SessionDisplayState, + PowerRequestCreate, + PowerRequestAction, + GetPowerRequestList, + ProcessorInformationEx, + NotifyUserModeLegacyPowerEvent, + GroupPark, + ProcessorIdleDomains, + WakeTimerList, + SystemHiberFileSize, + PowerInformationLevelMaximum } POWER_INFORMATION_LEVEL; typedef enum { - PowerActionNone, - PowerActionReserved, - PowerActionSleep, - PowerActionHibernate, - PowerActionShutdown, - PowerActionShutdownReset, - PowerActionShutdownOff, - PowerActionWarmEject + PowerActionNone, + PowerActionReserved, + PowerActionSleep, + PowerActionHibernate, + PowerActionShutdown, + PowerActionShutdownReset, + PowerActionShutdownOff, + PowerActionWarmEject } POWER_ACTION, *PPOWER_ACTION; #if (NTDDI_VERSION >= NTDDI_WINXP) || !defined(_BATCLASS_) typedef struct { - ULONG Granularity; - ULONG Capacity; + ULONG Granularity; + ULONG Capacity; } BATTERY_REPORTING_SCALE, *PBATTERY_REPORTING_SCALE; #endif /* (NTDDI_VERSION >= NTDDI_WINXP) || !defined(_BATCLASS_) */ @@ -144,9 +145,9 @@ typedef struct { #define PERCENT_TO_PERF_LEVEL(x) (((x) * POWER_PERF_SCALE * 10) / 1000) typedef struct _PROCESSOR_IDLE_TIMES { - ULONGLONG StartTime; - ULONGLONG EndTime; - ULONG IdleHandlerReserved[4]; + ULONGLONG StartTime; + ULONGLONG EndTime; + ULONG IdleHandlerReserved[4]; } PROCESSOR_IDLE_TIMES, *PPROCESSOR_IDLE_TIMES; typedef BOOLEAN @@ -154,133 +155,133 @@ typedef BOOLEAN IN OUT PPROCESSOR_IDLE_TIMES IdleTimes); typedef struct _PROCESSOR_IDLE_HANDLER_INFO { - ULONG HardwareLatency; - PPROCESSOR_IDLE_HANDLER Handler; + ULONG HardwareLatency; + PPROCESSOR_IDLE_HANDLER Handler; } PROCESSOR_IDLE_HANDLER_INFO, *PPROCESSOR_IDLE_HANDLER_INFO; typedef VOID (FASTCALL*PSET_PROCESSOR_THROTTLE)( - IN UCHAR Throttle); + IN UCHAR Throttle); typedef NTSTATUS (FASTCALL*PSET_PROCESSOR_THROTTLE2)( - IN UCHAR Throttle); + IN UCHAR Throttle); #define MAX_IDLE_HANDLERS 3 typedef struct _PROCESSOR_STATE_HANDLER { - UCHAR ThrottleScale; - BOOLEAN ThrottleOnIdle; - PSET_PROCESSOR_THROTTLE SetThrottle; - ULONG NumIdleHandlers; - PROCESSOR_IDLE_HANDLER_INFO IdleHandler[MAX_IDLE_HANDLERS]; + UCHAR ThrottleScale; + BOOLEAN ThrottleOnIdle; + PSET_PROCESSOR_THROTTLE SetThrottle; + ULONG NumIdleHandlers; + PROCESSOR_IDLE_HANDLER_INFO IdleHandler[MAX_IDLE_HANDLERS]; } PROCESSOR_STATE_HANDLER, *PPROCESSOR_STATE_HANDLER; typedef enum _POWER_STATE_HANDLER_TYPE { - PowerStateSleeping1, - PowerStateSleeping2, - PowerStateSleeping3, - PowerStateSleeping4, - PowerStateSleeping4Firmware, - PowerStateShutdownReset, - PowerStateShutdownOff, - PowerStateMaximum + PowerStateSleeping1, + PowerStateSleeping2, + PowerStateSleeping3, + PowerStateSleeping4, + PowerStateSleeping4Firmware, + PowerStateShutdownReset, + PowerStateShutdownOff, + PowerStateMaximum } POWER_STATE_HANDLER_TYPE, *PPOWER_STATE_HANDLER_TYPE; typedef NTSTATUS (NTAPI*PENTER_STATE_SYSTEM_HANDLER)( - IN PVOID SystemContext); + IN PVOID SystemContext); typedef NTSTATUS (NTAPI*PENTER_STATE_HANDLER)( - IN PVOID Context, - IN PENTER_STATE_SYSTEM_HANDLER SystemHandler OPTIONAL, - IN PVOID SystemContext, - IN LONG NumberProcessors, + IN PVOID Context, + IN PENTER_STATE_SYSTEM_HANDLER SystemHandler OPTIONAL, + IN PVOID SystemContext, + IN LONG NumberProcessors, IN LONG volatile *Number); typedef struct _POWER_STATE_HANDLER { - POWER_STATE_HANDLER_TYPE Type; - BOOLEAN RtcWake; - UCHAR Spare[3]; - PENTER_STATE_HANDLER Handler; - PVOID Context; + POWER_STATE_HANDLER_TYPE Type; + BOOLEAN RtcWake; + UCHAR Spare[3]; + PENTER_STATE_HANDLER Handler; + PVOID Context; } POWER_STATE_HANDLER, *PPOWER_STATE_HANDLER; typedef NTSTATUS (NTAPI*PENTER_STATE_NOTIFY_HANDLER)( - IN POWER_STATE_HANDLER_TYPE State, - IN PVOID Context, - IN BOOLEAN Entering); + IN POWER_STATE_HANDLER_TYPE State, + IN PVOID Context, + IN BOOLEAN Entering); typedef struct _POWER_STATE_NOTIFY_HANDLER { - PENTER_STATE_NOTIFY_HANDLER Handler; - PVOID Context; + PENTER_STATE_NOTIFY_HANDLER Handler; + PVOID Context; } POWER_STATE_NOTIFY_HANDLER, *PPOWER_STATE_NOTIFY_HANDLER; NTSYSCALLAPI NTSTATUS NTAPI NtPowerInformation( - IN POWER_INFORMATION_LEVEL InformationLevel, - IN PVOID InputBuffer OPTIONAL, - IN ULONG InputBufferLength, - OUT PVOID OutputBuffer OPTIONAL, - IN ULONG OutputBufferLength); + IN POWER_INFORMATION_LEVEL InformationLevel, + IN PVOID InputBuffer OPTIONAL, + IN ULONG InputBufferLength, + OUT PVOID OutputBuffer OPTIONAL, + IN ULONG OutputBufferLength); #define PROCESSOR_STATE_TYPE_PERFORMANCE 1 #define PROCESSOR_STATE_TYPE_THROTTLE 2 typedef struct _PROCESSOR_PERF_LEVEL { - UCHAR PercentFrequency; - UCHAR Reserved; - USHORT Flags; + UCHAR PercentFrequency; + UCHAR Reserved; + USHORT Flags; } PROCESSOR_PERF_LEVEL, *PPROCESSOR_PERF_LEVEL; typedef struct _PROCESSOR_PERF_STATE { - UCHAR PercentFrequency; - UCHAR MinCapacity; - USHORT Power; - UCHAR IncreaseLevel; - UCHAR DecreaseLevel; - USHORT Flags; - ULONG IncreaseTime; - ULONG DecreaseTime; - ULONG IncreaseCount; - ULONG DecreaseCount; - ULONGLONG PerformanceTime; + UCHAR PercentFrequency; + UCHAR MinCapacity; + USHORT Power; + UCHAR IncreaseLevel; + UCHAR DecreaseLevel; + USHORT Flags; + ULONG IncreaseTime; + ULONG DecreaseTime; + ULONG IncreaseCount; + ULONG DecreaseCount; + ULONGLONG PerformanceTime; } PROCESSOR_PERF_STATE, *PPROCESSOR_PERF_STATE; typedef struct _PROCESSOR_STATE_HANDLER2 { - ULONG NumIdleHandlers; - PROCESSOR_IDLE_HANDLER_INFO IdleHandler[MAX_IDLE_HANDLERS]; - PSET_PROCESSOR_THROTTLE2 SetPerfLevel; - ULONG HardwareLatency; - UCHAR NumPerfStates; - PROCESSOR_PERF_LEVEL PerfLevel[1]; + ULONG NumIdleHandlers; + PROCESSOR_IDLE_HANDLER_INFO IdleHandler[MAX_IDLE_HANDLERS]; + PSET_PROCESSOR_THROTTLE2 SetPerfLevel; + ULONG HardwareLatency; + UCHAR NumPerfStates; + PROCESSOR_PERF_LEVEL PerfLevel[1]; } PROCESSOR_STATE_HANDLER2, *PPROCESSOR_STATE_HANDLER2; NTSYSCALLAPI NTSTATUS NTAPI NtSetThreadExecutionState( - IN EXECUTION_STATE esFlags, - OUT EXECUTION_STATE *PreviousFlags); + IN EXECUTION_STATE esFlags, + OUT EXECUTION_STATE *PreviousFlags); NTSYSCALLAPI NTSTATUS NTAPI NtRequestWakeupLatency( - IN LATENCY_TIME latency); + IN LATENCY_TIME latency); NTSYSCALLAPI NTSTATUS NTAPI NtInitiatePowerAction( - IN POWER_ACTION SystemAction, - IN SYSTEM_POWER_STATE MinSystemState, - IN ULONG Flags, - IN BOOLEAN Asynchronous); + IN POWER_ACTION SystemAction, + IN SYSTEM_POWER_STATE MinSystemState, + IN ULONG Flags, + IN BOOLEAN Asynchronous); NTSYSCALLAPI NTSTATUS @@ -294,93 +295,92 @@ NTSYSCALLAPI NTSTATUS NTAPI NtGetDevicePowerState( - IN HANDLE Device, - OUT DEVICE_POWER_STATE *State); + IN HANDLE Device, + OUT DEVICE_POWER_STATE *State); NTSYSCALLAPI NTSTATUS NTAPI NtCancelDeviceWakeupRequest( - IN HANDLE Device); + IN HANDLE Device); NTSYSCALLAPI BOOLEAN NTAPI -NtIsSystemResumeAutomatic( - VOID); +NtIsSystemResumeAutomatic(VOID); NTSYSCALLAPI NTSTATUS NTAPI NtRequestDeviceWakeup( - IN HANDLE Device); + IN HANDLE Device); #define WINLOGON_LOCK_ON_SLEEP 0x00000001 typedef struct { - BOOLEAN PowerButtonPresent; - BOOLEAN SleepButtonPresent; - BOOLEAN LidPresent; - BOOLEAN SystemS1; - BOOLEAN SystemS2; - BOOLEAN SystemS3; - BOOLEAN SystemS4; - BOOLEAN SystemS5; - BOOLEAN HiberFilePresent; - BOOLEAN FullWake; - BOOLEAN VideoDimPresent; - BOOLEAN ApmPresent; - BOOLEAN UpsPresent; - BOOLEAN ThermalControl; - BOOLEAN ProcessorThrottle; - UCHAR ProcessorMinThrottle; + BOOLEAN PowerButtonPresent; + BOOLEAN SleepButtonPresent; + BOOLEAN LidPresent; + BOOLEAN SystemS1; + BOOLEAN SystemS2; + BOOLEAN SystemS3; + BOOLEAN SystemS4; + BOOLEAN SystemS5; + BOOLEAN HiberFilePresent; + BOOLEAN FullWake; + BOOLEAN VideoDimPresent; + BOOLEAN ApmPresent; + BOOLEAN UpsPresent; + BOOLEAN ThermalControl; + BOOLEAN ProcessorThrottle; + UCHAR ProcessorMinThrottle; #if (NTDDI_VERSION < NTDDI_WINXP) - UCHAR ProcessorThrottleScale; - UCHAR spare2[4]; + UCHAR ProcessorThrottleScale; + UCHAR spare2[4]; #else - UCHAR ProcessorMaxThrottle; - BOOLEAN FastSystemS4; - UCHAR spare2[3]; -#endif // (NTDDI_VERSION < NTDDI_WINXP) - BOOLEAN DiskSpinDown; - UCHAR spare3[8]; - BOOLEAN SystemBatteriesPresent; - BOOLEAN BatteriesAreShortTerm; - BATTERY_REPORTING_SCALE BatteryScale[3]; - SYSTEM_POWER_STATE AcOnLineWake; - SYSTEM_POWER_STATE SoftLidWake; - SYSTEM_POWER_STATE RtcWake; - SYSTEM_POWER_STATE MinDeviceWakeState; - SYSTEM_POWER_STATE DefaultLowLatencyWake; + UCHAR ProcessorMaxThrottle; + BOOLEAN FastSystemS4; + UCHAR spare2[3]; +#endif /* (NTDDI_VERSION < NTDDI_WINXP) */ + BOOLEAN DiskSpinDown; + UCHAR spare3[8]; + BOOLEAN SystemBatteriesPresent; + BOOLEAN BatteriesAreShortTerm; + BATTERY_REPORTING_SCALE BatteryScale[3]; + SYSTEM_POWER_STATE AcOnLineWake; + SYSTEM_POWER_STATE SoftLidWake; + SYSTEM_POWER_STATE RtcWake; + SYSTEM_POWER_STATE MinDeviceWakeState; + SYSTEM_POWER_STATE DefaultLowLatencyWake; } SYSTEM_POWER_CAPABILITIES, *PSYSTEM_POWER_CAPABILITIES; typedef struct { - BOOLEAN AcOnLine; - BOOLEAN BatteryPresent; - BOOLEAN Charging; - BOOLEAN Discharging; - BOOLEAN Spare1[4]; - ULONG MaxCapacity; - ULONG RemainingCapacity; - ULONG Rate; - ULONG EstimatedTime; - ULONG DefaultAlert1; - ULONG DefaultAlert2; + BOOLEAN AcOnLine; + BOOLEAN BatteryPresent; + BOOLEAN Charging; + BOOLEAN Discharging; + BOOLEAN Spare1[4]; + ULONG MaxCapacity; + ULONG RemainingCapacity; + ULONG Rate; + ULONG EstimatedTime; + ULONG DefaultAlert1; + ULONG DefaultAlert2; } SYSTEM_BATTERY_STATE, *PSYSTEM_BATTERY_STATE; typedef struct _PROCESSOR_POWER_INFORMATION { - ULONG Number; - ULONG MaxMhz; - ULONG CurrentMhz; - ULONG MhzLimit; - ULONG MaxIdleState; - ULONG CurrentIdleState; + ULONG Number; + ULONG MaxMhz; + ULONG CurrentMhz; + ULONG MhzLimit; + ULONG MaxIdleState; + ULONG CurrentIdleState; } PROCESSOR_POWER_INFORMATION, *PPROCESSOR_POWER_INFORMATION; typedef struct _POWER_ACTION_POLICY { - POWER_ACTION Action; - ULONG Flags; - ULONG EventCode; + POWER_ACTION Action; + ULONG Flags; + ULONG EventCode; } POWER_ACTION_POLICY, *PPOWER_ACTION_POLICY; /* POWER_ACTION_POLICY.Flags constants */ @@ -400,15 +400,15 @@ typedef struct _POWER_ACTION_POLICY { #define POWER_USER_NOTIFY_SHUTDOWN 0x00000010 #define POWER_FORCE_TRIGGER_RESET 0x80000000 -#define DISCHARGE_POLICY_CRITICAL 0 -#define DISCHARGE_POLICY_LOW 1 -#define NUM_DISCHARGE_POLICIES 4 +#define DISCHARGE_POLICY_CRITICAL 0 +#define DISCHARGE_POLICY_LOW 1 +#define NUM_DISCHARGE_POLICIES 4 -#define PO_THROTTLE_NONE 0 -#define PO_THROTTLE_CONSTANT 1 -#define PO_THROTTLE_DEGRADE 2 -#define PO_THROTTLE_ADAPTIVE 3 -#define PO_THROTTLE_MAXIMUM 4 +#define PO_THROTTLE_NONE 0 +#define PO_THROTTLE_CONSTANT 1 +#define PO_THROTTLE_DEGRADE 2 +#define PO_THROTTLE_ADAPTIVE 3 +#define PO_THROTTLE_MAXIMUM 4 #ifdef __cplusplus } diff --git a/include/ddk/ntstrsafe.h b/include/ddk/ntstrsafe.h index 447a3a5265c..f7fc9f39355 100644 --- a/include/ddk/ntstrsafe.h +++ b/include/ddk/ntstrsafe.h @@ -33,7 +33,7 @@ typedef unsigned long DWORD; /* PRIVATE FUNCTIONS *********************************************************/ -__inline +static __inline NTSTATUS NTAPI RtlStringLengthWorkerA(IN LPCSTR String, @@ -66,7 +66,7 @@ RtlStringLengthWorkerA(IN LPCSTR String, return Status; } -__inline +static __inline NTSTATUS NTAPI RtlStringValidateDestA(IN LPSTR Destination, @@ -95,7 +95,7 @@ RtlStringValidateDestA(IN LPSTR Destination, return Status; } -__inline +static __inline NTSTATUS NTAPI RtlStringExValidateDestA(IN OUT LPSTR *Destination, @@ -111,7 +111,7 @@ RtlStringExValidateDestA(IN OUT LPSTR *Destination, MaxLength); } -__inline +static __inline NTSTATUS NTAPI RtlStringExValidateSrcA(IN OUT LPCSTR *Source OPTIONAL, @@ -130,7 +130,7 @@ RtlStringExValidateSrcA(IN OUT LPCSTR *Source OPTIONAL, return Status; } -__inline +static __inline NTSTATUS NTAPI RtlStringVPrintfWorkerA(OUT LPSTR Destination, @@ -171,7 +171,7 @@ RtlStringVPrintfWorkerA(OUT LPSTR Destination, return Status; } -__inline +static __inline NTSTATUS NTAPI RtlStringCopyWorkerA(OUT LPSTR Destination, @@ -208,7 +208,7 @@ RtlStringCopyWorkerA(OUT LPSTR Destination, /* PUBLIC FUNCTIONS **********************************************************/ -__inline +static __inline NTSTATUS NTAPI RtlStringCchCopyA(IN LPSTR Destination, @@ -219,7 +219,7 @@ RtlStringCchCopyA(IN LPSTR Destination, return STATUS_NOT_IMPLEMENTED; } -__inline +static __inline NTSTATUS NTAPI RtlStringCbPrintfA(OUT LPSTR Destination, @@ -249,7 +249,7 @@ RtlStringCbPrintfA(OUT LPSTR Destination, return Status; } -__inline +static __inline NTSTATUS NTAPI RtlStringCbPrintfExA(OUT LPSTR Destination, @@ -330,7 +330,7 @@ RtlStringCbPrintfExA(OUT LPSTR Destination, return Status; } -__inline +static __inline NTSTATUS NTAPI RtlStringCbCopyExA(OUT LPSTR Destination, @@ -407,7 +407,7 @@ RtlStringCbCopyExA(OUT LPSTR Destination, return Status; } -__inline +static __inline NTSTATUS NTAPI RtlStringCbPrintfW( @@ -420,7 +420,7 @@ RtlStringCbPrintfW( return STATUS_NOT_IMPLEMENTED; } -__inline +static __inline NTSTATUS NTAPI RtlStringCbCatExA(IN OUT LPSTR Destination, @@ -494,7 +494,7 @@ RtlStringCbCatExA(IN OUT LPSTR Destination, return Status; } -__inline +static __inline NTSTATUS NTAPI RtlStringCbCopyA(OUT LPSTR Destination, @@ -520,4 +520,4 @@ RtlStringCbCopyA(OUT LPSTR Destination, return Status; } -#endif +#endif /* _NTSTRSAFE_H_INCLUDED_ */ diff --git a/include/ddk/oprghdlr.h b/include/ddk/oprghdlr.h index 5301730ad85..838b4e95fba 100644 --- a/include/ddk/oprghdlr.h +++ b/include/ddk/oprghdlr.h @@ -40,4 +40,4 @@ DeRegisterOpRegionHandler (IN PDEVICE_OBJECT DeviceObject, #define ACPI_OPREGION_REGION_SPACE_SMB 0x4 #define ACPI_OPREGION_READ 0x0 #define ACPI_OPREGION_WRITE 0x1 -#define ACPI_OPREGION_ACCESS_AT_HIGH_LEVEL 0x1 \ No newline at end of file +#define ACPI_OPREGION_ACCESS_AT_HIGH_LEVEL 0x1 diff --git a/include/ddk/portcls.h b/include/ddk/portcls.h index 97becb4f51d..0a6573293c6 100644 --- a/include/ddk/portcls.h +++ b/include/ddk/portcls.h @@ -126,12 +126,11 @@ #define PORTCLS_H #ifdef __cplusplus -extern "C" -{ - #include +extern "C" { +#include } #else - #include +#include #endif #include @@ -146,12 +145,11 @@ extern "C" #include #ifdef __cplusplus -extern "C" -{ - #include +extern "C" { +#include } #else - #include +#include #endif #ifndef PC_NO_IMPORTS @@ -213,24 +211,22 @@ DEFINE_GUID(CLSID_MiniportDriverFmSynthWithVol, 0xe5a3c139L, 0xf0f2, 0x11d1, 0x8 IoIsWdmVersionAvailable may also be used by older drivers. */ -enum -{ - kVersionInvalid = -1, - - kVersionWin98, - kVersionWin98SE, - kVersionWin2K, - kVersionWin98SE_QFE2, - kVersionWin2K_SP2, - kVersionWinME, - kVersionWin98SE_QFE3, - kVersionWinME_QFE1, - kVersionWinXP, - kVersionWinXPSP1, - kVersionWinServer2003, - kVersionWin2K_UAAQFE, /* These support IUnregister* interface */ - kVersionWinXP_UAAQFE, - kVersionWinServer2003_UAAQFE +enum { + kVersionInvalid = -1, + kVersionWin98, + kVersionWin98SE, + kVersionWin2K, + kVersionWin98SE_QFE2, + kVersionWin2K_SP2, + kVersionWinME, + kVersionWin98SE_QFE3, + kVersionWinME_QFE1, + kVersionWinXP, + kVersionWinXPSP1, + kVersionWinServer2003, + kVersionWin2K_UAAQFE, /* These support IUnregister* interface */ + kVersionWinXP_UAAQFE, + kVersionWinServer2003_UAAQFE }; /* =============================================================== @@ -241,164 +237,151 @@ struct _PCPROPERTY_REQUEST; typedef struct _PCPROPERTY_REQUEST PCPROPERTY_REQUEST, *PPCPROPERTY_REQUEST; -typedef NTSTATUS (NTAPI *PCPFNPROPERTY_HANDLER)( - IN PPCPROPERTY_REQUEST PropertyRequest); +typedef NTSTATUS +(NTAPI *PCPFNPROPERTY_HANDLER)( + IN PPCPROPERTY_REQUEST PropertyRequest); -typedef struct -{ - const GUID * Set; - ULONG Id; - ULONG Flags; +typedef struct { + const GUID *Set; + ULONG Id; + ULONG Flags; #define PCPROPERTY_ITEM_FLAG_GET KSPROPERTY_TYPE_GET #define PCPROPERTY_ITEM_FLAG_SET KSPROPERTY_TYPE_SET #define PCPROPERTY_ITEM_FLAG_BASICSUPPORT KSPROPERTY_TYPE_BASICSUPPORT -//not supported #define PCPROPERTY_ITEM_FLAG_RELATIONS KSPROPERTY_TYPE_RELATIONS + //not supported #define PCPROPERTY_ITEM_FLAG_RELATIONS KSPROPERTY_TYPE_RELATIONS #define PCPROPERTY_ITEM_FLAG_SERIALIZERAW KSPROPERTY_TYPE_SERIALIZERAW #define PCPROPERTY_ITEM_FLAG_UNSERIALIZERAW KSPROPERTY_TYPE_UNSERIALIZERAW #define PCPROPERTY_ITEM_FLAG_SERIALIZESIZE KSPROPERTY_TYPE_SERIALIZESIZE #define PCPROPERTY_ITEM_FLAG_SERIALIZE\ - (PCPROPERTY_ITEM_FLAG_SERIALIZERAW\ - |PCPROPERTY_ITEM_FLAG_UNSERIALIZERAW\ - |PCPROPERTY_ITEM_FLAG_SERIALIZESIZE\ - ) + (PCPROPERTY_ITEM_FLAG_SERIALIZERAW\ + |PCPROPERTY_ITEM_FLAG_UNSERIALIZERAW\ + |PCPROPERTY_ITEM_FLAG_SERIALIZESIZE\ + ) #define PCPROPERTY_ITEM_FLAG_DEFAULTVALUES KSPROPERTY_TYPE_DEFAULTVALUES - PCPFNPROPERTY_HANDLER Handler; + PCPFNPROPERTY_HANDLER Handler; } PCPROPERTY_ITEM, *PPCPROPERTY_ITEM; - -struct _PCPROPERTY_REQUEST -{ - PUNKNOWN MajorTarget; - PUNKNOWN MinorTarget; - ULONG Node; - const PCPROPERTY_ITEM * PropertyItem; - ULONG Verb; - ULONG InstanceSize; - PVOID Instance; - ULONG ValueSize; - PVOID Value; - PIRP Irp; +struct _PCPROPERTY_REQUEST { + PUNKNOWN MajorTarget; + PUNKNOWN MinorTarget; + ULONG Node; + const PCPROPERTY_ITEM *PropertyItem; + ULONG Verb; + ULONG InstanceSize; + PVOID Instance; + ULONG ValueSize; + PVOID Value; + PIRP Irp; }; struct _PCEVENT_REQUEST; -typedef NTSTATUS (NTAPI *PCPFNEVENT_HANDLER)( - IN struct _PCEVENT_REQUEST* EventRequest); +typedef NTSTATUS +(NTAPI *PCPFNEVENT_HANDLER)( + IN struct _PCEVENT_REQUEST* EventRequest); -typedef struct _PCEVENT_ITEM -{ - const GUID* Set; - ULONG Id; - ULONG Flags; - PCPFNEVENT_HANDLER Handler; +typedef struct _PCEVENT_ITEM { + const GUID* Set; + ULONG Id; + ULONG Flags; + PCPFNEVENT_HANDLER Handler; } PCEVENT_ITEM, *PPCEVENT_ITEM; -typedef struct _PCEVENT_REQUEST -{ - PUNKNOWN MajorTarget; - PUNKNOWN MinorTarget; - ULONG Node; - const PCEVENT_ITEM* EventItem; - PKSEVENT_ENTRY EventEntry; - ULONG Verb; - PIRP Irp; +typedef struct _PCEVENT_REQUEST { + PUNKNOWN MajorTarget; + PUNKNOWN MinorTarget; + ULONG Node; + const PCEVENT_ITEM* EventItem; + PKSEVENT_ENTRY EventEntry; + ULONG Verb; + PIRP Irp; } PCEVENT_REQUEST, *PPCEVENT_REQUEST; - - struct _PCMETHOD_REQUEST; -typedef NTSTATUS (NTAPI *PCPFNMETHOD_HANDLER)( - IN struct _PCMETHOD_REQUEST* MethodRequest); +typedef NTSTATUS +(NTAPI *PCPFNMETHOD_HANDLER)( + IN struct _PCMETHOD_REQUEST* MethodRequest); -typedef struct _PCMETHOD_ITEM -{ - const GUID* Set; - ULONG Id; - ULONG Flags; - PCPFNMETHOD_HANDLER Handler; +typedef struct _PCMETHOD_ITEM { + const GUID* Set; + ULONG Id; + ULONG Flags; + PCPFNMETHOD_HANDLER Handler; } PCMETHOD_ITEM, *PPCMETHOD_ITEM; -typedef struct _PCMETHOD_REQUEST -{ - PUNKNOWN MajorTarget; - PUNKNOWN MinorTarget; - ULONG Node; - const PCMETHOD_ITEM* MethodItem; - ULONG Verb; +typedef struct _PCMETHOD_REQUEST { + PUNKNOWN MajorTarget; + PUNKNOWN MinorTarget; + ULONG Node; + const PCMETHOD_ITEM* MethodItem; + ULONG Verb; } PCMETHOD_REQUEST, *PPCMETHOD_REQUEST; - /* =============================================================== Structures (unsorted) */ -typedef struct -{ - ULONG PropertyItemSize; - ULONG PropertyCount; - const PCPROPERTY_ITEM* Properties; - ULONG MethodItemSize; - ULONG MethodCount; - const PCMETHOD_ITEM* Methods; - ULONG EventItemSize; - ULONG EventCount; - const PCEVENT_ITEM* Events; - ULONG Reserved; +typedef struct { + ULONG PropertyItemSize; + ULONG PropertyCount; + const PCPROPERTY_ITEM* Properties; + ULONG MethodItemSize; + ULONG MethodCount; + const PCMETHOD_ITEM* Methods; + ULONG EventItemSize; + ULONG EventCount; + const PCEVENT_ITEM* Events; + ULONG Reserved; } PCAUTOMATION_TABLE, *PPCAUTOMATION_TABLE; -typedef struct -{ - ULONG FromNode; - ULONG FromNodePin; - ULONG ToNode; - ULONG ToNodePin; +typedef struct { + ULONG FromNode; + ULONG FromNodePin; + ULONG ToNode; + ULONG ToNodePin; } PCCONNECTION_DESCRIPTOR, *PPCCONNECTIONDESCRIPTOR; -typedef struct -{ - ULONG MaxGlobalInstanceCount; - ULONG MaxFilterInstanceCount; - ULONG MinFilterInstanceCount; - const PCAUTOMATION_TABLE* AutomationTable; - KSPIN_DESCRIPTOR KsPinDescriptor; +typedef struct { + ULONG MaxGlobalInstanceCount; + ULONG MaxFilterInstanceCount; + ULONG MinFilterInstanceCount; + const PCAUTOMATION_TABLE* AutomationTable; + KSPIN_DESCRIPTOR KsPinDescriptor; } PCPIN_DESCRIPTOR, *PPCPIN_DESCRIPTOR; -typedef struct -{ - ULONG Flags; - const PCAUTOMATION_TABLE* AutomationTable; - const GUID* Type; - const GUID* Name; +typedef struct { + ULONG Flags; + const PCAUTOMATION_TABLE* AutomationTable; + const GUID* Type; + const GUID* Name; } PCNODE_DESCRIPTOR, *PPCNODE_DESCRIPTOR; -typedef struct -{ - ULONG Version; - const PCAUTOMATION_TABLE* AutomationTable; - ULONG PinSize; - ULONG PinCount; - const PCPIN_DESCRIPTOR* Pins; - ULONG NodeSize; - ULONG NodeCount; - const PCNODE_DESCRIPTOR* Nodes; - ULONG ConnectionCount; - const PCCONNECTION_DESCRIPTOR* Connections; - ULONG CategoryCount; - const GUID* Categories; +typedef struct { + ULONG Version; + const PCAUTOMATION_TABLE* AutomationTable; + ULONG PinSize; + ULONG PinCount; + const PCPIN_DESCRIPTOR* Pins; + ULONG NodeSize; + ULONG NodeCount; + const PCNODE_DESCRIPTOR* Nodes; + ULONG ConnectionCount; + const PCCONNECTION_DESCRIPTOR* Connections; + ULONG CategoryCount; + const GUID* Categories; } PCFILTER_DESCRIPTOR, *PPCFILTER_DESCRIPTOR; -#define DEFINE_PCAUTOMATION_TABLE_PROP(AutomationTable,PropertyTable)\ -const PCAUTOMATION_TABLE AutomationTable =\ -{\ - sizeof(PropertyTable[0]),\ - SIZEOF_ARRAY(PropertyTable),\ - (const PCPROPERTY_ITEM *) PropertyTable,\ - 0,0,NULL,\ - 0,0,NULL,\ - 0\ -} +#define DEFINE_PCAUTOMATION_TABLE_PROP(AutomationTable,PropertyTable) \ + const PCAUTOMATION_TABLE AutomationTable = { \ + sizeof(PropertyTable[0]), \ + SIZEOF_ARRAY(PropertyTable), \ + (const PCPROPERTY_ITEM *) PropertyTable, \ + 0,0,NULL, \ + 0,0,NULL, \ + 0 \ + } /* =============================================================== IResourceList Interface @@ -409,34 +392,33 @@ const PCAUTOMATION_TABLE AutomationTable =\ DEFINE_GUID(IID_IResourceList, 0x22C6AC60L, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE); -DECLARE_INTERFACE_(IResourceList, IUnknown) -{ - DEFINE_ABSTRACT_UNKNOWN() +DECLARE_INTERFACE_(IResourceList, IUnknown) { + DEFINE_ABSTRACT_UNKNOWN() - STDMETHOD_(ULONG, NumberOfEntries)( THIS ) PURE; + STDMETHOD_(ULONG, NumberOfEntries)( THIS ) PURE; - STDMETHOD_(ULONG, NumberOfEntriesOfType)( THIS_ - IN CM_RESOURCE_TYPE Type) PURE; + STDMETHOD_(ULONG, NumberOfEntriesOfType)( THIS_ + IN CM_RESOURCE_TYPE Type) PURE; - STDMETHOD_(PCM_PARTIAL_RESOURCE_DESCRIPTOR, FindTranslatedEntry)( THIS_ - IN CM_RESOURCE_TYPE Type, - IN ULONG Index) PURE; + STDMETHOD_(PCM_PARTIAL_RESOURCE_DESCRIPTOR, FindTranslatedEntry)( THIS_ + IN CM_RESOURCE_TYPE Type, + IN ULONG Index) PURE; - STDMETHOD_(PCM_PARTIAL_RESOURCE_DESCRIPTOR, FindUntranslatedEntry)( THIS_ - IN CM_RESOURCE_TYPE Type, - IN ULONG Index) PURE; + STDMETHOD_(PCM_PARTIAL_RESOURCE_DESCRIPTOR, FindUntranslatedEntry)( THIS_ + IN CM_RESOURCE_TYPE Type, + IN ULONG Index) PURE; - STDMETHOD_(NTSTATUS, AddEntry)( THIS_ - IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Translated, - IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Untranslated) PURE; + STDMETHOD_(NTSTATUS, AddEntry)( THIS_ + IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Translated, + IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Untranslated) PURE; - STDMETHOD_(NTSTATUS, AddEntryFromParent)( THIS_ - IN IResourceList* Parent, - IN CM_RESOURCE_TYPE Type, - IN ULONG Index) PURE; + STDMETHOD_(NTSTATUS, AddEntryFromParent)( THIS_ + IN IResourceList* Parent, + IN CM_RESOURCE_TYPE Type, + IN ULONG Index) PURE; - STDMETHOD_(PCM_RESOURCE_LIST, TranslatedList)( THIS ) PURE; - STDMETHOD_(PCM_RESOURCE_LIST, UntranslatedList)( THIS ) PURE; + STDMETHOD_(PCM_RESOURCE_LIST, TranslatedList)( THIS ) PURE; + STDMETHOD_(PCM_RESOURCE_LIST, UntranslatedList)( THIS ) PURE; }; #define IMP_IResourceList \ @@ -468,116 +450,115 @@ DECLARE_INTERFACE_(IResourceList, IUnknown) typedef IResourceList *PRESOURCELIST; #define NumberOfPorts() \ - NumberOfEntriesOfType(CmResourceTypePort) + NumberOfEntriesOfType(CmResourceTypePort) #define FindTranslatedPort(n) \ - FindTranslatedEntry(CmResourceTypePort, (n)) + FindTranslatedEntry(CmResourceTypePort, (n)) #define FindUntranslatedPort(n) \ - FindUntranslatedEntry(CmResourceTypePort, (n)) + FindUntranslatedEntry(CmResourceTypePort, (n)) #define AddPortFromParent(p, n) \ - AddEntryFromParent((p), CmResourceTypePort, (n)) + AddEntryFromParent((p), CmResourceTypePort, (n)) #define NumberOfInterrupts() \ - NumberOfEntriesOfType(CmResourceTypeInterrupt) + NumberOfEntriesOfType(CmResourceTypeInterrupt) #define FindTranslatedInterrupt(n) \ - FindTranslatedEntry(CmResourceTypeInterrupt, (n)) + FindTranslatedEntry(CmResourceTypeInterrupt, (n)) #define FindUntranslatedInterrupt(n) \ - FindUntranslatedEntry(CmResourceTypeInterrupt, (n)) + FindUntranslatedEntry(CmResourceTypeInterrupt, (n)) #define AddInterruptFromParent(p, n) \ - AddEntryFromParent((p), CmResourceTypeInterrupt, (n)) + AddEntryFromParent((p), CmResourceTypeInterrupt, (n)) #define NumberOfMemories() \ - NumberOfEntriesOfType(CmResourceTypeMemory) + NumberOfEntriesOfType(CmResourceTypeMemory) #define FindTranslatedMemory(n) \ - FindTranslatedEntry(CmResourceTypeMemory, (n)) + FindTranslatedEntry(CmResourceTypeMemory, (n)) #define FindUntranslatedMemory(n) \ - FindUntranslatedEntry(CmResourceTypeMemory, (n)) + FindUntranslatedEntry(CmResourceTypeMemory, (n)) #define AddMemoryFromParent(p, n) \ - AddEntryFromParent((p), CmResourceTypeMemory, (n)) + AddEntryFromParent((p), CmResourceTypeMemory, (n)) #define NumberOfDmas() \ - NumberOfEntriesOfType(CmResourceTypeDma) + NumberOfEntriesOfType(CmResourceTypeDma) #define FindTranslatedDma(n) \ - FindTranslatedEntry(CmResourceTypeDma, (n)) + FindTranslatedEntry(CmResourceTypeDma, (n)) #define FindUntranslatedDma(n) \ - FindUntranslatedEntry(CmResourceTypeDma, (n)) + FindUntranslatedEntry(CmResourceTypeDma, (n)) #define AddDmaFromParent(p, n) \ - AddEntryFromParent((p), CmResourceTypeInterrupt, (n)) + AddEntryFromParent((p), CmResourceTypeInterrupt, (n)) #define NumberOfDeviceSpecifics() \ - NumberOfEntriesOfType(CmResourceTypeDeviceSpecific) + NumberOfEntriesOfType(CmResourceTypeDeviceSpecific) #define FindTranslatedDeviceSpecific(n) \ - FindTranslatedEntry(CmResourceTypeDeviceSpecific, (n)) + FindTranslatedEntry(CmResourceTypeDeviceSpecific, (n)) #define FindUntranslatedDeviceSpecific(n) \ - FindUntranslatedEntry(CmResourceTypeDeviceSpecific, (n)) + FindUntranslatedEntry(CmResourceTypeDeviceSpecific, (n)) #define AddDeviceSpecificFromParent(p, n) \ - AddEntryFromParent((p), CmResourceTypeDeviceSpecific, (n)) + AddEntryFromParent((p), CmResourceTypeDeviceSpecific, (n)) #define NumberOfBusNumbers() \ - NumberOfEntriesOfType(CmResourceTypeBusNumber) + NumberOfEntriesOfType(CmResourceTypeBusNumber) #define FindTranslatedBusNumber(n) \ - FindTranslatedEntry(CmResourceTypeBusNumber, (n)) + FindTranslatedEntry(CmResourceTypeBusNumber, (n)) #define FindUntranslatedBusNumber(n) \ - FindUntranslatedEntry(CmResourceTypeBusNumber, (n)) + FindUntranslatedEntry(CmResourceTypeBusNumber, (n)) #define AddBusNumberFromParent(p, n) \ - AddEntryFromParent((p), CmResourceTypeBusNumber, (n)) + AddEntryFromParent((p), CmResourceTypeBusNumber, (n)) #define NumberOfDevicePrivates() \ - NumberOfEntriesOfType(CmResourceTypeDevicePrivate) + NumberOfEntriesOfType(CmResourceTypeDevicePrivate) #define FindTranslatedDevicePrivate(n) \ - FindTranslatedEntry(CmResourceTypeDevicePrivate, (n)) + FindTranslatedEntry(CmResourceTypeDevicePrivate, (n)) #define FindUntranslatedDevicePrivate(n) \ - FindUntranslatedEntry(CmResourceTypeDevicePrivate, (n)) + FindUntranslatedEntry(CmResourceTypeDevicePrivate, (n)) #define AddDevicePrivateFromParent(p, n) \ - AddEntryFromParent((p), CmResourceTypeDevicePrivate, (n)) + AddEntryFromParent((p), CmResourceTypeDevicePrivate, (n)) #define NumberOfAssignedResources() \ - NumberOfEntriesOfType(CmResourceTypeAssignedResource) + NumberOfEntriesOfType(CmResourceTypeAssignedResource) #define FindTranslatedAssignedResource(n) \ - FindTranslatedEntry(CmResourceTypeAssignedResource, (n)) + FindTranslatedEntry(CmResourceTypeAssignedResource, (n)) #define FindUntranslatedAssignedResource(n) \ - FindUntranslatedEntry(CmResourceTypeAssignedResource, (n)) + FindUntranslatedEntry(CmResourceTypeAssignedResource, (n)) #define AddAssignedResourceFromParent(p, n) \ - AddEntryFromParent((p), CmResourceTypeAssignedResource, (n)) + AddEntryFromParent((p), CmResourceTypeAssignedResource, (n)) #define NumberOfSubAllocateFroms() \ - NumberOfEntriesOfType(CmResourceTypeSubAllocateFrom) + NumberOfEntriesOfType(CmResourceTypeSubAllocateFrom) #define FindTranslatedSubAllocateFrom(n) \ - FindTranslatedEntry(CmResourceTypeSubAllocateFrom, (n)) + FindTranslatedEntry(CmResourceTypeSubAllocateFrom, (n)) #define FindUntranslatedSubAllocateFrom(n) \ - FindUntranslatedEntry(CmResourceTypeSubAllocateFrom, (n)) + FindUntranslatedEntry(CmResourceTypeSubAllocateFrom, (n)) #define AddSubAllocateFromFromParent(p, n) \ - AddEntryFromParent((p), CmResourceTypeSubAllocateFrom, (n)) + AddEntryFromParent((p), CmResourceTypeSubAllocateFrom, (n)) #undef INTERFACE - /* =============================================================== IServiceSink Interface */ @@ -585,18 +566,16 @@ typedef IResourceList *PRESOURCELIST; DEFINE_GUID(IID_IServiceSink, 0x22C6AC64L, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE); -DECLARE_INTERFACE_(IServiceSink, IUnknown) -{ - DEFINE_ABSTRACT_UNKNOWN() - STDMETHOD_(void, RequestService)( THIS ) PURE; +DECLARE_INTERFACE_(IServiceSink, IUnknown) { + DEFINE_ABSTRACT_UNKNOWN() + STDMETHOD_(void, RequestService)( THIS ) PURE; }; #define IMP_IServiceSink \ - STDMETHODIMP_(void) RequestService(void); + STDMETHODIMP_(void) RequestService(void); typedef IServiceSink *PSERVICESINK; - /* =============================================================== IServiceGroup Interface */ @@ -605,24 +584,23 @@ typedef IServiceSink *PSERVICESINK; DEFINE_GUID(IID_IServiceGroup, 0x22C6AC65L, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE); -DECLARE_INTERFACE_(IServiceGroup, IServiceSink) -{ - DEFINE_ABSTRACT_UNKNOWN() +DECLARE_INTERFACE_(IServiceGroup, IServiceSink) { + DEFINE_ABSTRACT_UNKNOWN() - STDMETHOD_(void, RequestService)( THIS ) PURE; /* IServiceSink */ + STDMETHOD_(void, RequestService)( THIS ) PURE; /* IServiceSink */ - STDMETHOD_(NTSTATUS, AddMember)( THIS_ - IN PSERVICESINK pServiceSink) PURE; + STDMETHOD_(NTSTATUS, AddMember)( THIS_ + IN PSERVICESINK pServiceSink) PURE; - STDMETHOD_(void, RemoveMember)( THIS_ - IN PSERVICESINK pServiceSink) PURE; + STDMETHOD_(void, RemoveMember)( THIS_ + IN PSERVICESINK pServiceSink) PURE; - STDMETHOD_(void, SupportDelayedService)( THIS ) PURE; + STDMETHOD_(void, SupportDelayedService)( THIS ) PURE; - STDMETHOD_(void, RequestDelayedService)( THIS_ - IN ULONGLONG ullDelay) PURE; + STDMETHOD_(void, RequestDelayedService)( THIS_ + IN ULONGLONG ullDelay) PURE; - STDMETHOD_(void, CancelDelayedService)( THIS ) PURE; + STDMETHOD_(void, CancelDelayedService)( THIS ) PURE; }; #define IMP_IServiceGroup \ @@ -654,21 +632,20 @@ DEFINE_GUID(IID_IUnregisterSubdevice, 0x16738177L, 0xe199, 0x41f9, 0x9a, 0x87, 0 #undef INTERFACE #define INTERFACE IUnregisterSubdevice -DECLARE_INTERFACE_(IUnregisterSubdevice,IUnknown) -{ - DEFINE_ABSTRACT_UNKNOWN() +DECLARE_INTERFACE_(IUnregisterSubdevice,IUnknown) { + DEFINE_ABSTRACT_UNKNOWN() - STDMETHOD_(NTSTATUS,UnregisterSubdevice)(THIS_ - IN PDEVICE_OBJECT DeviceObject, - IN PUNKNOWN Unknown)PURE; + STDMETHOD_(NTSTATUS,UnregisterSubdevice)(THIS_ + IN PDEVICE_OBJECT DeviceObject, + IN PUNKNOWN Unknown) PURE; }; typedef IUnregisterSubdevice *PUNREGISTERSUBDEVICE; -#define IMP_IUnregisterSubdevice \ - STDMETHODIMP_(NTSTATUS) UnregisterSubdevice(THIS_ \ - IN PDEVICE_OBJECT DeviceObject, \ - IN PUNKNOWN Unknown) +#define IMP_IUnregisterSubdevice \ + STDMETHODIMP_(NTSTATUS) UnregisterSubdevice(THIS_ \ + IN PDEVICE_OBJECT DeviceObject, \ + IN PUNKNOWN Unknown) /* =============================================================== IUnregisterPhysicalConnection Interface @@ -2189,16 +2166,15 @@ typedef IPortClsVersion *PPORTCLSVERSION; IPreFetchOffset Interface */ - - /* =============================================================== PortCls API Functions */ -typedef NTSTATUS (NTAPI *PCPFNSTARTDEVICE)( - IN PDEVICE_OBJECT DeviceObject, - IN PIRP Irp, - IN PRESOURCELIST ResourceList); +typedef NTSTATUS +(NTAPI *PCPFNSTARTDEVICE)( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp, + IN PRESOURCELIST ResourceList); /* This is in NTDDK.H */ /* @@ -2209,18 +2185,17 @@ typedef NTSTATUS (*PDRIVER_ADD_DEVICE)( PORTCLASSAPI NTSTATUS NTAPI PcAddAdapterDevice( - IN PDRIVER_OBJECT DriverObject, - IN PDEVICE_OBJECT PhysicalDeviceObject, - IN PCPFNSTARTDEVICE StartDevice, - IN ULONG MaxObjects, - IN ULONG DeviceExtensionSize); + IN PDRIVER_OBJECT DriverObject, + IN PDEVICE_OBJECT PhysicalDeviceObject, + IN PCPFNSTARTDEVICE StartDevice, + IN ULONG MaxObjects, + IN ULONG DeviceExtensionSize); PORTCLASSAPI NTSTATUS NTAPI PcInitializeAdapterDriver( - IN PDRIVER_OBJECT DriverObject, - IN PUNICODE_STRING RegistryPathName, - IN PDRIVER_ADD_DEVICE AddDevice); - + IN PDRIVER_OBJECT DriverObject, + IN PUNICODE_STRING RegistryPathName, + IN PDRIVER_ADD_DEVICE AddDevice); /* =============================================================== Factories (TODO: Move elsewhere) @@ -2228,62 +2203,62 @@ PcInitializeAdapterDriver( PORTCLASSAPI NTSTATUS NTAPI PcNewDmaChannel( - OUT PDMACHANNEL* OutDmaChannel, - IN PUNKNOWN OuterUnknown OPTIONAL, - IN POOL_TYPE PoolType, - IN PDEVICE_DESCRIPTION DeviceDescription, - IN PDEVICE_OBJECT DeviceObject); + OUT PDMACHANNEL* OutDmaChannel, + IN PUNKNOWN OuterUnknown OPTIONAL, + IN POOL_TYPE PoolType, + IN PDEVICE_DESCRIPTION DeviceDescription, + IN PDEVICE_OBJECT DeviceObject); PORTCLASSAPI NTSTATUS NTAPI PcNewInterruptSync( - OUT PINTERRUPTSYNC* OUtInterruptSync, - IN PUNKNOWN OuterUnknown OPTIONAL, - IN PRESOURCELIST ResourceList, - IN ULONG ResourceIndex, - IN INTERRUPTSYNCMODE Mode); + OUT PINTERRUPTSYNC* OUtInterruptSync, + IN PUNKNOWN OuterUnknown OPTIONAL, + IN PRESOURCELIST ResourceList, + IN ULONG ResourceIndex, + IN INTERRUPTSYNCMODE Mode); PORTCLASSAPI NTSTATUS NTAPI PcNewMiniport( - OUT PMINIPORT* OutMiniport, - IN REFCLSID ClassId); + OUT PMINIPORT* OutMiniport, + IN REFCLSID ClassId); PORTCLASSAPI NTSTATUS NTAPI PcNewPort( - OUT PPORT* OutPort, - IN REFCLSID ClassId); + OUT PPORT* OutPort, + IN REFCLSID ClassId); PORTCLASSAPI NTSTATUS NTAPI PcNewRegistryKey( - OUT PREGISTRYKEY* OutRegistryKey, - IN PUNKNOWN OuterUnknown OPTIONAL, - IN ULONG RegistryKeyType, - IN ACCESS_MASK DesiredAccess, - IN PVOID DeviceObject OPTIONAL, - IN PVOID SubDevice OPTIONAL, - IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, - IN ULONG CreateOptions OPTIONAL, - OUT PULONG Disposition OPTIONAL); + OUT PREGISTRYKEY* OutRegistryKey, + IN PUNKNOWN OuterUnknown OPTIONAL, + IN ULONG RegistryKeyType, + IN ACCESS_MASK DesiredAccess, + IN PVOID DeviceObject OPTIONAL, + IN PVOID SubDevice OPTIONAL, + IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, + IN ULONG CreateOptions OPTIONAL, + OUT PULONG Disposition OPTIONAL); PORTCLASSAPI NTSTATUS NTAPI PcNewResourceList( - OUT PRESOURCELIST* OutResourceList, - IN PUNKNOWN OuterUnknown OPTIONAL, - IN POOL_TYPE PoolType, - IN PCM_RESOURCE_LIST TranslatedResources, - IN PCM_RESOURCE_LIST UntranslatedResources); + OUT PRESOURCELIST* OutResourceList, + IN PUNKNOWN OuterUnknown OPTIONAL, + IN POOL_TYPE PoolType, + IN PCM_RESOURCE_LIST TranslatedResources, + IN PCM_RESOURCE_LIST UntranslatedResources); PORTCLASSAPI NTSTATUS NTAPI PcNewResourceSublist( - OUT PRESOURCELIST* OutResourceList, - IN PUNKNOWN OuterUnknown OPTIONAL, - IN POOL_TYPE PoolType, - IN PRESOURCELIST ParentList, - IN ULONG MaximumEntries); + OUT PRESOURCELIST* OutResourceList, + IN PUNKNOWN OuterUnknown OPTIONAL, + IN POOL_TYPE PoolType, + IN PRESOURCELIST ParentList, + IN ULONG MaximumEntries); PORTCLASSAPI NTSTATUS NTAPI PcNewServiceGroup( - OUT PSERVICEGROUP* OutServiceGroup, - IN PUNKNOWN OuterUnknown OPTIONAL); + OUT PSERVICEGROUP* OutServiceGroup, + IN PUNKNOWN OuterUnknown OPTIONAL); /* =============================================================== @@ -2292,20 +2267,19 @@ PcNewServiceGroup( PORTCLASSAPI NTSTATUS NTAPI PcDispatchIrp( - IN PDEVICE_OBJECT DeviceObject, - IN PIRP Irp); + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp); PORTCLASSAPI NTSTATUS NTAPI PcCompleteIrp( - IN PDEVICE_OBJECT DeviceObject, - IN PIRP Irp, - IN NTSTATUS Status); + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp, + IN NTSTATUS Status); PORTCLASSAPI NTSTATUS NTAPI PcForwardIrpSynchronous( - IN PDEVICE_OBJECT DeviceObject, - IN PIRP Irp); - + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp); /* =============================================================== Power Management @@ -2313,14 +2287,13 @@ PcForwardIrpSynchronous( PORTCLASSAPI NTSTATUS NTAPI PcRegisterAdapterPowerManagement( - IN PUNKNOWN pUnknown, - IN PVOID pvContext1); + IN PUNKNOWN pUnknown, + IN PVOID pvContext1); PORTCLASSAPI NTSTATUS NTAPI PcRequestNewPowerState( - IN PDEVICE_OBJECT pDeviceObject, - IN DEVICE_POWER_STATE RequestedNewState); - + IN PDEVICE_OBJECT pDeviceObject, + IN DEVICE_POWER_STATE RequestedNewState); /* =============================================================== Properties @@ -2328,17 +2301,16 @@ PcRequestNewPowerState( PORTCLASSAPI NTSTATUS NTAPI PcGetDeviceProperty( - IN PVOID DeviceObject, - IN DEVICE_REGISTRY_PROPERTY DeviceProperty, - IN ULONG BufferLength, - OUT PVOID PropertyBuffer, - OUT PULONG ResultLength); + IN PVOID DeviceObject, + IN DEVICE_REGISTRY_PROPERTY DeviceProperty, + IN ULONG BufferLength, + OUT PVOID PropertyBuffer, + OUT PULONG ResultLength); PORTCLASSAPI NTSTATUS NTAPI PcCompletePendingPropertyRequest( - IN PPCPROPERTY_REQUEST PropertyRequest, - IN NTSTATUS NtStatus); - + IN PPCPROPERTY_REQUEST PropertyRequest, + IN NTSTATUS NtStatus); /* =============================================================== I/O Timeouts @@ -2346,16 +2318,15 @@ PcCompletePendingPropertyRequest( PORTCLASSAPI NTSTATUS NTAPI PcRegisterIoTimeout( - IN PDEVICE_OBJECT pDeviceObject, - IN PIO_TIMER_ROUTINE pTimerRoutine, - IN PVOID pContext); + IN PDEVICE_OBJECT pDeviceObject, + IN PIO_TIMER_ROUTINE pTimerRoutine, + IN PVOID pContext); PORTCLASSAPI NTSTATUS NTAPI PcUnregisterIoTimeout( - IN PDEVICE_OBJECT pDeviceObject, - IN PIO_TIMER_ROUTINE pTimerRoutine, - IN PVOID pContext); - + IN PDEVICE_OBJECT pDeviceObject, + IN PIO_TIMER_ROUTINE pTimerRoutine, + IN PVOID pContext); /* =============================================================== Physical Connections @@ -2363,28 +2334,27 @@ PcUnregisterIoTimeout( PORTCLASSAPI NTSTATUS NTAPI PcRegisterPhysicalConnection( - IN PDEVICE_OBJECT DeviceObject, - IN PUNKNOWN FromUnknown, - IN ULONG FromPin, - IN PUNKNOWN ToUnknown, - IN ULONG ToPin); + IN PDEVICE_OBJECT DeviceObject, + IN PUNKNOWN FromUnknown, + IN ULONG FromPin, + IN PUNKNOWN ToUnknown, + IN ULONG ToPin); PORTCLASSAPI NTSTATUS NTAPI PcRegisterPhysicalConnectionFromExternal( - IN PDEVICE_OBJECT DeviceObject, - IN PUNICODE_STRING FromString, - IN ULONG FromPin, - IN PUNKNOWN ToUnknown, - IN ULONG ToPin); + IN PDEVICE_OBJECT DeviceObject, + IN PUNICODE_STRING FromString, + IN ULONG FromPin, + IN PUNKNOWN ToUnknown, + IN ULONG ToPin); PORTCLASSAPI NTSTATUS NTAPI PcRegisterPhysicalConnectionToExternal( - IN PDEVICE_OBJECT DeviceObject, - IN PUNKNOWN FromUnknown, - IN ULONG FromPin, - IN PUNICODE_STRING ToString, - IN ULONG ToPin); - + IN PDEVICE_OBJECT DeviceObject, + IN PUNKNOWN FromUnknown, + IN ULONG FromPin, + IN PUNICODE_STRING ToString, + IN ULONG ToPin); /* =============================================================== Misc @@ -2392,14 +2362,13 @@ PcRegisterPhysicalConnectionToExternal( PORTCLASSAPI ULONGLONG NTAPI PcGetTimeInterval( - IN ULONGLONG Since); + IN ULONGLONG Since); PORTCLASSAPI NTSTATUS NTAPI PcRegisterSubdevice( - IN PDEVICE_OBJECT DeviceObject, - IN PWCHAR Name, - IN PUNKNOWN Unknown); - + IN PDEVICE_OBJECT DeviceObject, + IN PWCHAR Name, + IN PUNKNOWN Unknown); /* =============================================================== Digital Rights Management Functions @@ -2408,41 +2377,40 @@ PcRegisterSubdevice( PORTCLASSAPI NTSTATUS NTAPI PcAddContentHandlers( - IN ULONG ContentId, - IN PVOID *paHandlers, - IN ULONG NumHandlers); + IN ULONG ContentId, + IN PVOID *paHandlers, + IN ULONG NumHandlers); PORTCLASSAPI NTSTATUS NTAPI PcCreateContentMixed( - IN PULONG paContentId, - IN ULONG cContentId, - OUT PULONG pMixedContentId); + IN PULONG paContentId, + IN ULONG cContentId, + OUT PULONG pMixedContentId); PORTCLASSAPI NTSTATUS NTAPI PcDestroyContent( - IN ULONG ContentId); + IN ULONG ContentId); PORTCLASSAPI NTSTATUS NTAPI PcForwardContentToDeviceObject( - IN ULONG ContentId, - IN PVOID Reserved, - IN PCDRMFORWARD DrmForward); + IN ULONG ContentId, + IN PVOID Reserved, + IN PCDRMFORWARD DrmForward); PORTCLASSAPI NTSTATUS NTAPI PcForwardContentToFileObject( - IN ULONG ContentId, - IN PFILE_OBJECT FileObject); + IN ULONG ContentId, + IN PFILE_OBJECT FileObject); PORTCLASSAPI NTSTATUS NTAPI PcForwardContentToInterface( - IN ULONG ContentId, - IN PUNKNOWN pUnknown, - IN ULONG NumMethods); + IN ULONG ContentId, + IN PUNKNOWN pUnknown, + IN ULONG NumMethods); PORTCLASSAPI NTSTATUS NTAPI PcGetContentRights( - IN ULONG ContentId, - OUT PDRMRIGHTS DrmRights); + IN ULONG ContentId, + OUT PDRMRIGHTS DrmRights); - -#endif +#endif /* PORTCLS_H */ diff --git a/include/ddk/punknown.h b/include/ddk/punknown.h index bac87bd652c..9b801f71e4e 100644 --- a/include/ddk/punknown.h +++ b/include/ddk/punknown.h @@ -21,69 +21,61 @@ extern "C" { #include #ifdef PUT_GUIDS_HERE - #include +#include #endif - /* =============================================================== IUnknown */ #ifndef __IUnknown_INTERFACE_DEFINED__ #define __IUnknown_INTERFACE_DEFINED__ -DEFINE_GUID( - IID_IUnknown, - 0x00000000, 0x0000, 0x0000, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46); + +DEFINE_GUID(IID_IUnknown, + 0x00000000, 0x0000, 0x0000, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46); #undef INTERFACE #define INTERFACE IUnknown -DECLARE_INTERFACE(IUnknown) -{ - STDMETHOD_(NTSTATUS, QueryInterface)( THIS_ - IN REFIID, - OUT PVOID*) - PURE; +DECLARE_INTERFACE(IUnknown) { + STDMETHOD_(NTSTATUS, QueryInterface)( THIS_ + IN REFIID, + OUT PVOID*) PURE; - STDMETHOD_(ULONG, AddRef)( THIS ) - PURE; + STDMETHOD_(ULONG, AddRef)( THIS ) PURE; - STDMETHOD_(ULONG, Release)( THIS ) - PURE; + STDMETHOD_(ULONG, Release)( THIS ) PURE; }; -#endif + +#endif /* __IUnknown_INTERFACE_DEFINED__ */ #undef INTERFACE typedef IUnknown *PUNKNOWN; - /* =============================================================== IUnknown definition Boilerplate code macro for use in subclassed interfaces */ -#define DEFINE_ABSTRACT_UNKNOWN() \ - STDMETHOD_(NTSTATUS, QueryInterface)( THIS_ \ - REFIID InterfaceId, \ - PVOID* Interface) \ - PURE; \ -\ - STDMETHOD_(ULONG, AddRef)(THIS) \ - PURE; \ -\ - STDMETHOD_(ULONG, Release)(THIS) \ - PURE; - +#define DEFINE_ABSTRACT_UNKNOWN() \ + STDMETHOD_(NTSTATUS, QueryInterface)( THIS_ \ + REFIID InterfaceId, \ + PVOID* Interface) PURE; \ + \ + STDMETHOD_(ULONG, AddRef)(THIS) PURE; \ + \ + STDMETHOD_(ULONG, Release)(THIS) PURE; /* =============================================================== Constructor callback definition */ -typedef HRESULT (NTAPI *PFNCREATEINSTANCE)( - OUT PUNKNOWN* Unknown, - IN REFCLSID ClassId, - IN PUNKNOWN OuterUnknown, - IN POOL_TYPE PoolType); +typedef HRESULT +(NTAPI *PFNCREATEINSTANCE)( + OUT PUNKNOWN* Unknown, + IN REFCLSID ClassId, + IN PUNKNOWN OuterUnknown, + IN POOL_TYPE PoolType); -#endif +#endif /* _UNKNOWN_H_ */ diff --git a/include/ddk/smbus.h b/include/ddk/smbus.h index fd07c72556f..e1cc0eef6cc 100644 --- a/include/ddk/smbus.h +++ b/include/ddk/smbus.h @@ -28,9 +28,9 @@ extern "C" { #endif #if !defined(SMBCLASS) - #define SMBCLASSAPI DECLSPEC_IMPORT +#define SMBCLASSAPI DECLSPEC_IMPORT #else - #define SMBCLASSAPI +#define SMBCLASSAPI #endif #define SMB_BUS_REQUEST \ @@ -74,25 +74,25 @@ struct _SMB_CLASS; #define SMB_MAXIMUM_PROTOCOL 0x0A typedef struct _SMB_REQUEST { - UCHAR Status; - UCHAR Protocol; - UCHAR Address; - UCHAR Command; - UCHAR BlockLength; - UCHAR Data[SMB_MAX_DATA_SIZE]; + UCHAR Status; + UCHAR Protocol; + UCHAR Address; + UCHAR Command; + UCHAR BlockLength; + UCHAR Data[SMB_MAX_DATA_SIZE]; } SMB_REQUEST, *PSMB_REQUEST; typedef VOID (NTAPI *SMB_ALARM_NOTIFY)( - PVOID Context, - UCHAR Address, - USHORT Data); + PVOID Context, + UCHAR Address, + USHORT Data); typedef struct _SMB_REGISTER_ALARM { - UCHAR MinAddress; - UCHAR MaxAddress; - SMB_ALARM_NOTIFY NotifyFunction; - PVOID NotifyContext; + UCHAR MinAddress; + UCHAR MaxAddress; + SMB_ALARM_NOTIFY NotifyFunction; + PVOID NotifyContext; } SMB_REGISTER_ALARM, *PSMB_REGISTER_ALARM; /* SMB_CLASS.XxxVersion constants */ @@ -101,83 +101,83 @@ typedef struct _SMB_REGISTER_ALARM { typedef NTSTATUS (NTAPI *SMB_RESET_DEVICE)( - IN struct _SMB_CLASS *SmbClass, - IN PVOID SmbMiniport); + IN struct _SMB_CLASS *SmbClass, + IN PVOID SmbMiniport); typedef VOID (NTAPI *SMB_START_IO)( - IN struct _SMB_CLASS *SmbClass, - IN PVOID SmbMiniport); + IN struct _SMB_CLASS *SmbClass, + IN PVOID SmbMiniport); typedef NTSTATUS (NTAPI *SMB_STOP_DEVICE)( - IN struct _SMB_CLASS *SmbClass, - IN PVOID SmbMiniport); + IN struct _SMB_CLASS *SmbClass, + IN PVOID SmbMiniport); typedef struct _SMB_CLASS { - USHORT MajorVersion; - USHORT MinorVersion; - PVOID Miniport; - PDEVICE_OBJECT DeviceObject; - PDEVICE_OBJECT PDO; - PDEVICE_OBJECT LowerDeviceObject; - PIRP CurrentIrp; - PSMB_REQUEST CurrentSmb; - SMB_RESET_DEVICE ResetDevice; - SMB_START_IO StartIo; - SMB_STOP_DEVICE StopDevice; + USHORT MajorVersion; + USHORT MinorVersion; + PVOID Miniport; + PDEVICE_OBJECT DeviceObject; + PDEVICE_OBJECT PDO; + PDEVICE_OBJECT LowerDeviceObject; + PIRP CurrentIrp; + PSMB_REQUEST CurrentSmb; + SMB_RESET_DEVICE ResetDevice; + SMB_START_IO StartIo; + SMB_STOP_DEVICE StopDevice; } SMB_CLASS, *PSMB_CLASS; SMBCLASSAPI VOID NTAPI SmbClassAlarm( - IN PSMB_CLASS SmbClass, - IN UCHAR Address, - IN USHORT Data); + IN PSMB_CLASS SmbClass, + IN UCHAR Address, + IN USHORT Data); SMBCLASSAPI VOID NTAPI SmbClassCompleteRequest( - IN PSMB_CLASS SmbClass); + IN PSMB_CLASS SmbClass); typedef NTSTATUS (NTAPI *PSMB_INITIALIZE_MINIPORT)( - IN PSMB_CLASS SmbClass, - IN PVOID MiniportExtension, - IN PVOID MiniportContext); + IN PSMB_CLASS SmbClass, + IN PVOID MiniportExtension, + IN PVOID MiniportContext); SMBCLASSAPI NTSTATUS NTAPI SmbClassCreateFdo( - IN PDRIVER_OBJECT DriverObject, - IN PDEVICE_OBJECT PDO, - IN ULONG MiniportExtensionSize, - IN PSMB_INITIALIZE_MINIPORT MiniportInitialize, - IN PVOID MiniportContext, - OUT PDEVICE_OBJECT *FDO); + IN PDRIVER_OBJECT DriverObject, + IN PDEVICE_OBJECT PDO, + IN ULONG MiniportExtensionSize, + IN PSMB_INITIALIZE_MINIPORT MiniportInitialize, + IN PVOID MiniportContext, + OUT PDEVICE_OBJECT *FDO); SMBCLASSAPI NTSTATUS NTAPI SmbClassInitializeDevice( - IN ULONG MajorVersion, - IN ULONG MinorVersion, - IN PDRIVER_OBJECT DriverObject); + IN ULONG MajorVersion, + IN ULONG MinorVersion, + IN PDRIVER_OBJECT DriverObject); SMBCLASSAPI VOID NTAPI SmbClassLockDevice( - IN PSMB_CLASS SmbClass); + IN PSMB_CLASS SmbClass); SMBCLASSAPI VOID NTAPI SmbClassUnlockDevice( - IN PSMB_CLASS SmbClass); + IN PSMB_CLASS SmbClass); #ifdef __cplusplus } diff --git a/include/ddk/stdunk.h b/include/ddk/stdunk.h index c50e5b1c1b0..6f95270aa4d 100644 --- a/include/ddk/stdunk.h +++ b/include/ddk/stdunk.h @@ -13,15 +13,6 @@ #include -/* Helper macro to enable gcc's extension. */ -#ifndef __GNU_EXTENSION -#ifdef __GNUC__ -#define __GNU_EXTENSION __extension__ -#else -#define __GNU_EXTENSION -#endif -#endif - /* =============================================================== INonDelegatingUnknown interface */ diff --git a/include/ddk/storport.h b/include/ddk/storport.h index fd8cf9b19ae..f993b64bf1b 100644 --- a/include/ddk/storport.h +++ b/include/ddk/storport.h @@ -30,134 +30,132 @@ extern "C" { #endif #if defined(_STORPORT_) - #define STORPORTAPI +#define STORPORTAPI #else - #define STORPORTAPI DECLSPEC_IMPORT +#define STORPORTAPI DECLSPEC_IMPORT #endif - typedef PHYSICAL_ADDRESS STOR_PHYSICAL_ADDRESS; typedef struct _STOR_SCATTER_GATHER_ELEMENT { - STOR_PHYSICAL_ADDRESS PhysicalAddress; - ULONG Length; - ULONG_PTR Reserved; + STOR_PHYSICAL_ADDRESS PhysicalAddress; + ULONG Length; + ULONG_PTR Reserved; } STOR_SCATTER_GATHER_ELEMENT, *PSTOR_SCATTER_GATHER_ELEMENT; typedef struct _STOR_SCATTER_GATHER_LIST { - ULONG NumberOfElements; - ULONG_PTR Reserved; - STOR_SCATTER_GATHER_ELEMENT List[0]; + ULONG NumberOfElements; + ULONG_PTR Reserved; + STOR_SCATTER_GATHER_ELEMENT List[0]; } STOR_SCATTER_GATHER_LIST, *PSTOR_SCATTER_GATHER_LIST; typedef struct _SCSI_WMI_REQUEST_BLOCK { - USHORT Length; - UCHAR Function; - UCHAR SrbStatus; - UCHAR WMISubFunction; - UCHAR PathId; - UCHAR TargetId; - UCHAR Lun; - UCHAR Reserved1; - UCHAR WMIFlags; - UCHAR Reserved2[2]; - ULONG SrbFlags; - ULONG DataTransferLength; - ULONG TimeOutValue; - PVOID DataBuffer; - PVOID DataPath; - PVOID Reserved3; - PVOID OriginalRequest; - PVOID SrbExtension; - ULONG Reserved4; - UCHAR Reserved5[16]; + USHORT Length; + UCHAR Function; + UCHAR SrbStatus; + UCHAR WMISubFunction; + UCHAR PathId; + UCHAR TargetId; + UCHAR Lun; + UCHAR Reserved1; + UCHAR WMIFlags; + UCHAR Reserved2[2]; + ULONG SrbFlags; + ULONG DataTransferLength; + ULONG TimeOutValue; + PVOID DataBuffer; + PVOID DataPath; + PVOID Reserved3; + PVOID OriginalRequest; + PVOID SrbExtension; + ULONG Reserved4; + UCHAR Reserved5[16]; } SCSI_WMI_REQUEST_BLOCK, *PSCSI_WMI_REQUEST_BLOCK; - STORPORTAPI ULONG NTAPI StorPortInitialize( - IN PVOID Argument1, - IN PVOID Argument2, - IN PHW_INITIALIZATION_DATA HwInitializationData, - IN PVOID Unused); + IN PVOID Argument1, + IN PVOID Argument2, + IN PHW_INITIALIZATION_DATA HwInitializationData, + IN PVOID Unused); STORPORTAPI VOID NTAPI StorPortFreeDeviceBase( - IN PVOID HwDeviceExtension, - IN PVOID MappedAddress); + IN PVOID HwDeviceExtension, + IN PVOID MappedAddress); STORPORTAPI ULONG NTAPI StorPortGetBusData( - IN PVOID DeviceExtension, - IN ULONG BusDataType, - IN ULONG SystemIoBusNumber, - IN ULONG SlotNumber, - IN PVOID Buffer, - IN ULONG Length); + IN PVOID DeviceExtension, + IN ULONG BusDataType, + IN ULONG SystemIoBusNumber, + IN ULONG SlotNumber, + IN PVOID Buffer, + IN ULONG Length); STORPORTAPI ULONG NTAPI StorPortSetBusDataByOffset( - IN PVOID DeviceExtension, - IN ULONG BusDataType, - IN ULONG SystemIoBusNumber, - IN ULONG SlotNumber, - IN PVOID Buffer, - IN ULONG Offset, - IN ULONG Length); + IN PVOID DeviceExtension, + IN ULONG BusDataType, + IN ULONG SystemIoBusNumber, + IN ULONG SlotNumber, + IN PVOID Buffer, + IN ULONG Offset, + IN ULONG Length); STORPORTAPI PVOID NTAPI StorPortGetDeviceBase( - IN PVOID HwDeviceExtension, - IN INTERFACE_TYPE BusType, - IN ULONG SystemIoBusNumber, - IN SCSI_PHYSICAL_ADDRESS IoAddress, - IN ULONG NumberOfBytes, - IN BOOLEAN InIoSpace); + IN PVOID HwDeviceExtension, + IN INTERFACE_TYPE BusType, + IN ULONG SystemIoBusNumber, + IN SCSI_PHYSICAL_ADDRESS IoAddress, + IN ULONG NumberOfBytes, + IN BOOLEAN InIoSpace); STORPORTAPI PVOID NTAPI StorPortGetLogicalUnit( - IN PVOID HwDeviceExtension, - IN UCHAR PathId, - IN UCHAR TargetId, - IN UCHAR Lun); + IN PVOID HwDeviceExtension, + IN UCHAR PathId, + IN UCHAR TargetId, + IN UCHAR Lun); STORPORTAPI PSCSI_REQUEST_BLOCK NTAPI StorPortGetSrb( - IN PVOID DeviceExtension, - IN UCHAR PathId, - IN UCHAR TargetId, - IN UCHAR Lun, - IN LONG QueueTag); + IN PVOID DeviceExtension, + IN UCHAR PathId, + IN UCHAR TargetId, + IN UCHAR Lun, + IN LONG QueueTag); STORPORTAPI STOR_PHYSICAL_ADDRESS NTAPI StorPortGetPhysicalAddress( - IN PVOID HwDeviceExtension, - IN PSCSI_REQUEST_BLOCK Srb, - IN PVOID VirtualAddress, - OUT ULONG *Length); + IN PVOID HwDeviceExtension, + IN PSCSI_REQUEST_BLOCK Srb, + IN PVOID VirtualAddress, + OUT ULONG *Length); STORPORTAPI PVOID NTAPI StorPortGetVirtualAddress( - IN PVOID HwDeviceExtension, - IN STOR_PHYSICAL_ADDRESS PhysicalAddress); + IN PVOID HwDeviceExtension, + IN STOR_PHYSICAL_ADDRESS PhysicalAddress); STORPORTAPI PVOID @@ -171,238 +169,238 @@ STORPORTAPI VOID __cdecl StorPortNotification( - IN SCSI_NOTIFICATION_TYPE NotificationType, - IN PVOID HwDeviceExtension, + IN SCSI_NOTIFICATION_TYPE NotificationType, + IN PVOID HwDeviceExtension, IN ...); STORPORTAPI VOID NTAPI StorPortLogError( - IN PVOID HwDeviceExtension, - IN PSCSI_REQUEST_BLOCK Srb OPTIONAL, - IN UCHAR PathId, - IN UCHAR TargetId, - IN UCHAR Lun, - IN ULONG ErrorCode, - IN ULONG UniqueId); + IN PVOID HwDeviceExtension, + IN PSCSI_REQUEST_BLOCK Srb OPTIONAL, + IN UCHAR PathId, + IN UCHAR TargetId, + IN UCHAR Lun, + IN ULONG ErrorCode, + IN ULONG UniqueId); STORPORTAPI VOID NTAPI StorPortCompleteRequest( - IN PVOID HwDeviceExtension, - IN UCHAR PathId, - IN UCHAR TargetId, - IN UCHAR Lun, - IN UCHAR SrbStatus); + IN PVOID HwDeviceExtension, + IN UCHAR PathId, + IN UCHAR TargetId, + IN UCHAR Lun, + IN UCHAR SrbStatus); STORPORTAPI VOID NTAPI StorPortMoveMemory( - IN PVOID WriteBuffer, - IN PVOID ReadBuffer, - IN ULONG Length); + IN PVOID WriteBuffer, + IN PVOID ReadBuffer, + IN ULONG Length); STORPORTAPI VOID NTAPI StorPortStallExecution( - IN ULONG Delay); + IN ULONG Delay); STORPORTAPI STOR_PHYSICAL_ADDRESS NTAPI StorPortConvertUlong64ToPhysicalAddress( - IN ULONG64 UlongAddress); + IN ULONG64 UlongAddress); STORPORTAPI ULONG64 NTAPI StorPortConvertPhysicalAddressToUlong64( - IN STOR_PHYSICAL_ADDRESS Address); + IN STOR_PHYSICAL_ADDRESS Address); STORPORTAPI BOOLEAN NTAPI StorPortValidateRange( - IN PVOID HwDeviceExtension, - IN INTERFACE_TYPE BusType, - IN ULONG SystemIoBusNumber, - IN STOR_PHYSICAL_ADDRESS IoAddress, - IN ULONG NumberOfBytes, - IN BOOLEAN InIoSpace); + IN PVOID HwDeviceExtension, + IN INTERFACE_TYPE BusType, + IN ULONG SystemIoBusNumber, + IN STOR_PHYSICAL_ADDRESS IoAddress, + IN ULONG NumberOfBytes, + IN BOOLEAN InIoSpace); STORPORTAPI VOID __cdecl StorPortDebugPrint( - IN ULONG DebugPrintLevel, - IN PCCHAR DebugMessage, + IN ULONG DebugPrintLevel, + IN PCCHAR DebugMessage, IN ...); STORPORTAPI UCHAR NTAPI StorPortReadPortUchar( - IN PUCHAR Port); + IN PUCHAR Port); STORPORTAPI ULONG NTAPI StorPortReadPortUlong( - IN PULONG Port); + IN PULONG Port); STORPORTAPI USHORT NTAPI StorPortReadPortUshort( - IN PUSHORT Port); + IN PUSHORT Port); STORPORTAPI UCHAR NTAPI StorPortReadRegisterUchar( - IN PUCHAR Register); + IN PUCHAR Register); STORPORTAPI ULONG NTAPI StorPortReadRegisterUlong( - IN PULONG Register); + IN PULONG Register); STORPORTAPI USHORT NTAPI StorPortReadRegisterUshort( - IN PUSHORT Register); + IN PUSHORT Register); STORPORTAPI VOID NTAPI StorPortWritePortUchar( - IN PUCHAR Port, - IN UCHAR Value); + IN PUCHAR Port, + IN UCHAR Value); STORPORTAPI VOID NTAPI StorPortWritePortUlong( - IN PULONG Port, - IN ULONG Value); + IN PULONG Port, + IN ULONG Value); STORPORTAPI VOID NTAPI StorPortWritePortUshort( - IN PUSHORT Port, - IN USHORT Value); + IN PUSHORT Port, + IN USHORT Value); STORPORTAPI VOID NTAPI StorPortWriteRegisterUchar( - IN PUCHAR Port, - IN UCHAR Value); + IN PUCHAR Port, + IN UCHAR Value); STORPORTAPI VOID NTAPI StorPortWriteRegisterUlong( - IN PULONG Port, - IN ULONG Value); + IN PULONG Port, + IN ULONG Value); STORPORTAPI VOID NTAPI StorPortWriteRegisterUshort( - IN PUSHORT Port, - IN USHORT Value); + IN PUSHORT Port, + IN USHORT Value); STORPORTAPI BOOLEAN NTAPI StorPortPauseDevice( - IN PVOID HwDeviceExtension, - IN UCHAR PathId, - IN UCHAR TargetId, - IN UCHAR Lun, - IN ULONG TimeOut); + IN PVOID HwDeviceExtension, + IN UCHAR PathId, + IN UCHAR TargetId, + IN UCHAR Lun, + IN ULONG TimeOut); STORPORTAPI BOOLEAN NTAPI StorPortResumeDevice( - IN PVOID HwDeviceExtension, - IN UCHAR PathId, - IN UCHAR TargetId, - IN UCHAR Lun); + IN PVOID HwDeviceExtension, + IN UCHAR PathId, + IN UCHAR TargetId, + IN UCHAR Lun); STORPORTAPI BOOLEAN NTAPI StorPortPause( - IN PVOID HwDeviceExtension, - IN ULONG TimeOut); + IN PVOID HwDeviceExtension, + IN ULONG TimeOut); STORPORTAPI BOOLEAN NTAPI StorPortResume( - IN PVOID HwDeviceExtension); + IN PVOID HwDeviceExtension); STORPORTAPI BOOLEAN NTAPI StorPortDeviceBusy( - IN PVOID HwDeviceExtension, - IN UCHAR PathId, - IN UCHAR TargetId, - IN UCHAR Lun, - IN ULONG RequestsToComplete); + IN PVOID HwDeviceExtension, + IN UCHAR PathId, + IN UCHAR TargetId, + IN UCHAR Lun, + IN ULONG RequestsToComplete); STORPORTAPI BOOLEAN NTAPI StorPortDeviceReady( - IN PVOID HwDeviceExtension, - IN UCHAR PathId, - IN UCHAR TargetId, - IN UCHAR Lun); + IN PVOID HwDeviceExtension, + IN UCHAR PathId, + IN UCHAR TargetId, + IN UCHAR Lun); STORPORTAPI BOOLEAN NTAPI StorPortBusy( - IN PVOID HwDeviceExtension, - IN ULONG RequestsToComplete); + IN PVOID HwDeviceExtension, + IN ULONG RequestsToComplete); STORPORTAPI BOOLEAN NTAPI StorPortReady( - IN PVOID HwDeviceExtension); + IN PVOID HwDeviceExtension); STORPORTAPI PSTOR_SCATTER_GATHER_LIST NTAPI StorPortGetScatterGatherList( - IN PVOID DeviceExtension, - IN PSCSI_REQUEST_BLOCK Srb); + IN PVOID DeviceExtension, + IN PSCSI_REQUEST_BLOCK Srb); typedef BOOLEAN (NTAPI *PSTOR_SYNCHRONIZED_ACCESS)( - IN PVOID HwDeviceExtension, - IN PVOID Context); + IN PVOID HwDeviceExtension, + IN PVOID Context); STORPORTAPI VOID NTAPI StorPortSynchronizeAccess( - IN PVOID HwDeviceExtension, - IN PSTOR_SYNCHRONIZED_ACCESS SynchronizedAccessRoutine, - IN PVOID Context); + IN PVOID HwDeviceExtension, + IN PSTOR_SYNCHRONIZED_ACCESS SynchronizedAccessRoutine, + IN PVOID Context); #if DBG #define DebugPrint(x) StorPortDebugPrint x diff --git a/include/ddk/strmini.h b/include/ddk/strmini.h index f0a72f52ac3..ffd3c771bb5 100644 --- a/include/ddk/strmini.h +++ b/include/ddk/strmini.h @@ -5,38 +5,27 @@ #include #include -/* Helper macro to enable gcc's extension. */ -#ifndef __GNU_EXTENSION -#ifdef __GNUC__ -#define __GNU_EXTENSION __extension__ -#else -#define __GNU_EXTENSION -#endif -#endif - #define STREAMAPI __stdcall #define STREAM_SYSTEM_TIME_MASK ((STREAM_SYSTEM_TIME)0x00000001FFFFFFFF) -typedef enum -{ - DebugLevelFatal = 0, - DebugLevelError, - DebugLevelWarning, - DebugLevelInfo, - DebugLevelTrace, - DebugLevelVerbose, - DebugLevelMaximum -}STREAM_DEBUG_LEVEL; - +typedef enum { + DebugLevelFatal = 0, + DebugLevelError, + DebugLevelWarning, + DebugLevelInfo, + DebugLevelTrace, + DebugLevelVerbose, + DebugLevelMaximum +} STREAM_DEBUG_LEVEL; #if DBG #define DebugPrint(x) StreamClassDebugPrint x #define DEBUG_BREAKPOINT() DbgBreakPoint() #define DEBUG_ASSERT(exp) \ - if ( !(exp) ) { \ - StreamClassDebugAssert( __FILE__, __LINE__, #exp, exp); \ - } + if ( !(exp) ) { \ + StreamClassDebugAssert( __FILE__, __LINE__, #exp, exp); \ + } #else #define DebugPrint(x) @@ -49,538 +38,484 @@ typedef PHYSICAL_ADDRESS STREAM_PHYSICAL_ADDRESS, *PSTREAM_PHYSICAL_ADDRESS; __GNU_EXTENSION typedef unsigned __int64 STREAM_SYSTEM_TIME, *PSTREAM_SYSTEM_TIME; __GNU_EXTENSION typedef unsigned __int64 STREAM_TIMESTAMP, *PSTREAM_TIMESTAMP; -typedef enum -{ - TIME_GET_STREAM_TIME, - TIME_READ_ONBOARD_CLOCK, - TIME_SET_ONBOARD_CLOCK -}TIME_FUNCTION; +typedef enum { + TIME_GET_STREAM_TIME, + TIME_READ_ONBOARD_CLOCK, + TIME_SET_ONBOARD_CLOCK +} TIME_FUNCTION; -typedef struct _HW_TIME_CONTEXT -{ - struct _HW_DEVICE_EXTENSION *HwDeviceExtension; - struct _HW_STREAM_OBJECT *HwStreamObject; - TIME_FUNCTION Function; - ULONGLONG Time; - ULONGLONG SystemTime; -}HW_TIME_CONTEXT, *PHW_TIME_CONTEXT; +typedef struct _HW_TIME_CONTEXT { + struct _HW_DEVICE_EXTENSION *HwDeviceExtension; + struct _HW_STREAM_OBJECT *HwStreamObject; + TIME_FUNCTION Function; + ULONGLONG Time; + ULONGLONG SystemTime; +} HW_TIME_CONTEXT, *PHW_TIME_CONTEXT; -typedef struct _HW_EVENT_DESCRIPTOR -{ - BOOLEAN Enable; - PKSEVENT_ENTRY EventEntry; - PKSEVENTDATA EventData; - __GNU_EXTENSION union - { - struct _HW_STREAM_OBJECT * StreamObject; - struct _HW_DEVICE_EXTENSION *DeviceExtension; - }; - ULONG EnableEventSetIndex; - PVOID HwInstanceExtension; - ULONG Reserved; +typedef struct _HW_EVENT_DESCRIPTOR { + BOOLEAN Enable; + PKSEVENT_ENTRY EventEntry; + PKSEVENTDATA EventData; + __GNU_EXTENSION union { + struct _HW_STREAM_OBJECT * StreamObject; + struct _HW_DEVICE_EXTENSION *DeviceExtension; + }; + ULONG EnableEventSetIndex; + PVOID HwInstanceExtension; + ULONG Reserved; } HW_EVENT_DESCRIPTOR, *PHW_EVENT_DESCRIPTOR; struct _HW_STREAM_REQUEST_BLOCK; -typedef VOID (STREAMAPI * PHW_RECEIVE_STREAM_DATA_SRB) (IN struct _HW_STREAM_REQUEST_BLOCK * SRB); -typedef VOID (STREAMAPI * PHW_RECEIVE_STREAM_CONTROL_SRB) (IN struct _HW_STREAM_REQUEST_BLOCK * SRB); -typedef NTSTATUS (STREAMAPI * PHW_EVENT_ROUTINE) (IN PHW_EVENT_DESCRIPTOR EventDescriptor); -typedef VOID (STREAMAPI * PHW_CLOCK_FUNCTION) (IN PHW_TIME_CONTEXT HwTimeContext); +typedef VOID (STREAMAPI *PHW_RECEIVE_STREAM_DATA_SRB) (IN struct _HW_STREAM_REQUEST_BLOCK *SRB); +typedef VOID (STREAMAPI *PHW_RECEIVE_STREAM_CONTROL_SRB) (IN struct _HW_STREAM_REQUEST_BLOCK *SRB); +typedef NTSTATUS (STREAMAPI *PHW_EVENT_ROUTINE) (IN PHW_EVENT_DESCRIPTOR EventDescriptor); +typedef VOID (STREAMAPI *PHW_CLOCK_FUNCTION) (IN PHW_TIME_CONTEXT HwTimeContext); -typedef struct _HW_CLOCK_OBJECT -{ - PHW_CLOCK_FUNCTION HwClockFunction; - ULONG ClockSupportFlags; - ULONG Reserved[2]; +typedef struct _HW_CLOCK_OBJECT { + PHW_CLOCK_FUNCTION HwClockFunction; + ULONG ClockSupportFlags; + ULONG Reserved[2]; } HW_CLOCK_OBJECT, *PHW_CLOCK_OBJECT; -#define CLOCK_SUPPORT_CAN_SET_ONBOARD_CLOCK 0x1 +#define CLOCK_SUPPORT_CAN_SET_ONBOARD_CLOCK 0x1 #define CLOCK_SUPPORT_CAN_READ_ONBOARD_CLOCK 0x2 #define CLOCK_SUPPORT_CAN_RETURN_STREAM_TIME 0x4 -typedef struct _HW_STREAM_OBJECT -{ - ULONG SizeOfThisPacket; - ULONG StreamNumber; - PVOID HwStreamExtension; - PHW_RECEIVE_STREAM_DATA_SRB ReceiveDataPacket; - PHW_RECEIVE_STREAM_CONTROL_SRB ReceiveControlPacket; - HW_CLOCK_OBJECT HwClockObject; - BOOLEAN Dma; - BOOLEAN Pio; - PVOID HwDeviceExtension; - ULONG StreamHeaderMediaSpecific; - ULONG StreamHeaderWorkspace; - BOOLEAN Allocator; - PHW_EVENT_ROUTINE HwEventRoutine; - ULONG Reserved[2]; +typedef struct _HW_STREAM_OBJECT { + ULONG SizeOfThisPacket; + ULONG StreamNumber; + PVOID HwStreamExtension; + PHW_RECEIVE_STREAM_DATA_SRB ReceiveDataPacket; + PHW_RECEIVE_STREAM_CONTROL_SRB ReceiveControlPacket; + HW_CLOCK_OBJECT HwClockObject; + BOOLEAN Dma; + BOOLEAN Pio; + PVOID HwDeviceExtension; + ULONG StreamHeaderMediaSpecific; + ULONG StreamHeaderWorkspace; + BOOLEAN Allocator; + PHW_EVENT_ROUTINE HwEventRoutine; + ULONG Reserved[2]; } HW_STREAM_OBJECT, *PHW_STREAM_OBJECT; -typedef struct _HW_STREAM_HEADER -{ - ULONG NumberOfStreams; - ULONG SizeOfHwStreamInformation; - ULONG NumDevPropArrayEntries; - PKSPROPERTY_SET DevicePropertiesArray; - ULONG NumDevEventArrayEntries; - PKSEVENT_SET DeviceEventsArray; - PKSTOPOLOGY Topology; - PHW_EVENT_ROUTINE DeviceEventRoutine; - LONG NumDevMethodArrayEntries; - PKSMETHOD_SET DeviceMethodsArray; -}HW_STREAM_HEADER, *PHW_STREAM_HEADER; +typedef struct _HW_STREAM_HEADER { + ULONG NumberOfStreams; + ULONG SizeOfHwStreamInformation; + ULONG NumDevPropArrayEntries; + PKSPROPERTY_SET DevicePropertiesArray; + ULONG NumDevEventArrayEntries; + PKSEVENT_SET DeviceEventsArray; + PKSTOPOLOGY Topology; + PHW_EVENT_ROUTINE DeviceEventRoutine; + LONG NumDevMethodArrayEntries; + PKSMETHOD_SET DeviceMethodsArray; +} HW_STREAM_HEADER, *PHW_STREAM_HEADER; -typedef struct _HW_STREAM_INFORMATION -{ - ULONG NumberOfPossibleInstances; - KSPIN_DATAFLOW DataFlow; - BOOLEAN DataAccessible; - ULONG NumberOfFormatArrayEntries; - PKSDATAFORMAT* StreamFormatsArray; - PVOID ClassReserved[4]; - ULONG NumStreamPropArrayEntries; - PKSPROPERTY_SET StreamPropertiesArray; - ULONG NumStreamEventArrayEntries; - PKSEVENT_SET StreamEventsArray; - GUID* Category; - GUID* Name; - ULONG MediumsCount; - const KSPIN_MEDIUM* Mediums; - BOOLEAN BridgeStream; - ULONG Reserved[2]; -}HW_STREAM_INFORMATION, *PHW_STREAM_INFORMATION; +typedef struct _HW_STREAM_INFORMATION { + ULONG NumberOfPossibleInstances; + KSPIN_DATAFLOW DataFlow; + BOOLEAN DataAccessible; + ULONG NumberOfFormatArrayEntries; + PKSDATAFORMAT* StreamFormatsArray; + PVOID ClassReserved[4]; + ULONG NumStreamPropArrayEntries; + PKSPROPERTY_SET StreamPropertiesArray; + ULONG NumStreamEventArrayEntries; + PKSEVENT_SET StreamEventsArray; + GUID* Category; + GUID* Name; + ULONG MediumsCount; + const KSPIN_MEDIUM* Mediums; + BOOLEAN BridgeStream; + ULONG Reserved[2]; +} HW_STREAM_INFORMATION, *PHW_STREAM_INFORMATION; - -typedef struct _HW_STREAM_DESCRIPTOR -{ - HW_STREAM_HEADER StreamHeader; - HW_STREAM_INFORMATION StreamInfo; +typedef struct _HW_STREAM_DESCRIPTOR { + HW_STREAM_HEADER StreamHeader; + HW_STREAM_INFORMATION StreamInfo; } HW_STREAM_DESCRIPTOR, *PHW_STREAM_DESCRIPTOR; -typedef struct _STREAM_TIME_REFERENCE -{ - STREAM_TIMESTAMP CurrentOnboardClockValue; - LARGE_INTEGER OnboardClockFrequency; - LARGE_INTEGER CurrentSystemTime; - ULONG Reserved[2]; -}STREAM_TIME_REFERENCE, *PSTREAM_TIME_REFERENCE; +typedef struct _STREAM_TIME_REFERENCE { + STREAM_TIMESTAMP CurrentOnboardClockValue; + LARGE_INTEGER OnboardClockFrequency; + LARGE_INTEGER CurrentSystemTime; + ULONG Reserved[2]; +} STREAM_TIME_REFERENCE, *PSTREAM_TIME_REFERENCE; -typedef struct _STREAM_DATA_INTERSECT_INFO -{ - ULONG StreamNumber; - PKSDATARANGE DataRange; - PVOID DataFormatBuffer; - ULONG SizeOfDataFormatBuffer; +typedef struct _STREAM_DATA_INTERSECT_INFO { + ULONG StreamNumber; + PKSDATARANGE DataRange; + PVOID DataFormatBuffer; + ULONG SizeOfDataFormatBuffer; +} STREAM_DATA_INTERSECT_INFO, *PSTREAM_DATA_INTERSECT_INFO; -}STREAM_DATA_INTERSECT_INFO, *PSTREAM_DATA_INTERSECT_INFO; +typedef struct _STREAM_PROPERTY_DESCRIPTOR { + PKSPROPERTY Property; + ULONG PropertySetID; + PVOID PropertyInfo; + ULONG PropertyInputSize; + ULONG PropertyOutputSize; +} STREAM_PROPERTY_DESCRIPTOR, *PSTREAM_PROPERTY_DESCRIPTOR; -typedef struct _STREAM_PROPERTY_DESCRIPTOR -{ - PKSPROPERTY Property; - ULONG PropertySetID; - PVOID PropertyInfo; - ULONG PropertyInputSize; - ULONG PropertyOutputSize; -}STREAM_PROPERTY_DESCRIPTOR, *PSTREAM_PROPERTY_DESCRIPTOR; - -typedef struct _STREAM_METHOD_DESCRIPTOR -{ - ULONG MethodSetID; - PKSMETHOD Method; - PVOID MethodInfo; - LONG MethodInputSize; - LONG MethodOutputSize; +typedef struct _STREAM_METHOD_DESCRIPTOR { + ULONG MethodSetID; + PKSMETHOD Method; + PVOID MethodInfo; + LONG MethodInputSize; + LONG MethodOutputSize; } STREAM_METHOD_DESCRIPTOR, *PSTREAM_METHOD_DESCRIPTOR; #define STREAM_REQUEST_BLOCK_SIZE sizeof(STREAM_REQUEST_BLOCK) -typedef enum _SRB_COMMAND -{ - SRB_READ_DATA, - SRB_WRITE_DATA, - SRB_GET_STREAM_STATE, - SRB_SET_STREAM_STATE, - SRB_SET_STREAM_PROPERTY, - SRB_GET_STREAM_PROPERTY, - SRB_OPEN_MASTER_CLOCK, +typedef enum _SRB_COMMAND { + SRB_READ_DATA, + SRB_WRITE_DATA, + SRB_GET_STREAM_STATE, + SRB_SET_STREAM_STATE, + SRB_SET_STREAM_PROPERTY, + SRB_GET_STREAM_PROPERTY, + SRB_OPEN_MASTER_CLOCK, - SRB_INDICATE_MASTER_CLOCK, - SRB_UNKNOWN_STREAM_COMMAND, - SRB_SET_STREAM_RATE, - SRB_PROPOSE_DATA_FORMAT, - SRB_CLOSE_MASTER_CLOCK, - SRB_PROPOSE_STREAM_RATE, - SRB_SET_DATA_FORMAT, - SRB_GET_DATA_FORMAT, - SRB_BEGIN_FLUSH, - SRB_END_FLUSH, + SRB_INDICATE_MASTER_CLOCK, + SRB_UNKNOWN_STREAM_COMMAND, + SRB_SET_STREAM_RATE, + SRB_PROPOSE_DATA_FORMAT, + SRB_CLOSE_MASTER_CLOCK, + SRB_PROPOSE_STREAM_RATE, + SRB_SET_DATA_FORMAT, + SRB_GET_DATA_FORMAT, + SRB_BEGIN_FLUSH, + SRB_END_FLUSH, - SRB_GET_STREAM_INFO = 0x100, - SRB_OPEN_STREAM, - SRB_CLOSE_STREAM, - SRB_OPEN_DEVICE_INSTANCE, - SRB_CLOSE_DEVICE_INSTANCE, - SRB_GET_DEVICE_PROPERTY, - SRB_SET_DEVICE_PROPERTY, - SRB_INITIALIZE_DEVICE, - SRB_CHANGE_POWER_STATE, - SRB_UNINITIALIZE_DEVICE, - SRB_UNKNOWN_DEVICE_COMMAND, - SRB_PAGING_OUT_DRIVER, - SRB_GET_DATA_INTERSECTION, - SRB_INITIALIZATION_COMPLETE, - SRB_SURPRISE_REMOVAL + SRB_GET_STREAM_INFO = 0x100, + SRB_OPEN_STREAM, + SRB_CLOSE_STREAM, + SRB_OPEN_DEVICE_INSTANCE, + SRB_CLOSE_DEVICE_INSTANCE, + SRB_GET_DEVICE_PROPERTY, + SRB_SET_DEVICE_PROPERTY, + SRB_INITIALIZE_DEVICE, + SRB_CHANGE_POWER_STATE, + SRB_UNINITIALIZE_DEVICE, + SRB_UNKNOWN_DEVICE_COMMAND, + SRB_PAGING_OUT_DRIVER, + SRB_GET_DATA_INTERSECTION, + SRB_INITIALIZATION_COMPLETE, + SRB_SURPRISE_REMOVAL #if (NTDDI_VERSION >= NTDDI_WINXP) - - ,SRB_DEVICE_METHOD - ,SRB_STREAM_METHOD - + ,SRB_DEVICE_METHOD + ,SRB_STREAM_METHOD #if ( (NTDDI_VERSION >= NTDDI_WINXPSP2) && (NTDDI_VERSION < NTDDI_WS03) ) || (NTDDI_VERSION >= NTDDI_WS03SP1) - - ,SRB_NOTIFY_IDLE_STATE - + ,SRB_NOTIFY_IDLE_STATE #endif - #endif +} SRB_COMMAND; -}SRB_COMMAND; - -typedef struct -{ - PHYSICAL_ADDRESS PhysicalAddress; - ULONG Length; +typedef struct { + PHYSICAL_ADDRESS PhysicalAddress; + ULONG Length; } KSSCATTER_GATHER, *PKSSCATTER_GATHER; -typedef struct _HW_STREAM_REQUEST_BLOCK -{ - ULONG SizeOfThisPacket; - SRB_COMMAND Command; - NTSTATUS Status; - PHW_STREAM_OBJECT StreamObject; - PVOID HwDeviceExtension; - PVOID SRBExtension; +typedef struct _HW_STREAM_REQUEST_BLOCK { + ULONG SizeOfThisPacket; + SRB_COMMAND Command; + NTSTATUS Status; + PHW_STREAM_OBJECT StreamObject; + PVOID HwDeviceExtension; + PVOID SRBExtension; - union _CommandData - { - PKSSTREAM_HEADER DataBufferArray; - PHW_STREAM_DESCRIPTOR StreamBuffer; - KSSTATE StreamState; - PSTREAM_TIME_REFERENCE TimeReference; - PSTREAM_PROPERTY_DESCRIPTOR PropertyInfo; - PKSDATAFORMAT OpenFormat; - struct _PORT_CONFIGURATION_INFORMATION *ConfigInfo; - HANDLE MasterClockHandle; - DEVICE_POWER_STATE DeviceState; - PSTREAM_DATA_INTERSECT_INFO IntersectInfo; + union _CommandData { + PKSSTREAM_HEADER DataBufferArray; + PHW_STREAM_DESCRIPTOR StreamBuffer; + KSSTATE StreamState; + PSTREAM_TIME_REFERENCE TimeReference; + PSTREAM_PROPERTY_DESCRIPTOR PropertyInfo; + PKSDATAFORMAT OpenFormat; + struct _PORT_CONFIGURATION_INFORMATION *ConfigInfo; + HANDLE MasterClockHandle; + DEVICE_POWER_STATE DeviceState; + PSTREAM_DATA_INTERSECT_INFO IntersectInfo; #if (NTDDI_VERSION >= NTDDI_WINXP) - PVOID MethodInfo; - LONG FilterTypeIndex; + PVOID MethodInfo; + LONG FilterTypeIndex; #if ( (NTDDI_VERSION >= NTDDI_WINXPSP2) && (NTDDI_VERSION < NTDDI_WS03) ) || (NTDDI_VERSION >= NTDDI_WS03SP1) - BOOLEAN Idle; + BOOLEAN Idle; #endif #endif + } CommandData; - }CommandData; + ULONG NumberOfBuffers; + ULONG TimeoutCounter; + ULONG TimeoutOriginal; + struct _HW_STREAM_REQUEST_BLOCK *NextSRB; - ULONG NumberOfBuffers; - ULONG TimeoutCounter; - ULONG TimeoutOriginal; - struct _HW_STREAM_REQUEST_BLOCK *NextSRB; + PIRP Irp; + ULONG Flags; + PVOID HwInstanceExtension; - PIRP Irp; - ULONG Flags; - PVOID HwInstanceExtension; + __GNU_EXTENSION union { + ULONG NumberOfBytesToTransfer; + ULONG ActualBytesTransferred; + }; - __GNU_EXTENSION union - { - ULONG NumberOfBytesToTransfer; - ULONG ActualBytesTransferred; - }; - - PKSSCATTER_GATHER ScatterGatherBuffer; - ULONG NumberOfPhysicalPages; - ULONG NumberOfScatterGatherElements; - ULONG Reserved[1]; - -}HW_STREAM_REQUEST_BLOCK, *PHW_STREAM_REQUEST_BLOCK; + PKSSCATTER_GATHER ScatterGatherBuffer; + ULONG NumberOfPhysicalPages; + ULONG NumberOfScatterGatherElements; + ULONG Reserved[1]; +} HW_STREAM_REQUEST_BLOCK, *PHW_STREAM_REQUEST_BLOCK; #define SRB_HW_FLAGS_DATA_TRANSFER 0x01 #define SRB_HW_FLAGS_STREAM_REQUEST 0x2 -typedef enum -{ - PerRequestExtension, - DmaBuffer, - SRBDataBuffer -}STREAM_BUFFER_TYPE; +typedef enum { + PerRequestExtension, + DmaBuffer, + SRBDataBuffer +} STREAM_BUFFER_TYPE; -typedef struct _ACCESS_RANGE -{ - STREAM_PHYSICAL_ADDRESS RangeStart; - ULONG RangeLength; - BOOLEAN RangeInMemory; - ULONG Reserved; -}ACCESS_RANGE, *PACCESS_RANGE; +typedef struct _ACCESS_RANGE { + STREAM_PHYSICAL_ADDRESS RangeStart; + ULONG RangeLength; + BOOLEAN RangeInMemory; + ULONG Reserved; +} ACCESS_RANGE, *PACCESS_RANGE; -typedef struct _PORT_CONFIGURATION_INFORMATION -{ - ULONG SizeOfThisPacket; - PVOID HwDeviceExtension; - PDEVICE_OBJECT ClassDeviceObject; - PDEVICE_OBJECT PhysicalDeviceObject; - ULONG SystemIoBusNumber; - INTERFACE_TYPE AdapterInterfaceType; - ULONG BusInterruptLevel; - ULONG BusInterruptVector; - KINTERRUPT_MODE InterruptMode; - ULONG DmaChannel; - ULONG NumberOfAccessRanges; - PACCESS_RANGE AccessRanges; - ULONG StreamDescriptorSize; - PIRP Irp; - PKINTERRUPT InterruptObject; - PADAPTER_OBJECT DmaAdapterObject; - PDEVICE_OBJECT RealPhysicalDeviceObject; - ULONG Reserved[1]; -}PORT_CONFIGURATION_INFORMATION, *PPORT_CONFIGURATION_INFORMATION; +typedef struct _PORT_CONFIGURATION_INFORMATION { + ULONG SizeOfThisPacket; + PVOID HwDeviceExtension; + PDEVICE_OBJECT ClassDeviceObject; + PDEVICE_OBJECT PhysicalDeviceObject; + ULONG SystemIoBusNumber; + INTERFACE_TYPE AdapterInterfaceType; + ULONG BusInterruptLevel; + ULONG BusInterruptVector; + KINTERRUPT_MODE InterruptMode; + ULONG DmaChannel; + ULONG NumberOfAccessRanges; + PACCESS_RANGE AccessRanges; + ULONG StreamDescriptorSize; + PIRP Irp; + PKINTERRUPT InterruptObject; + PADAPTER_OBJECT DmaAdapterObject; + PDEVICE_OBJECT RealPhysicalDeviceObject; + ULONG Reserved[1]; +} PORT_CONFIGURATION_INFORMATION, *PPORT_CONFIGURATION_INFORMATION; -typedef VOID (STREAMAPI * PHW_RECEIVE_DEVICE_SRB) (IN PHW_STREAM_REQUEST_BLOCK SRB); -typedef VOID (STREAMAPI * PHW_CANCEL_SRB) (IN PHW_STREAM_REQUEST_BLOCK SRB); -typedef VOID (STREAMAPI * PHW_REQUEST_TIMEOUT_HANDLER) (IN PHW_STREAM_REQUEST_BLOCK SRB); -typedef BOOLEAN (STREAMAPI * PHW_INTERRUPT) (IN PVOID DeviceExtension); -typedef VOID (STREAMAPI * PHW_TIMER_ROUTINE) (IN PVOID Context); -typedef VOID (STREAMAPI * PHW_PRIORITY_ROUTINE) (IN PVOID Context); -typedef VOID (STREAMAPI * PHW_QUERY_CLOCK_ROUTINE) (IN PHW_TIME_CONTEXT TimeContext); -typedef BOOLEAN (STREAMAPI * PHW_RESET_ADAPTER) (IN PVOID DeviceExtension); +typedef VOID (STREAMAPI *PHW_RECEIVE_DEVICE_SRB) (IN PHW_STREAM_REQUEST_BLOCK SRB); +typedef VOID (STREAMAPI *PHW_CANCEL_SRB) (IN PHW_STREAM_REQUEST_BLOCK SRB); +typedef VOID (STREAMAPI *PHW_REQUEST_TIMEOUT_HANDLER) (IN PHW_STREAM_REQUEST_BLOCK SRB); +typedef BOOLEAN (STREAMAPI *PHW_INTERRUPT) (IN PVOID DeviceExtension); +typedef VOID (STREAMAPI *PHW_TIMER_ROUTINE) (IN PVOID Context); +typedef VOID (STREAMAPI *PHW_PRIORITY_ROUTINE) (IN PVOID Context); +typedef VOID (STREAMAPI *PHW_QUERY_CLOCK_ROUTINE) (IN PHW_TIME_CONTEXT TimeContext); +typedef BOOLEAN (STREAMAPI *PHW_RESET_ADAPTER) (IN PVOID DeviceExtension); -typedef enum _STREAM_MINIDRIVER_STREAM_NOTIFICATION_TYPE -{ - ReadyForNextStreamDataRequest, - ReadyForNextStreamControlRequest, - HardwareStarved, - StreamRequestComplete, - SignalMultipleStreamEvents, - SignalStreamEvent, - DeleteStreamEvent, - StreamNotificationMaximum -}STREAM_MINIDRIVER_STREAM_NOTIFICATION_TYPE, *PSTREAM_MINIDRIVER_STREAM_NOTIFICATION_TYPE; +typedef enum _STREAM_MINIDRIVER_STREAM_NOTIFICATION_TYPE { + ReadyForNextStreamDataRequest, + ReadyForNextStreamControlRequest, + HardwareStarved, + StreamRequestComplete, + SignalMultipleStreamEvents, + SignalStreamEvent, + DeleteStreamEvent, + StreamNotificationMaximum +} STREAM_MINIDRIVER_STREAM_NOTIFICATION_TYPE, *PSTREAM_MINIDRIVER_STREAM_NOTIFICATION_TYPE; -typedef enum _STREAM_MINIDRIVER_DEVICE_NOTIFICATION_TYPE -{ - ReadyForNextDeviceRequest, - DeviceRequestComplete, - SignalMultipleDeviceEvents, - SignalDeviceEvent, - DeleteDeviceEvent, +typedef enum _STREAM_MINIDRIVER_DEVICE_NOTIFICATION_TYPE { + ReadyForNextDeviceRequest, + DeviceRequestComplete, + SignalMultipleDeviceEvents, + SignalDeviceEvent, + DeleteDeviceEvent, #if (NTDDI_VERSION >= NTDDI_WINXP) - SignalMultipleDeviceInstanceEvents, + SignalMultipleDeviceInstanceEvents, #endif - DeviceNotificationMaximum + DeviceNotificationMaximum } STREAM_MINIDRIVER_DEVICE_NOTIFICATION_TYPE, *PSTREAM_MINIDRIVER_DEVICE_NOTIFICATION_TYPE; #define STREAM_CLASS_VERSION_20 0x0200 typedef struct _HW_INITIALIZATION_DATA { #if (NTDDI_VERSION >= NTDDI_WINXP) - __GNU_EXTENSION union - { - ULONG HwInitializationDataSize; - __GNU_EXTENSION struct - { - USHORT SizeOfThisPacket; - USHORT StreamClassVersion; - }; + __GNU_EXTENSION union { + ULONG HwInitializationDataSize; + __GNU_EXTENSION struct { + USHORT SizeOfThisPacket; + USHORT StreamClassVersion; }; + }; #else - ULONG HwInitializationDataSize; -#endif + ULONG HwInitializationDataSize; +#endif /* NTDDI_VERSION >= NTDDI_WINXP */ - PHW_INTERRUPT HwInterrupt; - PHW_RECEIVE_DEVICE_SRB HwReceivePacket; - PHW_CANCEL_SRB HwCancelPacket; - PHW_REQUEST_TIMEOUT_HANDLER HwRequestTimeoutHandler; - ULONG DeviceExtensionSize; - ULONG PerRequestExtensionSize; - ULONG PerStreamExtensionSize; - ULONG FilterInstanceExtensionSize; - BOOLEAN BusMasterDMA; - BOOLEAN Dma24BitAddresses; - ULONG BufferAlignment; - BOOLEAN TurnOffSynchronization; - ULONG DmaBufferSize; + PHW_INTERRUPT HwInterrupt; + PHW_RECEIVE_DEVICE_SRB HwReceivePacket; + PHW_CANCEL_SRB HwCancelPacket; + PHW_REQUEST_TIMEOUT_HANDLER HwRequestTimeoutHandler; + ULONG DeviceExtensionSize; + ULONG PerRequestExtensionSize; + ULONG PerStreamExtensionSize; + ULONG FilterInstanceExtensionSize; + BOOLEAN BusMasterDMA; + BOOLEAN Dma24BitAddresses; + ULONG BufferAlignment; + BOOLEAN TurnOffSynchronization; + ULONG DmaBufferSize; #if (NTDDI_VERSION >= NTDDI_WINXP) - ULONG NumNameExtensions; - PWCHAR *NameExtensionArray; + ULONG NumNameExtensions; + PWCHAR *NameExtensionArray; #else - ULONG Reserved[2]; + ULONG Reserved[2]; #endif } HW_INITIALIZATION_DATA, *PHW_INITIALIZATION_DATA; -typedef enum _STREAM_PRIORITY -{ - High, - Dispatch, - Low, - LowToHigh -}STREAM_PRIORITY, *PSTREAM_PRIORITY; +typedef enum _STREAM_PRIORITY { + High, + Dispatch, + Low, + LowToHigh +} STREAM_PRIORITY, *PSTREAM_PRIORITY; VOID StreamClassAbortOutstandingRequests( - IN PVOID HwDeviceExtension, - IN PHW_STREAM_OBJECT HwStreamObject, - IN NTSTATUS Status -); + IN PVOID HwDeviceExtension, + IN PHW_STREAM_OBJECT HwStreamObject, + IN NTSTATUS Status); VOID STREAMAPI StreamClassCallAtNewPriority( - IN PHW_STREAM_OBJECT StreamObject, - IN PVOID HwDeviceExtension, - IN STREAM_PRIORITY Priority, - IN PHW_PRIORITY_ROUTINE PriorityRoutine, - IN PVOID Context - ); - + IN PHW_STREAM_OBJECT StreamObject, + IN PVOID HwDeviceExtension, + IN STREAM_PRIORITY Priority, + IN PHW_PRIORITY_ROUTINE PriorityRoutine, + IN PVOID Context); + VOID STREAMAPI StreamClassCompleteRequestAndMarkQueueReady( - IN PHW_STREAM_REQUEST_BLOCK Srb -); + IN PHW_STREAM_REQUEST_BLOCK Srb); VOID STREAMAPI StreamClassDebugAssert( - IN PCHAR File, - IN ULONG Line, - IN PCHAR AssertText, - IN ULONG AssertValue -); + IN PCHAR File, + IN ULONG Line, + IN PCHAR AssertText, + IN ULONG AssertValue); VOID __cdecl StreamClassDebugPrint( - IN STREAM_DEBUG_LEVEL DebugPrintLevel, - IN PCCHAR DebugMessage, - ... -); + IN STREAM_DEBUG_LEVEL DebugPrintLevel, + IN PCCHAR DebugMessage, + ...); VOID __cdecl StreamClassDeviceNotification( - IN STREAM_MINIDRIVER_DEVICE_NOTIFICATION_TYPE NotificationType, - IN PVOID HwDeviceExtension, - IN PHW_STREAM_REQUEST_BLOCK pSrb, - IN PKSEVENT_ENTRY EventEntry, - IN GUID *EventSet, - IN ULONG EventId -); + IN STREAM_MINIDRIVER_DEVICE_NOTIFICATION_TYPE NotificationType, + IN PVOID HwDeviceExtension, + IN PHW_STREAM_REQUEST_BLOCK pSrb, + IN PKSEVENT_ENTRY EventEntry, + IN GUID *EventSet, + IN ULONG EventId); VOID STREAMAPI StreamClassFilterReenumerateStreams( - IN PVOID HwInstanceExtension, - IN ULONG StreamDescriptorSize -); + IN PVOID HwInstanceExtension, + IN ULONG StreamDescriptorSize); PVOID STREAMAPI StreamClassGetDmaBuffer( - IN PVOID HwDeviceExtension -); + IN PVOID HwDeviceExtension); PKSEVENT_ENTRY StreamClassGetNextEvent( - IN PVOID HwInstanceExtension_OR_HwDeviceExtension, - IN PHW_STREAM_OBJECT HwStreamObject, - IN GUID * EventGuid, - IN ULONG EventItem, - IN PKSEVENT_ENTRY CurrentEvent -); + IN PVOID HwInstanceExtension_OR_HwDeviceExtension, + IN PHW_STREAM_OBJECT HwStreamObject, + IN GUID * EventGuid, + IN ULONG EventItem, + IN PKSEVENT_ENTRY CurrentEvent); STREAM_PHYSICAL_ADDRESS STREAMAPI StreamClassGetPhysicalAddress( - IN PVOID HwDeviceExtension, - IN PHW_STREAM_REQUEST_BLOCK HwSRB, - IN PVOID VirtualAddress, - IN STREAM_BUFFER_TYPE Type, - IN ULONG * Length -); + IN PVOID HwDeviceExtension, + IN PHW_STREAM_REQUEST_BLOCK HwSRB, + IN PVOID VirtualAddress, + IN STREAM_BUFFER_TYPE Type, + IN ULONG *Length); VOID StreamClassQueryMasterClock( - IN PHW_STREAM_OBJECT HwStreamObject, - IN HANDLE MasterClockHandle, - IN TIME_FUNCTION TimeFunction, - IN PHW_QUERY_CLOCK_ROUTINE ClockCallbackRoutine -); + IN PHW_STREAM_OBJECT HwStreamObject, + IN HANDLE MasterClockHandle, + IN TIME_FUNCTION TimeFunction, + IN PHW_QUERY_CLOCK_ROUTINE ClockCallbackRoutine); VOID STREAMAPI StreamClassQueryMasterClockSync( - IN HANDLE MasterClockHandle, - IN PHW_TIME_CONTEXT TimeContext -); + IN HANDLE MasterClockHandle, + IN PHW_TIME_CONTEXT TimeContext); BOOLEAN STREAMAPI -StreamClassReadWriteConfig( - IN PVOID HwDeviceExtension, - IN BOOLEAN Read, - IN PVOID Buffer, - IN ULONG Offset, - IN ULONG Length -); +StreamClassReadWriteConfig( + IN PVOID HwDeviceExtension, + IN BOOLEAN Read, + IN PVOID Buffer, + IN ULONG Offset, + IN ULONG Length); VOID STREAMAPI StreamClassReenumerateStreams( - IN PVOID HwDeviceExtension, - IN ULONG StreamDescriptorSize -); + IN PVOID HwDeviceExtension, + IN ULONG StreamDescriptorSize); NTSTATUS STREAMAPI StreamClassRegisterAdapter( - IN PVOID Argument1, - IN PVOID Argument2, - IN PHW_INITIALIZATION_DATA HwInitializationData -); + IN PVOID Argument1, + IN PVOID Argument2, + IN PHW_INITIALIZATION_DATA HwInitializationData); #define StreamClassRegisterMinidriver StreamClassRegisterAdapter NTSTATUS -StreamClassRegisterFilterWithNoKSPins( - IN PDEVICE_OBJECT DeviceObject, - IN const GUID * InterfaceClassGUID, - IN ULONG PinCount, - IN BOOLEAN * PinDirection, - IN KSPIN_MEDIUM * MediumList, - IN GUID * CategoryList -); +StreamClassRegisterFilterWithNoKSPins( + IN PDEVICE_OBJECT DeviceObject, + IN const GUID *InterfaceClassGUID, + IN ULONG PinCount, + IN BOOLEAN *PinDirection, + IN KSPIN_MEDIUM *MediumList, + IN GUID *CategoryList); VOID STREAMAPI StreamClassScheduleTimer( - IN PHW_STREAM_OBJECT StreamObject, - IN PVOID HwDeviceExtension, - IN ULONG NumberOfMicroseconds, - IN PHW_TIMER_ROUTINE TimerRoutine, - IN PVOID Context -); + IN PHW_STREAM_OBJECT StreamObject, + IN PVOID HwDeviceExtension, + IN ULONG NumberOfMicroseconds, + IN PHW_TIMER_ROUTINE TimerRoutine, + IN PVOID Context); VOID __cdecl StreamClassStreamNotification( - IN STREAM_MINIDRIVER_STREAM_NOTIFICATION_TYPE NotificationType, - IN PHW_STREAM_OBJECT StreamObject, - IN ... -); + IN STREAM_MINIDRIVER_STREAM_NOTIFICATION_TYPE NotificationType, + IN PHW_STREAM_OBJECT StreamObject, + IN ...); -#endif +#endif /* _STREAM_H */ diff --git a/include/ddk/swenum.h b/include/ddk/swenum.h index 1ce3388f417..b6a82bed893 100644 --- a/include/ddk/swenum.h +++ b/include/ddk/swenum.h @@ -6,10 +6,9 @@ #define IOCTL_SWENUM_GET_BUS_ID CTL_CODE(FILE_DEVICE_BUS_EXTENDER, 0x002, METHOD_NEITHER, FILE_READ_ACCESS) typedef struct _SWENUM_INSTALL_INTERFACE { - GUID DeviceId; - GUID InterfaceId; - WCHAR ReferenceString[1]; - + GUID DeviceId; + GUID InterfaceId; + WCHAR ReferenceString[1]; } SWENUM_INSTALL_INTERFACE, *PSWENUM_INSTALL_INTERFACE; #if defined(_KS_) @@ -17,28 +16,24 @@ typedef struct _SWENUM_INSTALL_INTERFACE { #define BUSID_SoftwareDeviceEnumerator KSMEDIUMSETID_Standard #else #define STATIC_BUSID_SoftwareDeviceEnumerator \ - 0x4747B320L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 -#endif + 0x4747B320L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 +#endif /* _KS_ */ #if defined(_NTDDK_) - #if !defined(_KS_) - typedef VOID (NTAPI *PFNREFERENCEDEVICEOBJECT)(PVOID Context); typedef VOID (NTAPI *PFNDEREFERENCEDEVICEOBJECT)(PVOID Context); typedef NTSTATUS (NTAPI *PFNQUERYREFERENCESTRING)(PVOID Context, PWCHAR *String); - -#endif +#endif /* _KS_ */ #define BUS_INTERFACE_SWENUM_VERSION 0x100 -typedef struct _BUS_INTERFACE_SWENUM -{ - INTERFACE Interface; - PFNREFERENCEDEVICEOBJECT ReferenceDeviceObject; - PFNDEREFERENCEDEVICEOBJECT DereferenceDeviceObject; - PFNQUERYREFERENCESTRING QueryReferenceString; +typedef struct _BUS_INTERFACE_SWENUM { + INTERFACE Interface; + PFNREFERENCEDEVICEOBJECT ReferenceDeviceObject; + PFNDEREFERENCEDEVICEOBJECT DereferenceDeviceObject; + PFNQUERYREFERENCESTRING QueryReferenceString; } BUS_INTERFACE_SWENUM, *PBUS_INTERFACE_SWENUM; #if defined(__cplusplus) @@ -51,103 +46,91 @@ KSDDKAPI NTSTATUS NTAPI KsQuerySoftwareBusInterface( - IN PDEVICE_OBJECT PnpDeviceObject, - OUT PBUS_INTERFACE_SWENUM BusInterface -); + IN PDEVICE_OBJECT PnpDeviceObject, + OUT PBUS_INTERFACE_SWENUM BusInterface); KSDDKAPI NTSTATUS NTAPI KsReferenceSoftwareBusObject( - IN KSDEVICE_HEADER Header -); + IN KSDEVICE_HEADER Header); KSDDKAPI VOID NTAPI KsDereferenceSoftwareBusObject( - IN KSDEVICE_HEADER Header -); + IN KSDEVICE_HEADER Header); KSDDKAPI NTSTATUS NTAPI KsCreateBusEnumObject( - IN PWSTR BusIdentifier, - IN PDEVICE_OBJECT BusDeviceObject, - IN PDEVICE_OBJECT PhysicalDeviceObject, - IN PDEVICE_OBJECT PnpDeviceObject, - IN REFGUID InterfaceGuid, - IN PWSTR ServiceRelativePath -); + IN PWSTR BusIdentifier, + IN PDEVICE_OBJECT BusDeviceObject, + IN PDEVICE_OBJECT PhysicalDeviceObject, + IN PDEVICE_OBJECT PnpDeviceObject, + IN REFGUID InterfaceGuid, + IN PWSTR ServiceRelativePath); KSDDKAPI NTSTATUS NTAPI KsGetBusEnumIdentifier( - IN OUT PIRP Irp -); + IN OUT PIRP Irp); KSDDKAPI NTSTATUS NTAPI KsGetBusEnumPnpDeviceObject( - IN PDEVICE_OBJECT DeviceObject, - OUT PDEVICE_OBJECT *PnpDeviceObject -); + IN PDEVICE_OBJECT DeviceObject, + OUT PDEVICE_OBJECT *PnpDeviceObject); KSDDKAPI NTSTATUS NTAPI KsInstallBusEnumInterface( - IN PIRP Irp -); + IN PIRP Irp); KSDDKAPI NTSTATUS NTAPI KsIsBusEnumChildDevice( - IN PDEVICE_OBJECT DeviceObject, - OUT PBOOLEAN ChildDevice -); - + IN PDEVICE_OBJECT DeviceObject, + OUT PBOOLEAN ChildDevice); KSDDKAPI NTSTATUS NTAPI KsRemoveBusEnumInterface( - IN PIRP Irp -); + IN PIRP Irp); KSDDKAPI NTSTATUS NTAPI KsServiceBusEnumPnpRequest( - IN PDEVICE_OBJECT DeviceObject, - IN OUT PIRP Irp -); + IN PDEVICE_OBJECT DeviceObject, + IN OUT PIRP Irp); KSDDKAPI NTSTATUS NTAPI KsServiceBusEnumCreateRequest( - IN PDEVICE_OBJECT DeviceObject, - IN OUT PIRP Irp -); + IN PDEVICE_OBJECT DeviceObject, + IN OUT PIRP Irp); KSDDKAPI NTSTATUS NTAPI KsGetBusEnumParentFDOFromChildPDO( - IN PDEVICE_OBJECT DeviceObject, - OUT PDEVICE_OBJECT *FunctionalDeviceObject -); + IN PDEVICE_OBJECT DeviceObject, + OUT PDEVICE_OBJECT *FunctionalDeviceObject); -#endif +#endif /* _KS_ */ #if defined(__cplusplus) } #endif -#endif -#endif +#endif /* _NTDDK_ */ + +#endif /* _SWENUM_ */ diff --git a/include/ddk/tdikrnl.h b/include/ddk/tdikrnl.h index b6a30118b96..6ed38d67fc0 100644 --- a/include/ddk/tdikrnl.h +++ b/include/ddk/tdikrnl.h @@ -30,17 +30,17 @@ extern "C" { #endif #if defined(_TDI_) - #define TDIKRNLAPI +#define TDIKRNLAPI #else - #define TDIKRNLAPI DECLSPEC_IMPORT +#define TDIKRNLAPI DECLSPEC_IMPORT #endif typedef struct _TDI_REQUEST_KERNEL { - ULONG RequestFlags; - PTDI_CONNECTION_INFORMATION RequestConnectionInformation; - PTDI_CONNECTION_INFORMATION ReturnConnectionInformation; - PVOID RequestSpecific; + ULONG RequestFlags; + PTDI_CONNECTION_INFORMATION RequestConnectionInformation; + PTDI_CONNECTION_INFORMATION ReturnConnectionInformation; + PVOID RequestSpecific; } TDI_REQUEST_KERNEL, *PTDI_REQUEST_KERNEL; /* Request codes */ @@ -72,7 +72,7 @@ typedef struct _TDI_REQUEST_KERNEL { /* TdiAssociateAddress */ typedef struct _TDI_REQUEST_KERNEL_ASSOCIATE { - HANDLE AddressHandle; + HANDLE AddressHandle; } TDI_REQUEST_KERNEL_ASSOCIATE, *PTDI_REQUEST_KERNEL_ASSOCIATE; /* TdiDisassociateAddress */ @@ -81,8 +81,8 @@ typedef TDI_REQUEST_KERNEL TDI_REQUEST_KERNEL_DISASSOCIATE, /* TdiAccept */ typedef struct _TDI_REQUEST_KERNEL_ACCEPT { - PTDI_CONNECTION_INFORMATION RequestConnectionInformation; - PTDI_CONNECTION_INFORMATION ReturnConnectionInformation; + PTDI_CONNECTION_INFORMATION RequestConnectionInformation; + PTDI_CONNECTION_INFORMATION ReturnConnectionInformation; } TDI_REQUEST_KERNEL_ACCEPT, *PTDI_REQUEST_KERNEL_ACCEPT; /* TdiConnect */ @@ -99,50 +99,49 @@ typedef TDI_REQUEST_KERNEL TDI_REQUEST_KERNEL_LISTEN, /* TdiReceive */ typedef struct _TDI_REQUEST_KERNEL_RECEIVE { - ULONG ReceiveLength; - ULONG ReceiveFlags; + ULONG ReceiveLength; + ULONG ReceiveFlags; } TDI_REQUEST_KERNEL_RECEIVE, *PTDI_REQUEST_KERNEL_RECEIVE; /* TdiReceiveDatagram */ typedef struct _TDI_REQUEST_KERNEL_RECEIVEDG { - ULONG ReceiveLength; - PTDI_CONNECTION_INFORMATION ReceiveDatagramInformation; - PTDI_CONNECTION_INFORMATION ReturnDatagramInformation; - ULONG ReceiveFlags; + ULONG ReceiveLength; + PTDI_CONNECTION_INFORMATION ReceiveDatagramInformation; + PTDI_CONNECTION_INFORMATION ReturnDatagramInformation; + ULONG ReceiveFlags; } TDI_REQUEST_KERNEL_RECEIVEDG, *PTDI_REQUEST_KERNEL_RECEIVEDG; /* TdiSend */ typedef struct _TDI_REQUEST_KERNEL_SEND { - ULONG SendLength; - ULONG SendFlags; + ULONG SendLength; + ULONG SendFlags; } TDI_REQUEST_KERNEL_SEND, *PTDI_REQUEST_KERNEL_SEND; /* TdiSendDatagram */ typedef struct _TDI_REQUEST_KERNEL_SENDDG { - ULONG SendLength; - PTDI_CONNECTION_INFORMATION SendDatagramInformation; + ULONG SendLength; + PTDI_CONNECTION_INFORMATION SendDatagramInformation; } TDI_REQUEST_KERNEL_SENDDG, *PTDI_REQUEST_KERNEL_SENDDG; /* TdiSetEventHandler */ typedef struct _TDI_REQUEST_KERNEL_SET_EVENT { - LONG EventType; - PVOID EventHandler; - PVOID EventContext; + LONG EventType; + PVOID EventHandler; + PVOID EventContext; } TDI_REQUEST_KERNEL_SET_EVENT, *PTDI_REQUEST_KERNEL_SET_EVENT; /* TdiQueryInformation */ typedef struct _TDI_REQUEST_KERNEL_QUERY_INFO { - LONG QueryType; - PTDI_CONNECTION_INFORMATION RequestConnectionInformation; + LONG QueryType; + PTDI_CONNECTION_INFORMATION RequestConnectionInformation; } TDI_REQUEST_KERNEL_QUERY_INFORMATION, *PTDI_REQUEST_KERNEL_QUERY_INFORMATION; /* TdiSetInformation */ typedef struct _TDI_REQUEST_KERNEL_SET_INFO { - LONG SetType; - PTDI_CONNECTION_INFORMATION RequestConnectionInformation; + LONG SetType; + PTDI_CONNECTION_INFORMATION RequestConnectionInformation; } TDI_REQUEST_KERNEL_SET_INFORMATION, *PTDI_REQUEST_KERNEL_SET_INFORMATION; - /* Event types */ #define TDI_EVENT_CONNECT 0 #define TDI_EVENT_DISCONNECT 1 @@ -158,133 +157,133 @@ typedef struct _TDI_REQUEST_KERNEL_SET_INFO { typedef NTSTATUS (NTAPI *PTDI_IND_CONNECT)( - IN PVOID TdiEventContext, - IN LONG RemoteAddressLength, - IN PVOID RemoteAddress, - IN LONG UserDataLength, - IN PVOID UserData, - IN LONG OptionsLength, - IN PVOID Options, - OUT CONNECTION_CONTEXT *ConnectionContext, - OUT PIRP *AcceptIrp); + IN PVOID TdiEventContext, + IN LONG RemoteAddressLength, + IN PVOID RemoteAddress, + IN LONG UserDataLength, + IN PVOID UserData, + IN LONG OptionsLength, + IN PVOID Options, + OUT CONNECTION_CONTEXT *ConnectionContext, + OUT PIRP *AcceptIrp); TDIKRNLAPI NTSTATUS NTAPI TdiDefaultConnectHandler( - IN PVOID TdiEventContext, - IN LONG RemoteAddressLength, - IN PVOID RemoteAddress, - IN LONG UserDataLength, - IN PVOID UserData, - IN LONG OptionsLength, - IN PVOID Options, + IN PVOID TdiEventContext, + IN LONG RemoteAddressLength, + IN PVOID RemoteAddress, + IN LONG UserDataLength, + IN PVOID UserData, + IN LONG OptionsLength, + IN PVOID Options, OUT CONNECTION_CONTEXT *ConnectionContext, - OUT PIRP *AcceptIrp); + OUT PIRP *AcceptIrp); typedef NTSTATUS (NTAPI *PTDI_IND_DISCONNECT)( - IN PVOID TdiEventContext, - IN CONNECTION_CONTEXT ConnectionContext, - IN LONG DisconnectDataLength, - IN PVOID DisconnectData, - IN LONG DisconnectInformationLength, - IN PVOID DisconnectInformation, - IN ULONG DisconnectFlags); + IN PVOID TdiEventContext, + IN CONNECTION_CONTEXT ConnectionContext, + IN LONG DisconnectDataLength, + IN PVOID DisconnectData, + IN LONG DisconnectInformationLength, + IN PVOID DisconnectInformation, + IN ULONG DisconnectFlags); TDIKRNLAPI NTSTATUS NTAPI TdiDefaultDisconnectHandler( - IN PVOID TdiEventContext, - IN CONNECTION_CONTEXT ConnectionContext, - IN LONG DisconnectDataLength, - IN PVOID DisconnectData, - IN LONG DisconnectInformationLength, - IN PVOID DisconnectInformation, - IN ULONG DisconnectFlags); + IN PVOID TdiEventContext, + IN CONNECTION_CONTEXT ConnectionContext, + IN LONG DisconnectDataLength, + IN PVOID DisconnectData, + IN LONG DisconnectInformationLength, + IN PVOID DisconnectInformation, + IN ULONG DisconnectFlags); typedef NTSTATUS (NTAPI *PTDI_IND_ERROR)( - IN PVOID TdiEventContext, - IN NTSTATUS Status); + IN PVOID TdiEventContext, + IN NTSTATUS Status); typedef NTSTATUS (NTAPI *PTDI_IND_ERROR_EX)( - IN PVOID TdiEventContext, - IN NTSTATUS Status, - IN PVOID Buffer); + IN PVOID TdiEventContext, + IN NTSTATUS Status, + IN PVOID Buffer); TDIKRNLAPI NTSTATUS NTAPI TdiDefaultErrorHandler( - IN PVOID TdiEventContext, - IN NTSTATUS Status); + IN PVOID TdiEventContext, + IN NTSTATUS Status); typedef NTSTATUS (NTAPI *PTDI_IND_RECEIVE)( - IN PVOID TdiEventContext, - IN CONNECTION_CONTEXT ConnectionContext, - IN ULONG ReceiveFlags, - IN ULONG BytesIndicated, - IN ULONG BytesAvailable, - OUT ULONG *BytesTaken, - IN PVOID Tsdu, - OUT PIRP *IoRequestPacket); + IN PVOID TdiEventContext, + IN CONNECTION_CONTEXT ConnectionContext, + IN ULONG ReceiveFlags, + IN ULONG BytesIndicated, + IN ULONG BytesAvailable, + OUT ULONG *BytesTaken, + IN PVOID Tsdu, + OUT PIRP *IoRequestPacket); TDIKRNLAPI NTSTATUS NTAPI TdiDefaultReceiveHandler( - IN PVOID TdiEventContext, - IN CONNECTION_CONTEXT ConnectionContext, - IN ULONG ReceiveFlags, - IN ULONG BytesIndicated, - IN ULONG BytesAvailable, - OUT ULONG *BytesTaken, - IN PVOID Tsdu, - OUT PIRP *IoRequestPacket); + IN PVOID TdiEventContext, + IN CONNECTION_CONTEXT ConnectionContext, + IN ULONG ReceiveFlags, + IN ULONG BytesIndicated, + IN ULONG BytesAvailable, + OUT ULONG *BytesTaken, + IN PVOID Tsdu, + OUT PIRP *IoRequestPacket); typedef NTSTATUS (NTAPI *PTDI_IND_RECEIVE_DATAGRAM)( - IN PVOID TdiEventContext, - IN LONG SourceAddressLength, - IN PVOID SourceAddress, - IN LONG OptionsLength, - IN PVOID Options, - IN ULONG ReceiveDatagramFlags, - IN ULONG BytesIndicated, - IN ULONG BytesAvailable, - OUT ULONG *BytesTaken, - IN PVOID Tsdu, - OUT PIRP *IoRequestPacket); + IN PVOID TdiEventContext, + IN LONG SourceAddressLength, + IN PVOID SourceAddress, + IN LONG OptionsLength, + IN PVOID Options, + IN ULONG ReceiveDatagramFlags, + IN ULONG BytesIndicated, + IN ULONG BytesAvailable, + OUT ULONG *BytesTaken, + IN PVOID Tsdu, + OUT PIRP *IoRequestPacket); TDIKRNLAPI NTSTATUS NTAPI TdiDefaultRcvDatagramHandler( - IN PVOID TdiEventContext, - IN LONG SourceAddressLength, - IN PVOID SourceAddress, - IN LONG OptionsLength, - IN PVOID Options, - IN ULONG ReceiveDatagramFlags, - IN ULONG BytesIndicated, - IN ULONG BytesAvailable, - OUT ULONG *BytesTaken, - IN PVOID Tsdu, - OUT PIRP *IoRequestPacket); + IN PVOID TdiEventContext, + IN LONG SourceAddressLength, + IN PVOID SourceAddress, + IN LONG OptionsLength, + IN PVOID Options, + IN ULONG ReceiveDatagramFlags, + IN ULONG BytesIndicated, + IN ULONG BytesAvailable, + OUT ULONG *BytesTaken, + IN PVOID Tsdu, + OUT PIRP *IoRequestPacket); typedef NTSTATUS (NTAPI *PTDI_IND_RECEIVE_EXPEDITED)( - IN PVOID TdiEventContext, - IN CONNECTION_CONTEXT ConnectionContext, - IN ULONG ReceiveFlags, - IN ULONG BytesIndicated, - IN ULONG BytesAvailable, - OUT ULONG *BytesTaken, - IN PVOID Tsdu, - OUT PIRP *IoRequestPacket); + IN PVOID TdiEventContext, + IN CONNECTION_CONTEXT ConnectionContext, + IN ULONG ReceiveFlags, + IN ULONG BytesIndicated, + IN ULONG BytesAvailable, + OUT ULONG *BytesTaken, + IN PVOID Tsdu, + OUT PIRP *IoRequestPacket); TDIKRNLAPI NTSTATUS diff --git a/include/ddk/tdistat.h b/include/ddk/tdistat.h index f145c30cf33..5490d986814 100644 --- a/include/ddk/tdistat.h +++ b/include/ddk/tdistat.h @@ -59,7 +59,7 @@ extern "C" { #define TDI_REQ_ABORTED STATUS_REQUEST_ABORTED #define TDI_BUFFER_TOO_SMALL STATUS_BUFFER_TOO_SMALL #define TDI_CANCELLED STATUS_CANCELLED -#define TDI_BUFFER_TOO_BIG STATUS_INVALID_BUFFER_SIZE +#define TDI_BUFFER_TOO_BIG STATUS_INVALID_BUFFER_SIZE #define TDI_INVALID_REQUEST STATUS_INVALID_DEVICE_REQUEST #define TDI_PENDING STATUS_PENDING #define TDI_ITEM_NOT_FOUND STATUS_OBJECT_NAME_NOT_FOUND @@ -67,10 +67,10 @@ extern "C" { #define TDI_STATUS_BAD_VERSION 0xC0010004L #define TDI_STATUS_BAD_CHARACTERISTICS 0xC0010005L -#define TDI_OPTION_EOL 0 +#define TDI_OPTION_EOL 0 -#define TDI_ADDRESS_OPTION_REUSE 1 -#define TDI_ADDRESS_OPTION_DHCP 2 +#define TDI_ADDRESS_OPTION_REUSE 1 +#define TDI_ADDRESS_OPTION_DHCP 2 #ifdef __cplusplus } diff --git a/include/ddk/upssvc.h b/include/ddk/upssvc.h index 8672519694b..e766f6913a6 100644 --- a/include/ddk/upssvc.h +++ b/include/ddk/upssvc.h @@ -28,9 +28,9 @@ extern "C" { #endif #if defined(_APCUPS_) - #define UPSAPI +#define UPSAPI #else - #define UPSAPI DECLSPEC_IMPORT +#define UPSAPI DECLSPEC_IMPORT #endif @@ -72,14 +72,14 @@ UPSAPI VOID NTAPI UPSTurnOff( - IN DWORD aTurnOffDelay); + IN DWORD aTurnOffDelay); UPSAPI VOID NTAPI UPSWaitForStateChange( - IN DWORD aCurrentState, - IN DWORD anInterval); + IN DWORD aCurrentState, + IN DWORD anInterval); #ifdef __cplusplus } diff --git a/include/ddk/usbbusif.h b/include/ddk/usbbusif.h index 3d1c1f3a337..04297e97d62 100644 --- a/include/ddk/usbbusif.h +++ b/include/ddk/usbbusif.h @@ -8,7 +8,7 @@ #if (NTDDI_VERSION >= NTDDI_WINXP) -#if !defined(_USBBUSIF_) +#if !defined(_HUBBUSIF_) typedef PVOID PUSB_DEVICE_HANDLE; #endif @@ -67,8 +67,8 @@ typedef BOOLEAN #define USB_BUSIF_USBDI_VERSION_2 0x0002 #define USB_BUSIF_USBDI_VERSION_3 0x0003 -DEFINE_GUID(USB_BUS_INTERFACE_USBDI_GUID, -0xb1a96a13, 0x3de0, 0x4574, 0x9b, 0x1, 0xc0, 0x8f, 0xea, 0xb3, 0x18, 0xd6); +DEFINE_GUID(USB_BUS_INTERFACE_USBDI_GUID, + 0xb1a96a13, 0x3de0, 0x4574, 0x9b, 0x1, 0xc0, 0x8f, 0xea, 0xb3, 0x18, 0xd6); typedef struct _USB_BUS_INTERFACE_USBDI_V0 { USHORT Size; @@ -109,7 +109,7 @@ typedef struct _USB_BUS_INTERFACE_USBDI_V2 { PUSB_BUSIFFN_ENUM_LOG_ENTRY EnumLogEntry; } USB_BUS_INTERFACE_USBDI_V2, *PUSB_BUS_INTERFACE_USBDI_V2; -#endif +#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ #if (NTDDI_VERSION >= NTDDI_VISTA) @@ -145,8 +145,8 @@ typedef struct _USB_BUS_INTERFACE_USBDI_V3 { PUSB_BUSIFFN_QUERY_CONTROLLER_TYPE QueryControllerType; } USB_BUS_INTERFACE_USBDI_V3, *PUSB_BUS_INTERFACE_USBDI_V3; -DEFINE_GUID(USB_BUS_INTERFACE_USBC_CONFIGURATION_GUID, -0x893b6a96, 0xb7f, 0x4d4d, 0xbd, 0xb4, 0xbb, 0xd4, 0xce, 0xeb, 0xb3, 0x1c); +DEFINE_GUID(USB_BUS_INTERFACE_USBC_CONFIGURATION_GUID, + 0x893b6a96, 0xb7f, 0x4d4d, 0xbd, 0xb4, 0xbb, 0xd4, 0xce, 0xeb, 0xb3, 0x1c); #define USBC_FUNCTION_FLAG_APPEND_ID 0x1 @@ -194,4 +194,5 @@ typedef struct _USBC_DEVICE_CONFIGURATION_INTERFACE_V1 { PVOID Reserved[7]; } USBC_DEVICE_CONFIGURATION_INTERFACE_V1, *PUSBC_DEVICE_CONFIGURATION_INTERFACE_V1; -#endif +#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ + diff --git a/include/ddk/usbdlib.h b/include/ddk/usbdlib.h index 7f21da67b51..735420e9d4c 100644 --- a/include/ddk/usbdlib.h +++ b/include/ddk/usbdlib.h @@ -1,120 +1,116 @@ #pragma once +#ifndef DECLSPEC_EXPORT +#define DECLSPEC_EXPORT __declspec(dllexport) +#endif + typedef struct _USBD_INTERFACE_LIST_ENTRY { PUSB_INTERFACE_DESCRIPTOR InterfaceDescriptor; PUSBD_INTERFACE_INFORMATION Interface; } USBD_INTERFACE_LIST_ENTRY, *PUSBD_INTERFACE_LIST_ENTRY; -#define UsbBuildInterruptOrBulkTransferRequest(urb,length, pipeHandle, transferBuffer, transferBufferMDL, transferBufferLength, transferFlags, link) \ -{ \ - (urb)->UrbHeader.Function = URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER; \ - (urb)->UrbHeader.Length = (length); \ - (urb)->UrbBulkOrInterruptTransfer.PipeHandle = (pipeHandle); \ - (urb)->UrbBulkOrInterruptTransfer.TransferBufferLength = (transferBufferLength); \ - (urb)->UrbBulkOrInterruptTransfer.TransferBufferMDL = (transferBufferMDL); \ - (urb)->UrbBulkOrInterruptTransfer.TransferBuffer = (transferBuffer); \ - (urb)->UrbBulkOrInterruptTransfer.TransferFlags = (transferFlags); \ - (urb)->UrbBulkOrInterruptTransfer.UrbLink = (link); \ +#define UsbBuildInterruptOrBulkTransferRequest(urb,length, pipeHandle, transferBuffer, transferBufferMDL, transferBufferLength, transferFlags, link) { \ + (urb)->UrbHeader.Function = URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER; \ + (urb)->UrbHeader.Length = (length); \ + (urb)->UrbBulkOrInterruptTransfer.PipeHandle = (pipeHandle); \ + (urb)->UrbBulkOrInterruptTransfer.TransferBufferLength = (transferBufferLength); \ + (urb)->UrbBulkOrInterruptTransfer.TransferBufferMDL = (transferBufferMDL); \ + (urb)->UrbBulkOrInterruptTransfer.TransferBuffer = (transferBuffer); \ + (urb)->UrbBulkOrInterruptTransfer.TransferFlags = (transferFlags); \ + (urb)->UrbBulkOrInterruptTransfer.UrbLink = (link); \ } -#define UsbBuildGetDescriptorRequest(urb, length, descriptorType, descriptorIndex, languageId, transferBuffer, transferBufferMDL, transferBufferLength, link) \ -{ \ - (urb)->UrbHeader.Function = URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE; \ - (urb)->UrbHeader.Length = (length); \ - (urb)->UrbControlDescriptorRequest.TransferBufferLength = (transferBufferLength); \ - (urb)->UrbControlDescriptorRequest.TransferBufferMDL = (transferBufferMDL); \ - (urb)->UrbControlDescriptorRequest.TransferBuffer = (transferBuffer); \ - (urb)->UrbControlDescriptorRequest.DescriptorType = (descriptorType); \ - (urb)->UrbControlDescriptorRequest.Index = (descriptorIndex); \ - (urb)->UrbControlDescriptorRequest.LanguageId = (languageId); \ - (urb)->UrbControlDescriptorRequest.UrbLink = (link); \ +#define UsbBuildGetDescriptorRequest(urb, length, descriptorType, descriptorIndex, languageId, transferBuffer, transferBufferMDL, transferBufferLength, link) { \ + (urb)->UrbHeader.Function = URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE; \ + (urb)->UrbHeader.Length = (length); \ + (urb)->UrbControlDescriptorRequest.TransferBufferLength = (transferBufferLength); \ + (urb)->UrbControlDescriptorRequest.TransferBufferMDL = (transferBufferMDL); \ + (urb)->UrbControlDescriptorRequest.TransferBuffer = (transferBuffer); \ + (urb)->UrbControlDescriptorRequest.DescriptorType = (descriptorType); \ + (urb)->UrbControlDescriptorRequest.Index = (descriptorIndex); \ + (urb)->UrbControlDescriptorRequest.LanguageId = (languageId); \ + (urb)->UrbControlDescriptorRequest.UrbLink = (link); \ } -#define UsbBuildGetStatusRequest(urb, op, index, transferBuffer, transferBufferMDL, link) \ -{ \ - (urb)->UrbHeader.Function = (op); \ - (urb)->UrbHeader.Length = sizeof(struct _URB_CONTROL_GET_STATUS_REQUEST); \ - (urb)->UrbControlGetStatusRequest.TransferBufferLength = sizeof(USHORT); \ - (urb)->UrbControlGetStatusRequest.TransferBufferMDL = (transferBufferMDL); \ - (urb)->UrbControlGetStatusRequest.TransferBuffer = (transferBuffer); \ - (urb)->UrbControlGetStatusRequest.Index = (index); \ - (urb)->UrbControlGetStatusRequest.UrbLink = (link); \ +#define UsbBuildGetStatusRequest(urb, op, index, transferBuffer, transferBufferMDL, link) { \ + (urb)->UrbHeader.Function = (op); \ + (urb)->UrbHeader.Length = sizeof(struct _URB_CONTROL_GET_STATUS_REQUEST); \ + (urb)->UrbControlGetStatusRequest.TransferBufferLength = sizeof(USHORT); \ + (urb)->UrbControlGetStatusRequest.TransferBufferMDL = (transferBufferMDL); \ + (urb)->UrbControlGetStatusRequest.TransferBuffer = (transferBuffer); \ + (urb)->UrbControlGetStatusRequest.Index = (index); \ + (urb)->UrbControlGetStatusRequest.UrbLink = (link); \ } -#define UsbBuildFeatureRequest(urb, op, featureSelector, index, link) \ -{ \ - (urb)->UrbHeader.Function = (op); \ - (urb)->UrbHeader.Length = sizeof(struct _URB_CONTROL_FEATURE_REQUEST); \ - (urb)->UrbControlFeatureRequest.FeatureSelector = (featureSelector); \ - (urb)->UrbControlFeatureRequest.Index = (index); \ - (urb)->UrbControlFeatureRequest.UrbLink = (link); \ +#define UsbBuildFeatureRequest(urb, op, featureSelector, index, link) { \ + (urb)->UrbHeader.Function = (op); \ + (urb)->UrbHeader.Length = sizeof(struct _URB_CONTROL_FEATURE_REQUEST); \ + (urb)->UrbControlFeatureRequest.FeatureSelector = (featureSelector); \ + (urb)->UrbControlFeatureRequest.Index = (index); \ + (urb)->UrbControlFeatureRequest.UrbLink = (link); \ } -#define UsbBuildSelectConfigurationRequest(urb, length, configurationDescriptor) \ -{ \ - (urb)->UrbHeader.Function = URB_FUNCTION_SELECT_CONFIGURATION; \ - (urb)->UrbHeader.Length = (length); \ - (urb)->UrbSelectConfiguration.ConfigurationDescriptor = (configurationDescriptor); \ +#define UsbBuildSelectConfigurationRequest(urb, length, configurationDescriptor) { \ + (urb)->UrbHeader.Function = URB_FUNCTION_SELECT_CONFIGURATION; \ + (urb)->UrbHeader.Length = (length); \ + (urb)->UrbSelectConfiguration.ConfigurationDescriptor = (configurationDescriptor); \ } -#define UsbBuildSelectInterfaceRequest(urb, length, configurationHandle, interfaceNumber, alternateSetting) \ -{ \ - (urb)->UrbHeader.Function = URB_FUNCTION_SELECT_INTERFACE; \ - (urb)->UrbHeader.Length = (length); \ - (urb)->UrbSelectInterface.Interface.AlternateSetting = (alternateSetting); \ - (urb)->UrbSelectInterface.Interface.InterfaceNumber = (interfaceNumber); \ - (urb)->UrbSelectInterface.Interface.Length = (length - sizeof(struct _URB_HEADER) - sizeof(USBD_CONFIGURATION_HANDLE)); \ - (urb)->UrbSelectInterface.ConfigurationHandle = (configurationHandle); \ +#define UsbBuildSelectInterfaceRequest(urb, length, configurationHandle, interfaceNumber, alternateSetting) { \ + (urb)->UrbHeader.Function = URB_FUNCTION_SELECT_INTERFACE; \ + (urb)->UrbHeader.Length = (length); \ + (urb)->UrbSelectInterface.Interface.AlternateSetting = (alternateSetting); \ + (urb)->UrbSelectInterface.Interface.InterfaceNumber = (interfaceNumber); \ + (urb)->UrbSelectInterface.Interface.Length = (length - sizeof(struct _URB_HEADER) - sizeof(USBD_CONFIGURATION_HANDLE)); \ + (urb)->UrbSelectInterface.ConfigurationHandle = (configurationHandle); \ } -#define UsbBuildVendorRequest(urb, cmd, length, transferFlags, reservedbits, request, value, index, transferBuffer, transferBufferMDL, transferBufferLength, link) \ -{ \ - (urb)->UrbHeader.Function = cmd; \ - (urb)->UrbHeader.Length = (length); \ - (urb)->UrbControlVendorClassRequest.TransferBufferLength = (transferBufferLength); \ - (urb)->UrbControlVendorClassRequest.TransferBufferMDL = (transferBufferMDL); \ - (urb)->UrbControlVendorClassRequest.TransferBuffer = (transferBuffer); \ - (urb)->UrbControlVendorClassRequest.RequestTypeReservedBits = (reservedbits); \ - (urb)->UrbControlVendorClassRequest.Request = (request); \ - (urb)->UrbControlVendorClassRequest.Value = (value); \ - (urb)->UrbControlVendorClassRequest.Index = (index); \ - (urb)->UrbControlVendorClassRequest.TransferFlags = (transferFlags); \ - (urb)->UrbControlVendorClassRequest.UrbLink = (link); \ +#define UsbBuildVendorRequest(urb, cmd, length, transferFlags, reservedbits, request, value, index, transferBuffer, transferBufferMDL, transferBufferLength, link) { \ + (urb)->UrbHeader.Function = cmd; \ + (urb)->UrbHeader.Length = (length); \ + (urb)->UrbControlVendorClassRequest.TransferBufferLength = (transferBufferLength); \ + (urb)->UrbControlVendorClassRequest.TransferBufferMDL = (transferBufferMDL); \ + (urb)->UrbControlVendorClassRequest.TransferBuffer = (transferBuffer); \ + (urb)->UrbControlVendorClassRequest.RequestTypeReservedBits = (reservedbits); \ + (urb)->UrbControlVendorClassRequest.Request = (request); \ + (urb)->UrbControlVendorClassRequest.Value = (value); \ + (urb)->UrbControlVendorClassRequest.Index = (index); \ + (urb)->UrbControlVendorClassRequest.TransferFlags = (transferFlags); \ + (urb)->UrbControlVendorClassRequest.UrbLink = (link); \ } #if (NTDDI_VERSION >= NTDDI_WINXP) -#define UsbBuildOsFeatureDescriptorRequest(urb, length, interface, index, transferBuffer, transferBufferMDL, transferBufferLength, link) \ -{ \ - (urb)->UrbHeader.Function = URB_FUNCTION_GET_MS_FEATURE_DESCRIPTOR; \ - (urb)->UrbHeader.Length = (length); \ - (urb)->UrbOSFeatureDescriptorRequest.TransferBufferLength = (transferBufferLength); \ - (urb)->UrbOSFeatureDescriptorRequest.TransferBufferMDL = (transferBufferMDL); \ - (urb)->UrbOSFeatureDescriptorRequest.TransferBuffer = (transferBuffer); \ - (urb)->UrbOSFeatureDescriptorRequest.InterfaceNumber = (interface); \ - (urb)->UrbOSFeatureDescriptorRequest.MS_FeatureDescriptorIndex = (index); \ - (urb)->UrbOSFeatureDescriptorRequest.UrbLink = (link); \ +#define UsbBuildOsFeatureDescriptorRequest(urb, length, interface, index, transferBuffer, transferBufferMDL, transferBufferLength, link) { \ + (urb)->UrbHeader.Function = URB_FUNCTION_GET_MS_FEATURE_DESCRIPTOR; \ + (urb)->UrbHeader.Length = (length); \ + (urb)->UrbOSFeatureDescriptorRequest.TransferBufferLength = (transferBufferLength); \ + (urb)->UrbOSFeatureDescriptorRequest.TransferBufferMDL = (transferBufferMDL); \ + (urb)->UrbOSFeatureDescriptorRequest.TransferBuffer = (transferBuffer); \ + (urb)->UrbOSFeatureDescriptorRequest.InterfaceNumber = (interface); \ + (urb)->UrbOSFeatureDescriptorRequest.MS_FeatureDescriptorIndex = (index); \ + urb)->UrbOSFeatureDescriptorRequest.UrbLink = (link); \ } -#endif +#endif /* NTDDI_VERSION >= NTDDI_WINXP */ -#define URB_STATUS(urb) ((urb)->UrbHeader.Status) +#define URB_STATUS(urb) ((urb)->UrbHeader.Status) -#define GET_SELECT_CONFIGURATION_REQUEST_SIZE(totalInterfaces, totalPipes) \ - (sizeof(struct _URB_SELECT_CONFIGURATION) + \ - ((totalInterfaces-1) * sizeof(USBD_INTERFACE_INFORMATION)) + \ - ((totalPipes-totalInterfaces)*sizeof(USBD_PIPE_INFORMATION))) +#define GET_SELECT_CONFIGURATION_REQUEST_SIZE(totalInterfaces, totalPipes) \ + (sizeof(struct _URB_SELECT_CONFIGURATION) + \ + ((totalInterfaces-1) * sizeof(USBD_INTERFACE_INFORMATION)) + \ + ((totalPipes-totalInterfaces)*sizeof(USBD_PIPE_INFORMATION))) -#define GET_SELECT_INTERFACE_REQUEST_SIZE(totalPipes) \ - (sizeof(struct _URB_SELECT_INTERFACE) + \ - ((totalPipes-1)*sizeof(USBD_PIPE_INFORMATION))) +#define GET_SELECT_INTERFACE_REQUEST_SIZE(totalPipes) \ + (sizeof(struct _URB_SELECT_INTERFACE) + \ + ((totalPipes-1)*sizeof(USBD_PIPE_INFORMATION))) -#define GET_USBD_INTERFACE_SIZE(numEndpoints) (sizeof(USBD_INTERFACE_INFORMATION) + \ - (sizeof(USBD_PIPE_INFORMATION)*(numEndpoints)) \ - - sizeof(USBD_PIPE_INFORMATION)) +#define GET_USBD_INTERFACE_SIZE(numEndpoints) \ + (sizeof(USBD_INTERFACE_INFORMATION) + \ + (sizeof(USBD_PIPE_INFORMATION)*(numEndpoints)) - sizeof(USBD_PIPE_INFORMATION)) -#define GET_ISO_URB_SIZE(n) (sizeof(struct _URB_ISOCH_TRANSFER)+ \ - sizeof(USBD_ISO_PACKET_DESCRIPTOR)*n) +#define GET_ISO_URB_SIZE(n) (sizeof(struct _URB_ISOCH_TRANSFER)+ \ + sizeof(USBD_ISO_PACKET_DESCRIPTOR)*n) #ifndef _USBD_ @@ -224,4 +220,5 @@ USBD_ValidateConfigurationDescriptor( #endif -#endif +#endif /* ! _USBD_ */ + diff --git a/include/ddk/usbprotocoldefs.h b/include/ddk/usbprotocoldefs.h index 9a25a1bc745..bd750cb2f8b 100644 --- a/include/ddk/usbprotocoldefs.h +++ b/include/ddk/usbprotocoldefs.h @@ -31,9 +31,9 @@ #define USB_SPEC 0x0200 #define HID_SPEC 0x0101 -#define USB_20_SPEC 0x0200 -#define USB_11_SPEC 0x0110 -#define USB_10_SPEC 0x0100 +#define USB_20_SPEC 0x0200 +#define USB_11_SPEC 0x0110 +#define USB_10_SPEC 0x0100 #define HID_MAX_PACKET_SIZE0 0x08 #define MICROSOFT_VENDOR_ID 0x045E @@ -81,7 +81,9 @@ #define RCPT_RPIPE 5 #if !defined(MIDL_PASS) -#define USB_MAKE_REQUEST_TYPE(direction, type, recipient) (BYTE)( ((BYTE)direction << 7) | ((BYTE)type << 5) | ((BYTE)recipient & 0x07) ) +#define USB_MAKE_REQUEST_TYPE(direction, type, recipient) \ + (BYTE)( ((BYTE)direction << 7) | \ + ((BYTE)type << 5) | ((BYTE)recipient & 0x07) ) #endif #define GET_STATUS 0 @@ -207,7 +209,8 @@ #define EP_OUT 0 #define EP_IN 1 -#define MAKE_ENDPOINT_ADDRESS(num, dir) ( ((BYTE)(dir) << 7) | ((BYTE)(num) & 0x0F) ) +#define MAKE_ENDPOINT_ADDRESS(num, dir) \ + ( ((BYTE)(dir) << 7) | ((BYTE)(num) & 0x0F) ) #define ENDPOINT_TYPE 0x03 #define CONTROL_ENDPOINT 0 @@ -501,7 +504,8 @@ typedef struct _USBHUBPORTDATA { USBHUBPORTSTATUSCHANGE PortStatusChange; } USBHUBPORTDATA; -#define USB_MAKE_LANGID(lang, sublang) ((((USHORT)(sublang)) << 10) | (USHORT)(lang)) +#define USB_MAKE_LANGID(lang, sublang) \ + ((((USHORT)(sublang)) << 10) | (USHORT)(lang)) #define USB_LANG_RESERVED 0x00 #define USB_LANG_ARABIC 0x01 @@ -672,6 +676,6 @@ typedef struct _USBHUBPORTDATA { #define USB_SUBLANG_HID_VENDOR_DEFINED_3 0x3e #define USB_SUBLANG_HID_VENDOR_DEFINED_4 0x3f -#endif // !defined(MIDL_PASS) +#endif /* !defined(MIDL_PASS) */ #include diff --git a/include/ddk/wdm.h b/include/ddk/wdm.h index 3b4e063e831..daffb9b1fd5 100644 --- a/include/ddk/wdm.h +++ b/include/ddk/wdm.h @@ -1242,7 +1242,7 @@ typedef struct _KDEVICE_QUEUE { CSHORT Size; LIST_ENTRY DeviceListHead; KSPIN_LOCK Lock; - #if defined(_AMD64_) +# if defined(_AMD64_) _ANONYMOUS_UNION union { BOOLEAN Busy; _ANONYMOUS_STRUCT struct { @@ -1250,9 +1250,9 @@ typedef struct _KDEVICE_QUEUE { LONG64 Hint:56; } DUMMYSTRUCTNAME; } DUMMYUNIONNAME; - #else +# else BOOLEAN Busy; - #endif +# endif } KDEVICE_QUEUE, *PKDEVICE_QUEUE, *RESTRICTED_POINTER PRKDEVICE_QUEUE; #define TIMER_EXPIRED_INDEX_BITS 6 @@ -1374,9 +1374,9 @@ typedef struct _KTIMER { ULARGE_INTEGER DueTime; LIST_ENTRY TimerListEntry; struct _KDPC *Dpc; - #if !defined(_X86_) +# if !defined(_X86_) ULONG Processor; - #endif +# endif ULONG Period; } KTIMER, *PKTIMER, *RESTRICTED_POINTER PRKTIMER; @@ -5456,6 +5456,8 @@ typedef struct _IO_COMPLETION_CONTEXT { #define IRP_DEFER_IO_COMPLETION 0x00000800 #define IRP_OB_QUERY_NAME 0x00001000 #define IRP_HOLD_DEVICE_QUEUE 0x00002000 +#define IRP_RETRY_IO_COMPLETION 0x00004000 +#define IRP_CLASS_CACHE_OPERATION 0x00008000 #define IRP_QUOTA_CHARGED 0x01 #define IRP_ALLOCATED_MUST_SUCCEED 0x02 @@ -5692,30 +5694,35 @@ typedef struct _SCATTER_GATHER_ELEMENT { ULONG_PTR Reserved; } SCATTER_GATHER_ELEMENT, *PSCATTER_GATHER_ELEMENT; -#if defined(_MSC_EXTENSIONS) +#if defined(_MSC_EXTENSIONS) || defined(__GNUC__) +#if defined(_MSC_VER) #if _MSC_VER >= 1200 #pragma warning(push) #endif #pragma warning(disable:4200) +#endif /* _MSC_VER */ + typedef struct _SCATTER_GATHER_LIST { ULONG NumberOfElements; ULONG_PTR Reserved; SCATTER_GATHER_ELEMENT Elements[1]; } SCATTER_GATHER_LIST, *PSCATTER_GATHER_LIST; +#if defined(_MSC_VER) #if _MSC_VER >= 1200 #pragma warning(pop) #else #pragma warning(default:4200) #endif +#endif /* _MSC_VER */ -#else +#else /* defined(_MSC_EXTENSIONS) || defined(__GNUC__) */ struct _SCATTER_GATHER_LIST; typedef struct _SCATTER_GATHER_LIST SCATTER_GATHER_LIST, *PSCATTER_GATHER_LIST; -#endif +#endif /* defined(_MSC_EXTENSIONS) || defined(__GNUC__) */ typedef NTSTATUS (NTAPI DRIVER_ADD_DEVICE)( @@ -7803,9 +7810,15 @@ _KeQueryTickCount( OUT PLARGE_INTEGER CurrentCount) { for (;;) { +#ifdef NONAMELESSUNION + CurrentCount->s.HighPart = KeTickCount.High1Time; + CurrentCount->s.LowPart = KeTickCount.LowPart; + if (CurrentCount->s.HighPart == KeTickCount.High2Time) break; +#else CurrentCount->HighPart = KeTickCount.High1Time; CurrentCount->LowPart = KeTickCount.LowPart; if (CurrentCount->HighPart == KeTickCount.High2Time) break; +#endif YieldProcessor(); } } @@ -12748,7 +12761,11 @@ IoSkipCurrentIrpStackLocation( { ASSERT(Irp->CurrentLocation <= Irp->StackCount); Irp->CurrentLocation++; +#ifdef NONAMELESSUNION + Irp->Tail.Overlay.s.u.CurrentStackLocation++; +#else Irp->Tail.Overlay.CurrentStackLocation++; +#endif } FORCEINLINE @@ -12758,7 +12775,11 @@ IoSetNextIrpStackLocation( { ASSERT(Irp->CurrentLocation > 0); Irp->CurrentLocation--; +#ifdef NONAMELESSUNION + Irp->Tail.Overlay.s.u.CurrentStackLocation--; +#else Irp->Tail.Overlay.CurrentStackLocation--; +#endif } FORCEINLINE @@ -12767,7 +12788,11 @@ IoGetNextIrpStackLocation( IN PIRP Irp) { ASSERT(Irp->CurrentLocation > 0); +#ifdef NONAMELESSUNION + return ((Irp)->Tail.Overlay.s.u.CurrentStackLocation - 1 ); +#else return ((Irp)->Tail.Overlay.CurrentStackLocation - 1 ); +#endif } FORCEINLINE @@ -12858,7 +12883,11 @@ IoGetCurrentIrpStackLocation( IN PIRP Irp) { ASSERT(Irp->CurrentLocation <= Irp->StackCount + 1); +#ifdef NONAMELESSUNION + return Irp->Tail.Overlay.s.u.CurrentStackLocation; +#else return Irp->Tail.Overlay.CurrentStackLocation; +#endif } FORCEINLINE @@ -13243,7 +13272,11 @@ ExpInterlockedPushEntrySList( #else /* !defined(_WIN64) */ +#ifdef NONAMELESSUNION +#define ExQueryDepthSList(listhead) (listhead)->s.Depth +#else #define ExQueryDepthSList(listhead) (listhead)->Depth +#endif NTKERNELAPI PSINGLE_LIST_ENTRY @@ -13300,6 +13333,15 @@ ExAllocateFromPagedLookasideList( PVOID Entry; Lookaside->L.TotalAllocates++; +#ifdef NONAMELESSUNION + Entry = InterlockedPopEntrySList(&Lookaside->L.u.ListHead); + if (Entry == NULL) { + Lookaside->L.u2.AllocateMisses++; + Entry = (Lookaside->L.u4.Allocate)(Lookaside->L.Type, + Lookaside->L.Size, + Lookaside->L.Tag); + } +#else /* NONAMELESSUNION */ Entry = InterlockedPopEntrySList(&Lookaside->L.ListHead); if (Entry == NULL) { Lookaside->L.AllocateMisses++; @@ -13307,6 +13349,7 @@ ExAllocateFromPagedLookasideList( Lookaside->L.Size, Lookaside->L.Tag); } +#endif /* NONAMELESSUNION */ return Entry; } @@ -13317,12 +13360,21 @@ ExFreeToPagedLookasideList( IN PVOID Entry) { Lookaside->L.TotalFrees++; +#ifdef NONAMELESSUNION + if (ExQueryDepthSList(&Lookaside->L.u.ListHead) >= Lookaside->L.Depth) { + Lookaside->L.u3.FreeMisses++; + (Lookaside->L.u5.Free)(Entry); + } else { + InterlockedPushEntrySList(&Lookaside->L.u.ListHead, (PSLIST_ENTRY)Entry); + } +#else /* NONAMELESSUNION */ if (ExQueryDepthSList(&Lookaside->L.ListHead) >= Lookaside->L.Depth) { Lookaside->L.FreeMisses++; (Lookaside->L.Free)(Entry); } else { InterlockedPushEntrySList(&Lookaside->L.ListHead, (PSLIST_ENTRY)Entry); } +#endif /* NONAMELESSUNION */ } #endif /* _WIN2K_COMPAT_SLIST_USAGE */ @@ -13936,6 +13988,16 @@ ExAllocateFromLookasideListEx( PVOID Entry; Lookaside->L.TotalAllocates += 1; +#ifdef NONAMELESSUNION + Entry = InterlockedPopEntrySList(&Lookaside->L.u.ListHead); + if (Entry == NULL) { + Lookaside->L.u2.AllocateMisses += 1; + Entry = (Lookaside->L.u4.AllocateEx)(Lookaside->L.Type, + Lookaside->L.Size, + Lookaside->L.Tag, + Lookaside); + } +#else /* NONAMELESSUNION */ Entry = InterlockedPopEntrySList(&Lookaside->L.ListHead); if (Entry == NULL) { Lookaside->L.AllocateMisses += 1; @@ -13944,6 +14006,7 @@ ExAllocateFromLookasideListEx( Lookaside->L.Tag, Lookaside); } +#endif /* NONAMELESSUNION */ return Entry; } @@ -13986,6 +14049,20 @@ ExAllocateFromNPagedLookasideList( PVOID Entry; Lookaside->L.TotalAllocates++; +#ifdef NONAMELESSUNION +#if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_) + Entry = ExInterlockedPopEntrySList(&Lookaside->L.u.ListHead, + &Lookaside->Lock__ObsoleteButDoNotDelete); +#else + Entry = InterlockedPopEntrySList(&Lookaside->L.u.ListHead); +#endif + if (Entry == NULL) { + Lookaside->L.u2.AllocateMisses++; + Entry = (Lookaside->L.u4.Allocate)(Lookaside->L.Type, + Lookaside->L.Size, + Lookaside->L.Tag); + } +#else /* NONAMELESSUNION */ #if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_) Entry = ExInterlockedPopEntrySList(&Lookaside->L.ListHead, &Lookaside->Lock__ObsoleteButDoNotDelete); @@ -13998,6 +14075,7 @@ ExAllocateFromNPagedLookasideList( Lookaside->L.Size, Lookaside->L.Tag); } +#endif /* NONAMELESSUNION */ return Entry; } @@ -14007,6 +14085,20 @@ ExFreeToNPagedLookasideList( IN PVOID Entry) { Lookaside->L.TotalFrees++; +#ifdef NONAMELESSUNION + if (ExQueryDepthSList(&Lookaside->L.u.ListHead) >= Lookaside->L.Depth) { + Lookaside->L.u3.FreeMisses++; + (Lookaside->L.u5.Free)(Entry); + } else { +#if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_) + ExInterlockedPushEntrySList(&Lookaside->L.u.ListHead, + (PSLIST_ENTRY)Entry, + &Lookaside->Lock__ObsoleteButDoNotDelete); +#else + InterlockedPushEntrySList(&Lookaside->L.u.ListHead, (PSLIST_ENTRY)Entry); +#endif + } +#else /* NONAMELESSUNION */ if (ExQueryDepthSList(&Lookaside->L.ListHead) >= Lookaside->L.Depth) { Lookaside->L.FreeMisses++; (Lookaside->L.Free)(Entry); @@ -14019,6 +14111,7 @@ ExFreeToNPagedLookasideList( InterlockedPushEntrySList(&Lookaside->L.ListHead, (PSLIST_ENTRY)Entry); #endif } +#endif /* NONAMELESSUNION */ } /****************************************************************************** @@ -14225,7 +14318,7 @@ WmiTraceMessage( #endif #endif /* RUN_WPP */ - #if (NTDDI_VERSION >= NTDDI_WINXP) +#if (NTDDI_VERSION >= NTDDI_WINXP) NTKERNELAPI NTSTATUS @@ -14241,7 +14334,7 @@ WmiQueryTraceInformation( /* FIXME: Get va_list from where? */ NTKERNELAPI NTSTATUS -__cdecl +NTAPI WmiTraceMessageVa( IN TRACEHANDLE LoggerHandle, IN ULONG MessageFlags, diff --git a/include/ddk/wmilib.h b/include/ddk/wmilib.h index a0a5bdc5f22..85ad7611ab9 100644 --- a/include/ddk/wmilib.h +++ b/include/ddk/wmilib.h @@ -30,7 +30,7 @@ typedef NTSTATUS OUT PUNICODE_STRING *RegistryPath OPTIONAL, IN OUT PUNICODE_STRING MofResourceName, OUT PDEVICE_OBJECT *Pdo OPTIONAL); - + typedef NTSTATUS (NTAPI *PWMI_FUNCTION_CONTROL) ( IN OUT PDEVICE_OBJECT DeviceObject, diff --git a/include/dxsdk/atsmedia.h b/include/dxsdk/atsmedia.h index a6b2746424a..c0c96e106de 100644 --- a/include/dxsdk/atsmedia.h +++ b/include/dxsdk/atsmedia.h @@ -18,19 +18,14 @@ #pragma once -#if !defined(_BDAMEDIA_) - #error BDAMEDIA.H must be included before ATSCMEDIA.H -#endif - -#if !defined(_KSMEDIA_) - #error KSMEDIA.H must be included before BDAMEDIA.H -#endif - -#if !defined(_ATSCMEDIA_) +#ifndef _ATSCMEDIA_ #define _ATSCMEDIA_ -#define BDANETWORKTYPE_ATSC DEFINE_GUIDNAMED(BDANETWORKTYPE_ATSC) -#define STATIC_BDANETWORKTYPE_ATSC 0x71985F51, 0x1CA1, 0x11D3, 0x9C, 0xC8, 0x0, 0xC0, 0x4F, 0x79, 0x71, 0xE0 -DEFINE_GUIDSTRUCT("71985F51-1CA1-11D3-9CC8-00C04F7971E0", BDANETWORKTYPE_ATSC); -#endif +#include +#define BDANETWORKTYPE_ATSC DEFINE_GUIDNAMED(BDANETWORKTYPE_ATSC) +#define STATIC_BDANETWORKTYPE_ATSC \ + 0x71985F51, 0x1CA1, 0x11D3, 0x9C, 0xC8, 0x0, 0xC0, 0x4F, 0x79, 0x71, 0xE0 +DEFINE_GUIDSTRUCT("71985F51-1CA1-11D3-9CC8-00C04F7971E0", BDANETWORKTYPE_ATSC); + +#endif /* _ATSCMEDIA_ */ diff --git a/include/dxsdk/bdamedia.h b/include/dxsdk/bdamedia.h index f090af5b4c2..3c563ca79ba 100644 --- a/include/dxsdk/bdamedia.h +++ b/include/dxsdk/bdamedia.h @@ -1,204 +1,215 @@ -#ifndef BDAMEDIA_H__ -#define BDAMEDIA_H__ +/* + * bdamedia.h + * + * This file is part of the ReactOS DXSDK package. + * + * THIS SOFTWARE IS NOT COPYRIGHTED + * + * This source code is offered for use in the public domain. You may + * use, modify or distribute it freely. + * + * This code is distributed in the hope that it will be useful but + * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY + * DISCLAIMED. This includes but is not limited to warranties of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + */ + +#ifndef _BDAMEDIA_ +#define _BDAMEDIA_ + +#include +#include typedef struct _KSP_BDA_NODE_PIN { - KSPROPERTY Property; - ULONG ulNodeType; - ULONG ulInputPinId; - ULONG ulOutputPinId; + KSPROPERTY Property; + ULONG ulNodeType; + ULONG ulInputPinId; + ULONG ulOutputPinId; } KSP_BDA_NODE_PIN, *PKSP_BDA_NODE_PIN; -typedef struct _KSM_BDA_PIN -{ - KSMETHOD Method; - union - { - ULONG PinId; - ULONG PinType; - }; - ULONG Reserved; -} KSM_BDA_PIN, * PKSM_BDA_PIN; +typedef struct _KSM_BDA_PIN { + KSMETHOD Method; + __MINGW_EXTENSION union { + ULONG PinId; + ULONG PinType; + }; + ULONG Reserved; +} KSM_BDA_PIN, *PKSM_BDA_PIN; + +typedef struct _KSM_BDA_PIN_PAIR { + KSMETHOD Method; + __MINGW_EXTENSION union { + ULONG InputPinId; + ULONG InputPinType; + }; + __MINGW_EXTENSION union { + ULONG OutputPinId; + ULONG OutputPinType; + }; +} KSM_BDA_PIN_PAIR, *PKSM_BDA_PIN_PAIR; -typedef struct _KSM_BDA_PIN_PAIR -{ - KSMETHOD Method; - union - { - ULONG InputPinId; - ULONG InputPinType; - }; - union - { - ULONG OutputPinId; - ULONG OutputPinType; - }; -} KSM_BDA_PIN_PAIR, * PKSM_BDA_PIN_PAIR; /* ------------------------------------------------------------ BDA Topology Property Set {A14EE835-0A23-11d3-9CC7-00C04F7971E0} */ #define STATIC_KSPROPSETID_BdaTopology \ - 0xa14ee835, 0x0a23, 0x11d3, 0x9c, 0xc7, 0x0, 0xc0, 0x4f, 0x79, 0x71, 0xe0 + 0xa14ee835, 0x0a23, 0x11d3, 0x9c, 0xc7, 0x0, 0xc0, 0x4f, 0x79, 0x71, 0xe0 + DEFINE_GUIDSTRUCT("A14EE835-0A23-11d3-9CC7-00C04F7971E0", KSPROPSETID_BdaTopology); + #define KSPROPSETID_BdaTopology DEFINE_GUIDNAMED(KSPROPSETID_BdaTopology) typedef enum { - KSPROPERTY_BDA_NODE_TYPES, - KSPROPERTY_BDA_PIN_TYPES, - KSPROPERTY_BDA_TEMPLATE_CONNECTIONS, - KSPROPERTY_BDA_NODE_METHODS, - KSPROPERTY_BDA_NODE_PROPERTIES, - KSPROPERTY_BDA_NODE_EVENTS, - KSPROPERTY_BDA_CONTROLLING_PIN_ID, - KSPROPERTY_BDA_NODE_DESCRIPTORS - }KSPROPERTY_BDA_TOPOLOGY; + KSPROPERTY_BDA_NODE_TYPES, + KSPROPERTY_BDA_PIN_TYPES, + KSPROPERTY_BDA_TEMPLATE_CONNECTIONS, + KSPROPERTY_BDA_NODE_METHODS, + KSPROPERTY_BDA_NODE_PROPERTIES, + KSPROPERTY_BDA_NODE_EVENTS, + KSPROPERTY_BDA_CONTROLLING_PIN_ID, + KSPROPERTY_BDA_NODE_DESCRIPTORS +} KSPROPERTY_BDA_TOPOLOGY; -#define DEFINE_KSPROPERTY_ITEM_BDA_NODE_TYPES(GetHandler, SetHandler)\ - DEFINE_KSPROPERTY_ITEM(\ - KSPROPERTY_BDA_NODE_TYPES,\ - (GetHandler),\ - sizeof(KSPROPERTY),\ - 0,\ - FALSE,\ - NULL, 0, NULL, NULL, 0) +#define DEFINE_KSPROPERTY_ITEM_BDA_NODE_TYPES(GetHandler, SetHandler) \ + DEFINE_KSPROPERTY_ITEM(KSPROPERTY_BDA_NODE_TYPES, \ + (GetHandler), \ + sizeof(KSPROPERTY), \ + 0, \ + FALSE, \ + NULL, 0, NULL, NULL, 0) -#define DEFINE_KSPROPERTY_ITEM_BDA_PIN_TYPES(GetHandler, SetHandler)\ - DEFINE_KSPROPERTY_ITEM(\ - KSPROPERTY_BDA_PIN_TYPES,\ - (GetHandler),\ - sizeof(KSPROPERTY),\ - 0,\ - FALSE,\ - NULL, 0, NULL, NULL, 0) +#define DEFINE_KSPROPERTY_ITEM_BDA_PIN_TYPES(GetHandler, SetHandler) \ + DEFINE_KSPROPERTY_ITEM(KSPROPERTY_BDA_PIN_TYPES, \ + (GetHandler), \ + sizeof(KSPROPERTY), \ + 0, \ + FALSE, \ + NULL, 0, NULL, NULL, 0) -#define DEFINE_KSPROPERTY_ITEM_BDA_TEMPLATE_CONNECTIONS(GetHandler, SetHandler)\ - DEFINE_KSPROPERTY_ITEM(\ - KSPROPERTY_BDA_TEMPLATE_CONNECTIONS,\ - (GetHandler),\ - sizeof(KSPROPERTY),\ - sizeof( BDA_TEMPLATE_CONNECTION),\ - FALSE,\ - NULL, 0, NULL, NULL, 0) +#define DEFINE_KSPROPERTY_ITEM_BDA_TEMPLATE_CONNECTIONS(GetHandler, SetHandler) \ + DEFINE_KSPROPERTY_ITEM(KSPROPERTY_BDA_TEMPLATE_CONNECTIONS, \ + (GetHandler), \ + sizeof(KSPROPERTY), \ + sizeof( BDA_TEMPLATE_CONNECTION), \ + FALSE, \ + NULL, 0, NULL, NULL, 0) -#define DEFINE_KSPROPERTY_ITEM_BDA_NODE_METHODS(GetHandler, SetHandler)\ - DEFINE_KSPROPERTY_ITEM(\ - KSPROPERTY_BDA_NODE_METHODS,\ - (GetHandler),\ - sizeof(KSP_NODE),\ - 0,\ - FALSE,\ - NULL, 0, NULL, NULL, 0) +#define DEFINE_KSPROPERTY_ITEM_BDA_NODE_METHODS(GetHandler, SetHandler) \ + DEFINE_KSPROPERTY_ITEM(KSPROPERTY_BDA_NODE_METHODS, \ + (GetHandler), \ + sizeof(KSP_NODE), \ + 0, \ + FALSE, \ + NULL, 0, NULL, NULL, 0) -#define DEFINE_KSPROPERTY_ITEM_BDA_NODE_PROPERTIES(GetHandler, SetHandler)\ - DEFINE_KSPROPERTY_ITEM(\ - KSPROPERTY_BDA_NODE_PROPERTIES,\ - (GetHandler),\ - sizeof(KSP_NODE),\ - 0,\ - FALSE,\ - NULL, 0, NULL, NULL, 0) +#define DEFINE_KSPROPERTY_ITEM_BDA_NODE_PROPERTIES(GetHandler, SetHandler) \ + DEFINE_KSPROPERTY_ITEM(KSPROPERTY_BDA_NODE_PROPERTIES, \ + (GetHandler), \ + sizeof(KSP_NODE), \ + 0, \ + FALSE, \ + NULL, 0, NULL, NULL, 0) -#define DEFINE_KSPROPERTY_ITEM_BDA_NODE_EVENTS(GetHandler, SetHandler)\ - DEFINE_KSPROPERTY_ITEM(\ - KSPROPERTY_BDA_NODE_EVENTS,\ - (GetHandler),\ - sizeof(KSP_NODE),\ - 0,\ - FALSE,\ - NULL, 0, NULL, NULL, 0) +#define DEFINE_KSPROPERTY_ITEM_BDA_NODE_EVENTS(GetHandler, SetHandler) \ + DEFINE_KSPROPERTY_ITEM(KSPROPERTY_BDA_NODE_EVENTS, \ + (GetHandler), \ + sizeof(KSP_NODE), \ + 0, \ + FALSE, \ + NULL, 0, NULL, NULL, 0) -#define DEFINE_KSPROPERTY_ITEM_BDA_CONTROLLING_PIN_ID(GetHandler, SetHandler)\ - DEFINE_KSPROPERTY_ITEM(\ - KSPROPERTY_BDA_CONTROLLING_PIN_ID,\ - (GetHandler),\ - sizeof(KSP_BDA_NODE_PIN),\ - sizeof( ULONG),\ - FALSE,\ - NULL, 0, NULL, NULL, 0) +#define DEFINE_KSPROPERTY_ITEM_BDA_CONTROLLING_PIN_ID(GetHandler, SetHandler) \ + DEFINE_KSPROPERTY_ITEM(KSPROPERTY_BDA_CONTROLLING_PIN_ID, \ + (GetHandler), \ + sizeof(KSP_BDA_NODE_PIN), \ + sizeof( ULONG), \ + FALSE, \ + NULL, 0, NULL, NULL, 0) + +#define DEFINE_KSPROPERTY_ITEM_BDA_NODE_DESCRIPTORS(GetHandler, SetHandler) \ + DEFINE_KSPROPERTY_ITEM(KSPROPERTY_BDA_NODE_DESCRIPTORS, \ + (GetHandler), \ + sizeof(KSPROPERTY), \ + 0, \ + FALSE, \ + NULL, 0, NULL, NULL, 0) -#define DEFINE_KSPROPERTY_ITEM_BDA_NODE_DESCRIPTORS(GetHandler, SetHandler)\ - DEFINE_KSPROPERTY_ITEM(\ - KSPROPERTY_BDA_NODE_DESCRIPTORS,\ - (GetHandler),\ - sizeof(KSPROPERTY),\ - 0,\ - FALSE,\ - NULL, 0, NULL, NULL, 0) /* ------------------------------------------------------------ BDA Device Configuration Method Set {71985F45-1CA1-11d3-9CC8-00C04F7971E0} */ #define STATIC_KSMETHODSETID_BdaDeviceConfiguration \ - 0x71985f45, 0x1ca1, 0x11d3, 0x9c, 0xc8, 0x0, 0xc0, 0x4f, 0x79, 0x71, 0xe0 + 0x71985f45, 0x1ca1, 0x11d3, 0x9c, 0xc8, 0x0, 0xc0, 0x4f, 0x79, 0x71, 0xe0 + DEFINE_GUIDSTRUCT("71985F45-1CA1-11d3-9CC8-00C04F7971E0", KSMETHODSETID_BdaDeviceConfiguration); + #define KSMETHODSETID_BdaDeviceConfiguration DEFINE_GUIDNAMED(KSMETHODSETID_BdaDeviceConfiguration) typedef enum { - KSMETHOD_BDA_CREATE_PIN_FACTORY = 0, - KSMETHOD_BDA_DELETE_PIN_FACTORY, - KSMETHOD_BDA_CREATE_TOPOLOGY + KSMETHOD_BDA_CREATE_PIN_FACTORY = 0, + KSMETHOD_BDA_DELETE_PIN_FACTORY, + KSMETHOD_BDA_CREATE_TOPOLOGY } KSMETHOD_BDA_DEVICE_CONFIGURATION; -#define DEFINE_KSMETHOD_ITEM_BDA_CREATE_PIN_FACTORY(MethodHandler, SupportHandler)\ - DEFINE_KSMETHOD_ITEM(\ - KSMETHOD_BDA_CREATE_PIN_FACTORY,\ - KSMETHOD_TYPE_READ,\ - (MethodHandler),\ - sizeof(KSM_BDA_PIN),\ - sizeof(ULONG),\ - SupportHandler) +#define DEFINE_KSMETHOD_ITEM_BDA_CREATE_PIN_FACTORY(MethodHandler, SupportHandler) \ + DEFINE_KSMETHOD_ITEM(KSMETHOD_BDA_CREATE_PIN_FACTORY, \ + KSMETHOD_TYPE_READ, \ + (MethodHandler), \ + sizeof(KSM_BDA_PIN), \ + sizeof(ULONG), \ + SupportHandler) -#define DEFINE_KSMETHOD_ITEM_BDA_DELETE_PIN_FACTORY(MethodHandler, SupportHandler)\ - DEFINE_KSMETHOD_ITEM(\ - KSMETHOD_BDA_DELETE_PIN_FACTORY,\ - KSMETHOD_TYPE_NONE,\ - (MethodHandler),\ - sizeof(KSM_BDA_PIN),\ - 0,\ - SupportHandler) +#define DEFINE_KSMETHOD_ITEM_BDA_DELETE_PIN_FACTORY(MethodHandler, SupportHandler) \ + DEFINE_KSMETHOD_ITEM(KSMETHOD_BDA_DELETE_PIN_FACTORY, \ + KSMETHOD_TYPE_NONE, \ + (MethodHandler), \ + sizeof(KSM_BDA_PIN), \ + 0, \ + SupportHandler) + +#define DEFINE_KSMETHOD_ITEM_BDA_CREATE_TOPOLOGY(MethodHandler, SupportHandler) \ + DEFINE_KSMETHOD_ITEM(KSMETHOD_BDA_CREATE_TOPOLOGY, \ + KSMETHOD_TYPE_WRITE, \ + (MethodHandler), \ + sizeof(KSM_BDA_PIN_PAIR), \ + 0, \ + SupportHandler) -#define DEFINE_KSMETHOD_ITEM_BDA_CREATE_TOPOLOGY(MethodHandler, SupportHandler)\ - DEFINE_KSMETHOD_ITEM(\ - KSMETHOD_BDA_CREATE_TOPOLOGY,\ - KSMETHOD_TYPE_WRITE,\ - (MethodHandler),\ - sizeof(KSM_BDA_PIN_PAIR),\ - 0,\ - SupportHandler) /* ------------------------------------------------------------ BDA Pin Control Property {0DED49D5-A8B7-4d5d-97A1-12B0C195874D} */ #define STATIC_KSPROPSETID_BdaPinControl \ - 0xded49d5, 0xa8b7, 0x4d5d, 0x97, 0xa1, 0x12, 0xb0, 0xc1, 0x95, 0x87, 0x4d + 0xded49d5, 0xa8b7, 0x4d5d, 0x97, 0xa1, 0x12, 0xb0, 0xc1, 0x95, 0x87, 0x4d + DEFINE_GUIDSTRUCT("0DED49D5-A8B7-4d5d-97A1-12B0C195874D", KSPROPSETID_BdaPinControl); + #define KSPROPSETID_BdaPinControl DEFINE_GUIDNAMED(KSPROPSETID_BdaPinControl) typedef enum { - KSPROPERTY_BDA_PIN_ID = 0, - KSPROPERTY_BDA_PIN_TYPE + KSPROPERTY_BDA_PIN_ID = 0, + KSPROPERTY_BDA_PIN_TYPE } KSPROPERTY_BDA_PIN_CONTROL; -#define DEFINE_KSPROPERTY_ITEM_BDA_PIN_ID(GetHandler, SetHandler)\ - DEFINE_KSPROPERTY_ITEM(\ - KSPROPERTY_BDA_PIN_ID,\ - (GetHandler),\ - sizeof( KSPROPERTY),\ - sizeof( ULONG),\ - FALSE,\ - NULL, 0, NULL, NULL, 0) +#define DEFINE_KSPROPERTY_ITEM_BDA_PIN_ID(GetHandler, SetHandler) \ + DEFINE_KSPROPERTY_ITEM(KSPROPERTY_BDA_PIN_ID, \ + (GetHandler), \ + sizeof( KSPROPERTY), \ + sizeof( ULONG), \ + FALSE, \ + NULL, 0, NULL, NULL, 0) -#define DEFINE_KSPROPERTY_ITEM_BDA_PIN_TYPE(GetHandler, SetHandler)\ - DEFINE_KSPROPERTY_ITEM(\ - KSPROPERTY_BDA_PIN_TYPE,\ - (GetHandler),\ - sizeof( KSPROPERTY),\ - sizeof( ULONG),\ - FALSE,\ - NULL, 0, NULL, NULL, 0) +#define DEFINE_KSPROPERTY_ITEM_BDA_PIN_TYPE(GetHandler, SetHandler) \ + DEFINE_KSPROPERTY_ITEM(KSPROPERTY_BDA_PIN_TYPE, \ + (GetHandler), \ + sizeof( KSPROPERTY), \ + sizeof( ULONG), \ + FALSE, \ + NULL, 0, NULL, NULL, 0) /* ------------------------------------------------------------ @@ -206,198 +217,214 @@ typedef enum { */ #define STATIC_KSMETHODSETID_BdaChangeSync \ - 0xfd0a5af3, 0xb41d, 0x11d2, {0x9c, 0x95, 0x0, 0xc0, 0x4f, 0x79, 0x71, 0xe0} + 0xfd0a5af3, 0xb41d, 0x11d2, 0x9c, 0x95, 0x0, 0xc0, 0x4f, 0x79, 0x71, 0xe0 + DEFINE_GUIDSTRUCT("FD0A5AF3-B41D-11d2-9C95-00C04F7971E0", KSMETHODSETID_BdaChangeSync); + #define KSMETHODSETID_BdaChangeSync DEFINE_GUIDNAMED(KSMETHODSETID_BdaChangeSync) typedef enum { - KSMETHOD_BDA_START_CHANGES = 0, - KSMETHOD_BDA_CHECK_CHANGES, - KSMETHOD_BDA_COMMIT_CHANGES, - KSMETHOD_BDA_GET_CHANGE_STATE + KSMETHOD_BDA_START_CHANGES = 0, + KSMETHOD_BDA_CHECK_CHANGES, + KSMETHOD_BDA_COMMIT_CHANGES, + KSMETHOD_BDA_GET_CHANGE_STATE } KSMETHOD_BDA_CHANGE_SYNC; -#define DEFINE_KSMETHOD_ITEM_BDA_START_CHANGES(MethodHandler, SupportHandler)\ - DEFINE_KSMETHOD_ITEM(\ - KSMETHOD_BDA_START_CHANGES,\ - KSMETHOD_TYPE_NONE,\ - (MethodHandler),\ - sizeof(KSMETHOD),\ - 0,\ - SupportHandler) +#define DEFINE_KSMETHOD_ITEM_BDA_START_CHANGES(MethodHandler, SupportHandler) \ + DEFINE_KSMETHOD_ITEM(KSMETHOD_BDA_START_CHANGES, \ + KSMETHOD_TYPE_NONE, \ + (MethodHandler), \ + sizeof(KSMETHOD), \ + 0, \ + SupportHandler) -#define DEFINE_KSMETHOD_ITEM_BDA_CHECK_CHANGES(MethodHandler, SupportHandler)\ - DEFINE_KSMETHOD_ITEM(\ - KSMETHOD_BDA_CHECK_CHANGES,\ - KSMETHOD_TYPE_NONE,\ - (MethodHandler),\ - sizeof(KSMETHOD),\ - 0,\ - SupportHandler) +#define DEFINE_KSMETHOD_ITEM_BDA_CHECK_CHANGES(MethodHandler, SupportHandler) \ + DEFINE_KSMETHOD_ITEM(KSMETHOD_BDA_CHECK_CHANGES, \ + KSMETHOD_TYPE_NONE, \ + (MethodHandler), \ + sizeof(KSMETHOD), \ + 0, \ + SupportHandler) -#define DEFINE_KSMETHOD_ITEM_BDA_COMMIT_CHANGES(MethodHandler, SupportHandler)\ - DEFINE_KSMETHOD_ITEM(\ - KSMETHOD_BDA_COMMIT_CHANGES,\ - KSMETHOD_TYPE_NONE,\ - (MethodHandler),\ - sizeof(KSMETHOD),\ - 0,\ - SupportHandler) +#define DEFINE_KSMETHOD_ITEM_BDA_COMMIT_CHANGES(MethodHandler, SupportHandler) \ + DEFINE_KSMETHOD_ITEM(KSMETHOD_BDA_COMMIT_CHANGES, \ + KSMETHOD_TYPE_NONE, \ + (MethodHandler), \ + sizeof(KSMETHOD), \ + 0, \ + SupportHandler) -#define DEFINE_KSMETHOD_ITEM_BDA_GET_CHANGE_STATE(MethodHandler, SupportHandler)\ - DEFINE_KSMETHOD_ITEM(\ - KSMETHOD_BDA_GET_CHANGE_STATE,\ - KSMETHOD_TYPE_READ,\ - (MethodHandler),\ - sizeof(KSMETHOD),\ - 0,\ - SupportHandler) +#define DEFINE_KSMETHOD_ITEM_BDA_GET_CHANGE_STATE(MethodHandler, SupportHandler) \ + DEFINE_KSMETHOD_ITEM(KSMETHOD_BDA_GET_CHANGE_STATE, \ + KSMETHOD_TYPE_READ, \ + (MethodHandler), \ + sizeof(KSMETHOD), \ + 0, \ + SupportHandler) #define STATIC_KSPROPSETID_BdaFrequencyFilter \ - 0x71985f47, 0x1ca1, 0x11d3, 0x9c, 0xc8, 0x0, 0xc0, 0x4f, 0x79, 0x71, 0xe0 + 0x71985f47, 0x1ca1, 0x11d3, 0x9c, 0xc8, 0x0, 0xc0, 0x4f, 0x79, 0x71, 0xe0 + DEFINE_GUIDSTRUCT("71985F47-1CA1-11d3-9CC8-00C04F7971E0", KSPROPSETID_BdaFrequencyFilter); + #define KSPROPSETID_BdaFrequencyFilter DEFINE_GUIDNAMED(KSPROPSETID_BdaFrequencyFilter) typedef enum { - KSPROPERTY_BDA_RF_TUNER_FREQUENCY = 0, - KSPROPERTY_BDA_RF_TUNER_POLARITY, - KSPROPERTY_BDA_RF_TUNER_RANGE, - KSPROPERTY_BDA_RF_TUNER_TRANSPONDER, - KSPROPERTY_BDA_RF_TUNER_BANDWIDTH, - KSPROPERTY_BDA_RF_TUNER_FREQUENCY_MULTIPLIER, - KSPROPERTY_BDA_RF_TUNER_CAPS, - KSPROPERTY_BDA_RF_TUNER_SCAN_STATUS, - KSPROPERTY_BDA_RF_TUNER_STANDARD, - KSPROPERTY_BDA_RF_TUNER_STANDARD_MODE -}KSPROPERTY_BDA_FREQUENCY_FILTER; - + KSPROPERTY_BDA_RF_TUNER_FREQUENCY = 0, + KSPROPERTY_BDA_RF_TUNER_POLARITY, + KSPROPERTY_BDA_RF_TUNER_RANGE, + KSPROPERTY_BDA_RF_TUNER_TRANSPONDER, + KSPROPERTY_BDA_RF_TUNER_BANDWIDTH, + KSPROPERTY_BDA_RF_TUNER_FREQUENCY_MULTIPLIER, + KSPROPERTY_BDA_RF_TUNER_CAPS, + KSPROPERTY_BDA_RF_TUNER_SCAN_STATUS, + KSPROPERTY_BDA_RF_TUNER_STANDARD, + KSPROPERTY_BDA_RF_TUNER_STANDARD_MODE +} KSPROPERTY_BDA_FREQUENCY_FILTER; #define STATIC_KSPROPSETID_BdaDigitalDemodulator \ - 0xef30f379, 0x985b, 0x4d10, 0xb6, 0x40, 0xa7, 0x9d, 0x5e, 0x4, 0xe1, 0xe0 + 0xef30f379, 0x985b, 0x4d10, 0xb6, 0x40, 0xa7, 0x9d, 0x5e, 0x4, 0xe1, 0xe0 + DEFINE_GUIDSTRUCT("EF30F379-985B-4d10-B640-A79D5E04E1E0", KSPROPSETID_BdaDigitalDemodulator); + #define KSPROPSETID_BdaDigitalDemodulator DEFINE_GUIDNAMED(KSPROPSETID_BdaDigitalDemodulator) typedef enum { - KSPROPERTY_BDA_MODULATION_TYPE = 0, - KSPROPERTY_BDA_INNER_FEC_TYPE, - KSPROPERTY_BDA_INNER_FEC_RATE, - KSPROPERTY_BDA_OUTER_FEC_TYPE, - KSPROPERTY_BDA_OUTER_FEC_RATE, - KSPROPERTY_BDA_SYMBOL_RATE, - KSPROPERTY_BDA_SPECTRAL_INVERSION, - KSPROPERTY_BDA_GUARD_INTERVAL, - KSPROPERTY_BDA_TRANSMISSION_MODE, - KSPROPERTY_BDA_ROLL_OFF, - KSPROPERTY_BDA_PILOT, - KSPROPERTY_BDA_SIGNALTIMEOUTS -}KSPROPERTY_BDA_DIGITAL_DEMODULATOR; + KSPROPERTY_BDA_MODULATION_TYPE = 0, + KSPROPERTY_BDA_INNER_FEC_TYPE, + KSPROPERTY_BDA_INNER_FEC_RATE, + KSPROPERTY_BDA_OUTER_FEC_TYPE, + KSPROPERTY_BDA_OUTER_FEC_RATE, + KSPROPERTY_BDA_SYMBOL_RATE, + KSPROPERTY_BDA_SPECTRAL_INVERSION, + KSPROPERTY_BDA_GUARD_INTERVAL, + KSPROPERTY_BDA_TRANSMISSION_MODE, + KSPROPERTY_BDA_ROLL_OFF, + KSPROPERTY_BDA_PILOT, + KSPROPERTY_BDA_SIGNALTIMEOUTS +} KSPROPERTY_BDA_DIGITAL_DEMODULATOR; #define STATIC_KSPROPSETID_BdaLNBInfo \ - 0x992cf102, 0x49f9, 0x4719, 0xa6, 0x64, 0xc4, 0xf2, 0x3e, 0x24, 0x8, 0xf4 + 0x992cf102, 0x49f9, 0x4719, 0xa6, 0x64, 0xc4, 0xf2, 0x3e, 0x24, 0x8, 0xf4 + DEFINE_GUIDSTRUCT("992CF102-49F9-4719-A664-C4F23E2408F4", KSPROPSETID_BdaLNBInfo); + #define KSPROPSETID_BdaLNBInfo DEFINE_GUIDNAMED(KSPROPSETID_BdaLNBInfo) typedef enum { - KSPROPERTY_BDA_LNB_LOF_LOW_BAND = 0, - KSPROPERTY_BDA_LNB_LOF_HIGH_BAND, - KSPROPERTY_BDA_LNB_SWITCH_FREQUENCY -}KSPROPERTY_BDA_LNB_INFO; + KSPROPERTY_BDA_LNB_LOF_LOW_BAND = 0, + KSPROPERTY_BDA_LNB_LOF_HIGH_BAND, + KSPROPERTY_BDA_LNB_SWITCH_FREQUENCY +} KSPROPERTY_BDA_LNB_INFO; #define STATIC_KSPROPSETID_BdaSignalStats \ - 0x1347d106, 0xcf3a, 0x428a, 0xa5, 0xcb, 0xac, 0xd, 0x9a, 0x2a, 0x43, 0x38 + 0x1347d106, 0xcf3a, 0x428a, 0xa5, 0xcb, 0xac, 0xd, 0x9a, 0x2a, 0x43, 0x38 + DEFINE_GUIDSTRUCT("1347D106-CF3A-428a-A5CB-AC0D9A2A4338", KSPROPSETID_BdaSignalStats); + #define KSPROPSETID_BdaSignalStats DEFINE_GUIDNAMED(KSPROPSETID_BdaSignalStats) typedef enum { - KSPROPERTY_BDA_SIGNAL_STRENGTH = 0, - KSPROPERTY_BDA_SIGNAL_QUALITY, - KSPROPERTY_BDA_SIGNAL_PRESENT, - KSPROPERTY_BDA_SIGNAL_LOCKED, - KSPROPERTY_BDA_SAMPLE_TIME -}KSPROPERTY_BDA_SIGNAL_STATS; + KSPROPERTY_BDA_SIGNAL_STRENGTH = 0, + KSPROPERTY_BDA_SIGNAL_QUALITY, + KSPROPERTY_BDA_SIGNAL_PRESENT, + KSPROPERTY_BDA_SIGNAL_LOCKED, + KSPROPERTY_BDA_SAMPLE_TIME +} KSPROPERTY_BDA_SIGNAL_STATS; typedef struct tagBDA_TRANSPORT_INFO { - ULONG ulcbPhyiscalPacket; - ULONG ulcbPhyiscalFrame; - ULONG ulcbPhyiscalFrameAlignment; - REFERENCE_TIME AvgTimePerFrame; - + ULONG ulcbPhyiscalPacket; + ULONG ulcbPhyiscalFrame; + ULONG ulcbPhyiscalFrameAlignment; + REFERENCE_TIME AvgTimePerFrame; } BDA_TRANSPORT_INFO, *PBDA_TRANSPORT_INFO; -typedef struct tagKS_DATARANGE_BDA_TRANSPORT -{ - KSDATARANGE DataRange; - BDA_TRANSPORT_INFO BdaTransportInfo; +typedef struct tagKS_DATARANGE_BDA_TRANSPORT { + KSDATARANGE DataRange; + BDA_TRANSPORT_INFO BdaTransportInfo; } KS_DATARANGE_BDA_TRANSPORT, *PKS_DATARANGE_BDA_TRANSPORT; + /* ------------------------------------------------------------ BDA Stream Format GUIDs */ #define STATIC_KSDATAFORMAT_TYPE_BDA_ANTENNA\ - 0x71985f41, 0x1ca1, 0x11d3, 0x9c, 0xc8, 0x0, 0xc0, 0x4f, 0x79, 0x71, 0xe0 + 0x71985f41, 0x1ca1, 0x11d3, 0x9c, 0xc8, 0x0, 0xc0, 0x4f, 0x79, 0x71, 0xe0 + DEFINE_GUIDSTRUCT("71985F41-1CA1-11d3-9CC8-00C04F7971E0", KSDATAFORMAT_TYPE_BDA_ANTENNA); + #define KSDATAFORMAT_TYPE_BDA_ANTENNA DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_BDA_ANTENNA) - #define STATIC_KSDATAFORMAT_SUBTYPE_BDA_MPEG2_TRANSPORT\ - 0xf4aeb342, 0x0329, 0x4fdd, 0xa8, 0xfd, 0x4a, 0xff, 0x49, 0x26, 0xc9, 0x78 + 0xf4aeb342, 0x0329, 0x4fdd, 0xa8, 0xfd, 0x4a, 0xff, 0x49, 0x26, 0xc9, 0x78 + DEFINE_GUIDSTRUCT("F4AEB342-0329-4fdd-A8FD-4AFF4926C978", KSDATAFORMAT_SUBTYPE_BDA_MPEG2_TRANSPORT); + #define KSDATAFORMAT_SUBTYPE_BDA_MPEG2_TRANSPORT DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_BDA_MPEG2_TRANSPORT) - #define STATIC_KSDATAFORMAT_SPECIFIER_BDA_TRANSPORT\ - 0x8deda6fd, 0xac5f, 0x4334, 0x8e, 0xcf, 0xa4, 0xba, 0x8f, 0xa7, 0xd0, 0xf0 + 0x8deda6fd, 0xac5f, 0x4334, 0x8e, 0xcf, 0xa4, 0xba, 0x8f, 0xa7, 0xd0, 0xf0 + DEFINE_GUIDSTRUCT("8DEDA6FD-AC5F-4334-8ECF-A4BA8FA7D0F0", KSDATAFORMAT_SPECIFIER_BDA_TRANSPORT); + #define KSDATAFORMAT_SPECIFIER_BDA_TRANSPORT DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_BDA_TRANSPORT) - #define STATIC_KSDATAFORMAT_TYPE_BDA_IF_SIGNAL\ - 0x61be0b47, 0xa5eb, 0x499b, 0x9a, 0x85, 0x5b, 0x16, 0xc0, 0x7f, 0x12, 0x58 + 0x61be0b47, 0xa5eb, 0x499b, 0x9a, 0x85, 0x5b, 0x16, 0xc0, 0x7f, 0x12, 0x58 + DEFINE_GUIDSTRUCT("61BE0B47-A5EB-499b-9A85-5B16C07F1258", KSDATAFORMAT_TYPE_BDA_IF_SIGNAL); + #define KSDATAFORMAT_TYPE_BDA_IF_SIGNAL DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_BDA_IF_SIGNAL) - #define STATIC_KSDATAFORMAT_TYPE_MPEG2_SECTIONS\ - 0x455f176c, 0x4b06, 0x47ce, 0x9a, 0xef, 0x8c, 0xae, 0xf7, 0x3d, 0xf7, 0xb5 + 0x455f176c, 0x4b06, 0x47ce, 0x9a, 0xef, 0x8c, 0xae, 0xf7, 0x3d, 0xf7, 0xb5 + DEFINE_GUIDSTRUCT("455F176C-4B06-47CE-9AEF-8CAEF73DF7B5", KSDATAFORMAT_TYPE_MPEG2_SECTIONS); + #define KSDATAFORMAT_TYPE_MPEG2_SECTIONS DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_MPEG2_SECTIONS) - #define STATIC_KSDATAFORMAT_SUBTYPE_ATSC_SI\ - 0xb3c7397c, 0xd303, 0x414d, 0xb3, 0x3c, 0x4e, 0xd2, 0xc9, 0xd2, 0x97, 0x33 + 0xb3c7397c, 0xd303, 0x414d, 0xb3, 0x3c, 0x4e, 0xd2, 0xc9, 0xd2, 0x97, 0x33 + DEFINE_GUIDSTRUCT("B3C7397C-D303-414D-B33C-4ED2C9D29733", KSDATAFORMAT_SUBTYPE_ATSC_SI); + #define KSDATAFORMAT_SUBTYPE_ATSC_SI DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_ATSC_SI) - #define STATIC_KSDATAFORMAT_SUBTYPE_DVB_SI\ - 0xe9dd31a3, 0x221d, 0x4adb, 0x85, 0x32, 0x9a, 0xf3, 0x9, 0xc1, 0xa4, 0x8 + 0xe9dd31a3, 0x221d, 0x4adb, 0x85, 0x32, 0x9a, 0xf3, 0x9, 0xc1, 0xa4, 0x8 + DEFINE_GUIDSTRUCT("e9dd31a3-221d-4adb-8532-9af309c1a408", KSDATAFORMAT_SUBTYPE_DVB_SI); + #define KSDATAFORMAT_SUBTYPE_DVB_SI DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_DVB_SI) - #define STATIC_KSDATAFORMAT_SUBTYPE_BDA_OPENCABLE_PSIP\ - 0x762e3f66, 0x336f, 0x48d1, 0xbf, 0x83, 0x2b, 0x0, 0x35, 0x2c, 0x11, 0xf0 + 0x762e3f66, 0x336f, 0x48d1, 0xbf, 0x83, 0x2b, 0x0, 0x35, 0x2c, 0x11, 0xf0 + DEFINE_GUIDSTRUCT("762E3F66-336F-48d1-BF83-2B00352C11F0", KSDATAFORMAT_SUBTYPE_BDA_OPENCABLE_PSIP); + #define KSDATAFORMAT_SUBTYPE_BDA_OPENCABLE_PSIP DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_BDA_OPENCABLE_PSIP) - #define STATIC_KSDATAFORMAT_SUBTYPE_BDA_OPENCABLE_OOB_PSIP\ - 0x951727db, 0xd2ce, 0x4528, 0x96, 0xf6, 0x33, 0x1, 0xfa, 0xbb, 0x2d, 0xe0 + 0x951727db, 0xd2ce, 0x4528, 0x96, 0xf6, 0x33, 0x1, 0xfa, 0xbb, 0x2d, 0xe0 + DEFINE_GUIDSTRUCT("951727DB-D2CE-4528-96F6-3301FABB2DE0", KSDATAFORMAT_SUBTYPE_BDA_OPENCABLE_OOB_PSIP); + #define KSDATAFORMAT_SUBTYPE_BDA_OPENCABLE_OOB_PSIP DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_BDA_OPENCABLE_OOB_PSIP) - #define STATIC_KSDATAFORMAT_SUBTYPE_ISDB_SI\ - 0x4a2eeb99, 0x6458, 0x4538, 0xb1, 0x87, 0x04, 0x01, 0x7c, 0x41, 0x41, 0x3f + 0x4a2eeb99, 0x6458, 0x4538, 0xb1, 0x87, 0x04, 0x01, 0x7c, 0x41, 0x41, 0x3f + DEFINE_GUIDSTRUCT("4a2eeb99-6458-4538-b187-04017c41413f", KSDATAFORMAT_SUBTYPE_ISDB_SI); + #define KSDATAFORMAT_SUBTYPE_ISDB_SI DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_ISDB_SI) - #define STATIC_KSDATAFORMAT_SUBTYPE_PBDA_TRANSPORT_RAW\ - 0x0d7aed42, 0xcb9a, 0x11db, 0x97, 0x05, 0x00, 0x50, 0x56, 0xc0, 0x00, 0x08 + 0x0d7aed42, 0xcb9a, 0x11db, 0x97, 0x05, 0x00, 0x50, 0x56, 0xc0, 0x00, 0x08 + DEFINE_GUIDSTRUCT("0d7AED42-CB9A-11DB-9705-005056C00008", KSDATAFORMAT_SUBTYPE_PBDA_TRANSPORT_RAW); + #define KSDATAFORMAT_SUBTYPE_PBDA_TRANSPORT_RAW DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_PBDA_TRANSPORT_RAW) -#endif +#endif /* _BDAMEDIA_ */ diff --git a/include/dxsdk/bdatypes.h b/include/dxsdk/bdatypes.h index 5dc72cd6d43..0307e9a8761 100644 --- a/include/dxsdk/bdatypes.h +++ b/include/dxsdk/bdatypes.h @@ -1,9 +1,24 @@ +/* + * bdatypes.h + * + * This file is part of the ReactOS DXSDK package. + * + * THIS SOFTWARE IS NOT COPYRIGHTED + * + * This source code is offered for use in the public domain. You may + * use, modify or distribute it freely. + * + * This code is distributed in the hope that it will be useful but + * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY + * DISCLAIMED. This includes but is not limited to warranties of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + */ #ifndef _BDATYPES_ - #define _BDATYPES_ 1 -#define MIN_DIMENSION 1 +#define MIN_DIMENSION 1 #ifdef __midl #define V1_ENUM [v1_enum] @@ -11,365 +26,305 @@ #define V1_ENUM #endif -#define BDA_FREQUENCY_NOT_SET -1 -#define BDA_FREQUENCY_NOT_DEFINED 0 -#define BDA_RANGE_NOT_SET -1 -#define BDA_RANGE_NOT_DEFINED 0 -#define BDA_CHAN_BANDWITH_NOT_SET -1 -#define BDA_CHAN_BANDWITH_NOT_DEFINED 0 -#define BDA_FREQUENCY_MULTIPLIER_NOT_SET -1 +#define BDA_FREQUENCY_NOT_SET -1 +#define BDA_FREQUENCY_NOT_DEFINED 0 +#define BDA_RANGE_NOT_SET -1 +#define BDA_RANGE_NOT_DEFINED 0 +#define BDA_CHAN_BANDWITH_NOT_SET -1 +#define BDA_CHAN_BANDWITH_NOT_DEFINED 0 +#define BDA_FREQUENCY_MULTIPLIER_NOT_SET -1 #define BDA_FREQUENCY_MULTIPLIER_NOT_DEFINED 0 +typedef struct _BDA_TEMPLATE_CONNECTION { + ULONG FromNodeType; + ULONG FromNodePinType; + ULONG ToNodeType; + ULONG ToNodePinType; +} BDA_TEMPLATE_CONNECTION, *PBDA_TEMPLATE_CONNECTION; -typedef struct _BDA_TEMPLATE_CONNECTION -{ - ULONG FromNodeType; - ULONG FromNodePinType; - ULONG ToNodeType; - ULONG ToNodePinType; -}BDA_TEMPLATE_CONNECTION, *PBDA_TEMPLATE_CONNECTION; +typedef struct _BDA_TEMPLATE_PIN_JOINT { + ULONG uliTemplateConnection; + ULONG ulcInstancesMax; +} BDA_TEMPLATE_PIN_JOINT, *PBDA_TEMPLATE_PIN_JOINT; - -typedef struct _BDA_TEMPLATE_PIN_JOINT -{ - ULONG uliTemplateConnection; - ULONG ulcInstancesMax; -}BDA_TEMPLATE_PIN_JOINT, *PBDA_TEMPLATE_PIN_JOINT; - - -typedef struct tagKS_BDA_FRAME_INFO -{ - ULONG ExtendedHeaderSize; - DWORD dwFrameFlags; - ULONG ulEvent; - ULONG ulChannelNumber; - ULONG ulSubchannelNumber; - ULONG ulReason; +typedef struct tagKS_BDA_FRAME_INFO { + ULONG ExtendedHeaderSize; + DWORD dwFrameFlags; + ULONG ulEvent; + ULONG ulChannelNumber; + ULONG ulSubchannelNumber; + ULONG ulReason; } KS_BDA_FRAME_INFO, *PKS_BDA_FRAME_INFO; -typedef enum -{ - BDA_EVENT_SIGNAL_LOSS = 0, - BDA_EVENT_SIGNAL_LOCK, - BDA_EVENT_DATA_START, - BDA_EVENT_DATA_STOP, - BDA_EVENT_CHANNEL_ACQUIRED, - BDA_EVENT_CHANNEL_LOST, - BDA_EVENT_CHANNEL_SOURCE_CHANGED, - BDA_EVENT_CHANNEL_ACTIVATED, - BDA_EVENT_CHANNEL_DEACTIVATED, - BDA_EVENT_SUBCHANNEL_ACQUIRED, - BDA_EVENT_SUBCHANNEL_LOST, - BDA_EVENT_SUBCHANNEL_SOURCE_CHANGED, - BDA_EVENT_SUBCHANNEL_ACTIVATED, - BDA_EVENT_SUBCHANNEL_DEACTIVATED, - BDA_EVENT_ACCESS_GRANTED, - BDA_EVENT_ACCESS_DENIED, - BDA_EVENT_OFFER_EXTENDED, - BDA_EVENT_PURCHASE_COMPLETED, - BDA_EVENT_SMART_CARD_INSERTED, - BDA_EVENT_SMART_CARD_REMOVED +typedef enum { + BDA_EVENT_SIGNAL_LOSS = 0, + BDA_EVENT_SIGNAL_LOCK, + BDA_EVENT_DATA_START, + BDA_EVENT_DATA_STOP, + BDA_EVENT_CHANNEL_ACQUIRED, + BDA_EVENT_CHANNEL_LOST, + BDA_EVENT_CHANNEL_SOURCE_CHANGED, + BDA_EVENT_CHANNEL_ACTIVATED, + BDA_EVENT_CHANNEL_DEACTIVATED, + BDA_EVENT_SUBCHANNEL_ACQUIRED, + BDA_EVENT_SUBCHANNEL_LOST, + BDA_EVENT_SUBCHANNEL_SOURCE_CHANGED, + BDA_EVENT_SUBCHANNEL_ACTIVATED, + BDA_EVENT_SUBCHANNEL_DEACTIVATED, + BDA_EVENT_ACCESS_GRANTED, + BDA_EVENT_ACCESS_DENIED, + BDA_EVENT_OFFER_EXTENDED, + BDA_EVENT_PURCHASE_COMPLETED, + BDA_EVENT_SMART_CARD_INSERTED, + BDA_EVENT_SMART_CARD_REMOVED } BDA_EVENT_ID, *PBDA_EVENT_ID; - - -typedef struct _BDA_ETHERNET_ADDRESS -{ - BYTE rgbAddress[6]; +typedef struct _BDA_ETHERNET_ADDRESS { + BYTE rgbAddress[6]; } BDA_ETHERNET_ADDRESS, *PBDA_ETHERNET_ADDRESS; typedef struct _BDA_ETHERNET_ADDRESS_LIST { - ULONG ulcAddresses; - BDA_ETHERNET_ADDRESS rgAddressl[MIN_DIMENSION]; + ULONG ulcAddresses; + BDA_ETHERNET_ADDRESS rgAddressl[MIN_DIMENSION]; } BDA_ETHERNET_ADDRESS_LIST, *PBDA_ETHERNET_ADDRESS_LIST; -typedef enum -{ - BDA_PROMISCUOUS_MULTICAST = 0, - BDA_FILTERED_MULTICAST, - BDA_NO_MULTICAST +typedef enum { + BDA_PROMISCUOUS_MULTICAST = 0, + BDA_FILTERED_MULTICAST, + BDA_NO_MULTICAST } BDA_MULTICAST_MODE, *PBDA_MULTICAST_MODE; -typedef struct _BDA_IPv4_ADDRESS -{ - BYTE rgbAddress[4]; +typedef struct _BDA_IPv4_ADDRESS { + BYTE rgbAddress[4]; } BDA_IPv4_ADDRESS, *PBDA_IPv4_ADDRESS; -typedef struct _BDA_IPv4_ADDRESS_LIST -{ - ULONG ulcAddresses; - BDA_IPv4_ADDRESS rgAddressl[MIN_DIMENSION]; -} BDA_IPv4_ADDRESS_LIST, * PBDA_IPv4_ADDRESS_LIST; +typedef struct _BDA_IPv4_ADDRESS_LIST { + ULONG ulcAddresses; + BDA_IPv4_ADDRESS rgAddressl[MIN_DIMENSION]; +} BDA_IPv4_ADDRESS_LIST, *PBDA_IPv4_ADDRESS_LIST; - -typedef struct _BDA_IPv6_ADDRESS -{ - BYTE rgbAddress[6]; +typedef struct _BDA_IPv6_ADDRESS { + BYTE rgbAddress[6]; } BDA_IPv6_ADDRESS, *PBDA_IPv6_ADDRESS; -typedef struct _BDA_IPv6_ADDRESS_LIST -{ - ULONG ulcAddresses; - BDA_IPv6_ADDRESS rgAddressl[MIN_DIMENSION]; +typedef struct _BDA_IPv6_ADDRESS_LIST { + ULONG ulcAddresses; + BDA_IPv6_ADDRESS rgAddressl[MIN_DIMENSION]; } BDA_IPv6_ADDRESS_LIST, *PBDA_IPv6_ADDRESS_LIST; +typedef enum { + BDA_CHANGES_COMPLETE = 0, + BDA_CHANGES_PENDING +} BDA_CHANGE_STATE, *PBDA_CHANGE_STATE; -typedef enum -{ - BDA_CHANGES_COMPLETE = 0, - BDA_CHANGES_PENDING +typedef enum { + BDA_SIGNAL_UNAVAILABLE = 0, + BDA_SIGNAL_INACTIVE, + BDA_SIGNAL_ACTIVE +} BDA_SIGNAL_STATE, *PBDA_SIGNAL_STATE; -} BDA_CHANGE_STATE, * PBDA_CHANGE_STATE; - -typedef enum -{ - BDA_SIGNAL_UNAVAILABLE = 0, - BDA_SIGNAL_INACTIVE, - BDA_SIGNAL_ACTIVE -} BDA_SIGNAL_STATE, * PBDA_SIGNAL_STATE; - - - - - -typedef struct _BDANODE_DESCRIPTOR -{ - ULONG ulBdaNodeType; - GUID guidFunction; - GUID guidName; +typedef struct _BDANODE_DESCRIPTOR { + ULONG ulBdaNodeType; + GUID guidFunction; + GUID guidName; } BDANODE_DESCRIPTOR, *PBDANODE_DESCRIPTOR; -typedef enum -{ - MEDIA_TRANSPORT_PACKET, - MEDIA_ELEMENTARY_STREAM, - MEDIA_MPEG2_PSI, - MEDIA_TRANSPORT_PAYLOAD -} MEDIA_SAMPLE_CONTENT ; +typedef enum { + MEDIA_TRANSPORT_PACKET, + MEDIA_ELEMENTARY_STREAM, + MEDIA_MPEG2_PSI, + MEDIA_TRANSPORT_PAYLOAD +} MEDIA_SAMPLE_CONTENT; -typedef struct _BDA_TABLE_SECTION -{ - ULONG ulPrimarySectionId; - ULONG ulSecondarySectionId; - ULONG ulcbSectionLength; - ULONG argbSectionData[MIN_DIMENSION]; +typedef struct _BDA_TABLE_SECTION { + ULONG ulPrimarySectionId; + ULONG ulSecondarySectionId; + ULONG ulcbSectionLength; + ULONG argbSectionData[MIN_DIMENSION]; } BDA_TABLE_SECTION, *PBDA_TABLE_SECTION; +typedef struct { + ULONG ulPID; + MEDIA_SAMPLE_CONTENT MediaSampleContent ; +} PID_MAP; -typedef struct -{ - ULONG ulPID ; - MEDIA_SAMPLE_CONTENT MediaSampleContent ; -} PID_MAP ; - -typedef struct _BDA_PID_MAP -{ - MEDIA_SAMPLE_CONTENT MediaSampleContent; - ULONG ulcPIDs; - ULONG aulPIDs[MIN_DIMENSION]; +typedef struct _BDA_PID_MAP { + MEDIA_SAMPLE_CONTENT MediaSampleContent; + ULONG ulcPIDs; + ULONG aulPIDs[MIN_DIMENSION]; } BDA_PID_MAP, *PBDA_PID_MAP; -typedef struct _BDA_PID_UNMAP -{ - ULONG ulcPIDs; - ULONG aulPIDs[MIN_DIMENSION]; +typedef struct _BDA_PID_UNMAP { + ULONG ulcPIDs; + ULONG aulPIDs[MIN_DIMENSION]; } BDA_PID_UNMAP, *PBDA_PID_UNMAP; - -typedef enum DVBSystemType -{ - DVB_Cable, - DVB_Terrestrial, - DVB_Satellite, +typedef enum DVBSystemType { + DVB_Cable, + DVB_Terrestrial, + DVB_Satellite, } DVBSystemType; -typedef struct _BDA_CA_MODULE_UI -{ - ULONG ulFormat; - ULONG ulbcDesc; - ULONG ulDesc[MIN_DIMENSION]; +typedef struct _BDA_CA_MODULE_UI { + ULONG ulFormat; + ULONG ulbcDesc; + ULONG ulDesc[MIN_DIMENSION]; } BDA_CA_MODULE_UI, *PBDA_CA_MODULE_UI; -typedef struct _BDA_PROGRAM_PID_LIST -{ - ULONG ulProgramNumber; - ULONG ulcPIDs; - ULONG ulPID[MIN_DIMENSION]; +typedef struct _BDA_PROGRAM_PID_LIST { + ULONG ulProgramNumber; + ULONG ulcPIDs; + ULONG ulPID[MIN_DIMENSION]; } BDA_PROGRAM_PID_LIST, *PBDA_PROGRAM_PID_LIST; - -V1_ENUM enum -{ - BDA_UNDEFINED_CHANNEL = -1, +V1_ENUM enum { + BDA_UNDEFINED_CHANNEL = -1, }; -typedef V1_ENUM enum ComponentCategory -{ - CategoryNotSet = -1, - CategoryOther = 0, - CategoryVideo, - CategoryAudio, - CategoryText, - CategoryData, +typedef V1_ENUM enum ComponentCategory { + CategoryNotSet = -1, + CategoryOther = 0, + CategoryVideo, + CategoryAudio, + CategoryText, + CategoryData, } ComponentCategory; -typedef enum ComponentStatus -{ - StatusActive, - StatusInactive, - StatusUnavailable, +typedef enum ComponentStatus { + StatusActive, + StatusInactive, + StatusUnavailable, } ComponentStatus; -typedef enum ATSCComponentTypeFlags -{ - ATSCCT_AC3 = 0x00000001, +typedef enum ATSCComponentTypeFlags { + ATSCCT_AC3 = 0x00000001, } ATSCComponentTypeFlags; -typedef V1_ENUM enum MPEG2StreamType -{ - BDA_UNITIALIZED_MPEG2STREAMTYPE = -1, - Reserved1 = 0x0, - ISO_IEC_11172_2_VIDEO = Reserved1 + 1, - ISO_IEC_13818_2_VIDEO = ISO_IEC_11172_2_VIDEO + 1, - ISO_IEC_11172_3_AUDIO = ISO_IEC_13818_2_VIDEO + 1, - ISO_IEC_13818_3_AUDIO = ISO_IEC_11172_3_AUDIO + 1, - ISO_IEC_13818_1_PRIVATE_SECTION = ISO_IEC_13818_3_AUDIO + 1, - ISO_IEC_13818_1_PES = ISO_IEC_13818_1_PRIVATE_SECTION + 1, - ISO_IEC_13522_MHEG = ISO_IEC_13818_1_PES + 1, - ANNEX_A_DSM_CC = ISO_IEC_13522_MHEG + 1, - ITU_T_REC_H_222_1 = ANNEX_A_DSM_CC + 1, - ISO_IEC_13818_6_TYPE_A = ITU_T_REC_H_222_1 + 1, - ISO_IEC_13818_6_TYPE_B = ISO_IEC_13818_6_TYPE_A + 1, - ISO_IEC_13818_6_TYPE_C = ISO_IEC_13818_6_TYPE_B + 1, - ISO_IEC_13818_6_TYPE_D = ISO_IEC_13818_6_TYPE_C + 1, - ISO_IEC_13818_1_AUXILIARY = ISO_IEC_13818_6_TYPE_D + 1, - ISO_IEC_13818_1_RESERVED = ISO_IEC_13818_1_AUXILIARY + 1, - USER_PRIVATE = ISO_IEC_13818_1_RESERVED + 1 +typedef V1_ENUM enum MPEG2StreamType { + BDA_UNITIALIZED_MPEG2STREAMTYPE = -1, + Reserved1 = 0x0, + ISO_IEC_11172_2_VIDEO = Reserved1 + 1, + ISO_IEC_13818_2_VIDEO = ISO_IEC_11172_2_VIDEO + 1, + ISO_IEC_11172_3_AUDIO = ISO_IEC_13818_2_VIDEO + 1, + ISO_IEC_13818_3_AUDIO = ISO_IEC_11172_3_AUDIO + 1, + ISO_IEC_13818_1_PRIVATE_SECTION = ISO_IEC_13818_3_AUDIO + 1, + ISO_IEC_13818_1_PES = ISO_IEC_13818_1_PRIVATE_SECTION + 1, + ISO_IEC_13522_MHEG = ISO_IEC_13818_1_PES + 1, + ANNEX_A_DSM_CC = ISO_IEC_13522_MHEG + 1, + ITU_T_REC_H_222_1 = ANNEX_A_DSM_CC + 1, + ISO_IEC_13818_6_TYPE_A = ITU_T_REC_H_222_1 + 1, + ISO_IEC_13818_6_TYPE_B = ISO_IEC_13818_6_TYPE_A + 1, + ISO_IEC_13818_6_TYPE_C = ISO_IEC_13818_6_TYPE_B + 1, + ISO_IEC_13818_6_TYPE_D = ISO_IEC_13818_6_TYPE_C + 1, + ISO_IEC_13818_1_AUXILIARY = ISO_IEC_13818_6_TYPE_D + 1, + ISO_IEC_13818_1_RESERVED = ISO_IEC_13818_1_AUXILIARY + 1, + USER_PRIVATE = ISO_IEC_13818_1_RESERVED + 1 } MPEG2StreamType; -typedef struct _MPEG2_TRANSPORT_STRIDE -{ - DWORD dwOffset ; - DWORD dwPacketLength ; - DWORD dwStride ; -} MPEG2_TRANSPORT_STRIDE, *PMPEG2_TRANSPORT_STRIDE ; +typedef struct _MPEG2_TRANSPORT_STRIDE { + DWORD dwOffset; + DWORD dwPacketLength; + DWORD dwStride; +} MPEG2_TRANSPORT_STRIDE, *PMPEG2_TRANSPORT_STRIDE; - - - - -typedef V1_ENUM enum BinaryConvolutionCodeRate -{ - BDA_BCC_RATE_NOT_SET = -1, - BDA_BCC_RATE_NOT_DEFINED = 0, - BDA_BCC_RATE_1_2 = 1, - BDA_BCC_RATE_2_3, - BDA_BCC_RATE_3_4, - BDA_BCC_RATE_3_5, - BDA_BCC_RATE_4_5, - BDA_BCC_RATE_5_6, - BDA_BCC_RATE_5_11, - BDA_BCC_RATE_7_8, - BDA_BCC_RATE_MAX, +typedef V1_ENUM enum BinaryConvolutionCodeRate { + BDA_BCC_RATE_NOT_SET = -1, + BDA_BCC_RATE_NOT_DEFINED = 0, + BDA_BCC_RATE_1_2 = 1, + BDA_BCC_RATE_2_3, + BDA_BCC_RATE_3_4, + BDA_BCC_RATE_3_5, + BDA_BCC_RATE_4_5, + BDA_BCC_RATE_5_6, + BDA_BCC_RATE_5_11, + BDA_BCC_RATE_7_8, + BDA_BCC_RATE_MAX, } BinaryConvolutionCodeRate; -typedef V1_ENUM enum SpectralInversion -{ - BDA_SPECTRAL_INVERSION_NOT_SET = -1, - BDA_SPECTRAL_INVERSION_NOT_DEFINED = 0, - BDA_SPECTRAL_INVERSION_AUTOMATIC = 1, - BDA_SPECTRAL_INVERSION_NORMAL, - BDA_SPECTRAL_INVERSION_INVERTED, - BDA_SPECTRAL_INVERSION_MAX +typedef V1_ENUM enum SpectralInversion { + BDA_SPECTRAL_INVERSION_NOT_SET = -1, + BDA_SPECTRAL_INVERSION_NOT_DEFINED = 0, + BDA_SPECTRAL_INVERSION_AUTOMATIC = 1, + BDA_SPECTRAL_INVERSION_NORMAL, + BDA_SPECTRAL_INVERSION_INVERTED, + BDA_SPECTRAL_INVERSION_MAX } SpectralInversion; -typedef V1_ENUM enum FECMethod -{ - BDA_FEC_METHOD_NOT_SET = -1, - BDA_FEC_METHOD_NOT_DEFINED = 0, - BDA_FEC_VITERBI = 1, - BDA_FEC_RS_204_188, - BDA_FEC_MAX, +typedef V1_ENUM enum FECMethod { + BDA_FEC_METHOD_NOT_SET = -1, + BDA_FEC_METHOD_NOT_DEFINED = 0, + BDA_FEC_VITERBI = 1, + BDA_FEC_RS_204_188, + BDA_FEC_MAX, } FECMethod; -typedef V1_ENUM enum ModulationType -{ - BDA_MOD_NOT_SET = -1, - BDA_MOD_NOT_DEFINED = 0, - BDA_MOD_16QAM = 1, - BDA_MOD_32QAM, - BDA_MOD_64QAM, - BDA_MOD_80QAM, - BDA_MOD_96QAM, - BDA_MOD_112QAM, - BDA_MOD_128QAM, - BDA_MOD_160QAM, - BDA_MOD_192QAM, - BDA_MOD_224QAM, - BDA_MOD_256QAM, - BDA_MOD_320QAM, - BDA_MOD_384QAM, - BDA_MOD_448QAM, - BDA_MOD_512QAM, - BDA_MOD_640QAM, - BDA_MOD_768QAM, - BDA_MOD_896QAM, - BDA_MOD_1024QAM, - BDA_MOD_QPSK, - BDA_MOD_BPSK, - BDA_MOD_OQPSK, - BDA_MOD_8VSB, - BDA_MOD_16VSB, - BDA_MOD_ANALOG_AMPLITUDE, - BDA_MOD_ANALOG_FREQUENCY, - BDA_MOD_MAX, +typedef V1_ENUM enum ModulationType { + BDA_MOD_NOT_SET = -1, + BDA_MOD_NOT_DEFINED = 0, + BDA_MOD_16QAM = 1, + BDA_MOD_32QAM, + BDA_MOD_64QAM, + BDA_MOD_80QAM, + BDA_MOD_96QAM, + BDA_MOD_112QAM, + BDA_MOD_128QAM, + BDA_MOD_160QAM, + BDA_MOD_192QAM, + BDA_MOD_224QAM, + BDA_MOD_256QAM, + BDA_MOD_320QAM, + BDA_MOD_384QAM, + BDA_MOD_448QAM, + BDA_MOD_512QAM, + BDA_MOD_640QAM, + BDA_MOD_768QAM, + BDA_MOD_896QAM, + BDA_MOD_1024QAM, + BDA_MOD_QPSK, + BDA_MOD_BPSK, + BDA_MOD_OQPSK, + BDA_MOD_8VSB, + BDA_MOD_16VSB, + BDA_MOD_ANALOG_AMPLITUDE, + BDA_MOD_ANALOG_FREQUENCY, + BDA_MOD_MAX, } ModulationType; - - -typedef V1_ENUM enum TransmissionMode -{ - BDA_XMIT_MODE_NOT_SET = -1, - BDA_XMIT_MODE_NOT_DEFINED = 0, - BDA_XMIT_MODE_2K = 1, - BDA_XMIT_MODE_8K, - BDA_XMIT_MODE_MAX, +typedef V1_ENUM enum TransmissionMode { + BDA_XMIT_MODE_NOT_SET = -1, + BDA_XMIT_MODE_NOT_DEFINED = 0, + BDA_XMIT_MODE_2K = 1, + BDA_XMIT_MODE_8K, + BDA_XMIT_MODE_MAX, } TransmissionMode; - -typedef V1_ENUM enum Polarisation -{ - BDA_POLARISATION_NOT_SET = -1, - BDA_POLARISATION_NOT_DEFINED = 0, - BDA_POLARISATION_LINEAR_H = 1, - BDA_POLARISATION_LINEAR_V, - BDA_POLARISATION_CIRCULAR_L, - BDA_POLARISATION_CIRCULAR_R, - BDA_POLARISATION_MAX, +typedef V1_ENUM enum Polarisation { + BDA_POLARISATION_NOT_SET = -1, + BDA_POLARISATION_NOT_DEFINED = 0, + BDA_POLARISATION_LINEAR_H = 1, + BDA_POLARISATION_LINEAR_V, + BDA_POLARISATION_CIRCULAR_L, + BDA_POLARISATION_CIRCULAR_R, + BDA_POLARISATION_MAX, } Polarisation; -typedef V1_ENUM enum GuardInterval -{ - BDA_GUARD_NOT_SET = -1, - BDA_GUARD_NOT_DEFINED = 0, - BDA_GUARD_1_32 = 1, - BDA_GUARD_1_16, - BDA_GUARD_1_8, - BDA_GUARD_1_4, - BDA_GUARD_MAX, +typedef V1_ENUM enum GuardInterval { + BDA_GUARD_NOT_SET = -1, + BDA_GUARD_NOT_DEFINED = 0, + BDA_GUARD_1_32 = 1, + BDA_GUARD_1_16, + BDA_GUARD_1_8, + BDA_GUARD_1_4, + BDA_GUARD_MAX, } GuardInterval; -typedef V1_ENUM enum HierarchyAlpha -{ - BDA_HALPHA_NOT_SET = -1, - BDA_HALPHA_NOT_DEFINED = 0, - BDA_HALPHA_1 = 1, - BDA_HALPHA_2, - BDA_HALPHA_4, - BDA_HALPHA_MAX, +typedef V1_ENUM enum HierarchyAlpha { + BDA_HALPHA_NOT_SET = -1, + BDA_HALPHA_NOT_DEFINED = 0, + BDA_HALPHA_1 = 1, + BDA_HALPHA_2, + BDA_HALPHA_4, + BDA_HALPHA_MAX, } HierarchyAlpha; - - -#endif - +#endif /* _BDATYPES_ */ diff --git a/include/ndk/extypes.h b/include/ndk/extypes.h index c44d6c98463..79669029b68 100644 --- a/include/ndk/extypes.h +++ b/include/ndk/extypes.h @@ -640,7 +640,7 @@ typedef struct _HARDERROR_MSG ULONG Response; ULONG NumberOfParameters; ULONG UnicodeStringParameterMask; - ULONG Parameters[MAXIMUM_HARDERROR_PARAMETERS]; + ULONG_PTR Parameters[MAXIMUM_HARDERROR_PARAMETERS]; } HARDERROR_MSG, *PHARDERROR_MSG; // diff --git a/include/ndk/i386/asm.h b/include/ndk/i386/asm.h index f54529442e1..afc5b9cd33e 100644 --- a/include/ndk/i386/asm.h +++ b/include/ndk/i386/asm.h @@ -67,29 +67,6 @@ Author: #define KGDT_NMI_TSS (0x58) #endif -// -// KV86M_REGISTERS Offsets -// -#define KV86M_REGISTERS_EBP 0x0 -#define KV86M_REGISTERS_EDI 0x4 -#define KV86M_REGISTERS_ESI 0x8 -#define KV86M_REGISTERS_EDX 0xC -#define KV86M_REGISTERS_ECX 0x10 -#define KV86M_REGISTERS_EBX 0x14 -#define KV86M_REGISTERS_EAX 0x18 -#define KV86M_REGISTERS_DS 0x1C -#define KV86M_REGISTERS_ES 0x20 -#define KV86M_REGISTERS_FS 0x24 -#define KV86M_REGISTERS_GS 0x28 -#define KV86M_REGISTERS_EIP 0x2C -#define KV86M_REGISTERS_CS 0x30 -#define KV86M_REGISTERS_EFLAGS 0x34 -#define KV86M_REGISTERS_ESP 0x38 -#define KV86M_REGISTERS_SS 0x3C -#define TF_SAVED_EXCEPTION_STACK 0x8C -#define TF_REGS 0x90 -#define TF_ORIG_EBP 0x94 - // // TSS Offsets // diff --git a/include/ndk/ketypes.h b/include/ndk/ketypes.h index 67985379372..f5ec606d05f 100644 --- a/include/ndk/ketypes.h +++ b/include/ndk/ketypes.h @@ -108,16 +108,18 @@ Author: #define KI_EXCEPTION_INTERNAL 0x10000000 #define KI_EXCEPTION_ACCESS_VIOLATION (KI_EXCEPTION_INTERNAL | 0x04) +#ifndef NTOS_MODE_USER // // Number of dispatch codes supported by KINTERRUPT // #if (NTDDI_VERSION >= NTDDI_LONGHORN) -#define KINTERRUPT_DISPATCH_CODES 135 +#define DISPATCH_LENGTH 135 #else -#define KINTERRUPT_DISPATCH_CODES 106 +#define DISPATCH_LENGTH 106 #endif -#ifdef NTOS_MODE_USER +#define SharedUserdata ((KUSER_SHARED_DATA *CONST)(USER_SHARED_DATA|KSEG0_BASE)) +#else // // KPROCESSOR_MODE Type @@ -643,7 +645,7 @@ typedef struct _KINTERRUPT #if (NTDDI_VERSION >= NTDDI_LONGHORN) ULONGLONG Rsvd1; #endif - ULONG DispatchCode[KINTERRUPT_DISPATCH_CODES]; + ULONG DispatchCode[DISPATCH_LENGTH]; } KINTERRUPT; // @@ -1026,6 +1028,8 @@ extern ULONG NTSYSAPI KeMaximumIncrement; extern ULONG NTSYSAPI KeMinimumIncrement; extern ULONG NTSYSAPI KeDcacheFlushCount; extern ULONG NTSYSAPI KeIcacheFlushCount; +extern ULONG_PTR NTSYSAPI KiBugCheckData[]; +extern BOOLEAN NTSYSAPI KiEnableTimerWatchdog; // // Exported System Service Descriptor Tables diff --git a/include/ndk/ldrfuncs.h b/include/ndk/ldrfuncs.h index 8943a099ad2..743d213b87e 100644 --- a/include/ndk/ldrfuncs.h +++ b/include/ndk/ldrfuncs.h @@ -109,4 +109,13 @@ LdrVerifyMappedImageMatchesChecksum( IN ULONG FileLength ); +PIMAGE_BASE_RELOCATION +NTAPI +LdrProcessRelocationBlockLongLong( + IN ULONG_PTR Address, + IN ULONG Count, + IN PUSHORT TypeOffset, + IN LONGLONG Delta +); + #endif diff --git a/include/psdk/commctrl.h b/include/psdk/commctrl.h index a1d261faa80..0ed66f5355f 100644 --- a/include/psdk/commctrl.h +++ b/include/psdk/commctrl.h @@ -3305,6 +3305,9 @@ extern "C" { #define TVIF_SELECTEDIMAGE 0x20 #define TVIF_CHILDREN 0x40 #define TVIF_INTEGRAL 0x80 +#define TVIF_STATEEX 0x100 +#define TVIF_EXPANDEDIMAGE 0x200 +#define TVIF_DI_SETITEM 0x1000 #define TVIS_SELECTED 0x2 #define TVIS_CUT 0x4 #define TVIS_DROPHILITED 0x8 @@ -3365,19 +3368,22 @@ extern "C" { int iIntegral; } TVITEMEXA,*LPTVITEMEXA; - typedef struct tagTVITEMEXW { - UINT mask; - HTREEITEM hItem; - UINT state; - UINT stateMask; - LPWSTR pszText; - int cchTextMax; - int iImage; - int iSelectedImage; - int cChildren; - LPARAM lParam; - int iIntegral; - } TVITEMEXW,*LPTVITEMEXW; +typedef struct tagTVITEMEXW { + UINT mask; + HTREEITEM hItem; + UINT state; + UINT stateMask; + LPWSTR pszText; + INT cchTextMax; + INT iImage; + INT iSelectedImage; + INT cChildren; + LPARAM lParam; + INT iIntegral; + UINT uStateEx; /* _WIN32_IE >= 0x600 */ + HWND hwnd; /* _WIN32_IE >= 0x600 */ + INT iExpandedImage; /* _WIN32_IE >= 0x600 */ +} TVITEMEXW, *LPTVITEMEXW; #ifdef UNICODE typedef TVITEMEXW TVITEMEX; typedef LPTVITEMEXW LPTVITEMEX; diff --git a/include/psdk/cvconst.h b/include/psdk/cvconst.h index 22026e283a7..1599a269822 100644 --- a/include/psdk/cvconst.h +++ b/include/psdk/cvconst.h @@ -40,13 +40,13 @@ enum SymTagEnum SymTagPointerType, SymTagArrayType, SymTagBaseType, - SymTagTypedef, + SymTagTypedef, SymTagBaseClass, SymTagFriend, - SymTagFunctionArgType, - SymTagFuncDebugStart, + SymTagFunctionArgType, + SymTagFuncDebugStart, SymTagFuncDebugEnd, - SymTagUsingNamespace, + SymTagUsingNamespace, SymTagVTableShape, SymTagVTable, SymTagCustom, @@ -287,7 +287,7 @@ enum CV_HREG_e CV_M4_Psr = 51, CV_M4_FltF0 = 60, /* this includes FltF1 to Flt31 */ CV_M4_FltFsr = 92, - + /* Alpha AXP CPU */ CV_ALPHA_NOREG = CV_REG_NONE, CV_ALPHA_FltF0 = 10, /* this includes FltF1 to FltF31 */ @@ -311,7 +311,7 @@ enum CV_HREG_e CV_ALPHA_Psr = 76, CV_ALPHA_FltFsr = 77, CV_ALPHA_SoftFpcr = 78, - + /* Motorola & IBM PowerPC CPU */ CV_PPC_GPR0 = 1, /* this includes GPR1 to GPR31 */ CV_PPC_CR = 33, @@ -357,7 +357,7 @@ enum CV_HREG_e CV_ARM_LR = 24, CV_ARM_PC = 25, CV_ARM_CPSR = 26, - + /* Intel IA64 CPU */ CV_IA64_NOREG = CV_REG_NONE, CV_IA64_Br0 = 512, /* this includes Br1 to Br7 */ @@ -511,6 +511,8 @@ enum CV_HREG_e CV_AMD64_MM70 = CV_REG_MM70, CV_AMD64_MM71 = CV_REG_MM71, + CV_AMD64_XMM8 = 252, /* this includes XMM9 to XMM15 */ + CV_AMD64_RAX = 328, CV_AMD64_RBX = 329, CV_AMD64_RCX = 330, @@ -536,7 +538,7 @@ typedef enum THUNK_ORDINAL_ADJUSTOR, THUNK_ORDINAL_VCALL, THUNK_ORDINAL_PCODE, - THUNK_ORDINAL_LOAD + THUNK_ORDINAL_LOAD } THUNK_ORDINAL; typedef enum CV_call_e diff --git a/include/psdk/d3d9types.h b/include/psdk/d3d9types.h index ba800bf18d6..7b338da74bb 100644 --- a/include/psdk/d3d9types.h +++ b/include/psdk/d3d9types.h @@ -21,6 +21,8 @@ #ifndef __WINE_D3D9TYPES_H #define __WINE_D3D9TYPES_H +#if(DIRECT3D_VERSION >= 0x0900) + #pragma pack(push, 4) /***************************************************************************** @@ -1586,4 +1588,6 @@ typedef enum _D3DCOMPOSERECTSOP{ #pragma pack(pop) +#endif /* DIRECT3D_VERSION >= 0x0900 */ + #endif /* __WINE_D3D9TYPES_H */ diff --git a/include/psdk/d3dnthal.h b/include/psdk/d3dnthal.h new file mode 100644 index 00000000000..ff712a70e72 --- /dev/null +++ b/include/psdk/d3dnthal.h @@ -0,0 +1,250 @@ +/* + * d3dnthal.h + * + * Direct3D NT driver interface + * + * Contributors: + * Created by Ge van Geldorp + * + * THIS SOFTWARE IS NOT COPYRIGHTED + * + * This source code is offered for use in the public domain. You may + * use, modify or distribute it freely. + * + * This code is distributed in the hope that it will be useful but + * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY + * DISCLAIMED. This includes but is not limited to warranties of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + */ + +#ifndef __DDK_D3DNTHAL_H +#define __DDK_D3DNTHAL_H + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +DEFINE_GUID(GUID_D3DCallbacks, 0x7BF06990, 0x8794, 0x11D0, 0x91, 0x39, 0x08, 0x00, 0x36, 0xD2, 0xEF, 0x02); +DEFINE_GUID(GUID_D3DCallbacks3, 0xDDF41230, 0xEC0A, 0x11D0, 0xA9, 0xB6, 0x00, 0xAA, 0x00, 0xC0, 0x99, 0x3E); +DEFINE_GUID(GUID_D3DExtendedCaps, 0x7DE41F80, 0x9D93, 0x11D0, 0x89, 0xAB, 0x00, 0xA0, 0xC9, 0x05, 0x41, 0x29); +DEFINE_GUID(GUID_D3DParseUnknownCommandCallback, 0x2E04FFA0, 0x98E4, 0x11D1, 0x8C, 0xE1, 0x00, 0xA0, 0xC9, 0x06, 0x29, 0xA8); +DEFINE_GUID(GUID_ZPixelFormats, 0x93869880, 0x36CF, 0x11D1, 0x9B, 0x1B, 0x00, 0xAA, 0x00, 0xBB, 0xB8, 0xAE); +DEFINE_GUID(GUID_DDStereoMode, 0xF828169C, 0xA8E8, 0x11D2, 0xA1, 0xF2, 0x00, 0xA0, 0xC9, 0x83, 0xEA, 0xF6); + +typedef struct _D3DNTHAL_CONTEXTCREATEDATA { + __GNU_EXTENSION union { + PDD_DIRECTDRAW_GLOBAL lpDDGbl; + PDD_DIRECTDRAW_LOCAL lpDDLcl; + }; + __GNU_EXTENSION union { + PDD_SURFACE_LOCAL lpDDS; + PDD_SURFACE_LOCAL lpDDSLcl; + }; + __GNU_EXTENSION union { + PDD_SURFACE_LOCAL lpDDSZ; + PDD_SURFACE_LOCAL lpDDSZLcl; + }; + DWORD dwPID; + ULONG_PTR dwhContext; + HRESULT ddrval; +} D3DNTHAL_CONTEXTCREATEDATA, *LPD3DNTHAL_CONTEXTCREATEDATA; + +typedef struct _D3DNTHAL_CONTEXTDESTROYDATA { + ULONG_PTR dwhContext; + HRESULT ddrval; +} D3DNTHAL_CONTEXTDESTROYDATA, *LPD3DNTHAL_CONTEXTDESTROYDATA; + +typedef struct _D3DNTHAL_CONTEXTDESTROYALLDATA { + DWORD dwPID; + HRESULT ddrval; +} D3DNTHAL_CONTEXTDESTROYALLDATA, *LPD3DNTHAL_CONTEXTDESTROYALLDATA; + +typedef struct _D3DNTHAL_SCENECAPTUREDATA { + ULONG_PTR dwhContext; + DWORD dwFlag; + HRESULT ddrval; +} D3DNTHAL_SCENECAPTUREDATA, *LPD3DNTHAL_SCENECAPTUREDATA; + +typedef struct _D3DNTHAL_TEXTURECREATEDATA { + ULONG_PTR dwhContext; + HANDLE hDDS; + ULONG_PTR dwHandle; + HRESULT ddrval; +} D3DNTHAL_TEXTURECREATEDATA, *LPD3DNTHAL_TEXTURECREATEDATA; + +typedef struct _D3DNTHAL_TEXTUREDESTROYDATA { + ULONG_PTR dwhContext; + ULONG_PTR dwHandle; + HRESULT ddrval; +} D3DNTHAL_TEXTUREDESTROYDATA, *LPD3DNTHAL_TEXTUREDESTROYDATA; + +typedef struct _D3DNTHAL_TEXTURESWAPDATA { + ULONG_PTR dwhContext; + ULONG_PTR dwHandle1; + ULONG_PTR dwHandle2; + HRESULT ddrval; +} D3DNTHAL_TEXTURESWAPDATA, *LPD3DNTHAL_TEXTURESWAPDATA; + +typedef struct _D3DNTHAL_TEXTUREGETSURFDATA { + ULONG_PTR dwhContext; + HANDLE hDDS; + ULONG_PTR dwHandle; + HRESULT ddrval; +} D3DNTHAL_TEXTUREGETSURFDATA, *LPD3DNTHAL_TEXTUREGETSURFDATA; + +typedef DWORD (APIENTRY *LPD3DNTHAL_CONTEXTCREATECB)(LPD3DNTHAL_CONTEXTCREATEDATA); +typedef DWORD (APIENTRY *LPD3DNTHAL_CONTEXTDESTROYCB)(LPD3DNTHAL_CONTEXTDESTROYDATA); +typedef DWORD (APIENTRY *LPD3DNTHAL_CONTEXTDESTROYALLCB)(LPD3DNTHAL_CONTEXTDESTROYALLDATA); +typedef DWORD (APIENTRY *LPD3DNTHAL_SCENECAPTURECB)(LPD3DNTHAL_SCENECAPTUREDATA); +typedef DWORD (APIENTRY *LPD3DNTHAL_TEXTURECREATECB)(LPD3DNTHAL_TEXTURECREATEDATA); +typedef DWORD (APIENTRY *LPD3DNTHAL_TEXTUREDESTROYCB)(LPD3DNTHAL_TEXTUREDESTROYDATA); +typedef DWORD (APIENTRY *LPD3DNTHAL_TEXTURESWAPCB)(LPD3DNTHAL_TEXTURESWAPDATA); +typedef DWORD (APIENTRY *LPD3DNTHAL_TEXTUREGETSURFCB)(LPD3DNTHAL_TEXTUREGETSURFDATA); + +typedef struct _D3DNTHALDeviceDesc_V1 { + DWORD dwSize; + DWORD dwFlags; + D3DCOLORMODEL dcmColorModel; + DWORD dwDevCaps; + D3DTRANSFORMCAPS dtcTransformCaps; + BOOL bClipping; + D3DLIGHTINGCAPS dlcLightingCaps; + D3DPRIMCAPS dpcLineCaps; + D3DPRIMCAPS dpcTriCaps; + DWORD dwDeviceRenderBitDepth; + DWORD dwDeviceZBufferBitDepth; + DWORD dwMaxBufferSize; + DWORD dwMaxVertexCount; +} D3DNTHALDEVICEDESC_V1, *LPD3DNTHALDEVICEDESC_V1; + +typedef struct _D3DNTHAL_GLOBALDRIVERDATA { + DWORD dwSize; + D3DNTHALDEVICEDESC_V1 hwCaps; + DWORD dwNumVertices; + DWORD dwNumClipVertices; + DWORD dwNumTextureFormats; + LPDDSURFACEDESC lpTextureFormats; +} D3DNTHAL_GLOBALDRIVERDATA, *LPD3DNTHAL_GLOBALDRIVERDATA; + +typedef struct _D3DNTHAL_CALLBACKS { + DWORD dwSize; + LPD3DNTHAL_CONTEXTCREATECB ContextCreate; + LPD3DNTHAL_CONTEXTDESTROYCB ContextDestroy; + LPD3DNTHAL_CONTEXTDESTROYALLCB ContextDestroyAll; + LPD3DNTHAL_SCENECAPTURECB SceneCapture; + LPVOID dwReserved10; + LPVOID dwReserved11; + LPVOID dwReserved22; + LPVOID dwReserved23; + ULONG_PTR dwReserved; + LPD3DNTHAL_TEXTURECREATECB TextureCreate; + LPD3DNTHAL_TEXTUREDESTROYCB TextureDestroy; + LPD3DNTHAL_TEXTURESWAPCB TextureSwap; + LPD3DNTHAL_TEXTUREGETSURFCB TextureGetSurf; + LPVOID dwReserved12; + LPVOID dwReserved13; + LPVOID dwReserved14; + LPVOID dwReserved15; + LPVOID dwReserved16; + LPVOID dwReserved17; + LPVOID dwReserved18; + LPVOID dwReserved19; + LPVOID dwReserved20; + LPVOID dwReserved21; + LPVOID dwReserved24; + ULONG_PTR dwReserved0; + ULONG_PTR dwReserved1; + ULONG_PTR dwReserved2; + ULONG_PTR dwReserved3; + ULONG_PTR dwReserved4; + ULONG_PTR dwReserved5; + ULONG_PTR dwReserved6; + ULONG_PTR dwReserved7; + ULONG_PTR dwReserved8; + ULONG_PTR dwReserved9; +} D3DNTHAL_CALLBACKS, *LPD3DNTHAL_CALLBACKS; + +typedef struct _D3DNTHAL_SETRENDERTARGETDATA { + ULONG_PTR dwhContext; + PDD_SURFACE_LOCAL lpDDS; + PDD_SURFACE_LOCAL lpDDSZ; + HRESULT ddrval; +} D3DNTHAL_SETRENDERTARGETDATA, *LPD3DNTHAL_SETRENDERTARGETDATA; + +typedef DWORD (APIENTRY *LPD3DNTHAL_SETRENDERTARGETCB)(LPD3DNTHAL_SETRENDERTARGETDATA); + +typedef struct _D3DNTHAL_CALLBACKS2 { + DWORD dwSize; + DWORD dwFlags; + LPD3DNTHAL_SETRENDERTARGETCB SetRenderTarget; + LPVOID dwReserved1; + LPVOID dwReserved2; + LPVOID dwReserved3; + LPVOID dwReserved4; +} D3DNTHAL_CALLBACKS2, *LPD3DNTHAL_CALLBACKS2; + +typedef struct _D3DNTHAL_CLEAR2DATA { + ULONG_PTR dwhContext; + DWORD dwFlags; + DWORD dwFillColor; + D3DVALUE dvFillDepth; + DWORD dwFillStencil; + LPD3DRECT lpRects; + DWORD dwNumRects; + HRESULT ddrval; +} D3DNTHAL_CLEAR2DATA, FAR *LPD3DNTHAL_CLEAR2DATA; + +typedef struct _D3DNTHAL_VALIDATETEXTURESTAGESTATEDATA { + ULONG_PTR dwhContext; + DWORD dwFlags; + ULONG_PTR dwReserved; + DWORD dwNumPasses; + HRESULT ddrval; +} D3DNTHAL_VALIDATETEXTURESTAGESTATEDATA, FAR *LPD3DNTHAL_VALIDATETEXTURESTAGESTATEDATA; + +typedef struct _D3DNTHAL_DRAWPRIMITIVES2DATA { + ULONG_PTR dwhContext; + DWORD dwFlags; + DWORD dwVertexType; + PDD_SURFACE_LOCAL lpDDCommands; + DWORD dwCommandOffset; + DWORD dwCommandLength; + __GNU_EXTENSION union { + PDD_SURFACE_LOCAL lpDDVertex; + LPVOID lpVertices; + }; + DWORD dwVertexOffset; + DWORD dwVertexLength; + DWORD dwReqVertexBufSize; + DWORD dwReqCommandBufSize; + LPDWORD lpdwRStates; + __GNU_EXTENSION union { + DWORD dwVertexSize; + HRESULT ddrval; + }; + DWORD dwErrorOffset; +} D3DNTHAL_DRAWPRIMITIVES2DATA, FAR *LPD3DNTHAL_DRAWPRIMITIVES2DATA; + +typedef DWORD (APIENTRY *LPD3DNTHAL_CLEAR2CB)(LPD3DNTHAL_CLEAR2DATA); +typedef DWORD (APIENTRY *LPD3DNTHAL_VALIDATETEXTURESTAGESTATECB)(LPD3DNTHAL_VALIDATETEXTURESTAGESTATEDATA); +typedef DWORD (APIENTRY *LPD3DNTHAL_DRAWPRIMITIVES2CB)(LPD3DNTHAL_DRAWPRIMITIVES2DATA); + +typedef struct _D3DNTHAL_CALLBACKS3 { + DWORD dwSize; + DWORD dwFlags; + LPD3DNTHAL_CLEAR2CB Clear2; + LPVOID lpvReserved; + LPD3DNTHAL_VALIDATETEXTURESTAGESTATECB ValidateTextureStageState; + LPD3DNTHAL_DRAWPRIMITIVES2CB DrawPrimitives2; +} D3DNTHAL_CALLBACKS3, *LPD3DNTHAL_CALLBACKS3; + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* __DDK_D3DNTHAL_H */ diff --git a/include/psdk/d3dtypes.h b/include/psdk/d3dtypes.h index dc36d4f9bf7..5519b532808 100644 --- a/include/psdk/d3dtypes.h +++ b/include/psdk/d3dtypes.h @@ -27,6 +27,10 @@ /* #include FIXME: Need to include for compatibility. Inclusion caused compile fail */ +#if (DIRECT3D_VERSION >= 0x0800) +#error "You should not include d3dtypes.h when compiling for DX8 or newer." +#endif + #include #include diff --git a/include/psdk/dbghelp.h b/include/psdk/dbghelp.h index 09e54b1224f..aba4d5e0802 100644 --- a/include/psdk/dbghelp.h +++ b/include/psdk/dbghelp.h @@ -33,7 +33,11 @@ typedef struct _LOADED_IMAGE PSTR ModuleName; HANDLE hFile; PUCHAR MappedAddress; - PIMAGE_NT_HEADERS FileHeader; +#ifdef _IMAGEHLP64 + PIMAGE_NT_HEADERS64 FileHeader; +#else + PIMAGE_NT_HEADERS32 FileHeader; +#endif PIMAGE_SECTION_HEADER LastRvaSection; ULONG NumberOfSections; PIMAGE_SECTION_HEADER Sections; diff --git a/include/psdk/ddkernel.h b/include/psdk/ddkernel.h new file mode 100644 index 00000000000..8ffedf8165d --- /dev/null +++ b/include/psdk/ddkernel.h @@ -0,0 +1,95 @@ +/* $Id$ + * + * COPYRIGHT: This file is in the public domain. + * PROJECT: ReactOS kernel + * FILE: + * PURPOSE: Directx headers + * PROGRAMMER: Magnus Olsen (greatlrd) + * + */ + +#ifndef __DDKM_INCLUDED__ +#define __DDKM_INCLUDED__ + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined (_WIN32) && !defined (_NO_COM) +DEFINE_GUID (IID_IDirectDrawKernel, 0x8D56C120,0x6A08,0x11D0,0x9B,0x06,0x00,0xA0,0xC9,0x03,0xA3,0xB8); +DEFINE_GUID (IID_IDirectDrawSurfaceKernel, 0x60755DA0,0x6A40,0x11D0,0x9B,0x06,0x00,0xA0,0xC9,0x03,0xA3,0xB8); +#endif + +typedef struct _DDKERNELCAPS { + DWORD dwSize; + DWORD dwCaps; + DWORD dwIRQCaps; +} DDKERNELCAPS, *LPDDKERNELCAPS; + +#define DDKERNELCAPS_SKIPFIELDS 0x00000001 +#define DDKERNELCAPS_AUTOFLIP 0x00000002 +#define DDKERNELCAPS_SETSTATE 0x00000004 +#define DDKERNELCAPS_LOCK 0x00000008 +#define DDKERNELCAPS_FLIPVIDEOPORT 0x00000010 +#define DDKERNELCAPS_FLIPOVERLAY 0x00000020 +#define DDKERNELCAPS_CAPTURE_SYSMEM 0x00000040 +#define DDKERNELCAPS_CAPTURE_NONLOCALVIDMEM 0x00000080 +#define DDKERNELCAPS_FIELDPOLARITY 0x00000100 +#define DDKERNELCAPS_CAPTURE_INVERTED 0x00000200 +#define DDIRQ_DISPLAY_VSYNC 0x00000001 +#define DDIRQ_RESERVED1 0x00000002 +#define DDIRQ_VPORT0_VSYNC 0x00000004 +#define DDIRQ_VPORT0_LINE 0x00000008 +#define DDIRQ_VPORT1_VSYNC 0x00000010 +#define DDIRQ_VPORT1_LINE 0x00000020 +#define DDIRQ_VPORT2_VSYNC 0x00000040 +#define DDIRQ_VPORT2_LINE 0x00000080 +#define DDIRQ_VPORT3_VSYNC 0x00000100 +#define DDIRQ_VPORT3_LINE 0x00000200 +#define DDIRQ_VPORT4_VSYNC 0x00000400 +#define DDIRQ_VPORT4_LINE 0x00000800 +#define DDIRQ_VPORT5_VSYNC 0x00001000 +#define DDIRQ_VPORT5_LINE 0x00002000 +#define DDIRQ_VPORT6_VSYNC 0x00004000 +#define DDIRQ_VPORT6_LINE 0x00008000 +#define DDIRQ_VPORT7_VSYNC 0x00010000 +#define DDIRQ_VPORT7_LINE 0x00020000 +#define DDIRQ_VPORT8_VSYNC 0x00040000 +#define DDIRQ_VPORT8_LINE 0x00080000 +#define DDIRQ_VPORT9_VSYNC 0x00010000 +#define DDIRQ_VPORT9_LINE 0x00020000 + +typedef struct IDirectDrawKernel* LPDIRECTDRAWKERNEL; +typedef struct IDirectDrawSurfaceKernel* LPDIRECTDRAWSURFACEKERNEL; + +#if defined(_WIN32) && !defined(_NO_COM) + +#undef INTERFACE +#define INTERFACE IDirectDrawKernel +DECLARE_INTERFACE_ (IDirectDrawKernel, IUnknown) { + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + STDMETHOD(GetKernelHandle) (THIS_ ULONG*) PURE; + STDMETHOD(ReleaseKernelHandle) (THIS) PURE; +}; + +#undef INTERFACE +#define INTERFACE IDirectDrawSurfaceKernel +DECLARE_INTERFACE_ (IDirectDrawSurfaceKernel, IUnknown) { + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + STDMETHOD(GetKernelHandle) (THIS_ ULONG*) PURE; + STDMETHOD(ReleaseKernelHandle) (THIS) PURE; +}; + +#undef INTERFACE +#endif /* defined(_WIN32) && !defined(_NO_COM) */ + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/include/ddk/ddkmapi.h b/include/psdk/ddkmapi.h similarity index 59% rename from include/ddk/ddkmapi.h rename to include/psdk/ddkmapi.h index fdd23a9dc35..5bdedde5258 100644 --- a/include/ddk/ddkmapi.h +++ b/include/psdk/ddkmapi.h @@ -21,23 +21,12 @@ #ifndef __DDKMAPI_INCLUDED__ #define __DDKMAPI_INCLUDED__ -/* Helper macro to enable gcc's extension. */ -#ifndef __GNU_EXTENSION -#ifdef __GNUC__ -#define __GNU_EXTENSION __extension__ -#else -#define __GNU_EXTENSION -#endif -#endif - #if defined(_DXAPI_) - #define DXAPI +#define DXAPI #else - #define DXAPI DECLSPEC_IMPORT +#define DXAPI DECLSPEC_IMPORT #endif - - #define DXAPI_MAJORVERSION 1 #define DXAPI_MINORVERSION 0 @@ -106,234 +95,202 @@ typedef DWORD (PASCAL *LPDXAPI)(DWORD dwFunctionNum, LPVOID lpvInBuffer, DWORD cbInBuffer, LPVOID lpvOutBuffer, DWORD cbOutBuffer); typedef ULONG (PASCAL *LPDD_NOTIFYCALLBACK) (DWORD dwFlags, PVOID pContext, DWORD dwParam1, DWORD dwParam2); -typedef struct _DDCAPBUFFINFO -{ - DWORD dwFieldNumber; - DWORD bPolarity; - LARGE_INTEGER liTimeStamp; - DWORD ddRVal; -} DDCAPBUFFINFO, * LPDDCAPBUFFINFO; +typedef struct _DDCAPBUFFINFO { + DWORD dwFieldNumber; + DWORD bPolarity; + LARGE_INTEGER liTimeStamp; + DWORD ddRVal; +} DDCAPBUFFINFO, *LPDDCAPBUFFINFO; -typedef struct _DDADDVPCAPTUREBUFF -{ - HANDLE hCapture; - DWORD dwFlags; - PMDL pMDL; - PKEVENT pKEvent; - LPDDCAPBUFFINFO lpBuffInfo; -} DDADDVPCAPTUREBUFF, * LPDDADDVPCAPTUREBUFF; +typedef struct _DDADDVPCAPTUREBUFF { + HANDLE hCapture; + DWORD dwFlags; + PMDL pMDL; + PKEVENT pKEvent; + LPDDCAPBUFFINFO lpBuffInfo; +} DDADDVPCAPTUREBUFF, *LPDDADDVPCAPTUREBUFF; -typedef struct _DDCLOSEHANDLE -{ - HANDLE hHandle; +typedef struct _DDCLOSEHANDLE { + HANDLE hHandle; } DDCLOSEHANDLE, *LPDDCLOSEHANDLE; -typedef struct _DDFLIPOVERLAY -{ - HANDLE hDirectDraw; - HANDLE hCurrentSurface; - HANDLE hTargetSurface; - DWORD dwFlags; +typedef struct _DDFLIPOVERLAY { + HANDLE hDirectDraw; + HANDLE hCurrentSurface; + HANDLE hTargetSurface; + DWORD dwFlags; } DDFLIPOVERLAY, *LPDDFLIPOVERLAY; -typedef struct _DDFLIPVIDEOPORT -{ - HANDLE hDirectDraw; - HANDLE hVideoPort; - HANDLE hCurrentSurface; - HANDLE hTargetSurface; - DWORD dwFlags; +typedef struct _DDFLIPVIDEOPORT { + HANDLE hDirectDraw; + HANDLE hVideoPort; + HANDLE hCurrentSurface; + HANDLE hTargetSurface; + DWORD dwFlags; } DDFLIPVIDEOPORT, *LPDDFLIPVIDEOPORT; -typedef struct _DDGETAUTOFLIPIN -{ - HANDLE hDirectDraw; - HANDLE hVideoPort; +typedef struct _DDGETAUTOFLIPIN { + HANDLE hDirectDraw; + HANDLE hVideoPort; } DDGETAUTOFLIPIN, *LPDDGETAUTOFLIPIN; -typedef struct _DDGETAUTOFLIPOUT -{ - DWORD ddRVal; - HANDLE hVideoSurface; - HANDLE hVBISurface; - BOOL bPolarity; +typedef struct _DDGETAUTOFLIPOUT { + DWORD ddRVal; + HANDLE hVideoSurface; + HANDLE hVBISurface; + BOOL bPolarity; } DDGETAUTOFLIPOUT, *LPDDGETAUTOFLIPOUT; -typedef struct _DDGETPOLARITYIN -{ - HANDLE hDirectDraw; - HANDLE hVideoPort; +typedef struct _DDGETPOLARITYIN { + HANDLE hDirectDraw; + HANDLE hVideoPort; } DDGETPOLARITYIN, *LPDDGETPOLARITYIN; -typedef struct _DDGETPOLARITYOUT -{ - DWORD ddRVal; - BOOL bPolarity; +typedef struct _DDGETPOLARITYOUT { + DWORD ddRVal; + BOOL bPolarity; } DDGETPOLARITYOUT, *LPDDGETPOLARITYOUT; -typedef struct _DDGETSURFACESTATEIN -{ - HANDLE hDirectDraw; - HANDLE hSurface; +typedef struct _DDGETSURFACESTATEIN { + HANDLE hDirectDraw; + HANDLE hSurface; } DDGETSURFACESTATEIN, *LPDDGETSURFACESTATEIN; -typedef struct _DDGETSURFACESTATEOUT -{ - DWORD ddRVal; - DWORD dwStateCaps; - DWORD dwStateStatus; +typedef struct _DDGETSURFACESTATEOUT { + DWORD ddRVal; + DWORD dwStateCaps; + DWORD dwStateStatus; } DDGETSURFACESTATEOUT, *LPDDGETSURFACESTATEOUT; -typedef struct _DDGETFIELDNUMIN -{ - HANDLE hDirectDraw; - HANDLE hVideoPort; +typedef struct _DDGETFIELDNUMIN { + HANDLE hDirectDraw; + HANDLE hVideoPort; } DDGETFIELDNUMIN, *LPDDGETFIELDNUMIN; -typedef struct _DDGETFIELDNUMOUT -{ - DWORD ddRVal; - DWORD dwFieldNum; +typedef struct _DDGETFIELDNUMOUT { + DWORD ddRVal; + DWORD dwFieldNum; } DDGETFIELDNUMOUT, *LPDDGETFIELDNUMOUT; -typedef struct _DDGETKERNELCAPSOUT -{ - DWORD ddRVal; - DWORD dwCaps; - DWORD dwIRQCaps; +typedef struct _DDGETKERNELCAPSOUT { + DWORD ddRVal; + DWORD dwCaps; + DWORD dwIRQCaps; } DDGETKERNELCAPSOUT, *LPDDGETKERNELCAPSOUT; -typedef struct _DDGETVERSIONNUMBER -{ - DWORD ddRVal; - DWORD dwMajorVersion; - DWORD dwMinorVersion; +typedef struct _DDGETVERSIONNUMBER { + DWORD ddRVal; + DWORD dwMajorVersion; + DWORD dwMinorVersion; } DDGETVERSIONNUMBER, *LPDDGETVERSIONNUMBER; -typedef struct _DDLOCKIN -{ - HANDLE hDirectDraw; - HANDLE hSurface; +typedef struct _DDLOCKIN { + HANDLE hDirectDraw; + HANDLE hSurface; } DDLOCKIN, *LPDDLOCKIN; -typedef struct _DDLOCKOUT -{ - DWORD ddRVal; - DWORD dwSurfHeight; - DWORD dwSurfWidth; - LONG lSurfPitch; - PVOID lpSurface; - DWORD SurfaceCaps; - DWORD dwFormatFlags; - DWORD dwFormatFourCC; - DWORD dwFormatBitCount; - __GNU_EXTENSION union - { - DWORD dwRBitMask; - DWORD dwYBitMask; +typedef struct _DDLOCKOUT { + DWORD ddRVal; + DWORD dwSurfHeight; + DWORD dwSurfWidth; + LONG lSurfPitch; + PVOID lpSurface; + DWORD SurfaceCaps; + DWORD dwFormatFlags; + DWORD dwFormatFourCC; + DWORD dwFormatBitCount; + __GNU_EXTENSION union { + DWORD dwRBitMask; + DWORD dwYBitMask; }; - __GNU_EXTENSION union - { - DWORD dwGBitMask; - DWORD dwUBitMask; + __GNU_EXTENSION union { + DWORD dwGBitMask; + DWORD dwUBitMask; }; - __GNU_EXTENSION union - { - DWORD dwBBitMask; - DWORD dwVBitMask; + __GNU_EXTENSION union { + DWORD dwBBitMask; + DWORD dwVBitMask; }; } DDLOCKOUT, *LPDDLOCKOUT; -typedef struct _DDOPENDIRECTDRAWIN -{ +typedef struct _DDOPENDIRECTDRAWIN { ULONG_PTR dwDirectDrawHandle; - LPDD_NOTIFYCALLBACK pfnDirectDrawClose; - PVOID pContext; + LPDD_NOTIFYCALLBACK pfnDirectDrawClose; + PVOID pContext; } DDOPENDIRECTDRAWIN, *LPDDOPENDIRECTDRAWIN; -typedef struct _DDOPENDIRECTDRAWOUT -{ - DWORD ddRVal; - HANDLE hDirectDraw; +typedef struct _DDOPENDIRECTDRAWOUT { + DWORD ddRVal; + HANDLE hDirectDraw; } DDOPENDIRECTDRAWOUT, *LPDDOPENDIRECTDRAWOUT; -typedef struct _DDOPENSURFACEIN -{ - HANDLE hDirectDraw; - ULONG_PTR dwSurfaceHandle; - LPDD_NOTIFYCALLBACK pfnSurfaceClose; - PVOID pContext; +typedef struct _DDOPENSURFACEIN { + HANDLE hDirectDraw; + ULONG_PTR dwSurfaceHandle; + LPDD_NOTIFYCALLBACK pfnSurfaceClose; + PVOID pContext; } DDOPENSURFACEIN, *LPDDOPENSURFACEIN; -typedef struct _DDOPENSURFACEOUT -{ - DWORD ddRVal; - HANDLE hSurface; +typedef struct _DDOPENSURFACEOUT { + DWORD ddRVal; + HANDLE hSurface; } DDOPENSURFACEOUT, *LPDDOPENSURFACEOUT; -typedef struct _DDOPENVIDEOPORTIN -{ - HANDLE hDirectDraw; - ULONG dwVideoPortHandle; - LPDD_NOTIFYCALLBACK pfnVideoPortClose; - PVOID pContext; +typedef struct _DDOPENVIDEOPORTIN { + HANDLE hDirectDraw; + ULONG dwVideoPortHandle; + LPDD_NOTIFYCALLBACK pfnVideoPortClose; + PVOID pContext; } DDOPENVIDEOPORTIN, *LPDDOPENVIDEOPORTIN; -typedef struct _DDOPENVIDEOPORTOUT -{ - DWORD ddRVal; - HANDLE hVideoPort; +typedef struct _DDOPENVIDEOPORTOUT { + DWORD ddRVal; + HANDLE hVideoPort; } DDOPENVIDEOPORTOUT, *LPDDOPENVIDEOPORTOUT; -typedef struct _DDOPENVPCAPTUREDEVICEIN -{ - HANDLE hDirectDraw; - HANDLE hVideoPort; - DWORD dwStartLine; - DWORD dwEndLine; - DWORD dwCaptureEveryNFields; - LPDD_NOTIFYCALLBACK pfnCaptureClose; - PVOID pContext; - DWORD dwFlags; -} DDOPENVPCAPTUREDEVICEIN, * LPDDOPENVPCAPTUREDEVICEIN; +typedef struct _DDOPENVPCAPTUREDEVICEIN { + HANDLE hDirectDraw; + HANDLE hVideoPort; + DWORD dwStartLine; + DWORD dwEndLine; + DWORD dwCaptureEveryNFields; + LPDD_NOTIFYCALLBACK pfnCaptureClose; + PVOID pContext; + DWORD dwFlags; +} DDOPENVPCAPTUREDEVICEIN, *LPDDOPENVPCAPTUREDEVICEIN; -typedef struct _DDOPENVPCAPTUREDEVICEOUT -{ - DWORD ddRVal; - HANDLE hCapture; -} DDOPENVPCAPTUREDEVICEOUT, * LPDDOPENVPCAPTUREDEVICEOUT; +typedef struct _DDOPENVPCAPTUREDEVICEOUT { + DWORD ddRVal; + HANDLE hCapture; +} DDOPENVPCAPTUREDEVICEOUT, *LPDDOPENVPCAPTUREDEVICEOUT; -typedef struct _DDREGISTERCALLBACK -{ - HANDLE hDirectDraw; - ULONG dwEvents; - LPDD_NOTIFYCALLBACK pfnCallback; - ULONG_PTR dwParam1; - ULONG_PTR dwParam2; - PVOID pContext; +typedef struct _DDREGISTERCALLBACK { + HANDLE hDirectDraw; + ULONG dwEvents; + LPDD_NOTIFYCALLBACK pfnCallback; + ULONG_PTR dwParam1; + ULONG_PTR dwParam2; + PVOID pContext; } DDREGISTERCALLBACK, *LPDDREGISTERCALLBACK; -typedef struct _DDSETSURFACETATE -{ - HANDLE hDirectDraw; - HANDLE hSurface; - DWORD dwState; - DWORD dwStartField; +typedef struct _DDSETSURFACETATE { + HANDLE hDirectDraw; + HANDLE hSurface; + DWORD dwState; + DWORD dwStartField; } DDSETSURFACESTATE, *LPDDSETSURFACESTATE; -typedef struct _DDSETFIELDNUM -{ - HANDLE hDirectDraw; - HANDLE hVideoPort; - DWORD dwFieldNum; +typedef struct _DDSETFIELDNUM { + HANDLE hDirectDraw; + HANDLE hVideoPort; + DWORD dwFieldNum; } DDSETFIELDNUM, *LPDDSETFIELDNUM; -typedef struct _DDSETSKIPFIELD -{ - HANDLE hDirectDraw; - HANDLE hVideoPort; - DWORD dwStartField; +typedef struct _DDSETSKIPFIELD { + HANDLE hDirectDraw; + HANDLE hVideoPort; + DWORD dwStartField; } DDSETSKIPFIELD, *LPDDSETSKIPFIELD; @@ -346,5 +303,5 @@ DxApi(IN DWORD dwFunctionNum, OUT DWORD cbOutBuffer); - #endif /* __DDKMAPI_INCLUDED__ */ + diff --git a/include/dxsdk/ddraw.h b/include/psdk/ddraw.h similarity index 99% rename from include/dxsdk/ddraw.h rename to include/psdk/ddraw.h index 1e8dbd22af5..7dac04e13d2 100644 --- a/include/dxsdk/ddraw.h +++ b/include/psdk/ddraw.h @@ -1,5 +1,4 @@ - #ifndef __DDRAW_INCLUDED__ #define __DDRAW_INCLUDED__ @@ -44,6 +43,15 @@ #endif #endif +/* Helper macro to enable gcc's extension. */ +#ifndef __GNU_EXTENSION +#ifdef __GNUC__ +#define __GNU_EXTENSION __extension__ +#else +#define __GNU_EXTENSION +#endif +#endif + #ifdef __cplusplus extern "C" { #endif @@ -2561,7 +2569,7 @@ DECLARE_INTERFACE_( IDirectDrawSurface3, IUnknown ) #undef INTERFACE #ifdef __cplusplus -}; +} #endif #ifdef ENABLE_NAMELESS_UNION_PRAGMA @@ -2569,6 +2577,3 @@ DECLARE_INTERFACE_( IDirectDrawSurface3, IUnknown ) #endif #endif - - - diff --git a/include/psdk/ddrawi.h b/include/psdk/ddrawi.h new file mode 100644 index 00000000000..2f676e9b872 --- /dev/null +++ b/include/psdk/ddrawi.h @@ -0,0 +1,2065 @@ +/* + * DirectDraw driver interface + * (DirectX 7 version) + * + * Copyright (C) 2001 Ove Kaaven + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef __DDRAWI_INCLUDED__ +#define __DDRAWI_INCLUDED__ + +#ifdef __cplusplus +extern "C" { +#endif + +#define OBJECT_ISROOT 0x80000000 + +#include +#include +#include +#include + +#define DDAPI WINAPI + +#define VALID_ALIGNMENT(align) \ + (!((align==0)||(align%2)!= 0 )) + +/* the DirectDraw versions */ +#define DD_VERSION 0x0200 /* compatibility version */ +#define DD_RUNTIME_VERSION 0x0902 /* actual version */ + +/* the HAL version returned from QUERYESCSUPPORT - DCICOMMAND */ +#define DD_HAL_VERSION 0x0100 + +/* more DCICOMMAND escapes */ +#ifndef DCICOMMAND +#define DCICOMMAND 3075 +#endif + +#define DDCREATEDRIVEROBJECT 10 +#define DDGET32BITDRIVERNAME 11 +#define DDNEWCALLBACKFNS 12 +#define DDVERSIONINFO 13 + +#define DDUNSUPPORTEDMODE ((DWORD) -1) + +#include "dciddi.h" + +#ifndef CCHDEVICENAME +#define CCHDEVICENAME 32 +#endif +#define MAX_DRIVER_NAME CCHDEVICENAME + +#define DDHAL_DRIVER_DLLNAME "DDRAW16.DLL" +#define DDHAL_APP_DLLNAME "DDRAW.DLL" + +/* GUID */ +#ifdef _WIN32 +DEFINE_GUID(GUID_MiscellaneousCallbacks, 0xefd60cc0, 0x49e7, 0x11d0, 0x88, 0x9d, 0x00, 0xaa, 0x00, 0xbb, 0xb7, 0x6a); +DEFINE_GUID(GUID_VideoPortCallbacks, 0xefd60cc1, 0x49e7, 0x11d0, 0x88, 0x9d, 0x00, 0xaa, 0x00, 0xbb, 0xb7, 0x6a); +DEFINE_GUID(GUID_ColorControlCallbacks, 0xefd60cc2, 0x49e7, 0x11d0, 0x88, 0x9d, 0x00, 0xaa, 0x00, 0xbb, 0xb7, 0x6a); +DEFINE_GUID(GUID_VideoPortCaps, 0xefd60cc3, 0x49e7, 0x11d0, 0x88, 0x9d, 0x00, 0xaa, 0x00, 0xbb, 0xb7, 0x6a); +DEFINE_GUID(GUID_D3DCallbacks2, 0x0ba584e1, 0x70b6, 0x11d0, 0x88, 0x9d, 0x00, 0xaa, 0x00, 0xbb, 0xb7, 0x6a); +DEFINE_GUID(GUID_D3DCallbacks3, 0xddf41230, 0xec0a, 0x11d0, 0xa9, 0xb6, 0x00, 0xaa, 0x00, 0xc0, 0x99, 0x3e); +DEFINE_GUID(GUID_NonLocalVidMemCaps, 0x86c4fa80, 0x8d84, 0x11d0, 0x94, 0xe8, 0x00, 0xc0, 0x4f, 0xc3, 0x41, 0x37); +DEFINE_GUID(GUID_KernelCallbacks, 0x80863800, 0x6B06, 0x11D0, 0x9B, 0x06, 0x0, 0xA0, 0xC9, 0x03, 0xA3, 0xB8); +DEFINE_GUID(GUID_KernelCaps, 0xFFAA7540, 0x7AA8, 0x11D0, 0x9B, 0x06, 0x00, 0xA0, 0xC9, 0x03, 0xA3, 0xB8); +DEFINE_GUID(GUID_D3DExtendedCaps, 0x7de41f80, 0x9d93, 0x11d0, 0x89, 0xab, 0x0, 0xa0, 0xc9, 0x5, 0x41, 0x29); +DEFINE_GUID(GUID_ZPixelFormats, 0x93869880, 0x36cf, 0x11d1, 0x9b, 0x1b, 0x0, 0xaa, 0x0, 0xbb, 0xb8, 0xae); +DEFINE_GUID(GUID_DDMoreSurfaceCaps, 0x3b8a0466, 0xf269, 0x11d1, 0x88, 0x0b, 0x0, 0xc0, 0x4f, 0xd9, 0x30, 0xc5); +DEFINE_GUID(GUID_DDStereoMode, 0xf828169c, 0xa8e8, 0x11d2, 0xa1, 0xf2, 0x0, 0xa0, 0xc9, 0x83, 0xea, 0xf6); +DEFINE_GUID(GUID_OptSurfaceKmodeInfo, 0xe05c8472, 0x51d4, 0x11d1, 0x8c, 0xce, 0x0, 0xa0, 0xc9, 0x6, 0x29, 0xa8); +DEFINE_GUID(GUID_OptSurfaceUmodeInfo, 0x9d792804, 0x5fa8, 0x11d1, 0x8c, 0xd0, 0x0, 0xa0, 0xc9, 0x6, 0x29, 0xa8); +DEFINE_GUID(GUID_UserModeDriverInfo, 0xf0b0e8e2, 0x5f97, 0x11d1, 0x8c, 0xd0, 0x0, 0xa0, 0xc9, 0x6, 0x29, 0xa8); +DEFINE_GUID(GUID_UserModeDriverPassword, 0x97f861b6, 0x60a1, 0x11d1, 0x8c, 0xd0, 0x0, 0xa0, 0xc9, 0x6, 0x29, 0xa8); +DEFINE_GUID(GUID_D3DParseUnknownCommandCallback, 0x2e04ffa0, 0x98e4, 0x11d1, 0x8c, 0xe1, 0x0, 0xa0, 0xc9, 0x6, 0x29, 0xa8); +DEFINE_GUID(GUID_MotionCompCallbacks, 0xb1122b40, 0x5dA5, 0x11d1, 0x8f, 0xcF, 0x00, 0xc0, 0x4f, 0xc2, 0x9b, 0x4e); +DEFINE_GUID(GUID_Miscellaneous2Callbacks, 0x406B2F00, 0x3E5A, 0x11D1, 0xB6, 0x40, 0x00, 0xAA, 0x00, 0xA1, 0xF9, 0x6A); +#endif + +#ifndef _WIN32 +#undef E_NOTIMPL +#undef E_OUTOFMEMORY +#undef E_INVALIDARG +#undef E_FAIL +#define E_NOTIMPL 0x80004001L +#define E_OUTOFMEMORY 0x8007000EL +#define E_INVALIDARG 0x80070057L +#define E_FAIL 0x80004005L +#endif + +/***************************************************************************** + * Initialization stuff + */ +typedef struct { + char szName[260]; + char szEntryPoint[64]; + DWORD dwContext; +} DD32BITDRIVERDATA,*LPDD32BITDRIVERDATA; + +typedef struct { + DWORD dwHALVersion; + ULONG_PTR dwReserved1; + ULONG_PTR dwReserved2; +} DDVERSIONDATA,*LPDDVERSIONDATA; + +typedef DWORD (PASCAL *LPDD32BITDRIVERINIT)(DWORD dwContext); + +/* predeclare some structures */ +typedef struct _DDHALINFO *LPDDHALINFO; +typedef struct _DDRAWI_DIRECTDRAW_INT *LPDDRAWI_DIRECTDRAW_INT; + +#ifndef DDRAWI_DIRECTDRAW_DEFINED +typedef struct _DDRAWI_DIRECTDRAW_LCL *LPDDRAWI_DIRECTDRAW_LCL; +typedef struct _DDRAWI_DIRECTDRAW_GBL *LPDDRAWI_DIRECTDRAW_GBL; +#define DDRAWI_DIRECTDRAW_DEFINED +#endif + +typedef struct _DDRAWI_DDRAWSURFACE_INT *LPDDRAWI_DDRAWSURFACE_INT; + +#ifndef DDRAWI_DDRAWSURFACE_DEFINED +typedef struct _DDRAWI_DDRAWSURFACE_LCL *LPDDRAWI_DDRAWSURFACE_LCL; +#define DDRAWI_DDRAWSURFACE_DEFINED +#endif + +typedef struct _DDRAWI_DDRAWSURFACE_GBL *LPDDRAWI_DDRAWSURFACE_GBL; +typedef struct _DDRAWI_DDRAWSURFACE_MORE *LPDDRAWI_DDRAWSURFACE_MORE; +typedef struct _DDRAWI_DDRAWSURFACE_GBL_MORE *LPDDRAWI_DDRAWSURFACE_GBL_MORE; +typedef struct _DDRAWI_DDRAWPALETTE_INT *LPDDRAWI_DDRAWPALETTE_INT; +typedef struct _DDRAWI_DDRAWPALETTE_LCL *LPDDRAWI_DDRAWPALETTE_LCL; +typedef struct _DDRAWI_DDRAWPALETTE_GBL *LPDDRAWI_DDRAWPALETTE_GBL; +typedef struct _DDRAWI_DDRAWCLIPPER_INT *LPDDRAWI_DDRAWCLIPPER_INT; +typedef struct _DDRAWI_DDRAWCLIPPER_LCL *LPDDRAWI_DDRAWCLIPPER_LCL; +typedef struct _DDRAWI_DDRAWCLIPPER_GBL *LPDDRAWI_DDRAWCLIPPER_GBL; +typedef struct _DDRAWI_DDVIDEOPORT_INT *LPDDRAWI_DDVIDEOPORT_INT; +typedef struct _DDRAWI_DDVIDEOPORT_LCL *LPDDRAWI_DDVIDEOPORT_LCL; +typedef struct _DDRAWI_DDMOTIONCOMP_INT *LPDDRAWI_DDMOTIONCOMP_INT; +typedef struct _DDRAWI_DDMOTIONCOMP_LCL *LPDDRAWI_DDMOTIONCOMP_LCL; + +/***************************************************************************** + * driver->ddraw callbacks + */ +typedef BOOL (DDAPI *LPDDHAL_SETINFO)(LPDDHALINFO lpDDHalInfo, BOOL reset); +typedef FLATPTR (DDAPI *LPDDHAL_VIDMEMALLOC)(LPDDRAWI_DIRECTDRAW_GBL lpDD, int heap, DWORD dwWidth, DWORD dwHeight); +typedef void (DDAPI *LPDDHAL_VIDMEMFREE)(LPDDRAWI_DIRECTDRAW_GBL lpDD, int heap, FLATPTR fpMem); + +typedef struct { + DWORD dwSize; + LPDDHAL_SETINFO lpSetInfo; + LPDDHAL_VIDMEMALLOC lpVidMemAlloc; + LPDDHAL_VIDMEMFREE lpVidMemFree; +} DDHALDDRAWFNS, *LPDDHALDDRAWFNS; + +/***************************************************************************** + * mode info structure + */ +typedef struct _DDHALMODEINFO { + DWORD dwWidth; + DWORD dwHeight; + LONG lPitch; + DWORD dwBPP; + WORD wFlags; + WORD wRefreshRate; + DWORD dwRBitMask; + DWORD dwGBitMask; + DWORD dwBBitMask; + DWORD dwAlphaBitMask; +} DDHALMODEINFO, *LPDDHALMODEINFO; + +#define DDMODEINFO_PALETTIZED 0x0001 +#define DDMODEINFO_MODEX 0x0002 +#define DDMODEINFO_UNSUPPORTED 0x0004 +#define DDMODEINFO_STANDARDVGA 0x0008 +#define DDMODEINFO_MAXREFRESH 0x0010 +#define DDMODEINFO_STEREO 0x0020 + +/***************************************************************************** + * video memory info structure + */ +typedef struct _VIDMEM { + DWORD dwFlags; + FLATPTR fpStart; + __GNU_EXTENSION union { + FLATPTR fpEnd; + DWORD dwWidth; + }; + DDSCAPS ddsCaps; + DDSCAPS ddsCapsAlt; + __GNU_EXTENSION union { + LPVMEMHEAP lpHeap; + DWORD dwHeight; + }; +} VIDMEM; + +#define VIDMEM_ISLINEAR 0x00000001l +#define VIDMEM_ISRECTANGULAR 0x00000002l +#define VIDMEM_ISHEAP 0x00000004l +#define VIDMEM_ISNONLOCAL 0x00000008l +#define VIDMEM_ISWC 0x00000010l +#define VIDMEM_HEAPDISABLED 0x00000020l + +typedef struct _VIDMEMINFO { + FLATPTR fpPrimary; + DWORD dwFlags; + DWORD dwDisplayWidth; + DWORD dwDisplayHeight; + LONG lDisplayPitch; + DDPIXELFORMAT ddpfDisplay; + DWORD dwOffscreenAlign; + DWORD dwOverlayAlign; + DWORD dwTextureAlign; + DWORD dwZBufferAlign; + DWORD dwAlphaAlign; + DWORD dwNumHeaps; + LPVIDMEM pvmList; +} VIDMEMINFO, *LPVIDMEMINFO; + +typedef struct _HEAPALIAS { + FLATPTR fpVidMem; + LPVOID lpAlias; + DWORD dwAliasSize; +} HEAPALIAS, *LPHEAPALIAS; + +typedef struct _HEAPALIASINFO { + DWORD dwRefCnt; + DWORD dwFlags; + DWORD dwNumHeaps; + LPHEAPALIAS lpAliases; +} HEAPALIASINFO, *LPHEAPALIASINFO; + +#define HEAPALIASINFO_MAPPEDREAL 0x00000001 +#define HEAPALIASINFO_MAPPEDDUMMY 0x00000002 + +/***************************************************************************** + * capabilities structures + */ +typedef struct _DDCORECAPS { + DWORD dwSize; + DWORD dwCaps; + DWORD dwCaps2; + DWORD dwCKeyCaps; + DWORD dwFXCaps; + DWORD dwFXAlphaCaps; + DWORD dwPalCaps; + DWORD dwSVCaps; + DWORD dwAlphaBltConstBitDepths; + DWORD dwAlphaBltPixelBitDepths; + DWORD dwAlphaBltSurfaceBitDepths; + DWORD dwAlphaOverlayConstBitDepths; + DWORD dwAlphaOverlayPixelBitDepths; + DWORD dwAlphaOverlaySurfaceBitDepths; + DWORD dwZBufferBitDepths; + DWORD dwVidMemTotal; + DWORD dwVidMemFree; + DWORD dwMaxVisibleOverlays; + DWORD dwCurrVisibleOverlays; + DWORD dwNumFourCCCodes; + DWORD dwAlignBoundarySrc; + DWORD dwAlignSizeSrc; + DWORD dwAlignBoundaryDest; + DWORD dwAlignSizeDest; + DWORD dwAlignStrideAlign; + DWORD dwRops[DD_ROP_SPACE]; + DDSCAPS ddsCaps; + DWORD dwMinOverlayStretch; + DWORD dwMaxOverlayStretch; + DWORD dwMinLiveVideoStretch; + DWORD dwMaxLiveVideoStretch; + DWORD dwMinHwCodecStretch; + DWORD dwMaxHwCodecStretch; + DWORD dwReserved1; + DWORD dwReserved2; + DWORD dwReserved3; + DWORD dwSVBCaps; + DWORD dwSVBCKeyCaps; + DWORD dwSVBFXCaps; + DWORD dwSVBRops[DD_ROP_SPACE]; + DWORD dwVSBCaps; + DWORD dwVSBCKeyCaps; + DWORD dwVSBFXCaps; + DWORD dwVSBRops[DD_ROP_SPACE]; + DWORD dwSSBCaps; + DWORD dwSSBCKeyCaps; + DWORD dwSSBFXCaps; + DWORD dwSSBRops[DD_ROP_SPACE]; + DWORD dwMaxVideoPorts; + DWORD dwCurrVideoPorts; + DWORD dwSVBCaps2; +} DDCORECAPS, *LPDDCORECAPS; + +typedef struct _DDNONLOCALVIDMEMCAPS { + DWORD dwSize; + DWORD dwNLVBCaps; + DWORD dwNLVBCaps2; + DWORD dwNLVBCKeyCaps; + DWORD dwNLVBFXCaps; + DWORD dwNLVBRops[DD_ROP_SPACE]; +} DDNONLOCALVIDMEMCAPS, *LPDDNONLOCALVIDMEMCAPS; + +#define DDSCAPS_EXECUTEBUFFER DDSCAPS_RESERVED2 +#define DDSCAPS2_VERTEXBUFFER DDSCAPS2_RESERVED1 +#define DDSCAPS2_COMMANDBUFFER DDSCAPS2_RESERVED2 + +/***************************************************************************** + * ddraw->driver callbacks + */ +#define DDHAL_DRIVER_NOTHANDLED 0x00000000l +#define DDHAL_DRIVER_HANDLED 0x00000001l +#define DDHAL_DRIVER_NOCKEYHW 0x00000002l + +typedef struct _DDHAL_DESTROYDRIVERDATA *LPDDHAL_DESTROYDRIVERDATA; +typedef struct _DDHAL_CREATESURFACEDATA *LPDDHAL_CREATESURFACEDATA; +typedef struct _DDHAL_DRVSETCOLORKEYDATA *LPDDHAL_DRVSETCOLORKEYDATA; +typedef struct _DDHAL_SETMODEDATA *LPDDHAL_SETMODEDATA; +typedef struct _DDHAL_WAITFORVERTICALBLANKDATA *LPDDHAL_WAITFORVERTICALBLANKDATA; +typedef struct _DDHAL_CANCREATESURFACEDATA *LPDDHAL_CANCREATESURFACEDATA; +typedef struct _DDHAL_CREATEPALETTEDATA *LPDDHAL_CREATEPALETTEDATA; +typedef struct _DDHAL_GETSCANLINEDATA *LPDDHAL_GETSCANLINEDATA; +typedef struct _DDHAL_SETEXCLUSIVEMODEDATA *LPDDHAL_SETEXCLUSIVEMODEDATA; +typedef struct _DDHAL_FLIPTOGDISURFACEDATA *LPDDHAL_FLIPTOGDISURFACEDATA; + +typedef DWORD (PASCAL *LPDDHAL_DESTROYDRIVER) (LPDDHAL_DESTROYDRIVERDATA); +typedef DWORD (PASCAL *LPDDHAL_CREATESURFACE) (LPDDHAL_CREATESURFACEDATA); +typedef DWORD (PASCAL *LPDDHAL_SETCOLORKEY) (LPDDHAL_DRVSETCOLORKEYDATA); +typedef DWORD (PASCAL *LPDDHAL_SETMODE) (LPDDHAL_SETMODEDATA); +typedef DWORD (PASCAL *LPDDHAL_WAITFORVERTICALBLANK)(LPDDHAL_WAITFORVERTICALBLANKDATA); +typedef DWORD (PASCAL *LPDDHAL_CANCREATESURFACE) (LPDDHAL_CANCREATESURFACEDATA ); +typedef DWORD (PASCAL *LPDDHAL_CREATEPALETTE) (LPDDHAL_CREATEPALETTEDATA); +typedef DWORD (PASCAL *LPDDHAL_GETSCANLINE) (LPDDHAL_GETSCANLINEDATA); +typedef DWORD (PASCAL *LPDDHAL_SETEXCLUSIVEMODE) (LPDDHAL_SETEXCLUSIVEMODEDATA); +typedef DWORD (PASCAL *LPDDHAL_FLIPTOGDISURFACE) (LPDDHAL_FLIPTOGDISURFACEDATA); + +typedef struct _DDHAL_DDCALLBACKS { + DWORD dwSize; + DWORD dwFlags; + LPDDHAL_DESTROYDRIVER DestroyDriver; + LPDDHAL_CREATESURFACE CreateSurface; + LPDDHAL_SETCOLORKEY SetColorKey; + LPDDHAL_SETMODE SetMode; + LPDDHAL_WAITFORVERTICALBLANK WaitForVerticalBlank; + LPDDHAL_CANCREATESURFACE CanCreateSurface; + LPDDHAL_CREATEPALETTE CreatePalette; + LPDDHAL_GETSCANLINE GetScanLine; + /* DirectX 2 */ + LPDDHAL_SETEXCLUSIVEMODE SetExclusiveMode; + LPDDHAL_FLIPTOGDISURFACE FlipToGDISurface; +} DDHAL_DDCALLBACKS, *LPDDHAL_DDCALLBACKS; + +typedef struct _DDHAL_DESTROYSURFACEDATA *LPDDHAL_DESTROYSURFACEDATA; +typedef struct _DDHAL_FLIPDATA *LPDDHAL_FLIPDATA; +typedef struct _DDHAL_SETCLIPLISTDATA *LPDDHAL_SETCLIPLISTDATA; +typedef struct _DDHAL_LOCKDATA *LPDDHAL_LOCKDATA; +typedef struct _DDHAL_UNLOCKDATA *LPDDHAL_UNLOCKDATA; +typedef struct _DDHAL_BLTDATA *LPDDHAL_BLTDATA; +typedef struct _DDHAL_SETCOLORKEYDATA *LPDDHAL_SETCOLORKEYDATA; +typedef struct _DDHAL_ADDATTACHEDSURFACEDATA *LPDDHAL_ADDATTACHEDSURFACEDATA; +typedef struct _DDHAL_GETBLTSTATUSDATA *LPDDHAL_GETBLTSTATUSDATA; +typedef struct _DDHAL_GETFLIPSTATUSDATA *LPDDHAL_GETFLIPSTATUSDATA; +typedef struct _DDHAL_UPDATEOVERLAYDATA *LPDDHAL_UPDATEOVERLAYDATA; +typedef struct _DDHAL_SETOVERLAYPOSITIONDATA *LPDDHAL_SETOVERLAYPOSITIONDATA; +typedef struct _DDHAL_SETPALETTEDATA *LPDDHAL_SETPALETTEDATA; + +typedef DWORD (PASCAL *LPDDHALSURFCB_DESTROYSURFACE) (LPDDHAL_DESTROYSURFACEDATA); +typedef DWORD (PASCAL *LPDDHALSURFCB_FLIP) (LPDDHAL_FLIPDATA); +typedef DWORD (PASCAL *LPDDHALSURFCB_SETCLIPLIST) (LPDDHAL_SETCLIPLISTDATA); +typedef DWORD (PASCAL *LPDDHALSURFCB_LOCK) (LPDDHAL_LOCKDATA); +typedef DWORD (PASCAL *LPDDHALSURFCB_UNLOCK) (LPDDHAL_UNLOCKDATA); +typedef DWORD (PASCAL *LPDDHALSURFCB_BLT) (LPDDHAL_BLTDATA); +typedef DWORD (PASCAL *LPDDHALSURFCB_SETCOLORKEY) (LPDDHAL_SETCOLORKEYDATA); +typedef DWORD (PASCAL *LPDDHALSURFCB_ADDATTACHEDSURFACE)(LPDDHAL_ADDATTACHEDSURFACEDATA); +typedef DWORD (PASCAL *LPDDHALSURFCB_GETBLTSTATUS) (LPDDHAL_GETBLTSTATUSDATA); +typedef DWORD (PASCAL *LPDDHALSURFCB_GETFLIPSTATUS) (LPDDHAL_GETFLIPSTATUSDATA); +typedef DWORD (PASCAL *LPDDHALSURFCB_UPDATEOVERLAY) (LPDDHAL_UPDATEOVERLAYDATA); +typedef DWORD (PASCAL *LPDDHALSURFCB_SETOVERLAYPOSITION)(LPDDHAL_SETOVERLAYPOSITIONDATA); +typedef DWORD (PASCAL *LPDDHALSURFCB_SETPALETTE) (LPDDHAL_SETPALETTEDATA); + +typedef struct _DDHAL_DDSURFACECALLBACKS { + DWORD dwSize; + DWORD dwFlags; + LPDDHALSURFCB_DESTROYSURFACE DestroySurface; + LPDDHALSURFCB_FLIP Flip; + LPDDHALSURFCB_SETCLIPLIST SetClipList; + LPDDHALSURFCB_LOCK Lock; + LPDDHALSURFCB_UNLOCK Unlock; + LPDDHALSURFCB_BLT Blt; + LPDDHALSURFCB_SETCOLORKEY SetColorKey; + LPDDHALSURFCB_ADDATTACHEDSURFACE AddAttachedSurface; + LPDDHALSURFCB_GETBLTSTATUS GetBltStatus; + LPDDHALSURFCB_GETFLIPSTATUS GetFlipStatus; + LPDDHALSURFCB_UPDATEOVERLAY UpdateOverlay; + LPDDHALSURFCB_SETOVERLAYPOSITION SetOverlayPosition; + LPVOID reserved4; + LPDDHALSURFCB_SETPALETTE SetPalette; +} DDHAL_DDSURFACECALLBACKS, *LPDDHAL_DDSURFACECALLBACKS; + +typedef struct _DDHAL_DESTROYPALETTEDATA *LPDDHAL_DESTROYPALETTEDATA; +typedef struct _DDHAL_SETENTRIESDATA *LPDDHAL_SETENTRIESDATA; + +typedef DWORD (PASCAL *LPDDHALPALCB_DESTROYPALETTE) (LPDDHAL_DESTROYPALETTEDATA); +typedef DWORD (PASCAL *LPDDHALPALCB_SETENTRIES) (LPDDHAL_SETENTRIESDATA); + +typedef struct _DDHAL_DDPALETTECALLBACKS { + DWORD dwSize; + DWORD dwFlags; + LPDDHALPALCB_DESTROYPALETTE DestroyPalette; + LPDDHALPALCB_SETENTRIES SetEntries; +} DDHAL_DDPALETTECALLBACKS, *LPDDHAL_DDPALETTECALLBACKS; + +typedef DWORD (PASCAL *LPDDHALEXEBUFCB_CANCREATEEXEBUF) (LPDDHAL_CANCREATESURFACEDATA); +typedef DWORD (PASCAL *LPDDHALEXEBUFCB_CREATEEXEBUF) (LPDDHAL_CREATESURFACEDATA); +typedef DWORD (PASCAL *LPDDHALEXEBUFCB_DESTROYEXEBUF) (LPDDHAL_DESTROYSURFACEDATA); +typedef DWORD (PASCAL *LPDDHALEXEBUFCB_LOCKEXEBUF) (LPDDHAL_LOCKDATA); +typedef DWORD (PASCAL *LPDDHALEXEBUFCB_UNLOCKEXEBUF) (LPDDHAL_UNLOCKDATA); + +typedef struct _DDHAL_DDEXEBUFCALLBACKS { + DWORD dwSize; + DWORD dwFlags; + LPDDHALEXEBUFCB_CANCREATEEXEBUF CanCreateExecuteBuffer; + LPDDHALEXEBUFCB_CREATEEXEBUF CreateExecuteBuffer; + LPDDHALEXEBUFCB_DESTROYEXEBUF DestroyExecuteBuffer; + LPDDHALEXEBUFCB_LOCKEXEBUF LockExecuteBuffer; + LPDDHALEXEBUFCB_UNLOCKEXEBUF UnlockExecuteBuffer; +} DDHAL_DDEXEBUFCALLBACKS, *LPDDHAL_DDEXEBUFCALLBACKS; + +typedef struct _DDHAL_GETAVAILDRIVERMEMORYDATA *LPDDHAL_GETAVAILDRIVERMEMORYDATA; +typedef struct _DDHAL_UPDATENONLOCALHEAPDATA *LPDDHAL_UPDATENONLOCALHEAPDATA; +typedef struct _DDHAL_GETHEAPALIGNMENTDATA *LPDDHAL_GETHEAPALIGNMENTDATA; + +typedef DWORD (PASCAL *LPDDHAL_GETAVAILDRIVERMEMORY)(LPDDHAL_GETAVAILDRIVERMEMORYDATA); +typedef DWORD (PASCAL *LPDDHAL_UPDATENONLOCALHEAP) (LPDDHAL_UPDATENONLOCALHEAPDATA); +typedef DWORD (PASCAL *LPDDHAL_GETHEAPALIGNMENT) (LPDDHAL_GETHEAPALIGNMENTDATA); + +typedef struct _DDHAL_DDMISCELLANEOUSCALLBACKS { + DWORD dwSize; + DWORD dwFlags; + LPDDHAL_GETAVAILDRIVERMEMORY GetAvailDriverMemory; + LPDDHAL_UPDATENONLOCALHEAP UpdateNonLocalHeap; + LPDDHAL_GETHEAPALIGNMENT GetHeapAlignment; + LPDDHALSURFCB_GETBLTSTATUS GetSysmemBltStatus; +} DDHAL_DDMISCELLANEOUSCALLBACKS, *LPDDHAL_DDMISCELLANEOUSCALLBACKS; + +typedef struct _DDHAL_CREATESURFACEEXDATA *LPDDHAL_CREATESURFACEEXDATA; +typedef struct _DDHAL_GETDRIVERSTATEDATA *LPDDHAL_GETDRIVERSTATEDATA; +typedef struct _DDHAL_DESTROYDDLOCALDATA *LPDDHAL_DESTROYDDLOCALDATA; + +typedef DWORD (PASCAL *LPDDHAL_CREATESURFACEEX)(LPDDHAL_CREATESURFACEEXDATA); +typedef DWORD (PASCAL *LPDDHAL_GETDRIVERSTATE) (LPDDHAL_GETDRIVERSTATEDATA); +typedef DWORD (PASCAL *LPDDHAL_DESTROYDDLOCAL) (LPDDHAL_DESTROYDDLOCALDATA); + +typedef struct _DDHAL_DDMISCELLANEOUS2CALLBACKS { + DWORD dwSize; + DWORD dwFlags; + LPVOID Reserved; + LPDDHAL_CREATESURFACEEX CreateSurfaceEx; + LPDDHAL_GETDRIVERSTATE GetDriverState; + LPDDHAL_DESTROYDDLOCAL DestroyDDLocal; +} DDHAL_DDMISCELLANEOUS2CALLBACKS, *LPDDHAL_DDMISCELLANEOUS2CALLBACKS; + +typedef struct _DDHAL_CANCREATEVPORTDATA *LPDDHAL_CANCREATEVPORTDATA; +typedef struct _DDHAL_CREATEVPORTDATA *LPDDHAL_CREATEVPORTDATA; +typedef struct _DDHAL_FLIPVPORTDATA *LPDDHAL_FLIPVPORTDATA; +typedef struct _DDHAL_GETVPORTCONNECTDATA *LPDDHAL_GETVPORTCONNECTDATA; +typedef struct _DDHAL_GETVPORTBANDWIDTHDATA *LPDDHAL_GETVPORTBANDWIDTHDATA; +typedef struct _DDHAL_GETVPORTINPUTFORMATDATA *LPDDHAL_GETVPORTINPUTFORMATDATA; +typedef struct _DDHAL_GETVPORTOUTPUTFORMATDATA *LPDDHAL_GETVPORTOUTPUTFORMATDATA; +typedef struct _DDHAL_GETVPORTFIELDDATA *LPDDHAL_GETVPORTFIELDDATA; +typedef struct _DDHAL_GETVPORTLINEDATA *LPDDHAL_GETVPORTLINEDATA; +typedef struct _DDHAL_DESTROYVPORTDATA *LPDDHAL_DESTROYVPORTDATA; +typedef struct _DDHAL_GETVPORTFLIPSTATUSDATA *LPDDHAL_GETVPORTFLIPSTATUSDATA; +typedef struct _DDHAL_UPDATEVPORTDATA *LPDDHAL_UPDATEVPORTDATA; +typedef struct _DDHAL_WAITFORVPORTSYNCDATA *LPDDHAL_WAITFORVPORTSYNCDATA; +typedef struct _DDHAL_GETVPORTSIGNALDATA *LPDDHAL_GETVPORTSIGNALDATA; +typedef struct _DDHAL_VPORTCOLORDATA *LPDDHAL_VPORTCOLORDATA; + +typedef DWORD (PASCAL *LPDDHALVPORTCB_CANCREATEVIDEOPORT)(LPDDHAL_CANCREATEVPORTDATA); +typedef DWORD (PASCAL *LPDDHALVPORTCB_CREATEVIDEOPORT)(LPDDHAL_CREATEVPORTDATA); +typedef DWORD (PASCAL *LPDDHALVPORTCB_FLIP)(LPDDHAL_FLIPVPORTDATA); +typedef DWORD (PASCAL *LPDDHALVPORTCB_GETBANDWIDTH)(LPDDHAL_GETVPORTBANDWIDTHDATA); +typedef DWORD (PASCAL *LPDDHALVPORTCB_GETINPUTFORMATS)(LPDDHAL_GETVPORTINPUTFORMATDATA); +typedef DWORD (PASCAL *LPDDHALVPORTCB_GETOUTPUTFORMATS)(LPDDHAL_GETVPORTOUTPUTFORMATDATA); +typedef DWORD (PASCAL *LPDDHALVPORTCB_GETFIELD)(LPDDHAL_GETVPORTFIELDDATA); +typedef DWORD (PASCAL *LPDDHALVPORTCB_GETLINE)(LPDDHAL_GETVPORTLINEDATA); +typedef DWORD (PASCAL *LPDDHALVPORTCB_GETVPORTCONNECT)(LPDDHAL_GETVPORTCONNECTDATA); +typedef DWORD (PASCAL *LPDDHALVPORTCB_DESTROYVPORT)(LPDDHAL_DESTROYVPORTDATA); +typedef DWORD (PASCAL *LPDDHALVPORTCB_GETFLIPSTATUS)(LPDDHAL_GETVPORTFLIPSTATUSDATA); +typedef DWORD (PASCAL *LPDDHALVPORTCB_UPDATE)(LPDDHAL_UPDATEVPORTDATA); +typedef DWORD (PASCAL *LPDDHALVPORTCB_WAITFORSYNC)(LPDDHAL_WAITFORVPORTSYNCDATA); +typedef DWORD (PASCAL *LPDDHALVPORTCB_GETSIGNALSTATUS)(LPDDHAL_GETVPORTSIGNALDATA); +typedef DWORD (PASCAL *LPDDHALVPORTCB_COLORCONTROL)(LPDDHAL_VPORTCOLORDATA); + +typedef struct _DDHAL_DDVIDEOPORTCALLBACKS { + DWORD dwSize; + DWORD dwFlags; + LPDDHALVPORTCB_CANCREATEVIDEOPORT CanCreateVideoPort; + LPDDHALVPORTCB_CREATEVIDEOPORT CreateVideoPort; + LPDDHALVPORTCB_FLIP FlipVideoPort; + LPDDHALVPORTCB_GETBANDWIDTH GetVideoPortBandwidth; + LPDDHALVPORTCB_GETINPUTFORMATS GetVideoPortInputFormats; + LPDDHALVPORTCB_GETOUTPUTFORMATS GetVideoPortOutputFormats; + LPVOID lpReserved1; + LPDDHALVPORTCB_GETFIELD GetVideoPortField; + LPDDHALVPORTCB_GETLINE GetVideoPortLine; + LPDDHALVPORTCB_GETVPORTCONNECT GetVideoPortConnectInfo; + LPDDHALVPORTCB_DESTROYVPORT DestroyVideoPort; + LPDDHALVPORTCB_GETFLIPSTATUS GetVideoPortFlipStatus; + LPDDHALVPORTCB_UPDATE UpdateVideoPort; + LPDDHALVPORTCB_WAITFORSYNC WaitForVideoPortSync; + LPDDHALVPORTCB_GETSIGNALSTATUS GetVideoSignalStatus; + LPDDHALVPORTCB_COLORCONTROL ColorControl; +} DDHAL_DDVIDEOPORTCALLBACKS; + +typedef struct _DDHAL_COLORCONTROLDATA *LPDDHAL_COLORCONTROLDATA; + +typedef DWORD (PASCAL *LPDDHALCOLORCB_COLORCONTROL)(LPDDHAL_COLORCONTROLDATA); + +typedef struct _DDHAL_DDCOLORCONTROLCALLBACKS { + DWORD dwSize; + DWORD dwFlags; + LPDDHALCOLORCB_COLORCONTROL ColorControl; +} DDHAL_DDCOLORCONTROLCALLBACKS; + +typedef struct _DDHAL_SYNCSURFACEDATA *LPDDHAL_SYNCSURFACEDATA; +typedef struct _DDHAL_SYNCVIDEOPORTDATA *LPDDHAL_SYNCVIDEOPORTDATA; + +typedef DWORD (PASCAL *LPDDHALKERNELCB_SYNCSURFACE)(LPDDHAL_SYNCSURFACEDATA); +typedef DWORD (PASCAL *LPDDHALKERNELCB_SYNCVIDEOPORT)(LPDDHAL_SYNCVIDEOPORTDATA); + +typedef struct _DDHAL_DDKERNELCALLBACKS { + DWORD dwSize; + DWORD dwFlags; + LPDDHALKERNELCB_SYNCSURFACE SyncSurfaceData; + LPDDHALKERNELCB_SYNCVIDEOPORT SyncVideoPortData; +} DDHAL_DDKERNELCALLBACKS, *LPDDHAL_DDKERNELCALLBACKS; + +typedef struct _DDHAL_GETMOCOMPGUIDSDATA *LPDDHAL_GETMOCOMPGUIDSDATA; +typedef struct _DDHAL_GETMOCOMPFORMATSDATA *LPDDHAL_GETMOCOMPFORMATSDATA; +typedef struct _DDHAL_CREATEMOCOMPDATA *LPDDHAL_CREATEMOCOMPDATA; +typedef struct _DDHAL_GETMOCOMPCOMPBUFFDATA *LPDDHAL_GETMOCOMPCOMPBUFFDATA; +typedef struct _DDHAL_GETINTERNALMOCOMPDATA *LPDDHAL_GETINTERNALMOCOMPDATA; +typedef struct _DDHAL_BEGINMOCOMPFRAMEDATA *LPDDHAL_BEGINMOCOMPFRAMEDATA; +typedef struct _DDHAL_ENDMOCOMPFRAMEDATA *LPDDHAL_ENDMOCOMPFRAMEDATA; +typedef struct _DDHAL_RENDERMOCOMPDATA *LPDDHAL_RENDERMOCOMPDATA; +typedef struct _DDHAL_QUERYMOCOMPSTATUSDATA *LPDDHAL_QUERYMOCOMPSTATUSDATA; +typedef struct _DDHAL_DESTROYMOCOMPDATA *LPDDHAL_DESTROYMOCOMPDATA; + +typedef DWORD (PASCAL *LPDDHALMOCOMPCB_GETGUIDS)(LPDDHAL_GETMOCOMPGUIDSDATA); +typedef DWORD (PASCAL *LPDDHALMOCOMPCB_GETFORMATS)(LPDDHAL_GETMOCOMPFORMATSDATA); +typedef DWORD (PASCAL *LPDDHALMOCOMPCB_CREATE)(LPDDHAL_CREATEMOCOMPDATA); +typedef DWORD (PASCAL *LPDDHALMOCOMPCB_GETCOMPBUFFINFO)(LPDDHAL_GETMOCOMPCOMPBUFFDATA); +typedef DWORD (PASCAL *LPDDHALMOCOMPCB_GETINTERNALINFO)(LPDDHAL_GETINTERNALMOCOMPDATA); +typedef DWORD (PASCAL *LPDDHALMOCOMPCB_BEGINFRAME)(LPDDHAL_BEGINMOCOMPFRAMEDATA); +typedef DWORD (PASCAL *LPDDHALMOCOMPCB_ENDFRAME)(LPDDHAL_ENDMOCOMPFRAMEDATA); +typedef DWORD (PASCAL *LPDDHALMOCOMPCB_RENDER)(LPDDHAL_RENDERMOCOMPDATA); +typedef DWORD (PASCAL *LPDDHALMOCOMPCB_QUERYSTATUS)(LPDDHAL_QUERYMOCOMPSTATUSDATA); +typedef DWORD (PASCAL *LPDDHALMOCOMPCB_DESTROY)(LPDDHAL_DESTROYMOCOMPDATA); + +typedef struct _DDHAL_DDMOTIONCOMPCALLBACKS { + DWORD dwSize; + DWORD dwFlags; + LPDDHALMOCOMPCB_GETGUIDS GetMoCompGuids; + LPDDHALMOCOMPCB_GETFORMATS GetMoCompFormats; + LPDDHALMOCOMPCB_CREATE CreateMoComp; + LPDDHALMOCOMPCB_GETCOMPBUFFINFO GetMoCompBuffInfo; + LPDDHALMOCOMPCB_GETINTERNALINFO GetInternalMoCompInfo; + LPDDHALMOCOMPCB_BEGINFRAME BeginMoCompFrame; + LPDDHALMOCOMPCB_ENDFRAME EndMoCompFrame; + LPDDHALMOCOMPCB_RENDER RenderMoComp; + LPDDHALMOCOMPCB_QUERYSTATUS QueryMoCompStatus; + LPDDHALMOCOMPCB_DESTROY DestroyMoComp; +} DDHAL_DDMOTIONCOMPCALLBACKS, *LPDDHAL_DDMOTIONCOMPCALLBACKS; + +typedef HRESULT (WINAPI *LPDDGAMMACALIBRATORPROC)(LPDDGAMMARAMP, LPBYTE); + +/***************************************************************************** + * driver info structure + * + * The HAL is queried for additional callbacks via the GetDriverInfo callback. + */ +typedef struct _DDHAL_GETDRIVERINFODATA *LPDDHAL_GETDRIVERINFODATA; +typedef DWORD (PASCAL *LPDDHAL_GETDRIVERINFO)(LPDDHAL_GETDRIVERINFODATA); + +typedef struct _DDHAL_GETDRIVERINFODATA { + DWORD dwSize; + DWORD dwFlags; + GUID guidInfo; + DWORD dwExpectedSize; + LPVOID lpvData; + DWORD dwActualSize; + HRESULT ddRVal; + ULONG_PTR dwContext; +} DDHAL_GETDRIVERINFODATA; + +typedef struct _DDHALINFO { + DWORD dwSize; + LPDDHAL_DDCALLBACKS lpDDCallbacks; + LPDDHAL_DDSURFACECALLBACKS lpDDSurfaceCallbacks; + LPDDHAL_DDPALETTECALLBACKS lpDDPaletteCallbacks; + VIDMEMINFO vmiData; + DDCORECAPS ddCaps; + DWORD dwMonitorFrequency; + LPDDHAL_GETDRIVERINFO GetDriverInfo; + DWORD dwModeIndex; + LPDWORD lpdwFourCC; + DWORD dwNumModes; + LPDDHALMODEINFO lpModeInfo; + DWORD dwFlags; + LPVOID lpPDevice; + DWORD hInstance; + /* DirectX 2 */ + ULONG_PTR lpD3DGlobalDriverData; + ULONG_PTR lpD3DHALCallbacks; + LPDDHAL_DDEXEBUFCALLBACKS lpDDExeBufCallbacks; +} DDHALINFO; + +#define DDPALETTECALLBACKSSIZE sizeof(DDHAL_DDPALETTECALLBACKS) +#define DDSURFACECALLBACKSSIZE sizeof(DDHAL_DDSURFACECALLBACKS) +#define DDMISCELLANEOUSCALLBACKSSIZE sizeof(DDHAL_DDMISCELLANEOUSCALLBACKS) +#define DDMISCELLANEOUS2CALLBACKSSIZE sizeof(DDHAL_DDMISCELLANEOUS2CALLBACKS) +#define DDEXEBUFCALLBACKSSIZE sizeof(DDHAL_DDEXEBUFCALLBACKS) +#define DDVIDEOPORTCALLBACKSSIZE sizeof(DDHAL_DDVIDEOPORTCALLBACKS) +#define DDCOLORCONTROLCALLBACKSSIZE sizeof(DDHAL_DDCOLORCONTROLCALLBACKS) +#define DDKERNELCALLBACKSSIZE sizeof(DDHAL_DDKERNELCALLBACKS) +#define DDMOTIONCOMPCALLBACKSSIZE sizeof(DDHAL_DDMOTIONCOMPCALLBACKS) + +#define MAX_PALETTE_SIZE 256 + +#define MAX_AUTOFLIP_BUFFERS 10 +#define DDSCAPS2_INDEXBUFFER DDSCAPS2_RESERVED3 +#define DDSCAPS3_VIDEO DDSCAPS3_RESERVED2 +#define D3DFMT_INTERNAL_D32 71 +#define D3DFMT_INTERNAL_S1D15 72 +#define D3DFMT_INTERNAL_D15S1 73 +#define D3DFMT_INTERNAL_S8D24 74 +#define D3DFMT_INTERNAL_D24S8 75 +#define D3DFMT_INTERNAL_X8D24 76 +#define D3DFMT_INTERNAL_D24X8 77 +#define DDHAL_PLEASEALLOC_BLOCKSIZE 0x00000002l +#define DDHAL_PLEASEALLOC_LINEARSIZE 0x00000003l + +#define DDHAL_CB32_DESTROYDRIVER 0x00000001l +#define DDHAL_CB32_CREATESURFACE 0x00000002l +#define DDHAL_CB32_SETCOLORKEY 0x00000004l +#define DDHAL_CB32_SETMODE 0x00000008l +#define DDHAL_CB32_WAITFORVERTICALBLANK 0x00000010l +#define DDHAL_CB32_CANCREATESURFACE 0x00000020l +#define DDHAL_CB32_CREATEPALETTE 0x00000040l +#define DDHAL_CB32_GETSCANLINE 0x00000080l +#define DDHAL_CB32_SETEXCLUSIVEMODE 0x00000100l +#define DDHAL_CB32_FLIPTOGDISURFACE 0x00000200l +#define DDHAL_PALCB32_DESTROYPALETTE 0x00000001l +#define DDHAL_PALCB32_SETENTRIES 0x00000002l +#define DDHALINFO_ISPRIMARYDISPLAY 0x00000001 +#define DDHALINFO_MODEXILLEGAL 0x00000002 +#define DDHALINFO_GETDRIVERINFOSET 0x00000004 +#define DDHALINFO_GETDRIVERINFO2 0x00000008 +#define DDRAWI_VPORTSTART 0x0001 +#define DDRAWI_VPORTSTOP 0x0002 +#define DDRAWI_VPORTUPDATE 0x0003 +#define DDRAWI_VPORTGETCOLOR 0x0001 +#define DDRAWI_VPORTSETCOLOR 0x0002 +#define DDHAL_SURFCB32_DESTROYSURFACE 0x00000001 +#define DDHAL_SURFCB32_FLIP 0x00000002 +#define DDHAL_SURFCB32_SETCLIPLIST 0x00000004 +#define DDHAL_SURFCB32_LOCK 0x00000008 +#define DDHAL_SURFCB32_UNLOCK 0x00000010 +#define DDHAL_SURFCB32_BLT 0x00000020 +#define DDHAL_SURFCB32_SETCOLORKEY 0x00000040 +#define DDHAL_SURFCB32_ADDATTACHEDSURFACE 0x00000080 +#define DDHAL_SURFCB32_GETBLTSTATUS 0x00000100 +#define DDHAL_SURFCB32_GETFLIPSTATUS 0x00000200 +#define DDHAL_SURFCB32_UPDATEOVERLAY 0x00000400 +#define DDHAL_SURFCB32_SETOVERLAYPOSITION 0x00000800 +#define DDHAL_SURFCB32_RESERVED4 0x00001000 +#define DDHAL_SURFCB32_SETPALETTE 0x00002000 +#define DDHAL_MISCCB32_GETAVAILDRIVERMEMORY 0x00000001 +#define DDHAL_MISCCB32_UPDATENONLOCALHEAP 0x00000002 +#define DDHAL_MISCCB32_GETHEAPALIGNMENT 0x00000004 +#define DDHAL_MISCCB32_GETSYSMEMBLTSTATUS 0x00000008 +#define DDHAL_MISC2CB32_ALPHABLT 0x00000001 +#define DDHAL_MISC2CB32_CREATESURFACEEX 0x00000002 +#define DDHAL_MISC2CB32_GETDRIVERSTATE 0x00000004 +#define DDHAL_MISC2CB32_DESTROYDDLOCAL 0x00000008 +#define DDHAL_EXEBUFCB32_CANCREATEEXEBUF 0x00000001l +#define DDHAL_EXEBUFCB32_CREATEEXEBUF 0x00000002l +#define DDHAL_EXEBUFCB32_DESTROYEXEBUF 0x00000004l +#define DDHAL_EXEBUFCB32_LOCKEXEBUF 0x00000008l +#define DDHAL_EXEBUFCB32_UNLOCKEXEBUF 0x00000010l +#define DDHAL_VPORT32_CANCREATEVIDEOPORT 0x00000001 +#define DDHAL_VPORT32_CREATEVIDEOPORT 0x00000002 +#define DDHAL_VPORT32_FLIP 0x00000004 +#define DDHAL_VPORT32_GETBANDWIDTH 0x00000008 +#define DDHAL_VPORT32_GETINPUTFORMATS 0x00000010 +#define DDHAL_VPORT32_GETOUTPUTFORMATS 0x00000020 +#define DDHAL_VPORT32_GETFIELD 0x00000080 +#define DDHAL_VPORT32_GETLINE 0x00000100 +#define DDHAL_VPORT32_GETCONNECT 0x00000200 +#define DDHAL_VPORT32_DESTROY 0x00000400 +#define DDHAL_VPORT32_GETFLIPSTATUS 0x00000800 +#define DDHAL_VPORT32_UPDATE 0x00001000 +#define DDHAL_VPORT32_WAITFORSYNC 0x00002000 +#define DDHAL_VPORT32_GETSIGNALSTATUS 0x00004000 +#define DDHAL_VPORT32_COLORCONTROL 0x00008000 +#define DDHAL_COLOR_COLORCONTROL 0x00000001 +#define DDHAL_KERNEL_SYNCSURFACEDATA 0x00000001l +#define DDHAL_KERNEL_SYNCVIDEOPORTDATA 0x00000002l +#define DDHAL_MOCOMP32_GETGUIDS 0x00000001 +#define DDHAL_MOCOMP32_GETFORMATS 0x00000002 +#define DDHAL_MOCOMP32_CREATE 0x00000004 +#define DDHAL_MOCOMP32_GETCOMPBUFFINFO 0x00000008 +#define DDHAL_MOCOMP32_GETINTERNALINFO 0x00000010 +#define DDHAL_MOCOMP32_BEGINFRAME 0x00000020 +#define DDHAL_MOCOMP32_ENDFRAME 0x00000040 +#define DDHAL_MOCOMP32_RENDER 0x00000080 +#define DDHAL_MOCOMP32_QUERYSTATUS 0x00000100 +#define DDHAL_MOCOMP32_DESTROY 0x00000200 + +/* where the high-level ddraw implementation stores the callbacks */ +typedef struct _DDHAL_CALLBACKS { + DDHAL_DDCALLBACKS cbDDCallbacks; + DDHAL_DDSURFACECALLBACKS cbDDSurfaceCallbacks; + DDHAL_DDPALETTECALLBACKS cbDDPaletteCallbacks; + DDHAL_DDCALLBACKS HALDD; + DDHAL_DDSURFACECALLBACKS HALDDSurface; + DDHAL_DDPALETTECALLBACKS HALDDPalette; + DDHAL_DDCALLBACKS HELDD; + DDHAL_DDSURFACECALLBACKS HELDDSurface; + DDHAL_DDPALETTECALLBACKS HELDDPalette; + DDHAL_DDEXEBUFCALLBACKS cbDDExeBufCallbacks; + DDHAL_DDEXEBUFCALLBACKS HALDDExeBuf; + DDHAL_DDEXEBUFCALLBACKS HELDDExeBuf; + DDHAL_DDVIDEOPORTCALLBACKS cbDDVideoPortCallbacks; + DDHAL_DDVIDEOPORTCALLBACKS HALDDVideoPort; + DDHAL_DDCOLORCONTROLCALLBACKS cbDDColorControlCallbacks; + DDHAL_DDCOLORCONTROLCALLBACKS HALDDColorControl; + DDHAL_DDMISCELLANEOUSCALLBACKS cbDDMiscellaneousCallbacks; + DDHAL_DDMISCELLANEOUSCALLBACKS HALDDMiscellaneous; + DDHAL_DDKERNELCALLBACKS cbDDKernelCallbacks; + DDHAL_DDKERNELCALLBACKS HALDDKernel; + DDHAL_DDMOTIONCOMPCALLBACKS cbDDMotionCompCallbacks; + DDHAL_DDMOTIONCOMPCALLBACKS HALDDMotionComp; +} DDHAL_CALLBACKS, *LPDDHAL_CALLBACKS; + +/***************************************************************************** + * parameter structures + */ +typedef struct _DDHAL_DESTROYDRIVERDATA { + LPDDRAWI_DIRECTDRAW_GBL lpDD; + HRESULT ddRVal; + LPDDHAL_DESTROYDRIVER DestroyDriver; +} DDHAL_DESTROYDRIVERDATA; + +typedef struct _DDHAL_SETMODEDATA { + LPDDRAWI_DIRECTDRAW_GBL lpDD; + DWORD dwModeIndex; + HRESULT ddRVal; + LPDDHAL_SETMODE SetMode; + BOOL inexcl; + BOOL useRefreshRate; +} DDHAL_SETMODEDATA; + +typedef struct _DDHAL_CREATESURFACEDATA { + LPDDRAWI_DIRECTDRAW_GBL lpDD; + LPDDSURFACEDESC lpDDSurfaceDesc; + LPDDRAWI_DDRAWSURFACE_LCL *lplpSList; + DWORD dwSCnt; + HRESULT ddRVal; + LPDDHAL_CREATESURFACE CreateSurface; +} DDHAL_CREATESURFACEDATA; + +typedef struct _DDHAL_CANCREATESURFACEDATA { + LPDDRAWI_DIRECTDRAW_GBL lpDD; + LPDDSURFACEDESC lpDDSurfaceDesc; + DWORD bIsDifferentPixelFormat; + HRESULT ddRVal; + LPDDHAL_CANCREATESURFACE CanCreateSurface; +} DDHAL_CANCREATESURFACEDATA; + +typedef struct _DDHAL_CREATEPALETTEDATA { + LPDDRAWI_DIRECTDRAW_GBL lpDD; + LPDDRAWI_DDRAWPALETTE_GBL lpDDPalette; + LPPALETTEENTRY lpColorTable; + HRESULT ddRVal; + LPDDHAL_CREATEPALETTE CreatePalette; + BOOL is_excl; +} DDHAL_CREATEPALETTEDATA; + +typedef struct _DDHAL_SETEXCLUSIVEMODEDATA { + LPDDRAWI_DIRECTDRAW_GBL lpDD; + DWORD dwEnterExcl; + DWORD dwReserved; + HRESULT ddRVal; + LPDDHAL_SETEXCLUSIVEMODE SetExclusiveMode; +} DDHAL_SETEXCLUSIVEMODEDATA; + +/* surfaces */ +typedef struct _DDHAL_DESTROYSURFACEDATA { + LPDDRAWI_DIRECTDRAW_GBL lpDD; + LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface; + HRESULT ddRVal; + LPDDHALSURFCB_DESTROYSURFACE DestroySurface; +} DDHAL_DESTROYSURFACEDATA; + +typedef struct _DDHAL_FLIPDATA { + LPDDRAWI_DIRECTDRAW_GBL lpDD; + LPDDRAWI_DDRAWSURFACE_LCL lpSurfCurr; + LPDDRAWI_DDRAWSURFACE_LCL lpSurfTarg; + DWORD dwFlags; + HRESULT ddRVal; + LPDDHALSURFCB_FLIP Flip; + LPDDRAWI_DDRAWSURFACE_LCL lpSurfCurrLeft; + LPDDRAWI_DDRAWSURFACE_LCL lpSurfTargLeft; +} DDHAL_FLIPDATA; + +typedef struct _DDHAL_LOCKDATA { + LPDDRAWI_DIRECTDRAW_GBL lpDD; + LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface; + DWORD bHasRect; + RECTL rArea; + LPVOID lpSurfData; + HRESULT ddRVal; + LPDDHALSURFCB_LOCK Lock; + DWORD dwFlags; +} DDHAL_LOCKDATA; + +typedef struct _DDHAL_UNLOCKDATA { + LPDDRAWI_DIRECTDRAW_GBL lpDD; + LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface; + HRESULT ddRVal; + LPDDHALSURFCB_UNLOCK Unlock; +} DDHAL_UNLOCKDATA; + +typedef struct _DDHAL_BLTDATA { + LPDDRAWI_DIRECTDRAW_GBL lpDD; + LPDDRAWI_DDRAWSURFACE_LCL lpDDDestSurface; + RECTL rDest; + LPDDRAWI_DDRAWSURFACE_LCL lpDDSrcSurface; + RECTL rSrc; + DWORD dwFlags; + DWORD dwROPFlags; + DDBLTFX bltFX; + HRESULT ddRVal; + LPDDHALSURFCB_BLT Blt; + BOOL IsClipped; + RECTL rOrigDest; + RECTL rOrigSrc; + DWORD dwRectCnt; + LPRECT prDestRects; +} DDHAL_BLTDATA; + +typedef struct _DDHAL_SETPALETTEDATA { + LPDDRAWI_DIRECTDRAW_GBL lpDD; + LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface; + LPDDRAWI_DDRAWPALETTE_GBL lpDDPalette; + HRESULT ddRVal; + LPDDHALSURFCB_SETPALETTE SetPalette; + BOOL Attach; +} DDHAL_SETPALETTEDATA; + +/* palettes */ +typedef struct _DDHAL_DESTROYPALETTEDATA { + LPDDRAWI_DIRECTDRAW_GBL lpDD; + LPDDRAWI_DDRAWPALETTE_GBL lpDDPalette; + HRESULT ddRVal; + LPDDHALPALCB_DESTROYPALETTE DestroyPalette; +} DDHAL_DESTROYPALETTEDATA; + +typedef struct _DDHAL_SETENTRIESDATA { + LPDDRAWI_DIRECTDRAW_GBL lpDD; + LPDDRAWI_DDRAWPALETTE_GBL lpDDPalette; + DWORD dwBase; + DWORD dwNumEntries; + LPPALETTEENTRY lpEntries; + HRESULT ddRVal; + LPDDHALPALCB_SETENTRIES SetEntries; +} DDHAL_SETENTRIESDATA; + +typedef struct _DDHAL_CANCREATEVPORTDATA { + LPDDRAWI_DIRECTDRAW_LCL lpDD; + LPDDVIDEOPORTDESC lpDDVideoPortDesc; + HRESULT ddRVal; + LPDDHALVPORTCB_CANCREATEVIDEOPORT CanCreateVideoPort; +} DDHAL_CANCREATEVPORTDATA; + +typedef struct _DDHAL_CREATEVPORTDATA { + LPDDRAWI_DIRECTDRAW_LCL lpDD; + LPDDVIDEOPORTDESC lpDDVideoPortDesc; + LPDDRAWI_DDVIDEOPORT_LCL lpVideoPort; + HRESULT ddRVal; + LPDDHALVPORTCB_CREATEVIDEOPORT CreateVideoPort; +} DDHAL_CREATEVPORTDATA; + +typedef struct _DDHAL_GETVPORTBANDWIDTHDATA { + LPDDRAWI_DIRECTDRAW_LCL lpDD; + LPDDRAWI_DDVIDEOPORT_LCL lpVideoPort; + LPDDPIXELFORMAT lpddpfFormat; + DWORD dwWidth; + DWORD dwHeight; + DWORD dwFlags; + LPDDVIDEOPORTBANDWIDTH lpBandwidth; + HRESULT ddRVal; + LPDDHALVPORTCB_GETBANDWIDTH GetVideoPortBandwidth; +} DDHAL_GETVPORTBANDWIDTHDATA; + +typedef struct _DDHAL_GETVPORTINPUTFORMATDATA { + LPDDRAWI_DIRECTDRAW_LCL lpDD; + LPDDRAWI_DDVIDEOPORT_LCL lpVideoPort; + DWORD dwFlags; + LPDDPIXELFORMAT lpddpfFormat; + DWORD dwNumFormats; + HRESULT ddRVal; + LPDDHALVPORTCB_GETINPUTFORMATS GetVideoPortInputFormats; +} DDHAL_GETVPORTINPUTFORMATDATA; + +typedef struct _DDHAL_GETVPORTFIELDDATA { + LPDDRAWI_DIRECTDRAW_LCL lpDD; + LPDDRAWI_DDVIDEOPORT_LCL lpVideoPort; + BOOL bField; + HRESULT ddRVal; + LPDDHALVPORTCB_GETFIELD GetVideoPortField; +} DDHAL_GETVPORTFIELDDATA; + +typedef struct _DDHAL_GETVPORTOUTPUTFORMATDATA { + LPDDRAWI_DIRECTDRAW_LCL lpDD; + LPDDRAWI_DDVIDEOPORT_LCL lpVideoPort; + DWORD dwFlags; + LPDDPIXELFORMAT lpddpfInputFormat; + LPDDPIXELFORMAT lpddpfOutputFormats; + DWORD dwNumFormats; + HRESULT ddRVal; + LPDDHALVPORTCB_GETOUTPUTFORMATS GetVideoPortOutputFormats; +} DDHAL_GETVPORTOUTPUTFORMATDATA; + +typedef struct _DDHAL_GETVPORTLINEDATA { + LPDDRAWI_DIRECTDRAW_LCL lpDD; + LPDDRAWI_DDVIDEOPORT_LCL lpVideoPort; + DWORD dwLine; + HRESULT ddRVal; + LPDDHALVPORTCB_GETLINE GetVideoPortLine; +} DDHAL_GETVPORTLINEDATA; + +typedef struct _DDHAL_DESTROYVPORTDATA { + LPDDRAWI_DIRECTDRAW_LCL lpDD; + LPDDRAWI_DDVIDEOPORT_LCL lpVideoPort; + HRESULT ddRVal; + LPDDHALVPORTCB_DESTROYVPORT DestroyVideoPort; +} DDHAL_DESTROYVPORTDATA; + +typedef struct _DDHAL_GETVPORTFLIPSTATUSDATA { + LPDDRAWI_DIRECTDRAW_LCL lpDD; + FLATPTR fpSurface; + HRESULT ddRVal; + LPDDHALVPORTCB_GETFLIPSTATUS GetVideoPortFlipStatus; +} DDHAL_GETVPORTFLIPSTATUSDATA; + +typedef struct _DDHAL_UPDATEVPORTDATA { + LPDDRAWI_DIRECTDRAW_LCL lpDD; + LPDDRAWI_DDVIDEOPORT_LCL lpVideoPort; + LPDDRAWI_DDRAWSURFACE_INT *lplpDDSurface; + LPDDRAWI_DDRAWSURFACE_INT *lplpDDVBISurface; + LPDDVIDEOPORTINFO lpVideoInfo; + DWORD dwFlags; + DWORD dwNumAutoflip; + DWORD dwNumVBIAutoflip; + HRESULT ddRVal; + LPDDHALVPORTCB_UPDATE UpdateVideoPort; +} DDHAL_UPDATEVPORTDATA; + +typedef struct _DDHAL_WAITFORVPORTSYNCDATA { + LPDDRAWI_DIRECTDRAW_LCL lpDD; + LPDDRAWI_DDVIDEOPORT_LCL lpVideoPort; + DWORD dwFlags; + DWORD dwLine; + DWORD dwTimeOut; + HRESULT ddRVal; + LPDDHALVPORTCB_WAITFORSYNC WaitForVideoPortSync; +} DDHAL_WAITFORVPORTSYNCDATA; + +typedef struct _DDHAL_GETVPORTSIGNALDATA { + LPDDRAWI_DIRECTDRAW_LCL lpDD; + LPDDRAWI_DDVIDEOPORT_LCL lpVideoPort; + DWORD dwStatus; + HRESULT ddRVal; + LPDDHALVPORTCB_GETSIGNALSTATUS GetVideoSignalStatus; +} DDHAL_GETVPORTSIGNALDATA; + +typedef struct _DDHAL_VPORTCOLORDATA { + LPDDRAWI_DIRECTDRAW_LCL lpDD; + LPDDRAWI_DDVIDEOPORT_LCL lpVideoPort; + DWORD dwFlags; + LPDDCOLORCONTROL lpColorData; + HRESULT ddRVal; + LPDDHALVPORTCB_COLORCONTROL ColorControl; +} DDHAL_VPORTCOLORDATA; + +typedef struct _DDHAL_FLIPVPORTDATA { + LPDDRAWI_DIRECTDRAW_LCL lpDD; + LPDDRAWI_DDVIDEOPORT_LCL lpVideoPort; + LPDDRAWI_DDRAWSURFACE_LCL lpSurfCurr; + LPDDRAWI_DDRAWSURFACE_LCL lpSurfTarg; + HRESULT ddRVal; + LPDDHALVPORTCB_FLIP FlipVideoPort; +} DDHAL_FLIPVPORTDATA; + +typedef struct _DDHAL_GETVPORTCONNECTDATA { + LPDDRAWI_DIRECTDRAW_LCL lpDD; + DWORD dwPortId; + LPDDVIDEOPORTCONNECT lpConnect; + DWORD dwNumEntries; + HRESULT ddRVal; + LPDDHALVPORTCB_GETVPORTCONNECT GetVideoPortConnectInfo; +} DDHAL_GETVPORTCONNECTDATA; + +typedef struct _DDHAL_SYNCSURFACEDATA { + DWORD dwSize; + LPDDRAWI_DIRECTDRAW_LCL lpDD; + LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface; + DWORD dwSurfaceOffset; + ULONG_PTR fpLockPtr; + LONG lPitch; + DWORD dwOverlayOffset; + DWORD dwOverlaySrcWidth; + DWORD dwOverlaySrcHeight; + DWORD dwOverlayDestWidth; + DWORD dwOverlayDestHeight; + ULONG_PTR dwDriverReserved1; + ULONG_PTR dwDriverReserved2; + ULONG_PTR dwDriverReserved3; + HRESULT ddRVal; +} DDHAL_SYNCSURFACEDATA; + +typedef struct _DDHAL_SYNCVIDEOPORTDATA { + DWORD dwSize; + LPDDRAWI_DIRECTDRAW_LCL lpDD; + LPDDRAWI_DDVIDEOPORT_LCL lpVideoPort; + DWORD dwOriginOffset; + DWORD dwHeight; + DWORD dwVBIHeight; + ULONG_PTR dwDriverReserved1; + ULONG_PTR dwDriverReserved2; + ULONG_PTR dwDriverReserved3; + HRESULT ddRVal; +} DDHAL_SYNCVIDEOPORTDATA; + +typedef struct _DDHAL_DESTROYDDLOCALDATA { + DWORD dwFlags; + LPDDRAWI_DIRECTDRAW_LCL pDDLcl; + HRESULT ddRVal; +} DDHAL_DESTROYDDLOCALDATA; + +typedef struct _DDHAL_CREATESURFACEEXDATA { + DWORD dwFlags; + LPDDRAWI_DIRECTDRAW_LCL lpDDLcl; + LPDDRAWI_DDRAWSURFACE_LCL lpDDSLcl; + HRESULT ddRVal; +} DDHAL_CREATESURFACEEXDATA; + +typedef struct _DDHAL_GETHEAPALIGNMENTDATA { + ULONG_PTR dwInstance; + DWORD dwHeap; + HRESULT ddRVal; + LPDDHAL_GETHEAPALIGNMENT GetHeapAlignment; + HEAPALIGNMENT Alignment; +} DDHAL_GETHEAPALIGNMENTDATA; + +typedef struct _DDMORESURFACECAPS { + DWORD dwSize; + DDSCAPSEX ddsCapsMore; + struct tagExtendedHeapRestrictions { + DDSCAPSEX ddsCapsEx; + DDSCAPSEX ddsCapsExAlt; + } ddsExtendedHeapRestrictions[1]; +} DDMORESURFACECAPS, *LPDDMORESURFACECAPS; + +typedef struct _DDSTEREOMODE { + DWORD dwSize; + DWORD dwHeight; + DWORD dwWidth; + DWORD dwBpp; + DWORD dwRefreshRate; + BOOL bSupported; +} DDSTEREOMODE, *LPDDSTEREOMODE; + +/***************************************************************************** + * high-level ddraw implementation structures + */ +typedef struct _IUNKNOWN_LIST { + struct _IUNKNOWN_LIST *lpLink; + LPGUID lpGuid; +#ifndef _NO_COM + IUnknown *lpIUnknown; +#else + LPVOID lpIUnknown; +#endif /* _NO_COM */ +} IUNKNOWN_LIST, *LPIUNKNOWN_LIST; + +typedef struct _PROCESS_LIST { + struct _PROCESS_LIST *lpLink; + DWORD dwProcessId; + DWORD dwRefCnt; + DWORD dwAlphaDepth; + DWORD dwZDepth; +} PROCESS_LIST, *LPPROCESS_LIST; + +typedef struct _ATTACHLIST { + DWORD dwFlags; + struct _ATTACHLIST *lpLink; + LPDDRAWI_DDRAWSURFACE_LCL lpAttached; + LPDDRAWI_DDRAWSURFACE_INT lpIAttached; +} ATTACHLIST, *LPATTACHLIST; + +#define DDAL_IMPLICIT 0x00000001 + +typedef struct _ACCESSRECTLIST { + struct _ACCESSRECTLIST *lpLink; + RECT rDest; + LPDDRAWI_DIRECTDRAW_LCL lpOwner; + LPVOID lpSurfaceData; + DWORD dwFlags; + LPHEAPALIASINFO lpHeapAliasInfo; +} ACCESSRECTLIST, *LPACCESSRECTLIST; + +#define ACCESSRECT_VRAMSTYLE 0x00000001 +#define ACCESSRECT_NOTHOLDINGWIN16LOCK 0x00000002 +#define ACCESSRECT_BROKEN 0x00000004 + +typedef struct _DBLNODE { + struct _DBLNODE *next; + struct _DBLNODE *prev; + LPDDRAWI_DDRAWSURFACE_LCL object; + LPDDRAWI_DDRAWSURFACE_INT object_int; +} DBLNODE, *LPDBLNODE; + +typedef struct _DDRAWI_DIRECTDRAW_INT { + LPVOID lpVtbl; + LPDDRAWI_DIRECTDRAW_LCL lpLcl; + LPDDRAWI_DIRECTDRAW_INT lpLink; + DWORD dwIntRefCnt; +} DDRAWI_DIRECTDRAW_INT; + +typedef struct _DDRAWI_DIRECTDRAW_LCL { + DWORD lpDDMore; + LPDDRAWI_DIRECTDRAW_GBL lpGbl; + DWORD dwUnused0; + DWORD dwLocalFlags; + DWORD dwLocalRefCnt; + DWORD dwProcessId; +#ifndef _NO_COM + IUnknown *pUnkOuter; +#else + PVOID pUnkOuter; +#endif + DWORD dwObsolete1; + ULONG_PTR hWnd; + ULONG_PTR hDC; + DWORD dwErrorMode; + LPDDRAWI_DDRAWSURFACE_INT lpPrimary; + LPDDRAWI_DDRAWSURFACE_INT lpCB; + DWORD dwPreferredMode; + /* DirectX 2 */ + HINSTANCE hD3DInstance; +#ifndef _NO_COM + IUnknown *pD3DIUnknown; +#else + PVOID pD3DIUnknown; +#endif + LPDDHAL_CALLBACKS lpDDCB; + ULONG_PTR hDDVxd; + /* DirectX 5.0 */ + DWORD dwAppHackFlags; + /* DirectX 5.0A */ + ULONG_PTR hFocusWnd; + DWORD dwHotTracking; + DWORD dwIMEState; + /* DirectX 6.0 */ + ULONG_PTR hWndPopup; + ULONG_PTR hDD; + ULONG_PTR hGammaCalibrator; + LPDDGAMMACALIBRATORPROC lpGammaCalibrator; +} DDRAWI_DIRECTDRAW_LCL; + +#define DDRAWILCL_HASEXCLUSIVEMODE 0x00000001 +#define DDRAWILCL_ISFULLSCREEN 0x00000002 +#define DDRAWILCL_SETCOOPCALLED 0x00000004 +#define DDRAWILCL_ACTIVEYES 0x00000008 +#define DDRAWILCL_ACTIVENO 0x00000010 +#define DDRAWILCL_HOOKEDHWND 0x00000020 +#define DDRAWILCL_ALLOWMODEX 0x00000040 +#define DDRAWILCL_V1SCLBEHAVIOUR 0x00000080 +#define DDRAWILCL_MODEHASBEENCHANGED 0x00000100 +#define DDRAWILCL_CREATEDWINDOW 0x00000200 +#define DDRAWILCL_DIRTYDC 0x00000400 +#define DDRAWILCL_DISABLEINACTIVATE 0x00000800 +#define DDRAWILCL_CURSORCLIPPED 0x00001000 +#define DDRAWILCL_EXPLICITMONITOR 0x00002000 +#define DDRAWILCL_MULTITHREADED 0x00004000 +#define DDRAWILCL_FPUSETUP 0x00008000 +#define DDRAWILCL_POWEREDDOWN 0x00010000 +#define DDRAWILCL_DIRECTDRAW7 0x00020000 +#define DDRAWILCL_ATTEMPTEDD3DCONTEXT 0x00040000 +#define DDRAWILCL_FPUPRESERVE 0x00080000 +#define DDRAWILCL_DX8DRIVER 0x00100000 +#define DDRAWILCL_DIRECTDRAW8 0x00200000 + +typedef struct _DDRAWI_DIRECTDRAW_GBL { + DWORD dwRefCnt; + DWORD dwFlags; + FLATPTR fpPrimaryOrig; + DDCORECAPS ddCaps; + DWORD dwInternal1; + DWORD dwUnused1[9]; + LPDDHAL_CALLBACKS lpDDCBtmp; + LPDDRAWI_DDRAWSURFACE_INT dsList; + LPDDRAWI_DDRAWPALETTE_INT palList; + LPDDRAWI_DDRAWCLIPPER_INT clipperList; + LPDDRAWI_DIRECTDRAW_GBL lp16DD; + DWORD dwMaxOverlays; + DWORD dwCurrOverlays; + DWORD dwMonitorFrequency; + DDCORECAPS ddHELCaps; + DWORD dwUnused2[50]; + DDCOLORKEY ddckCKDestOverlay; + DDCOLORKEY ddckCKSrcOverlay; + VIDMEMINFO vmiData; + LPVOID lpDriverHandle; + LPDDRAWI_DIRECTDRAW_LCL lpExclusiveOwner; + DWORD dwModeIndex; + DWORD dwModeIndexOrig; + DWORD dwNumFourCC; + LPDWORD lpdwFourCC; + DWORD dwNumModes; + LPDDHALMODEINFO lpModeInfo; + PROCESS_LIST plProcessList; + DWORD dwSurfaceLockCount; + DWORD dwAliasedLockCnt; + ULONG_PTR dwReserved3; + ULONG_PTR hDD; + char cObsolete[12]; + DWORD dwReserved1; + DWORD dwReserved2; + DBLNODE dbnOverlayRoot; + volatile LPWORD lpwPDeviceFlags; + DWORD dwPDevice; + DWORD dwWin16LockCnt; + DWORD dwUnused3; + DWORD hInstance; + DWORD dwEvent16; + DWORD dwSaveNumModes; + /* DirectX 2 */ + ULONG_PTR lpD3DGlobalDriverData; + ULONG_PTR lpD3DHALCallbacks; + DDCORECAPS ddBothCaps; + /* DirectX 5.0 */ + LPDDVIDEOPORTCAPS lpDDVideoPortCaps; + LPDDRAWI_DDVIDEOPORT_INT dvpList; + ULONG_PTR lpD3DHALCallbacks2; + RECT rectDevice; + DWORD cMonitors; + LPVOID gpbmiSrc; + LPVOID gpbmiDest; + LPHEAPALIASINFO phaiHeapAliases; + ULONG_PTR hKernelHandle; + ULONG_PTR pfnNotifyProc; + LPDDKERNELCAPS lpDDKernelCaps; + LPDDNONLOCALVIDMEMCAPS lpddNLVCaps; + LPDDNONLOCALVIDMEMCAPS lpddNLVHELCaps; + LPDDNONLOCALVIDMEMCAPS lpddNLVBothCaps; + ULONG_PTR lpD3DExtendedCaps; + /* DirectX 5.0A */ + DWORD dwDOSBoxEvent; + RECT rectDesktop; + char cDriverName[MAX_DRIVER_NAME]; + /* DirectX 6.0 */ + ULONG_PTR lpD3DHALCallbacks3; + DWORD dwNumZPixelFormats; + LPDDPIXELFORMAT lpZPixelFormats; + LPDDRAWI_DDMOTIONCOMP_INT mcList; + DWORD hDDVxd; + DDSCAPSEX ddsCapsMore; +} DDRAWI_DIRECTDRAW_GBL; + +#define DDRAWI_xxxxxxxxx1 0x00000001 +#define DDRAWI_xxxxxxxxx2 0x00000002 +#define DDRAWI_VIRTUALDESKTOP 0x00000008 +#define DDRAWI_MODEX 0x00000010 +#define DDRAWI_DISPLAYDRV 0x00000020 +#define DDRAWI_FULLSCREEN 0x00000040 +#define DDRAWI_MODECHANGED 0x00000080 +#define DDRAWI_NOHARDWARE 0x00000100 +#define DDRAWI_PALETTEINIT 0x00000200 +#define DDRAWI_NOEMULATION 0x00000400 +#define DDRAWI_HASCKEYDESTOVERLAY 0x00000800 +#define DDRAWI_HASCKEYSRCOVERLAY 0x00001000 +#define DDRAWI_HASGDIPALETTE 0x00002000 +#define DDRAWI_EMULATIONINITIALIZED 0x00004000 +#define DDRAWI_HASGDIPALETTE_EXCLUSIVE 0x00008000 +#define DDRAWI_MODEXILLEGAL 0x00010000 +#define DDRAWI_FLIPPEDTOGDI 0x00020000 +#define DDRAWI_NEEDSWIN16FORVRAMLOCK 0x00040000 +#define DDRAWI_PDEVICEVRAMBITCLEARED 0x00080000 +#define DDRAWI_STANDARDVGA 0x00100000 +#define DDRAWI_EXTENDEDALIGNMENT 0x00200000 +#define DDRAWI_CHANGINGMODE 0x00400000 +#define DDRAWI_GDIDRV 0x00800000 +#define DDRAWI_ATTACHEDTODESKTOP 0x01000000 +#define DDRAWI_UMODELOADED 0x02000000 +#define DDRAWI_DDRAWDATANOTFETCHED 0x04000000 +#define DDRAWI_SECONDARYDRIVERLOADED 0x08000000 +#define DDRAWI_TESTINGMODES 0x10000000 +#define DDRAWI_DRIVERINFO2 0x20000000 +#define DDRAWI_BADPDEV 0x40000000 + +/* surfaces */ +typedef struct _DDRAWI_DDRAWSURFACE_INT { + LPVOID lpVtbl; + LPDDRAWI_DDRAWSURFACE_LCL lpLcl; + LPDDRAWI_DDRAWSURFACE_INT lpLink; + DWORD dwIntRefCnt; +} DDRAWI_DDRAWSURFACE_INT; + +typedef struct _DDRAWI_DDRAWSURFACE_GBL { + DWORD dwRefCnt; + DWORD dwGlobalFlags; + __GNU_EXTENSION union { + LPACCESSRECTLIST lpRectList; + DWORD dwBlockSizeY; + LONG lSlicePitch; + }; + __GNU_EXTENSION union { + LPVMEMHEAP lpVidMemHeap; + DWORD dwBlockSizeX; + }; + __GNU_EXTENSION union { + LPDDRAWI_DIRECTDRAW_GBL lpDD; + LPVOID lpDDHandle; + }; + FLATPTR fpVidMem; + __GNU_EXTENSION union { + LONG lPitch; + DWORD dwLinearSize; + }; + WORD wHeight; + WORD wWidth; + DWORD dwUsageCount; + ULONG_PTR dwReserved1; + DDPIXELFORMAT ddpfSurface; +} DDRAWI_DDRAWSURFACE_GBL; + +#define DDRAWISURFGBL_MEMFREE 0x00000001L +#define DDRAWISURFGBL_SYSMEMREQUESTED 0x00000002L +#define DDRAWISURFGBL_ISGDISURFACE 0x00000004L +#define DDRAWISURFGBL_SOFTWAREAUTOFLIP 0x00000008L +#define DDRAWISURFGBL_LOCKNOTHOLDINGWIN16LOCK 0x00000010L +#define DDRAWISURFGBL_LOCKVRAMSTYLE 0x00000020L +#define DDRAWISURFGBL_LOCKBROKEN 0x00000040L +#define DDRAWISURFGBL_IMPLICITHANDLE 0x00000080L +#define DDRAWISURFGBL_ISCLIENTMEM 0x00000100L +#define DDRAWISURFGBL_HARDWAREOPSOURCE 0x00000200L +#define DDRAWISURFGBL_HARDWAREOPDEST 0x00000400L +#define DDRAWISURFGBL_HARDWAREOPSTARTED (DDRAWISURFGBL_HARDWAREOPSOURCE|DDRAWISURFGBL_HARDWAREOPDEST) +#define DDRAWISURFGBL_VPORTINTERLEAVED 0x00000800L +#define DDRAWISURFGBL_VPORTDATA 0x00001000L +#define DDRAWISURFGBL_LATEALLOCATELINEAR 0x00002000L +#define DDRAWISURFGBL_SYSMEMEXECUTEBUFFER 0x00004000L +#define DDRAWISURFGBL_FASTLOCKHELD 0x00008000L +#define DDRAWISURFGBL_READONLYLOCKHELD 0x00010000L +#define DDRAWISURFGBL_DX8SURFACE 0x00080000L +#define DDRAWISURFGBL_DDHELDONTFREE 0x00100000L +#define DDRAWISURFGBL_NOTIFYWHENUNLOCKED 0x00200000L +#define DDRAWISURFGBL_RESERVED0 0x80000000L // Reserved flag + +typedef struct _DDRAWI_DDRAWSURFACE_GBL_MORE { + DWORD dwSize; + __GNU_EXTENSION union { + DWORD dwPhysicalPageTable; + FLATPTR fpPhysicalVidMem; + }; + LPDWORD pPageTable; + DWORD cPages; + ULONG_PTR dwSavedDCContext; + FLATPTR fpAliasedVidMem; + ULONG_PTR dwDriverReserved; + ULONG_PTR dwHELReserved; + DWORD cPageUnlocks; + ULONG_PTR hKernelSurface; + DWORD dwKernelRefCnt; + LPDDCOLORCONTROL lpColorInfo; + FLATPTR fpNTAlias; + DWORD dwContentsStamp; + LPVOID lpvUnswappedDriverReserved; + LPVOID lpDDRAWReserved2; + DWORD dwDDRAWReserved1; + DWORD dwDDRAWReserved2; + FLATPTR fpAliasOfVidMem; +} DDRAWI_DDRAWSURFACE_GBL_MORE; + +/* the MS version of this macro was somewhat obfuscated and unreadable + * (possibly because of mediocre MS coders)... so I simplified it... + * (and so I commit no copyright violations either, hah) */ +#define GET_LPDDRAWSURFACE_GBL_MORE(psurf_gbl) \ + (*(((LPDDRAWI_DDRAWSURFACE_GBL_MORE *)(psurf_gbl)) - 1)) + +#define SURFACE_PHYSICALVIDMEM( psurf_gbl ) \ + ( GET_LPDDRAWSURFACE_GBL_MORE(psurf_gbl )->fpPhysicalVidMem ) + +typedef struct _DISPLAYMODEINFO { + WORD wWidth; + WORD wHeight; + BYTE wBPP; + BYTE wMonitorsAttachedToDesktop; + WORD wRefreshRate; +} DISPLAYMODEINFO, *LPDISPLAYMODEINFO; + +#define EQUAL_DISPLAYMODE ( A, B ) (0 == memcmp(&(A), &(B), sizeof (DISPLAYMODEINFO))) + +typedef struct _DDRAWI_DDRAWSURFACE_MORE { + DWORD dwSize; + IUNKNOWN_LIST *lpIUnknowns; + LPDDRAWI_DIRECTDRAW_LCL lpDD_lcl; + DWORD dwPageLockCount; + DWORD dwBytesAllocated; + LPDDRAWI_DIRECTDRAW_INT lpDD_int; + DWORD dwMipMapCount; + LPDDRAWI_DDRAWCLIPPER_INT lpDDIClipper; + /* DirectX 5.0 */ + LPHEAPALIASINFO lpHeapAliasInfo; + DWORD dwOverlayFlags; + VOID *rgjunc; + LPDDRAWI_DDVIDEOPORT_LCL lpVideoPort; + LPDDOVERLAYFX lpddOverlayFX; + DDSCAPSEX ddsCapsEx; + DWORD dwTextureStage; + LPVOID lpDDRAWReserved; + LPVOID lpDDRAWReserved2; + LPVOID lpDDrawReserved3; + DWORD dwDDrawReserved4; + LPVOID lpDDrawReserved5; + LPDWORD lpGammaRamp; + LPDWORD lpOriginalGammaRamp; + LPVOID lpDDrawReserved6; +# ifndef WIN95 + DISPLAYMODEINFO dmiDDrawReserved7; +# endif + DWORD dwSurfaceHandle; + DWORD qwDDrawReserved8[2]; + LPVOID lpDDrawReserved9; + DWORD cSurfaces; + LPDDSURFACEDESC2 pCreatedDDSurfaceDesc2; + LPDDRAWI_DDRAWSURFACE_LCL *slist; + DWORD dwFVF; + LPVOID lpVB; +} DDRAWI_DDRAWSURFACE_MORE; + +typedef struct _DDRAWI_DDRAWSURFACE_LCL { + LPDDRAWI_DDRAWSURFACE_MORE lpSurfMore; + LPDDRAWI_DDRAWSURFACE_GBL lpGbl; + ULONG_PTR hDDSurface; + LPATTACHLIST lpAttachList; + LPATTACHLIST lpAttachListFrom; + DWORD dwLocalRefCnt; + DWORD dwProcessId; + DWORD dwFlags; + DDSCAPS ddsCaps; + __GNU_EXTENSION union { + LPDDRAWI_DDRAWPALETTE_INT lpDDPalette; + LPDDRAWI_DDRAWPALETTE_INT lp16DDPalette; + }; + __GNU_EXTENSION union { + LPDDRAWI_DDRAWCLIPPER_LCL lpDDClipper; + LPDDRAWI_DDRAWCLIPPER_INT lp16DDClipper; + }; + DWORD dwModeCreatedIn; + DWORD dwBackBufferCount; + DDCOLORKEY ddckCKDestBlt; + DDCOLORKEY ddckCKSrcBlt; + ULONG_PTR hDC; + ULONG_PTR dwReserved1; + DDCOLORKEY ddckCKSrcOverlay; + DDCOLORKEY ddckCKDestOverlay; + LPDDRAWI_DDRAWSURFACE_INT lpSurfaceOverlaying; + DBLNODE dbnOverlayNode; + RECT rcOverlaySrc; + RECT rcOverlayDest; + DWORD dwClrXparent; + DWORD dwAlpha; + LONG lOverlayX; + LONG lOverlayY; +} DDRAWI_DDRAWSURFACE_LCL; + +#define DDRAWISURF_ATTACHED 0x00000001L +#define DDRAWISURF_IMPLICITCREATE 0x00000002L +#define DDRAWISURF_ISFREE 0x00000004L +#define DDRAWISURF_ATTACHED_FROM 0x00000008L +#define DDRAWISURF_IMPLICITROOT 0x00000010L +#define DDRAWISURF_PARTOFPRIMARYCHAIN 0x00000020L +#define DDRAWISURF_DATAISALIASED 0x00000040L +#define DDRAWISURF_HASDC 0x00000080L +#define DDRAWISURF_HASCKEYDESTOVERLAY 0x00000100L +#define DDRAWISURF_HASCKEYDESTBLT 0x00000200L +#define DDRAWISURF_HASCKEYSRCOVERLAY 0x00000400L +#define DDRAWISURF_HASCKEYSRCBLT 0x00000800L +#define DDRAWISURF_LOCKEXCLUDEDCURSOR 0x00001000L +#define DDRAWISURF_HASPIXELFORMAT 0x00002000L +#define DDRAWISURF_HASOVERLAYDATA 0x00004000L +#define DDRAWISURF_SETGAMMA 0x00008000L +#define DDRAWISURF_SW_CKEYDESTOVERLAY 0x00010000L +#define DDRAWISURF_SW_CKEYDESTBLT 0x00020000L +#define DDRAWISURF_SW_CKEYSRCOVERLAY 0x00040000L +#define DDRAWISURF_SW_CKEYSRCBLT 0x00080000L +#define DDRAWISURF_HW_CKEYDESTOVERLAY 0x00100000L +#define DDRAWISURF_HW_CKEYDESTBLT 0x00200000L +#define DDRAWISURF_HW_CKEYSRCOVERLAY 0x00400000L +#define DDRAWISURF_HW_CKEYSRCBLT 0x00800000L +#define DDRAWISURF_INMASTERSPRITELIST 0x01000000L +#define DDRAWISURF_HELCB 0x02000000L +#define DDRAWISURF_FRONTBUFFER 0x04000000L +#define DDRAWISURF_BACKBUFFER 0x08000000L +#define DDRAWISURF_INVALID 0x10000000L +#define DDRAWISURF_DCIBUSY 0x20000000L +#define DDRAWISURF_GETDCNULL 0x40000000L +#define DDRAWISURF_STEREOSURFACELEFT 0x20000000L +#define DDRAWISURF_DRIVERMANAGED 0x40000000L +#define DDRAWISURF_DCILOCK 0x80000000L + +/* palettes */ +typedef struct _DDRAWI_DDRAWPALETTE_INT { + LPVOID lpVtbl; + LPDDRAWI_DDRAWPALETTE_LCL lpLcl; + LPDDRAWI_DDRAWPALETTE_INT lpLink; + DWORD dwIntRefCnt; +} DDRAWI_DDRAWPALETTE_INT; + +typedef struct _DDRAWI_DDRAWPALETTE_GBL { + DWORD dwRefCnt; + DWORD dwFlags; + LPDDRAWI_DIRECTDRAW_LCL lpDD_lcl; + DWORD dwProcessId; + LPPALETTEENTRY lpColorTable; + __GNU_EXTENSION union { + ULONG_PTR dwReserved1; + HPALETTE hHELGDIPalette; + }; + DWORD dwDriverReserved; + DWORD dwContentsStamp; + DWORD dwSaveStamp; + DWORD dwHandle; +} DDRAWI_DDRAWPALETTE_GBL; + +#define DDRAWIPAL_256 0x00000001 +#define DDRAWIPAL_16 0x00000002 +#define DDRAWIPAL_GDI 0x00000004 +#define DDRAWIPAL_STORED_8 0x00000008 +#define DDRAWIPAL_STORED_16 0x00000010 +#define DDRAWIPAL_STORED_24 0x00000020 +#define DDRAWIPAL_EXCLUSIVE 0x00000040 +#define DDRAWIPAL_INHEL 0x00000080 +#define DDRAWIPAL_DIRTY 0x00000100 +#define DDRAWIPAL_ALLOW256 0x00000200 +#define DDRAWIPAL_4 0x00000400 +#define DDRAWIPAL_2 0x00000800 +#define DDRAWIPAL_STORED_8INDEX 0x00001000 +#define DDRAWIPAL_ALPHA 0x00002000 + +#define D3DFORMAT_OP_TEXTURE 0x00000001L +#define D3DFORMAT_OP_VOLUMETEXTURE 0x00000002L +#define D3DFORMAT_OP_CUBETEXTURE 0x00000004L +#define D3DFORMAT_OP_OFFSCREEN_RENDERTARGET 0x00000008L +#define D3DFORMAT_OP_SAME_FORMAT_RENDERTARGET 0x00000010L +#define D3DFORMAT_OP_ZSTENCIL 0x00000040L +#define D3DFORMAT_OP_ZSTENCIL_WITH_ARBITRARY_COLOR_DEPTH 0x00000080L +#define D3DFORMAT_OP_SAME_FORMAT_UP_TO_ALPHA_RENDERTARGET 0x00000100L +#define D3DFORMAT_OP_DISPLAYMODE 0x00000400L +#define D3DFORMAT_OP_3DACCELERATION 0x00000800L +#define D3DFORMAT_OP_PIXELSIZE 0x00001000L +#define D3DFORMAT_OP_CONVERT_TO_ARGB 0x00002000L +#define D3DFORMAT_OP_OFFSCREENPLAIN 0x00004000L +#define D3DFORMAT_OP_SRGBREAD 0x00008000L +#define D3DFORMAT_OP_BUMPMAP 0x00010000L +#define D3DFORMAT_OP_NOFILTER 0x00040000L +#define DDPF_D3DFORMAT 0x00200000l +#define DDPF_NOVEL_TEXTURE_FORMAT 0x00100000l +#define D3DFORMAT_MEMBEROFGROUP_ARGB 0x00080000L +#define D3DFORMAT_OP_SRGBWRITE 0x00100000L +#define D3DFORMAT_OP_NOALPHABLEND 0x00200000L +#define D3DFORMAT_OP_AUTOGENMIPMAP 0x00400000L +#define D3DFORMAT_OP_VERTEXTEXTURE 0x00800000L +#define D3DFORMAT_OP_NOTEXCOORDWRAPNORMIP 0x01000000L +#define DELETED_OK 0 +#define DELETED_LASTONE 1 +#define DELETED_NOTFOUND 2 +#define DDCALLBACKSSIZE_V1 (offsetof(DDHAL_DDCALLBACKS, SetExclusiveMode)) +#define DDCALLBACKSSIZE sizeof( DDHAL_DDCALLBACKS ) +#define DDRAWICLIP_WATCHWINDOW 0x00000001 +#define DDRAWICLIP_ISINITIALIZED 0x00000002 +#define DDRAWICLIP_INMASTERSPRITELIST 0x00000004 +#define PFINDEX_UNINITIALIZED (0UL) +#define PFINDEX_UNSUPPORTED (~0UL) +#define ROP_HAS_SOURCE 0x00000001l +#define ROP_HAS_PATTERN 0x00000002l +#define ROP_HAS_SOURCEPATTERN ROP_HAS_SOURCE | ROP_HAS_PATTERN +#define DDRAWIVPORT_ON 0x00000001 +#define DDRAWIVPORT_SOFTWARE_AUTOFLIP 0x00000002 +#define DDRAWIVPORT_COLORKEYANDINTERP 0x00000004 +#define DDRAWIVPORT_NOKERNELHANDLES 0x00000008 +#define DDRAWIVPORT_SOFTWARE_BOB 0x00000010 +#define DDRAWIVPORT_VBION 0x00000020 +#define DDRAWIVPORT_VIDEOON 0x00000040 +#define DDRAWI_GETCOLOR 0x0001 +#define DDRAWI_SETCOLOR 0x0002 +#define DDMCQUERY_READ 0x00000001 +#define DDWAITVB_I_TESTVB 0x80000006 + +#define DDBLT_ANYALPHA \ + (DDBLT_ALPHASRCSURFACEOVERRIDE | DDBLT_ALPHASRCCONSTOVERRIDE | \ + DDBLT_ALPHASRC | DDBLT_ALPHADESTSURFACEOVERRIDE | \ + DDBLT_ALPHADESTCONSTOVERRIDE | DDBLT_ALPHADEST) + +#define DDHAL_ALIGNVALIDCAPS (DDSCAPS_OFFSCREENPLAIN | DDSCAPS_EXECUTEBUFFER | \ + DDSCAPS_OVERLAY | DDSCAPS_TEXTURE | \ + DDSCAPS_ZBUFFER | DDSCAPS_ALPHA | DDSCAPS_FLIP ) + +#define DDHALINFOSIZE_V2 sizeof(DDHALINFO) + +#define DDOVER_ANYALPHA \ + (DDOVER_ALPHASRCSURFACEOVERRIDE | DDOVER_ALPHASRCCONSTOVERRIDE | \ + DDOVER_ALPHASRC | DDOVER_ALPHADESTSURFACEOVERRIDE | \ + DDOVER_ALPHADESTCONSTOVERRIDE | DDOVER_ALPHADEST) + +typedef struct _DDRAWI_DDRAWPALETTE_LCL { + DWORD lpPalMore; + LPDDRAWI_DDRAWPALETTE_GBL lpGbl; + ULONG_PTR dwUnused0; + DWORD dwLocalRefCnt; +#ifndef _NO_COM + IUnknown *pUnkOuter; +#else + PVOID pUnkOuter; +#endif + LPDDRAWI_DIRECTDRAW_LCL lpDD_lcl; + ULONG_PTR dwReserved1; + /* DirectX 6.0 */ + ULONG_PTR dwDDRAWReserved1; + ULONG_PTR dwDDRAWReserved2; + ULONG_PTR dwDDRAWReserved3; +} DDRAWI_DDRAWPALETTE_LCL; + +typedef struct _DDMCCOMPBUFFERINFO { + DWORD dwSize; + DWORD dwNumCompBuffers; + DWORD dwWidthToCreate; + DWORD dwHeightToCreate; + DWORD dwBytesToAllocate; + DDSCAPS2 ddCompCaps; + DDPIXELFORMAT ddPixelFormat; +} DDMCCOMPBUFFERINFO, *LPDDMCCOMPBUFFERINFO; + +typedef struct _DDMCBUFFERINFO { + DWORD dwSize; + LPDDRAWI_DDRAWSURFACE_LCL lpCompSurface; + DWORD dwDataOffset; + DWORD dwDataSize; + LPVOID lpPrivate; +} DDMCBUFFERINFO, *LPDDMCBUFFERINFO; + +typedef struct _DDHAL_GETDRIVERSTATEDATA { + DWORD dwFlags; + __GNU_EXTENSION union { + ULONG_PTR dwhContext; + }; + LPDWORD lpdwStates; + DWORD dwLength; + HRESULT ddRVal; +} DDHAL_GETDRIVERSTATEDATA; + +typedef struct _DDHAL_ADDATTACHEDSURFACEDATA { + LPDDRAWI_DIRECTDRAW_GBL lpDD; + LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface; + LPDDRAWI_DDRAWSURFACE_LCL lpSurfAttached; + HRESULT ddRVal; + LPDDHALSURFCB_ADDATTACHEDSURFACE AddAttachedSurface; +} DDHAL_ADDATTACHEDSURFACEDATA; + +typedef struct _DDHAL_BEGINMOCOMPFRAMEDATA { + LPDDRAWI_DIRECTDRAW_LCL lpDD; + LPDDRAWI_DDMOTIONCOMP_LCL lpMoComp; + LPDDRAWI_DDRAWSURFACE_LCL lpDestSurface; + DWORD dwInputDataSize; + LPVOID lpInputData; + DWORD dwOutputDataSize; + LPVOID lpOutputData; + HRESULT ddRVal; + LPDDHALMOCOMPCB_BEGINFRAME BeginMoCompFrame; +} DDHAL_BEGINMOCOMPFRAMEDATA; + +typedef struct _DDHAL_COLORCONTROLDATA { + LPDDRAWI_DIRECTDRAW_GBL lpDD; + LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface; + LPDDCOLORCONTROL lpColorData; + DWORD dwFlags; + HRESULT ddRVal; + LPDDHALCOLORCB_COLORCONTROL ColorControl; +} DDHAL_COLORCONTROLDATA; + +typedef struct _DDHAL_CREATEMOCOMPDATA { + LPDDRAWI_DIRECTDRAW_LCL lpDD; + LPDDRAWI_DDMOTIONCOMP_LCL lpMoComp; + LPGUID lpGuid; + DWORD dwUncompWidth; + DWORD dwUncompHeight; + DDPIXELFORMAT ddUncompPixelFormat; + LPVOID lpData; + DWORD dwDataSize; + HRESULT ddRVal; + LPDDHALMOCOMPCB_CREATE CreateMoComp; +} DDHAL_CREATEMOCOMPDATA; + +typedef struct _DDHAL_DESTROYMOCOMPDATA { + LPDDRAWI_DIRECTDRAW_LCL lpDD; + LPDDRAWI_DDMOTIONCOMP_LCL lpMoComp; + HRESULT ddRVal; + LPDDHALMOCOMPCB_DESTROY DestroyMoComp; +} DDHAL_DESTROYMOCOMPDATA; + +typedef struct _DDHAL_ENDMOCOMPFRAMEDATA { + LPDDRAWI_DIRECTDRAW_LCL lpDD; + LPDDRAWI_DDMOTIONCOMP_LCL lpMoComp; + LPVOID lpInputData; + DWORD dwInputDataSize; + HRESULT ddRVal; + LPDDHALMOCOMPCB_ENDFRAME EndMoCompFrame; +} DDHAL_ENDMOCOMPFRAMEDATA; + +typedef struct _DDHAL_FLIPTOGDISURFACEDATA { + LPDDRAWI_DIRECTDRAW_GBL lpDD; + DWORD dwToGDI; + DWORD dwReserved; + HRESULT ddRVal; + LPDDHAL_FLIPTOGDISURFACE FlipToGDISurface; +} DDHAL_FLIPTOGDISURFACEDATA; + +typedef struct _DDHAL_GETAVAILDRIVERMEMORYDATA { + LPDDRAWI_DIRECTDRAW_GBL lpDD; + DDSCAPS DDSCaps; + DWORD dwTotal; + DWORD dwFree; + HRESULT ddRVal; + LPDDHAL_GETAVAILDRIVERMEMORY GetAvailDriverMemory; + DDSCAPSEX ddsCapsEx; +} DDHAL_GETAVAILDRIVERMEMORYDATA; + +typedef struct _DDHAL_GETBLTSTATUSDATA { + LPDDRAWI_DIRECTDRAW_GBL lpDD; + LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface; + DWORD dwFlags; + HRESULT ddRVal; + LPDDHALSURFCB_GETBLTSTATUS GetBltStatus; +} DDHAL_GETBLTSTATUSDATA; + +typedef struct _DDHAL_GETFLIPSTATUSDATA { + LPDDRAWI_DIRECTDRAW_GBL lpDD; + LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface; + DWORD dwFlags; + HRESULT ddRVal; + LPDDHALSURFCB_GETFLIPSTATUS GetFlipStatus; +} DDHAL_GETFLIPSTATUSDATA; + +typedef struct _DDHAL_GETINTERNALMOCOMPDATA { + LPDDRAWI_DIRECTDRAW_LCL lpDD; + LPGUID lpGuid; + DWORD dwWidth; + DWORD dwHeight; + DDPIXELFORMAT ddPixelFormat; + DWORD dwScratchMemAlloc; + HRESULT ddRVal; + LPDDHALMOCOMPCB_GETINTERNALINFO GetInternalMoCompInfo; +} DDHAL_GETINTERNALMOCOMPDATA; + +typedef struct _DDHAL_GETMOCOMPCOMPBUFFDATA { + LPDDRAWI_DIRECTDRAW_LCL lpDD; + LPGUID lpGuid; + DWORD dwWidth; + DWORD dwHeight; + DDPIXELFORMAT ddPixelFormat; + DWORD dwNumTypesCompBuffs; + LPDDMCCOMPBUFFERINFO lpCompBuffInfo; + HRESULT ddRVal; + LPDDHALMOCOMPCB_GETCOMPBUFFINFO GetMoCompBuffInfo; +} DDHAL_GETMOCOMPCOMPBUFFDATA; + +typedef struct _DDHAL_GETMOCOMPGUIDSDATA { + LPDDRAWI_DIRECTDRAW_LCL lpDD; + DWORD dwNumGuids; + LPGUID lpGuids; + HRESULT ddRVal; + LPDDHALMOCOMPCB_GETGUIDS GetMoCompGuids; +} DDHAL_GETMOCOMPGUIDSDATA; + +typedef struct _DDHAL_GETMOCOMPFORMATSDATA { + LPDDRAWI_DIRECTDRAW_LCL lpDD; + LPGUID lpGuid; + DWORD dwNumFormats; + LPDDPIXELFORMAT lpFormats; + HRESULT ddRVal; + LPDDHALMOCOMPCB_GETFORMATS GetMoCompFormats; +} DDHAL_GETMOCOMPFORMATSDATA; + +typedef struct _DDHAL_GETSCANLINEDATA { + LPDDRAWI_DIRECTDRAW_GBL lpDD; + DWORD dwScanLine; + HRESULT ddRVal; + LPDDHAL_GETSCANLINE GetScanLine; +} DDHAL_GETSCANLINEDATA; + +typedef struct _DDHAL_QUERYMOCOMPSTATUSDATA { + LPDDRAWI_DIRECTDRAW_LCL lpDD; + LPDDRAWI_DDMOTIONCOMP_LCL lpMoComp; + LPDDRAWI_DDRAWSURFACE_LCL lpSurface; + DWORD dwFlags; + HRESULT ddRVal; + LPDDHALMOCOMPCB_QUERYSTATUS QueryMoCompStatus; +} DDHAL_QUERYMOCOMPSTATUSDATA; + +typedef struct _DDHAL_RENDERMOCOMPDATA { + LPDDRAWI_DIRECTDRAW_LCL lpDD; + LPDDRAWI_DDMOTIONCOMP_LCL lpMoComp; + DWORD dwNumBuffers; + LPDDMCBUFFERINFO lpBufferInfo; + DWORD dwFunction; + LPVOID lpInputData; + DWORD dwInputDataSize; + LPVOID lpOutputData; + DWORD dwOutputDataSize; + HRESULT ddRVal; + LPDDHALMOCOMPCB_RENDER RenderMoComp; +} DDHAL_RENDERMOCOMPDATA; + +typedef struct _DDHAL_SETCOLORKEYDATA { + LPDDRAWI_DIRECTDRAW_GBL lpDD; + LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface; + DWORD dwFlags; + DDCOLORKEY ckNew; + HRESULT ddRVal; + LPDDHALSURFCB_SETCOLORKEY SetColorKey; +} DDHAL_SETCOLORKEYDATA; + +typedef struct _DDHAL_SETOVERLAYPOSITIONDATA { + LPDDRAWI_DIRECTDRAW_GBL lpDD; + LPDDRAWI_DDRAWSURFACE_LCL lpDDSrcSurface; + LPDDRAWI_DDRAWSURFACE_LCL lpDDDestSurface; + LONG lXPos; + LONG lYPos; + HRESULT ddRVal; + LPDDHALSURFCB_SETOVERLAYPOSITION SetOverlayPosition; +} DDHAL_SETOVERLAYPOSITIONDATA; + +typedef struct _DDHAL_UPDATEOVERLAYDATA { + LPDDRAWI_DIRECTDRAW_GBL lpDD; + LPDDRAWI_DDRAWSURFACE_LCL lpDDDestSurface; + RECTL rDest; + LPDDRAWI_DDRAWSURFACE_LCL lpDDSrcSurface; + RECTL rSrc; + DWORD dwFlags; + DDOVERLAYFX overlayFX; + HRESULT ddRVal; + LPDDHALSURFCB_UPDATEOVERLAY UpdateOverlay; +} DDHAL_UPDATEOVERLAYDATA; + +typedef struct _DDHAL_WAITFORVERTICALBLANKDATA { + LPDDRAWI_DIRECTDRAW_GBL lpDD; + DWORD dwFlags; + DWORD bIsInVB; + ULONG_PTR hEvent; + HRESULT ddRVal; + LPDDHAL_WAITFORVERTICALBLANK WaitForVerticalBlank; +} DDHAL_WAITFORVERTICALBLANKDATA; + +typedef struct _DDHAL_DRVSETCOLORKEYDATA { + LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface; + DWORD dwFlags; + DDCOLORKEY ckNew; + HRESULT ddRVal; + LPDDHAL_SETCOLORKEY SetColorKey; +} DDHAL_DRVSETCOLORKEYDATA; + +typedef struct _DDMONITORINFO { + WORD Manufacturer; + WORD Product; + DWORD SerialNumber; + GUID DeviceIdentifier; + int Mode640x480; + int Mode800x600; + int Mode1024x768; + int Mode1280x1024; + int Mode1600x1200; + int ModeReserved1; + int ModeReserved2; + int ModeReserved3; +} DDMONITORINFO, FAR *LPDDMONITORINFO; + +typedef struct _DDRAWI_DDRAWCLIPPER_INT { + LPVOID lpVtbl; + LPDDRAWI_DDRAWCLIPPER_LCL lpLcl; + LPDDRAWI_DDRAWCLIPPER_INT lpLink; + DWORD dwIntRefCnt; +} DDRAWI_DDRAWCLIPPER_INT; + +typedef struct _DDHAL_UPDATENONLOCALHEAPDATA { + LPDDRAWI_DIRECTDRAW_GBL lpDD; + DWORD dwHeap; + FLATPTR fpGARTLin; + FLATPTR fpGARTDev; + ULONG_PTR ulPolicyMaxBytes; + HRESULT ddRVal; + LPDDHAL_UPDATENONLOCALHEAP UpdateNonLocalHeap; +} DDHAL_UPDATENONLOCALHEAPDATA; + +typedef struct _DDHAL_SETCLIPLISTDATA { + LPDDRAWI_DIRECTDRAW_GBL lpDD; + LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface; + HRESULT ddRVal; + LPDDHALSURFCB_SETCLIPLIST SetClipList; +} DDHAL_SETCLIPLISTDATA; + +typedef struct _DDRAWI_DDMOTIONCOMP_LCL { + LPDDRAWI_DIRECTDRAW_LCL lpDD; + GUID guid; + DWORD dwUncompWidth; + DWORD dwUncompHeight; + DDPIXELFORMAT ddUncompPixelFormat; + DWORD dwInternalFlags; + DWORD dwRefCnt; + DWORD dwProcessId; + HANDLE hMoComp; + DWORD dwDriverReserved1; + DWORD dwDriverReserved2; + DWORD dwDriverReserved3; + LPVOID lpDriverReserved1; + LPVOID lpDriverReserved2; + LPVOID lpDriverReserved3; +} DDRAWI_DDMOTIONCOMP_LCL; + +typedef struct _DDRAWI_DDMOTIONCOMP_INT { + LPVOID lpVtbl; + LPDDRAWI_DDMOTIONCOMP_LCL lpLcl; + LPDDRAWI_DDMOTIONCOMP_INT lpLink; + DWORD dwIntRefCnt; +} DDRAWI_DDMOTIONCOMP_INT; + +typedef struct _DDRAWI_DDVIDEOPORT_LCL { + LPDDRAWI_DIRECTDRAW_LCL lpDD; + DDVIDEOPORTDESC ddvpDesc; + DDVIDEOPORTINFO ddvpInfo; + LPDDRAWI_DDRAWSURFACE_INT lpSurface; + LPDDRAWI_DDRAWSURFACE_INT lpVBISurface; + LPDDRAWI_DDRAWSURFACE_INT *lpFlipInts; + DWORD dwNumAutoflip; + DWORD dwProcessID; + DWORD dwStateFlags; + DWORD dwFlags; + DWORD dwRefCnt; + FLATPTR fpLastFlip; + ULONG_PTR dwReserved1; + ULONG_PTR dwReserved2; + HANDLE hDDVideoPort; + DWORD dwNumVBIAutoflip; + LPDDVIDEOPORTDESC lpVBIDesc; + LPDDVIDEOPORTDESC lpVideoDesc; + LPDDVIDEOPORTINFO lpVBIInfo; + LPDDVIDEOPORTINFO lpVideoInfo; + DWORD dwVBIProcessID; + LPDDRAWI_DDVIDEOPORT_INT lpVPNotify; +} DDRAWI_DDVIDEOPORT_LCL; + +typedef struct _DDRAWI_DDVIDEOPORT_INT { + LPVOID lpVtbl; + LPDDRAWI_DDVIDEOPORT_LCL lpLcl; + LPDDRAWI_DDVIDEOPORT_INT lpLink; + DWORD dwIntRefCnt; + DWORD dwFlags; +} DDRAWI_DDVIDEOPORT_INT; + +typedef struct _DDRAWI_DDRAWCLIPPER_LCL { + DWORD lpClipMore; + LPDDRAWI_DDRAWCLIPPER_GBL lpGbl; + LPDDRAWI_DIRECTDRAW_LCL lpDD_lcl; + DWORD dwLocalRefCnt; +#ifndef _NO_COM + IUnknown *pUnkOuter; +#else + PVOID pUnkOuter; +#endif + LPDDRAWI_DIRECTDRAW_INT lpDD_int; + ULONG_PTR dwReserved1; +#ifndef _NO_COM + IUnknown *pAddrefedThisOwner; +#else + PVOID pAddrefedThisOwner; +#endif +} DDRAWI_DDRAWCLIPPER_LCL; + +typedef struct _DDRAWI_DDRAWCLIPPER_GBL { + DWORD dwRefCnt; + DWORD dwFlags; + LPDDRAWI_DIRECTDRAW_GBL lpDD; + DWORD dwProcessId; + ULONG_PTR dwReserved1; + ULONG_PTR hWnd; + LPRGNDATA lpStaticClipList; +} DDRAWI_DDRAWCLIPPER_GBL; + +typedef BOOL (PASCAL *LPDDHEL_INIT)(LPDDRAWI_DIRECTDRAW_GBL,BOOL); + +extern HRESULT DDAPI +LateAllocateSurfaceMem( + LPDIRECTDRAWSURFACE lpSurface, + DWORD dwPleaseAllocType, + DWORD dwWidthInBytesOrSize, + DWORD dwHeight); + +LPDIRECTDRAWSURFACE GetNextMipMap( + LPDIRECTDRAWSURFACE lpLevel); + +typedef struct IDirectDrawClipperVtbl DIRECTDRAWCLIPPERCALLBACKS; +typedef struct IDirectDrawPaletteVtbl DIRECTDRAWPALETTECALLBACKS; +typedef struct IDirectDrawSurfaceVtbl DIRECTDRAWSURFACECALLBACKS; +typedef struct IDirectDrawSurface2Vtbl DIRECTDRAWSURFACE2CALLBACKS; +typedef struct IDirectDrawSurface3Vtbl DIRECTDRAWSURFACE3CALLBACKS; +typedef struct IDirectDrawSurface4Vtbl DIRECTDRAWSURFACE4CALLBACKS; +typedef struct IDirectDrawSurface7Vtbl DIRECTDRAWSURFACE7CALLBACKS; +typedef struct IDirectDrawColorControlVtbl DIRECTDRAWCOLORCONTROLCALLBACKS; +typedef struct IDirectDrawVtbl DIRECTDRAWCALLBACKS; +typedef struct IDirectDraw2Vtbl DIRECTDRAW2CALLBACKS; +typedef struct IDirectDraw4Vtbl DIRECTDRAW4CALLBACKS; +typedef struct IDirectDraw7Vtbl DIRECTDRAW7CALLBACKS; +typedef struct IDirectDrawKernelVtbl DIRECTDRAWKERNELCALLBACKS; +typedef struct IDirectDrawSurfaceKernelVtbl DIRECTDRAWSURFACEKERNELCALLBACKS; +typedef struct IDirectDrawGammaControlVtbl DIRECTDRAWGAMMACONTROLCALLBACKS; + +typedef DIRECTDRAWCLIPPERCALLBACKS *LPDIRECTDRAWCLIPPERCALLBACKS; +typedef DIRECTDRAWPALETTECALLBACKS *LPDIRECTDRAWPALETTECALLBACKS; +typedef DIRECTDRAWSURFACECALLBACKS *LPDIRECTDRAWSURFACECALLBACKS; +typedef DIRECTDRAWCALLBACKS *LPDIRECTDRAWCALLBACKS; + +HRESULT CALLBACK +D3DParseUnknownCommand ( + LPVOID lpvCommands, + LPVOID *lplpvReturnedCommand); + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* __DDRAWI_INCLUDED__ */ diff --git a/include/psdk/ddrawint.h b/include/psdk/ddrawint.h new file mode 100644 index 00000000000..927e7f88690 --- /dev/null +++ b/include/psdk/ddrawint.h @@ -0,0 +1,1336 @@ +/* + * ddrawint.h + * + * DirectDraw NT driver interface + * + * Contributors: + * Created by Ge van Geldorp + * + * THIS SOFTWARE IS NOT COPYRIGHTED + * + * This source code is offered for use in the public domain. You may + * use, modify or distribute it freely. + * + * This code is distributed in the hope that it will be useful but + * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY + * DISCLAIMED. This includes but is not limited to warranties of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + */ + +#ifndef __DD_INCLUDED__ +#define __DD_INCLUDED__ + +DEFINE_GUID( GUID_MiscellaneousCallbacks, 0xEFD60CC0, 0x49e7, 0x11d0, 0x88, 0x9d, 0x0, 0xaa, 0x0, 0xbb, 0xb7, 0x6a); +DEFINE_GUID( GUID_Miscellaneous2Callbacks, 0x406B2F00, 0x3E5A, 0x11D1, 0xB6, 0x40, 0x00, 0xAA, 0x00, 0xA1, 0xF9, 0x6A); +DEFINE_GUID( GUID_VideoPortCallbacks, 0xefd60cc1, 0x49e7, 0x11d0, 0x88, 0x9d, 0x0, 0xaa, 0x0, 0xbb, 0xb7, 0x6a); +DEFINE_GUID( GUID_ColorControlCallbacks, 0xefd60cc2, 0x49e7, 0x11d0, 0x88, 0x9d, 0x0, 0xaa, 0x0, 0xbb, 0xb7, 0x6a); +DEFINE_GUID( GUID_MotionCompCallbacks, 0xb1122b40, 0x5dA5, 0x11d1, 0x8f, 0xcF, 0x00, 0xc0, 0x4f, 0xc2, 0x9b, 0x4e); +DEFINE_GUID( GUID_VideoPortCaps, 0xefd60cc3, 0x49e7, 0x11d0, 0x88, 0x9d, 0x0, 0xaa, 0x0, 0xbb, 0xb7, 0x6a); +DEFINE_GUID( GUID_D3DCaps, 0x7bf06991, 0x8794, 0x11d0, 0x91, 0x39, 0x08, 0x00, 0x36, 0xd2, 0xef, 0x02); +DEFINE_GUID( GUID_D3DExtendedCaps, 0x7de41f80, 0x9d93, 0x11d0, 0x89, 0xab, 0x00, 0xa0, 0xc9, 0x05, 0x41, 0x29); +DEFINE_GUID( GUID_D3DCallbacks, 0x7bf06990, 0x8794, 0x11d0, 0x91, 0x39, 0x08, 0x00, 0x36, 0xd2, 0xef, 0x02); +DEFINE_GUID( GUID_D3DCallbacks2, 0xba584e1, 0x70b6, 0x11d0, 0x88, 0x9d, 0x0, 0xaa, 0x0, 0xbb, 0xb7, 0x6a); +DEFINE_GUID( GUID_D3DCallbacks3, 0xddf41230, 0xec0a, 0x11d0, 0xa9, 0xb6, 0x00, 0xaa, 0x00, 0xc0, 0x99, 0x3e); +DEFINE_GUID( GUID_NonLocalVidMemCaps, 0x86c4fa80, 0x8d84, 0x11d0, 0x94, 0xe8, 0x00, 0xc0, 0x4f, 0xc3, 0x41, 0x37); +DEFINE_GUID( GUID_KernelCallbacks, 0x80863800, 0x6B06, 0x11D0, 0x9B, 0x06, 0x0, 0xA0, 0xC9, 0x03, 0xA3, 0xB8); +DEFINE_GUID( GUID_KernelCaps, 0xFFAA7540, 0x7AA8, 0x11D0, 0x9B, 0x06, 0x00, 0xA0, 0xC9, 0x03, 0xA3, 0xB8); +DEFINE_GUID( GUID_ZPixelFormats, 0x93869880, 0x36cf, 0x11d1, 0x9b, 0x1b, 0x0, 0xaa, 0x0, 0xbb, 0xb8, 0xae); +DEFINE_GUID( GUID_DDMoreCaps, 0x880baf30, 0xb030, 0x11d0, 0x8e, 0xa7, 0x00, 0x60, 0x97, 0x97, 0xea, 0x5b); +DEFINE_GUID( GUID_D3DParseUnknownCommandCallback, 0x2e04ffa0, 0x98e4, 0x11d1, 0x8c, 0xe1, 0x0, 0xa0, 0xc9, 0x6, 0x29, 0xa8); +DEFINE_GUID( GUID_NTCallbacks, 0x6fe9ecde, 0xdf89, 0x11d1, 0x9d, 0xb0, 0x00, 0x60, 0x08, 0x27, 0x71, 0xba); +DEFINE_GUID( GUID_DDMoreSurfaceCaps, 0x3b8a0466, 0xf269, 0x11d1, 0x88, 0x0b, 0x0, 0xc0, 0x4f, 0xd9, 0x30, 0xc5); +DEFINE_GUID( GUID_GetHeapAlignment, 0x42e02f16, 0x7b41, 0x11d2, 0x8b, 0xff, 0x0, 0xa0, 0xc9, 0x83, 0xea, 0xf6); +DEFINE_GUID( GUID_UpdateNonLocalHeap, 0x42e02f17, 0x7b41, 0x11d2, 0x8b, 0xff, 0x0, 0xa0, 0xc9, 0x83, 0xea, 0xf6); +DEFINE_GUID( GUID_NTPrivateDriverCaps, 0xfad16a23, 0x7b66, 0x11d2, 0x83, 0xd7, 0x0, 0xc0, 0x4f, 0x7c, 0xe5, 0x8c); +DEFINE_GUID( GUID_DDStereoMode, 0xf828169c, 0xa8e8, 0x11d2, 0xa1, 0xf2, 0x0, 0xa0, 0xc9, 0x83, 0xea, 0xf6); +DEFINE_GUID( GUID_VPE2Callbacks, 0x52882147, 0x2d47, 0x469a, 0xa0, 0xd1, 0x3, 0x45, 0x58, 0x90, 0xf6, 0xc8); + + +#ifndef GUID_DEFS_ONLY + +#ifndef _NO_DDRAWINT_NO_COM +#ifndef _NO_COM +#define _NO_COM +#include +#include +#undef _NO_COM +#else +#include +#include +#endif +#else +#include +#include +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef MAKE_HRESULT // fixme this if statment should not be here, but MAKE_HRESULT should be here +#define MAKE_HRESULT(sev,fac,code) ((HRESULT) (((unsigned long)(sev)<<31) | ((unsigned long)(fac)<<16) | ((unsigned long)(code))) ) +#endif + +#ifndef FLATPTR_DEFINED +typedef ULONG_PTR FLATPTR; +#define FLATPTR_DEFINED +#endif + +typedef struct _DD_VIDEOPORT_LOCAL *PDD_VIDEOPORT_LOCAL; + +/************************************************************************/ +/* _DD_GETHEAPALIGNMENTDATA is defined in dmemmgr.h */ + /************************************************************************/ +struct _DD_GETHEAPALIGNMENTDATA; +#ifndef DD_GETHEAPALIGNMENTDATA_DECLARED +typedef struct _DD_GETHEAPALIGNMENTDATA *PDD_GETHEAPALIGNMENTDATA; +#define DD_GETHEAPALIGNMENTDATA_DECLARED +#endif + +/************************************************************************/ +/* Video memory info structures */ +/************************************************************************/ + +typedef struct _VIDEOMEMORY { + DWORD dwFlags; + FLATPTR fpStart; + __GNU_EXTENSION union { + FLATPTR fpEnd; + DWORD dwWidth; + }; + DDSCAPS ddsCaps; + DDSCAPS ddsCapsAlt; + __GNU_EXTENSION union { + struct _VMEMHEAP *lpHeap; + DWORD dwHeight; + }; +} VIDEOMEMORY, *PVIDEOMEMORY; + +typedef struct _VIDEOMEMORYINFO { + FLATPTR fpPrimary; + DWORD dwFlags; + DWORD dwDisplayWidth; + DWORD dwDisplayHeight; + LONG lDisplayPitch; + DDPIXELFORMAT ddpfDisplay; + DWORD dwOffscreenAlign; + DWORD dwOverlayAlign; + DWORD dwTextureAlign; + DWORD dwZBufferAlign; + DWORD dwAlphaAlign; + PVOID pvPrimary; +} VIDEOMEMORYINFO, *LPVIDEOMEMORYINFO; + +typedef struct _DD_DIRECTDRAW_GLOBAL { + PVOID dhpdev; + ULONG_PTR dwReserved1; + ULONG_PTR dwReserved2; + LPDDVIDEOPORTCAPS lpDDVideoPortCaps; +} DD_DIRECTDRAW_GLOBAL, *PDD_DIRECTDRAW_GLOBAL; + +typedef struct _DD_DIRECTDRAW_LOCAL { + PDD_DIRECTDRAW_GLOBAL lpGbl; +} DD_DIRECTDRAW_LOCAL, *PDD_DIRECTDRAW_LOCAL; + +typedef struct _DD_SURFACE_GLOBAL { + __GNU_EXTENSION union { + DWORD dwBlockSizeY; + LONG lSlicePitch; + }; + __GNU_EXTENSION union { + PVIDEOMEMORY lpVidMemHeap; + DWORD dwBlockSizeX; + DWORD dwUserMemSize; + }; + FLATPTR fpVidMem; + __GNU_EXTENSION union { + LONG lPitch; + DWORD dwLinearSize; + }; + LONG yHint; + LONG xHint; + DWORD wHeight; + DWORD wWidth; + ULONG_PTR dwReserved1; + DDPIXELFORMAT ddpfSurface; + FLATPTR fpHeapOffset; + HANDLE hCreatorProcess; +} DD_SURFACE_GLOBAL, *PDD_SURFACE_GLOBAL; + +typedef struct _DD_SURFACE_MORE { + DWORD dwMipMapCount; + PDD_VIDEOPORT_LOCAL lpVideoPort; + DWORD dwOverlayFlags; + DDSCAPSEX ddsCapsEx; + DWORD dwSurfaceHandle; +} DD_SURFACE_MORE, *PDD_SURFACE_MORE; + +typedef struct _DD_ATTACHLIST *PDD_ATTACHLIST; + +typedef struct _DD_SURFACE_LOCAL { + PDD_SURFACE_GLOBAL lpGbl; + DWORD dwFlags; + DDSCAPS ddsCaps; + ULONG_PTR dwReserved1; + __GNU_EXTENSION union { + DDCOLORKEY ddckCKSrcOverlay; + DDCOLORKEY ddckCKSrcBlt; + }; + __GNU_EXTENSION union { + DDCOLORKEY ddckCKDestOverlay; + DDCOLORKEY ddckCKDestBlt; + }; + PDD_SURFACE_MORE lpSurfMore; + PDD_ATTACHLIST lpAttachList; + PDD_ATTACHLIST lpAttachListFrom; + RECT rcOverlaySrc; +} DD_SURFACE_LOCAL, *PDD_SURFACE_LOCAL; + +typedef struct _DD_ATTACHLIST { + PDD_ATTACHLIST lpLink; + PDD_SURFACE_LOCAL lpAttached; +} DD_ATTACHLIST; + +typedef struct _DD_SURFACE_INT { + PDD_SURFACE_LOCAL lpLcl; +} DD_SURFACE_INT, *PDD_SURFACE_INT; + +/************************************************************************/ +/* DDI representation of the DirectDrawPalette object */ +/************************************************************************/ + +typedef struct _DD_PALETTE_GLOBAL { + ULONG_PTR Reserved1; +} DD_PALETTE_GLOBAL, *PDD_PALETTE_GLOBAL; + +/************************************************************************/ +/* DDI representation of the DirectDrawVideo object */ +/************************************************************************/ + +typedef struct { + PDD_DIRECTDRAW_LOCAL lpDD; + GUID guid; + DWORD dwUncompWidth; + DWORD dwUncompHeight; + DDPIXELFORMAT ddUncompPixelFormat; + DWORD dwDriverReserved1; + DWORD dwDriverReserved2; + DWORD dwDriverReserved3; + LPVOID lpDriverReserved1; + LPVOID lpDriverReserved2; + LPVOID lpDriverReserved3; +} DD_MOTIONCOMP_LOCAL, *PDD_MOTIONCOMP_LOCAL; + +typedef struct _DD_VIDEOPORT_LOCAL { + PDD_DIRECTDRAW_LOCAL lpDD; + DDVIDEOPORTDESC ddvpDesc; + DDVIDEOPORTINFO ddvpInfo; + PDD_SURFACE_INT lpSurface; + PDD_SURFACE_INT lpVBISurface; + DWORD dwNumAutoflip; + DWORD dwNumVBIAutoflip; + ULONG_PTR dwReserved1; + ULONG_PTR dwReserved2; + ULONG_PTR dwReserved3; +} DD_VIDEOPORT_LOCAL; + +/************************************************************************/ +/* IDirectDrawSurface callbacks */ +/************************************************************************/ + +typedef struct _DD_LOCKDATA { + PDD_DIRECTDRAW_GLOBAL lpDD; + PDD_SURFACE_LOCAL lpDDSurface; + DWORD bHasRect; + RECTL rArea; + LPVOID lpSurfData; + HRESULT ddRVal; + PVOID Lock; + DWORD dwFlags; + FLATPTR fpProcess; +} DD_LOCKDATA, *PDD_LOCKDATA; +typedef DWORD (WINAPI *PDD_SURFCB_LOCK)(PDD_LOCKDATA); + +typedef struct _DD_UNLOCKDATA { + PDD_DIRECTDRAW_GLOBAL lpDD; + PDD_SURFACE_LOCAL lpDDSurface; + HRESULT ddRVal; + PVOID Unlock; +} DD_UNLOCKDATA, *PDD_UNLOCKDATA; +typedef DWORD (WINAPI *PDD_SURFCB_UNLOCK)(PDD_UNLOCKDATA); + +#define DDABLT_SRCOVERDEST 0x00000001 +#define DDBLT_AFLAGS 0x80000000 + +typedef struct _DD_BLTDATA { + PDD_DIRECTDRAW_GLOBAL lpDD; + PDD_SURFACE_LOCAL lpDDDestSurface; + RECTL rDest; + PDD_SURFACE_LOCAL lpDDSrcSurface; + RECTL rSrc; + DWORD dwFlags; + DWORD dwROPFlags; + DDBLTFX bltFX; + HRESULT ddRVal; + PVOID Blt; + BOOL IsClipped; + RECTL rOrigDest; + RECTL rOrigSrc; + DWORD dwRectCnt; + LPRECT prDestRects; + DWORD dwAFlags; + DDARGB ddargbScaleFactors; +} DD_BLTDATA, *PDD_BLTDATA; +typedef DWORD (WINAPI *PDD_SURFCB_BLT)(PDD_BLTDATA); + +typedef struct _DD_UPDATEOVERLAYDATA { + PDD_DIRECTDRAW_GLOBAL lpDD; + PDD_SURFACE_LOCAL lpDDDestSurface; + RECTL rDest; + PDD_SURFACE_LOCAL lpDDSrcSurface; + RECTL rSrc; + DWORD dwFlags; + DDOVERLAYFX overlayFX; + HRESULT ddRVal; + PVOID UpdateOverlay; +} DD_UPDATEOVERLAYDATA, *PDD_UPDATEOVERLAYDATA; +typedef DWORD (WINAPI *PDD_SURFCB_UPDATEOVERLAY)(PDD_UPDATEOVERLAYDATA); + +typedef struct _DD_SETOVERLAYPOSITIONDATA { + PDD_DIRECTDRAW_GLOBAL lpDD; + PDD_SURFACE_LOCAL lpDDSrcSurface; + PDD_SURFACE_LOCAL lpDDDestSurface; + LONG lXPos; + LONG lYPos; + HRESULT ddRVal; + PVOID SetOverlayPosition; +} DD_SETOVERLAYPOSITIONDATA, *PDD_SETOVERLAYPOSITIONDATA; +typedef DWORD (WINAPI *PDD_SURFCB_SETOVERLAYPOSITION)(PDD_SETOVERLAYPOSITIONDATA); + +typedef struct _DD_SETPALETTEDATA { + PDD_DIRECTDRAW_GLOBAL lpDD; + PDD_SURFACE_LOCAL lpDDSurface; + PDD_PALETTE_GLOBAL lpDDPalette; + HRESULT ddRVal; + PVOID SetPalette; + BOOL Attach; +} DD_SETPALETTEDATA, *PDD_SETPALETTEDATA; +typedef DWORD (WINAPI *PDD_SURFCB_SETPALETTE)(PDD_SETPALETTEDATA); + +typedef struct _DD_FLIPDATA { + PDD_DIRECTDRAW_GLOBAL lpDD; + PDD_SURFACE_LOCAL lpSurfCurr; + PDD_SURFACE_LOCAL lpSurfTarg; + DWORD dwFlags; + HRESULT ddRVal; + PVOID Flip; + PDD_SURFACE_LOCAL lpSurfCurrLeft; + PDD_SURFACE_LOCAL lpSurfTargLeft; +} DD_FLIPDATA, *PDD_FLIPDATA; +typedef DWORD (WINAPI *PDD_SURFCB_FLIP)(PDD_FLIPDATA); + +typedef struct _DD_DESTROYSURFACEDATA { + PDD_DIRECTDRAW_GLOBAL lpDD; + PDD_SURFACE_LOCAL lpDDSurface; + HRESULT ddRVal; + PVOID DestroySurface; +} DD_DESTROYSURFACEDATA, *PDD_DESTROYSURFACEDATA; +typedef DWORD (WINAPI *PDD_SURFCB_DESTROYSURFACE)(PDD_DESTROYSURFACEDATA); + +typedef struct _DD_SETCLIPLISTDATA { + PDD_DIRECTDRAW_GLOBAL lpDD; + PDD_SURFACE_LOCAL lpDDSurface; + HRESULT ddRVal; + PVOID SetClipList; +} DD_SETCLIPLISTDATA, *PDD_SETCLIPLISTDATA; +typedef DWORD (WINAPI *PDD_SURFCB_SETCLIPLIST)(PDD_SETCLIPLISTDATA); + +typedef struct _DD_ADDATTACHEDSURFACEDATA { + PDD_DIRECTDRAW_GLOBAL lpDD; + PDD_SURFACE_LOCAL lpDDSurface; + PDD_SURFACE_LOCAL lpSurfAttached; + HRESULT ddRVal; + PVOID AddAttachedSurface; +} DD_ADDATTACHEDSURFACEDATA, *PDD_ADDATTACHEDSURFACEDATA; +typedef DWORD (WINAPI *PDD_SURFCB_ADDATTACHEDSURFACE)(PDD_ADDATTACHEDSURFACEDATA); + +typedef struct _DD_SETCOLORKEYDATA { + PDD_DIRECTDRAW_GLOBAL lpDD; + PDD_SURFACE_LOCAL lpDDSurface; + DWORD dwFlags; + DDCOLORKEY ckNew; + HRESULT ddRVal; + PVOID SetColorKey; +} DD_SETCOLORKEYDATA, *PDD_SETCOLORKEYDATA; +typedef DWORD (WINAPI *PDD_SURFCB_SETCOLORKEY)(PDD_SETCOLORKEYDATA); + +typedef struct _DD_GETBLTSTATUSDATA { + PDD_DIRECTDRAW_GLOBAL lpDD; + PDD_SURFACE_LOCAL lpDDSurface; + DWORD dwFlags; + HRESULT ddRVal; + PVOID GetBltStatus; +} DD_GETBLTSTATUSDATA, *PDD_GETBLTSTATUSDATA; +typedef DWORD (WINAPI *PDD_SURFCB_GETBLTSTATUS)(PDD_GETBLTSTATUSDATA); + +typedef struct _DD_GETFLIPSTATUSDATA { + PDD_DIRECTDRAW_GLOBAL lpDD; + PDD_SURFACE_LOCAL lpDDSurface; + DWORD dwFlags; + HRESULT ddRVal; + PVOID GetFlipStatus; +} DD_GETFLIPSTATUSDATA, *PDD_GETFLIPSTATUSDATA; +typedef DWORD (WINAPI *PDD_SURFCB_GETFLIPSTATUS)(PDD_GETFLIPSTATUSDATA); + +typedef struct DD_SURFACECALLBACKS { + DWORD dwSize; + DWORD dwFlags; + PDD_SURFCB_DESTROYSURFACE DestroySurface; + PDD_SURFCB_FLIP Flip; + PDD_SURFCB_SETCLIPLIST SetClipList; + PDD_SURFCB_LOCK Lock; + PDD_SURFCB_UNLOCK Unlock; + PDD_SURFCB_BLT Blt; + PDD_SURFCB_SETCOLORKEY SetColorKey; + PDD_SURFCB_ADDATTACHEDSURFACE AddAttachedSurface; + PDD_SURFCB_GETBLTSTATUS GetBltStatus; + PDD_SURFCB_GETFLIPSTATUS GetFlipStatus; + PDD_SURFCB_UPDATEOVERLAY UpdateOverlay; + PDD_SURFCB_SETOVERLAYPOSITION SetOverlayPosition; + PVOID reserved4; + PDD_SURFCB_SETPALETTE SetPalette; +} DD_SURFACECALLBACKS, *PDD_SURFACECALLBACKS; + +#define DDHAL_SURFCB32_DESTROYSURFACE 0x00000001 +#define DDHAL_SURFCB32_FLIP 0x00000002 +#define DDHAL_SURFCB32_SETCLIPLIST 0x00000004 +#define DDHAL_SURFCB32_LOCK 0x00000008 +#define DDHAL_SURFCB32_UNLOCK 0x00000010 +#define DDHAL_SURFCB32_BLT 0x00000020 +#define DDHAL_SURFCB32_SETCOLORKEY 0x00000040 +#define DDHAL_SURFCB32_ADDATTACHEDSURFACE 0x00000080 +#define DDHAL_SURFCB32_GETBLTSTATUS 0x00000100 +#define DDHAL_SURFCB32_GETFLIPSTATUS 0x00000200 +#define DDHAL_SURFCB32_UPDATEOVERLAY 0x00000400 +#define DDHAL_SURFCB32_SETOVERLAYPOSITION 0x00000800 +#define DDHAL_SURFCB32_RESERVED4 0x00001000 +#define DDHAL_SURFCB32_SETPALETTE 0x00002000 + +/************************************************************************/ +/* IDirectDraw callbacks */ +/************************************************************************/ + +typedef struct _DD_CREATESURFACEDATA { + PDD_DIRECTDRAW_GLOBAL lpDD; + DDSURFACEDESC *lpDDSurfaceDesc; + PDD_SURFACE_LOCAL *lplpSList; + DWORD dwSCnt; + HRESULT ddRVal; + PVOID CreateSurface; +} DD_CREATESURFACEDATA, *PDD_CREATESURFACEDATA; +typedef DWORD (WINAPI *PDD_CREATESURFACE)(PDD_CREATESURFACEDATA); + +typedef struct _DD_DRVSETCOLORKEYDATA { + PDD_SURFACE_LOCAL lpDDSurface; + DWORD dwFlags; + DDCOLORKEY ckNew; + HRESULT ddRVal; + PVOID SetColorKey; +} DD_DRVSETCOLORKEYDATA, *PDD_DRVSETCOLORKEYDATA; +typedef DWORD (WINAPI *PDD_SETCOLORKEY)(PDD_DRVSETCOLORKEYDATA); + +#define DDWAITVB_I_TESTVB 0x80000006 + +typedef struct _DD_WAITFORVERTICALBLANKDATA { + PDD_DIRECTDRAW_GLOBAL lpDD; + DWORD dwFlags; + DWORD bIsInVB; + DWORD hEvent; + HRESULT ddRVal; + PVOID WaitForVerticalBlank; +} DD_WAITFORVERTICALBLANKDATA, *PDD_WAITFORVERTICALBLANKDATA; +typedef DWORD (WINAPI *PDD_WAITFORVERTICALBLANK)(PDD_WAITFORVERTICALBLANKDATA); + +typedef struct _DD_CANCREATESURFACEDATA { + PDD_DIRECTDRAW_GLOBAL lpDD; + DDSURFACEDESC *lpDDSurfaceDesc; + DWORD bIsDifferentPixelFormat; + HRESULT ddRVal; + PVOID CanCreateSurface; +} DD_CANCREATESURFACEDATA, *PDD_CANCREATESURFACEDATA; +typedef DWORD (WINAPI *PDD_CANCREATESURFACE)(PDD_CANCREATESURFACEDATA); + +typedef struct _DD_CREATEPALETTEDATA { + PDD_DIRECTDRAW_GLOBAL lpDD; + PDD_PALETTE_GLOBAL lpDDPalette; + LPPALETTEENTRY lpColorTable; + HRESULT ddRVal; + PVOID CreatePalette; + BOOL is_excl; +} DD_CREATEPALETTEDATA, *PDD_CREATEPALETTEDATA; +typedef DWORD (WINAPI *PDD_CREATEPALETTE)(PDD_CREATEPALETTEDATA); + +typedef struct _DD_GETSCANLINEDATA { + PDD_DIRECTDRAW_GLOBAL lpDD; + DWORD dwScanLine; + HRESULT ddRVal; + PVOID GetScanLine; +} DD_GETSCANLINEDATA, *PDD_GETSCANLINEDATA; +typedef DWORD (WINAPI *PDD_GETSCANLINE)(PDD_GETSCANLINEDATA); + +typedef struct _DD_MAPMEMORYDATA { + PDD_DIRECTDRAW_GLOBAL lpDD; + BOOL bMap; + HANDLE hProcess; + FLATPTR fpProcess; + HRESULT ddRVal; +} DD_MAPMEMORYDATA, *PDD_MAPMEMORYDATA; +typedef DWORD (WINAPI *PDD_MAPMEMORY)(PDD_MAPMEMORYDATA); + +typedef struct _DD_DESTROYDRIVERDATA *PDD_DESTROYDRIVERDATA; +typedef struct _DD_SETMODEDATA *PDD_SETMODEDATA; + +typedef DWORD (APIENTRY *PDD_DESTROYDRIVER)(PDD_DESTROYDRIVERDATA); +typedef DWORD (APIENTRY *PDD_SETMODE)(PDD_SETMODEDATA); + +typedef struct DD_CALLBACKS { + DWORD dwSize; + DWORD dwFlags; + PDD_DESTROYDRIVER DestroyDriver; + PDD_CREATESURFACE CreateSurface; + PDD_SETCOLORKEY SetColorKey; + PDD_SETMODE SetMode; + PDD_WAITFORVERTICALBLANK WaitForVerticalBlank; + PDD_CANCREATESURFACE CanCreateSurface; + PDD_CREATEPALETTE CreatePalette; + PDD_GETSCANLINE GetScanLine; + PDD_MAPMEMORY MapMemory; +} DD_CALLBACKS, *PDD_CALLBACKS; + +#define DDHAL_CB32_DESTROYDRIVER 0x00000001l +#define DDHAL_CB32_CREATESURFACE 0x00000002l +#define DDHAL_CB32_SETCOLORKEY 0x00000004l +#define DDHAL_CB32_SETMODE 0x00000008l +#define DDHAL_CB32_WAITFORVERTICALBLANK 0x00000010l +#define DDHAL_CB32_CANCREATESURFACE 0x00000020l +#define DDHAL_CB32_CREATEPALETTE 0x00000040l +#define DDHAL_CB32_GETSCANLINE 0x00000080l +#define DDHAL_CB32_MAPMEMORY 0x80000000l + +typedef struct _DD_GETAVAILDRIVERMEMORYDATA { + PDD_DIRECTDRAW_GLOBAL lpDD; + DDSCAPS DDSCaps; + DWORD dwTotal; + DWORD dwFree; + HRESULT ddRVal; + PVOID GetAvailDriverMemory; +} DD_GETAVAILDRIVERMEMORYDATA, *PDD_GETAVAILDRIVERMEMORYDATA; +typedef DWORD (WINAPI *PDD_GETAVAILDRIVERMEMORY)(PDD_GETAVAILDRIVERMEMORYDATA); + +typedef struct _DD_MISCELLANEOUSCALLBACKS { + DWORD dwSize; + DWORD dwFlags; + PDD_GETAVAILDRIVERMEMORY GetAvailDriverMemory; +} DD_MISCELLANEOUSCALLBACKS, *PDD_MISCELLANEOUSCALLBACKS; + +#define DDHAL_MISCCB32_GETAVAILDRIVERMEMORY 0x00000001 + +typedef DWORD (WINAPI *PDD_ALPHABLT)(PDD_BLTDATA); + +typedef struct _DD_CREATESURFACEEXDATA { + DWORD dwFlags; + PDD_DIRECTDRAW_LOCAL lpDDLcl; + PDD_SURFACE_LOCAL lpDDSLcl; + HRESULT ddRVal; +} DD_CREATESURFACEEXDATA, *PDD_CREATESURFACEEXDATA; +typedef DWORD (WINAPI *PDD_CREATESURFACEEX)(PDD_CREATESURFACEEXDATA); + +typedef struct _DD_GETDRIVERSTATEDATA { + DWORD dwFlags; + __GNU_EXTENSION union { + PDD_DIRECTDRAW_GLOBAL lpDD; + DWORD_PTR dwhContext; + }; + LPDWORD lpdwStates; + DWORD dwLength; + HRESULT ddRVal; +} DD_GETDRIVERSTATEDATA, *PDD_GETDRIVERSTATEDATA; +typedef DWORD (WINAPI *PDD_GETDRIVERSTATE)(PDD_GETDRIVERSTATEDATA); + +typedef struct _DD_DESTROYDDLOCALDATA { + DWORD dwFlags; + PDD_DIRECTDRAW_LOCAL pDDLcl; + HRESULT ddRVal; +} DD_DESTROYDDLOCALDATA, *PDD_DESTROYDDLOCALDATA; +typedef DWORD (WINAPI *PDD_DESTROYDDLOCAL)(PDD_DESTROYDDLOCALDATA); + +typedef struct _DD_MISCELLANEOUS2CALLBACKS { + DWORD dwSize; + DWORD dwFlags; + PDD_ALPHABLT AlphaBlt; + PDD_CREATESURFACEEX CreateSurfaceEx; + PDD_GETDRIVERSTATE GetDriverState; + PDD_DESTROYDDLOCAL DestroyDDLocal; +} DD_MISCELLANEOUS2CALLBACKS, *PDD_MISCELLANEOUS2CALLBACKS; + +#define DDHAL_MISC2CB32_ALPHABLT 0x00000001 +#define DDHAL_MISC2CB32_CREATESURFACEEX 0x00000002 +#define DDHAL_MISC2CB32_GETDRIVERSTATE 0x00000004 +#define DDHAL_MISC2CB32_DESTROYDDLOCAL 0x00000008 + +typedef struct _DD_FREEDRIVERMEMORYDATA { + PDD_DIRECTDRAW_GLOBAL lpDD; + PDD_SURFACE_LOCAL lpDDSurface; + HRESULT ddRVal; + PVOID FreeDriverMemory; +} DD_FREEDRIVERMEMORYDATA, *PDD_FREEDRIVERMEMORYDATA; +typedef DWORD (WINAPI *PDD_FREEDRIVERMEMORY)(PDD_FREEDRIVERMEMORYDATA); + +typedef struct _DD_SETEXCLUSIVEMODEDATA { + PDD_DIRECTDRAW_GLOBAL lpDD; + DWORD dwEnterExcl; + DWORD dwReserved; + HRESULT ddRVal; + PVOID SetExclusiveMode; +} DD_SETEXCLUSIVEMODEDATA, *PDD_SETEXCLUSIVEMODEDATA; +typedef DWORD (WINAPI *PDD_SETEXCLUSIVEMODE)(PDD_SETEXCLUSIVEMODEDATA); + +typedef struct _DD_FLIPTOGDISURFACEDATA { + PDD_DIRECTDRAW_GLOBAL lpDD; + DWORD dwToGDI; + DWORD dwReserved; + HRESULT ddRVal; + PVOID FlipToGDISurface; +} DD_FLIPTOGDISURFACEDATA, *PDD_FLIPTOGDISURFACEDATA; +typedef DWORD (WINAPI *PDD_FLIPTOGDISURFACE)(PDD_FLIPTOGDISURFACEDATA); + +typedef struct _DD_NTCALLBACKS { + DWORD dwSize; + DWORD dwFlags; + PDD_FREEDRIVERMEMORY FreeDriverMemory; + PDD_SETEXCLUSIVEMODE SetExclusiveMode; + PDD_FLIPTOGDISURFACE FlipToGDISurface; +} DD_NTCALLBACKS, *PDD_NTCALLBACKS; + +#define DDHAL_NTCB32_FREEDRIVERMEMORY 0x00000001 +#define DDHAL_NTCB32_SETEXCLUSIVEMODE 0x00000002 +#define DDHAL_NTCB32_FLIPTOGDISURFACE 0x00000004 + +/************************************************************************/ +/* IDirectDrawPalette callbacks */ +/************************************************************************/ + +typedef struct _DD_DESTROYPALETTEDATA { + PDD_DIRECTDRAW_GLOBAL lpDD; + PDD_PALETTE_GLOBAL lpDDPalette; + HRESULT ddRVal; + PVOID DestroyPalette; +} DD_DESTROYPALETTEDATA, *PDD_DESTROYPALETTEDATA; +typedef DWORD (WINAPI *PDD_PALCB_DESTROYPALETTE)(PDD_DESTROYPALETTEDATA); + +typedef struct _DD_SETENTRIESDATA { + PDD_DIRECTDRAW_GLOBAL lpDD; + PDD_PALETTE_GLOBAL lpDDPalette; + DWORD dwBase; + DWORD dwNumEntries; + LPPALETTEENTRY lpEntries; + HRESULT ddRVal; + PVOID SetEntries; +} DD_SETENTRIESDATA, *PDD_SETENTRIESDATA; +typedef DWORD (WINAPI *PDD_PALCB_SETENTRIES)(PDD_SETENTRIESDATA); + +typedef struct DD_PALETTECALLBACKS { + DWORD dwSize; + DWORD dwFlags; + PDD_PALCB_DESTROYPALETTE DestroyPalette; + PDD_PALCB_SETENTRIES SetEntries; +} DD_PALETTECALLBACKS, *PDD_PALETTECALLBACKS; + +#define DDHAL_PALCB32_DESTROYPALETTE 0x00000001l +#define DDHAL_PALCB32_SETENTRIES 0x00000002l + +/************************************************************************/ +/* IDirectDrawVideoport callbacks */ +/************************************************************************/ + +typedef struct _DD_CANCREATEVPORTDATA { + PDD_DIRECTDRAW_LOCAL lpDD; + LPDDVIDEOPORTDESC lpDDVideoPortDesc; + HRESULT ddRVal; + PVOID CanCreateVideoPort; +} DD_CANCREATEVPORTDATA, *PDD_CANCREATEVPORTDATA; +typedef DWORD (WINAPI *PDD_VPORTCB_CANCREATEVIDEOPORT)(PDD_CANCREATEVPORTDATA); + +typedef struct _DD_CREATEVPORTDATA { + PDD_DIRECTDRAW_LOCAL lpDD; + LPDDVIDEOPORTDESC lpDDVideoPortDesc; + PDD_VIDEOPORT_LOCAL lpVideoPort; + HRESULT ddRVal; + PVOID CreateVideoPort; +} DD_CREATEVPORTDATA, *PDD_CREATEVPORTDATA; +typedef DWORD (WINAPI *PDD_VPORTCB_CREATEVIDEOPORT)(PDD_CREATEVPORTDATA); + +typedef struct _DD_FLIPVPORTDATA { + PDD_DIRECTDRAW_LOCAL lpDD; + PDD_VIDEOPORT_LOCAL lpVideoPort; + PDD_SURFACE_LOCAL lpSurfCurr; + PDD_SURFACE_LOCAL lpSurfTarg; + HRESULT ddRVal; + PVOID FlipVideoPort; +} DD_FLIPVPORTDATA, *PDD_FLIPVPORTDATA; +typedef DWORD (WINAPI *PDD_VPORTCB_FLIP)(PDD_FLIPVPORTDATA); + +typedef struct _DD_GETVPORTBANDWIDTHDATA { + PDD_DIRECTDRAW_LOCAL lpDD; + PDD_VIDEOPORT_LOCAL lpVideoPort; + LPDDPIXELFORMAT lpddpfFormat; + DWORD dwWidth; + DWORD dwHeight; + DWORD dwFlags; + LPDDVIDEOPORTBANDWIDTH lpBandwidth; + HRESULT ddRVal; + PVOID GetVideoPortBandwidth; +} DD_GETVPORTBANDWIDTHDATA, *PDD_GETVPORTBANDWIDTHDATA; +typedef DWORD (WINAPI *PDD_VPORTCB_GETBANDWIDTH)(PDD_GETVPORTBANDWIDTHDATA); + +typedef struct _DD_GETVPORTINPUTFORMATDATA { + PDD_DIRECTDRAW_LOCAL lpDD; + PDD_VIDEOPORT_LOCAL lpVideoPort; + DWORD dwFlags; + LPDDPIXELFORMAT lpddpfFormat; + DWORD dwNumFormats; + HRESULT ddRVal; + PVOID GetVideoPortInputFormats; +} DD_GETVPORTINPUTFORMATDATA, *PDD_GETVPORTINPUTFORMATDATA; +typedef DWORD (WINAPI *PDD_VPORTCB_GETINPUTFORMATS)(PDD_GETVPORTINPUTFORMATDATA); + +typedef struct _DD_GETVPORTOUTPUTFORMATDATA { + PDD_DIRECTDRAW_LOCAL lpDD; + PDD_VIDEOPORT_LOCAL lpVideoPort; + DWORD dwFlags; + LPDDPIXELFORMAT lpddpfInputFormat; + LPDDPIXELFORMAT lpddpfOutputFormats; + DWORD dwNumFormats; + HRESULT ddRVal; + PVOID GetVideoPortInputFormats; +} DD_GETVPORTOUTPUTFORMATDATA, *PDD_GETVPORTOUTPUTFORMATDATA; +typedef DWORD (WINAPI *PDD_VPORTCB_GETOUTPUTFORMATS)(PDD_GETVPORTOUTPUTFORMATDATA); + +typedef struct _DD_GETVPORTFIELDDATA { + PDD_DIRECTDRAW_LOCAL lpDD; + PDD_VIDEOPORT_LOCAL lpVideoPort; + BOOL bField; + HRESULT ddRVal; + PVOID GetVideoPortField; +} DD_GETVPORTFIELDDATA, *PDD_GETVPORTFIELDDATA; +typedef DWORD (WINAPI *PDD_VPORTCB_GETFIELD)(PDD_GETVPORTFIELDDATA); + +typedef struct _DD_GETVPORTLINEDATA { + PDD_DIRECTDRAW_LOCAL lpDD; + PDD_VIDEOPORT_LOCAL lpVideoPort; + DWORD dwLine; + HRESULT ddRVal; + PVOID GetVideoPortLine; +} DD_GETVPORTLINEDATA, *PDD_GETVPORTLINEDATA; +typedef DWORD (WINAPI *PDD_VPORTCB_GETLINE)(PDD_GETVPORTLINEDATA); + +typedef struct _DD_GETVPORTCONNECTDATA { + PDD_DIRECTDRAW_LOCAL lpDD; + DWORD dwPortId; + LPDDVIDEOPORTCONNECT lpConnect; + DWORD dwNumEntries; + HRESULT ddRVal; + PVOID GetVideoPortConnectInfo; +} DD_GETVPORTCONNECTDATA, *PDD_GETVPORTCONNECTDATA; +typedef DWORD (WINAPI *PDD_VPORTCB_GETVPORTCONNECT)(PDD_GETVPORTCONNECTDATA); + +typedef struct _DD_DESTROYVPORTDATA { + PDD_DIRECTDRAW_LOCAL lpDD; + PDD_VIDEOPORT_LOCAL lpVideoPort; + HRESULT ddRVal; + PVOID DestroyVideoPort; +} DD_DESTROYVPORTDATA, *PDD_DESTROYVPORTDATA; +typedef DWORD (WINAPI *PDD_VPORTCB_DESTROYVPORT)(PDD_DESTROYVPORTDATA); + +typedef struct _DD_GETVPORTFLIPSTATUSDATA { + PDD_DIRECTDRAW_LOCAL lpDD; + FLATPTR fpSurface; + HRESULT ddRVal; + PVOID GetVideoPortFlipStatus; +} DD_GETVPORTFLIPSTATUSDATA, *PDD_GETVPORTFLIPSTATUSDATA; +typedef DWORD (WINAPI *PDD_VPORTCB_GETFLIPSTATUS)(PDD_GETVPORTFLIPSTATUSDATA); + +typedef struct _DD_UPDATEVPORTDATA { + PDD_DIRECTDRAW_LOCAL lpDD; + PDD_VIDEOPORT_LOCAL lpVideoPort; + PDD_SURFACE_INT *lplpDDSurface; + PDD_SURFACE_INT *lplpDDVBISurface; + LPDDVIDEOPORTINFO lpVideoInfo; + DWORD dwFlags; + DWORD dwNumAutoflip; + DWORD dwNumVBIAutoflip; + HRESULT ddRVal; + PVOID UpdateVideoPort; +} DD_UPDATEVPORTDATA, *PDD_UPDATEVPORTDATA; +typedef DWORD (WINAPI *PDD_VPORTCB_UPDATE)(PDD_UPDATEVPORTDATA); + +typedef struct _DD_WAITFORVPORTSYNCDATA { + PDD_DIRECTDRAW_LOCAL lpDD; + PDD_VIDEOPORT_LOCAL lpVideoPort; + DWORD dwFlags; + DWORD dwLine; + DWORD dwTimeOut; + HRESULT ddRVal; + PVOID UpdateVideoPort; +} DD_WAITFORVPORTSYNCDATA, *PDD_WAITFORVPORTSYNCDATA; +typedef DWORD (WINAPI *PDD_VPORTCB_WAITFORSYNC)(PDD_WAITFORVPORTSYNCDATA); + +typedef struct _DD_GETVPORTSIGNALDATA { + PDD_DIRECTDRAW_LOCAL lpDD; + PDD_VIDEOPORT_LOCAL lpVideoPort; + DWORD dwStatus; + HRESULT ddRVal; + PVOID GetVideoSignalStatus; +} DD_GETVPORTSIGNALDATA, *PDD_GETVPORTSIGNALDATA; +typedef DWORD (WINAPI *PDD_VPORTCB_GETSIGNALSTATUS)(PDD_GETVPORTSIGNALDATA); + +typedef struct _DD_VPORTCOLORDATA { + PDD_DIRECTDRAW_LOCAL lpDD; + PDD_VIDEOPORT_LOCAL lpVideoPort; + DWORD dwFlags; + LPDDCOLORCONTROL lpColorData; + HRESULT ddRVal; + PVOID ColorControl; +} DD_VPORTCOLORDATA, *PDD_VPORTCOLORDATA; +typedef DWORD (WINAPI *PDD_VPORTCB_COLORCONTROL)(PDD_VPORTCOLORDATA); + +typedef struct DD_VIDEOPORTCALLBACKS { + DWORD dwSize; + DWORD dwFlags; + PDD_VPORTCB_CANCREATEVIDEOPORT CanCreateVideoPort; + PDD_VPORTCB_CREATEVIDEOPORT CreateVideoPort; + PDD_VPORTCB_FLIP FlipVideoPort; + PDD_VPORTCB_GETBANDWIDTH GetVideoPortBandwidth; + PDD_VPORTCB_GETINPUTFORMATS GetVideoPortInputFormats; + PDD_VPORTCB_GETOUTPUTFORMATS GetVideoPortOutputFormats; + PVOID lpReserved1; + PDD_VPORTCB_GETFIELD GetVideoPortField; + PDD_VPORTCB_GETLINE GetVideoPortLine; + PDD_VPORTCB_GETVPORTCONNECT GetVideoPortConnectInfo; + PDD_VPORTCB_DESTROYVPORT DestroyVideoPort; + PDD_VPORTCB_GETFLIPSTATUS GetVideoPortFlipStatus; + PDD_VPORTCB_UPDATE UpdateVideoPort; + PDD_VPORTCB_WAITFORSYNC WaitForVideoPortSync; + PDD_VPORTCB_GETSIGNALSTATUS GetVideoSignalStatus; + PDD_VPORTCB_COLORCONTROL ColorControl; +} DD_VIDEOPORTCALLBACKS, *PDD_VIDEOPORTCALLBACKS; + +#define DDHAL_VPORT32_CANCREATEVIDEOPORT 0x00000001 +#define DDHAL_VPORT32_CREATEVIDEOPORT 0x00000002 +#define DDHAL_VPORT32_FLIP 0x00000004 +#define DDHAL_VPORT32_GETBANDWIDTH 0x00000008 +#define DDHAL_VPORT32_GETINPUTFORMATS 0x00000010 +#define DDHAL_VPORT32_GETOUTPUTFORMATS 0x00000020 +#define DDHAL_VPORT32_GETFIELD 0x00000080 +#define DDHAL_VPORT32_GETLINE 0x00000100 +#define DDHAL_VPORT32_GETCONNECT 0x00000200 +#define DDHAL_VPORT32_DESTROY 0x00000400 +#define DDHAL_VPORT32_GETFLIPSTATUS 0x00000800 +#define DDHAL_VPORT32_UPDATE 0x00001000 +#define DDHAL_VPORT32_WAITFORSYNC 0x00002000 +#define DDHAL_VPORT32_GETSIGNALSTATUS 0x00004000 +#define DDHAL_VPORT32_COLORCONTROL 0x00008000 + + +/************************************************************************/ +/* IDirectDrawColorControl callbacks */ +/************************************************************************/ + +#define DDRAWI_GETCOLOR 0x0001 +#define DDRAWI_SETCOLOR 0x0002 + +typedef struct _DD_COLORCONTROLDATA { + PDD_DIRECTDRAW_GLOBAL lpDD; + PDD_SURFACE_LOCAL lpDDSurface; + LPDDCOLORCONTROL lpColorData; + DWORD dwFlags; + HRESULT ddRVal; + PVOID ColorControl; +} DD_COLORCONTROLDATA, *PDD_COLORCONTROLDATA; +typedef DWORD (WINAPI *PDD_COLORCB_COLORCONTROL)(PDD_COLORCONTROLDATA); + +typedef struct _DD_COLORCONTROLCALLBACKS { + DWORD dwSize; + DWORD dwFlags; + PDD_COLORCB_COLORCONTROL ColorControl; +} DD_COLORCONTROLCALLBACKS, *PDD_COLORCONTROLCALLBACKS; + +#define DDHAL_COLOR_COLORCONTROL 0x00000001 + +/************************************************************************/ +/* IDirectDrawVideo callbacks */ +/************************************************************************/ + +typedef struct _DD_GETMOCOMPGUIDSDATA { + PDD_DIRECTDRAW_LOCAL lpDD; + DWORD dwNumGuids; + GUID *lpGuids; + HRESULT ddRVal; +} DD_GETMOCOMPGUIDSDATA, *PDD_GETMOCOMPGUIDSDATA; +typedef DWORD (WINAPI *PDD_MOCOMPCB_GETGUIDS)(PDD_GETMOCOMPGUIDSDATA); + +typedef struct _DD_GETMOCOMPFORMATSDATA { + PDD_DIRECTDRAW_LOCAL lpDD; + GUID *lpGuid; + DWORD dwNumFormats; + LPDDPIXELFORMAT lpFormats; + HRESULT ddRVal; +} DD_GETMOCOMPFORMATSDATA, *PDD_GETMOCOMPFORMATSDATA; +typedef DWORD (WINAPI *PDD_MOCOMPCB_GETFORMATS)(PDD_GETMOCOMPFORMATSDATA); + +typedef struct _DD_CREATEMOCOMPDATA { + PDD_DIRECTDRAW_LOCAL lpDD; + PDD_MOTIONCOMP_LOCAL lpMoComp; + GUID *lpGuid; + DWORD dwUncompWidth; + DWORD dwUncompHeight; + DDPIXELFORMAT ddUncompPixelFormat; + LPVOID lpData; + DWORD dwDataSize; + HRESULT ddRVal; +} DD_CREATEMOCOMPDATA, *PDD_CREATEMOCOMPDATA; +typedef DWORD (WINAPI *PDD_MOCOMPCB_CREATE)(PDD_CREATEMOCOMPDATA); + +typedef struct _DDCOMPBUFFERINFO { + DWORD dwSize; + DWORD dwNumCompBuffers; + DWORD dwWidthToCreate; + DWORD dwHeightToCreate; + DWORD dwBytesToAllocate; + DDSCAPS2 ddCompCaps; + DDPIXELFORMAT ddPixelFormat; +} DDCOMPBUFFERINFO, *LPDDCOMPBUFFERINFO; + +typedef struct _DD_GETMOCOMPCOMPBUFFDATA { + PDD_DIRECTDRAW_LOCAL lpDD; + GUID *lpGuid; + DWORD dwWidth; + DWORD dwHeight; + DDPIXELFORMAT ddPixelFormat; + DWORD dwNumTypesCompBuffs; + LPDDCOMPBUFFERINFO lpCompBuffInfo; + HRESULT ddRVal; +} DD_GETMOCOMPCOMPBUFFDATA, *PDD_GETMOCOMPCOMPBUFFDATA; +typedef DWORD (WINAPI *PDD_MOCOMPCB_GETCOMPBUFFINFO)(PDD_GETMOCOMPCOMPBUFFDATA); + +typedef struct _DD_GETINTERNALMOCOMPDATA { + PDD_DIRECTDRAW_LOCAL lpDD; + GUID *lpGuid; + DWORD dwWidth; + DWORD dwHeight; + DDPIXELFORMAT ddPixelFormat; + DWORD dwScratchMemAlloc; + HRESULT ddRVal; +} DD_GETINTERNALMOCOMPDATA, *PDD_GETINTERNALMOCOMPDATA; +typedef DWORD (WINAPI *PDD_MOCOMPCB_GETINTERNALINFO)(PDD_GETINTERNALMOCOMPDATA); + +typedef struct _DD_BEGINMOCOMPFRAMEDATA { + PDD_DIRECTDRAW_LOCAL lpDD; + PDD_MOTIONCOMP_LOCAL lpMoComp; + PDD_SURFACE_LOCAL lpDestSurface; + DWORD dwInputDataSize; + LPVOID lpInputData; + DWORD dwOutputDataSize; + LPVOID lpOutputData; + HRESULT ddRVal; +} DD_BEGINMOCOMPFRAMEDATA, *PDD_BEGINMOCOMPFRAMEDATA; +typedef DWORD (WINAPI *PDD_MOCOMPCB_BEGINFRAME)(PDD_BEGINMOCOMPFRAMEDATA); + +typedef struct _DD_ENDMOCOMPFRAMEDATA { + PDD_DIRECTDRAW_LOCAL lpDD; + PDD_MOTIONCOMP_LOCAL lpMoComp; + LPVOID lpInputData; + DWORD dwInputDataSize; + HRESULT ddRVal; +} DD_ENDMOCOMPFRAMEDATA, *PDD_ENDMOCOMPFRAMEDATA; +typedef DWORD (WINAPI *PDD_MOCOMPCB_ENDFRAME)(PDD_ENDMOCOMPFRAMEDATA); + +typedef struct _DDMOCOMPBUFFERINFO { + DWORD dwSize; + PDD_SURFACE_LOCAL lpCompSurface; + DWORD dwDataOffset; + DWORD dwDataSize; + LPVOID lpPrivate; +} DDMOCOMPBUFFERINFO, *LPDDMOCOMPBUFFERINFO; + +typedef struct _DD_RENDERMOCOMPDATA { + PDD_DIRECTDRAW_LOCAL lpDD; + PDD_MOTIONCOMP_LOCAL lpMoComp; + DWORD dwNumBuffers; + LPDDMOCOMPBUFFERINFO lpBufferInfo; + DWORD dwFunction; + LPVOID lpInputData; + DWORD dwInputDataSize; + LPVOID lpOutputData; + DWORD dwOutputDataSize; + HRESULT ddRVal; +} DD_RENDERMOCOMPDATA, *PDD_RENDERMOCOMPDATA; +typedef DWORD (WINAPI *PDD_MOCOMPCB_RENDER)(PDD_RENDERMOCOMPDATA); + +#define DDMCQUERY_READ 0x00000001 + +typedef struct _DD_QUERYMOCOMPSTATUSDATA { + PDD_DIRECTDRAW_LOCAL lpDD; + PDD_MOTIONCOMP_LOCAL lpMoComp; + PDD_SURFACE_LOCAL lpSurface; + DWORD dwFlags; + HRESULT ddRVal; +} DD_QUERYMOCOMPSTATUSDATA, *PDD_QUERYMOCOMPSTATUSDATA; +typedef DWORD (WINAPI *PDD_MOCOMPCB_QUERYSTATUS)(PDD_QUERYMOCOMPSTATUSDATA); + +typedef struct _DD_DESTROYMOCOMPDATA { + PDD_DIRECTDRAW_LOCAL lpDD; + PDD_MOTIONCOMP_LOCAL lpMoComp; + HRESULT ddRVal; +} DD_DESTROYMOCOMPDATA, *PDD_DESTROYMOCOMPDATA; +typedef DWORD (WINAPI *PDD_MOCOMPCB_DESTROY)(PDD_DESTROYMOCOMPDATA); + +typedef struct DD_MOTIONCOMPCALLBACKS { + DWORD dwSize; + DWORD dwFlags; + PDD_MOCOMPCB_GETGUIDS GetMoCompGuids; + PDD_MOCOMPCB_GETFORMATS GetMoCompFormats; + PDD_MOCOMPCB_CREATE CreateMoComp; + PDD_MOCOMPCB_GETCOMPBUFFINFO GetMoCompBuffInfo; + PDD_MOCOMPCB_GETINTERNALINFO GetInternalMoCompInfo; + PDD_MOCOMPCB_BEGINFRAME BeginMoCompFrame; + PDD_MOCOMPCB_ENDFRAME EndMoCompFrame; + PDD_MOCOMPCB_RENDER RenderMoComp; + PDD_MOCOMPCB_QUERYSTATUS QueryMoCompStatus; + PDD_MOCOMPCB_DESTROY DestroyMoComp; +} DD_MOTIONCOMPCALLBACKS, *PDD_MOTIONCOMPCALLBACKS; + +#define DDHAL_MOCOMP32_GETGUIDS 0x00000001 +#define DDHAL_MOCOMP32_GETFORMATS 0x00000002 +#define DDHAL_MOCOMP32_CREATE 0x00000004 +#define DDHAL_MOCOMP32_GETCOMPBUFFINFO 0x00000008 +#define DDHAL_MOCOMP32_GETINTERNALINFO 0x00000010 +#define DDHAL_MOCOMP32_BEGINFRAME 0x00000020 +#define DDHAL_MOCOMP32_ENDFRAME 0x00000040 +#define DDHAL_MOCOMP32_RENDER 0x00000080 +#define DDHAL_MOCOMP32_QUERYSTATUS 0x00000100 +#define DDHAL_MOCOMP32_DESTROY 0x00000200 + +/************************************************************************/ +/* D3D buffer callbacks */ +/************************************************************************/ + +typedef struct _DD_D3DBUFCALLBACKS { + DWORD dwSize; + DWORD dwFlags; + PDD_CANCREATESURFACE CanCreateD3DBuffer; + PDD_CREATESURFACE CreateD3DBuffer; + PDD_SURFCB_DESTROYSURFACE DestroyD3DBuffer; + PDD_SURFCB_LOCK LockD3DBuffer; + PDD_SURFCB_UNLOCK UnlockD3DBuffer; +} DD_D3DBUFCALLBACKS, *PDD_D3DBUFCALLBACKS; + +/************************************************************************/ +/* DdGetDriverInfo callback */ +/************************************************************************/ + +typedef struct _DD_GETDRIVERINFODATA { +// Input: + PVOID dhpdev; + DWORD dwSize; + DWORD dwFlags; + GUID guidInfo; + DWORD dwExpectedSize; + PVOID lpvData; +// Output: + DWORD dwActualSize; + HRESULT ddRVal; +} DD_GETDRIVERINFODATA, *PDD_GETDRIVERINFODATA; +typedef DWORD (WINAPI *PDD_GETDRIVERINFO)(PDD_GETDRIVERINFODATA); + +/************************************************************************/ +/* Driver info structures */ +/************************************************************************/ + +typedef struct _DDNTCORECAPS { + DWORD dwSize; + DWORD dwCaps; + DWORD dwCaps2; + DWORD dwCKeyCaps; + DWORD dwFXCaps; + DWORD dwFXAlphaCaps; + DWORD dwPalCaps; + DWORD dwSVCaps; + DWORD dwAlphaBltConstBitDepths; + DWORD dwAlphaBltPixelBitDepths; + DWORD dwAlphaBltSurfaceBitDepths; + DWORD dwAlphaOverlayConstBitDepths; + DWORD dwAlphaOverlayPixelBitDepths; + DWORD dwAlphaOverlaySurfaceBitDepths; + DWORD dwZBufferBitDepths; + DWORD dwVidMemTotal; + DWORD dwVidMemFree; + DWORD dwMaxVisibleOverlays; + DWORD dwCurrVisibleOverlays; + DWORD dwNumFourCCCodes; + DWORD dwAlignBoundarySrc; + DWORD dwAlignSizeSrc; + DWORD dwAlignBoundaryDest; + DWORD dwAlignSizeDest; + DWORD dwAlignStrideAlign; + DWORD dwRops[DD_ROP_SPACE]; + DDSCAPS ddsCaps; + DWORD dwMinOverlayStretch; + DWORD dwMaxOverlayStretch; + DWORD dwMinLiveVideoStretch; + DWORD dwMaxLiveVideoStretch; + DWORD dwMinHwCodecStretch; + DWORD dwMaxHwCodecStretch; + DWORD dwReserved1; + DWORD dwReserved2; + DWORD dwReserved3; + DWORD dwSVBCaps; + DWORD dwSVBCKeyCaps; + DWORD dwSVBFXCaps; + DWORD dwSVBRops[DD_ROP_SPACE]; + DWORD dwVSBCaps; + DWORD dwVSBCKeyCaps; + DWORD dwVSBFXCaps; + DWORD dwVSBRops[DD_ROP_SPACE]; + DWORD dwSSBCaps; + DWORD dwSSBCKeyCaps; + DWORD dwSSBFXCaps; + DWORD dwSSBRops[DD_ROP_SPACE]; + DWORD dwMaxVideoPorts; + DWORD dwCurrVideoPorts; + DWORD dwSVBCaps2; +} DDNTCORECAPS, *PDDNTCORECAPS; + +typedef struct _DD_HALINFO_V4 { + DWORD dwSize; + VIDEOMEMORYINFO vmiData; + DDNTCORECAPS ddCaps; + PDD_GETDRIVERINFO GetDriverInfo; + DWORD dwFlags; +} DD_HALINFO_V4, *PDD_HALINFO_V4; + +typedef struct _DD_HALINFO { + DWORD dwSize; + VIDEOMEMORYINFO vmiData; + DDNTCORECAPS ddCaps; + PDD_GETDRIVERINFO GetDriverInfo; + DWORD dwFlags; + PVOID lpD3DGlobalDriverData; + PVOID lpD3DHALCallbacks; + PDD_D3DBUFCALLBACKS lpD3DBufCallbacks; +} DD_HALINFO, *PDD_HALINFO; + +typedef struct _DD_NONLOCALVIDMEMCAPS { + DWORD dwSize; + DWORD dwNLVBCaps; + DWORD dwNLVBCaps2; + DWORD dwNLVBCKeyCaps; + DWORD dwNLVBFXCaps; + DWORD dwNLVBRops[DD_ROP_SPACE]; +} DD_NONLOCALVIDMEMCAPS, *PDD_NONLOCALVIDMEMCAPS; + +typedef struct _DD_MORESURFACECAPS { + DWORD dwSize; + DDSCAPSEX ddsCapsMore; + struct tagNTExtendedHeapRestrictions { + DDSCAPSEX ddsCapsEx; + DDSCAPSEX ddsCapsExAlt; + } ddsExtendedHeapRestrictions[1]; +} DD_MORESURFACECAPS, *PDD_MORESURFACECAPS; + + +/*********************************************************/ +/* Kernel Callbacks */ +/*********************************************************/ +typedef struct _DD_SYNCSURFACEDATA { + PDD_DIRECTDRAW_LOCAL lpDD; + PDD_SURFACE_LOCAL lpDDSurface; + DWORD dwSurfaceOffset; + ULONG_PTR fpLockPtr; + LONG lPitch; + DWORD dwOverlayOffset; + ULONG dwDriverReserved1; + ULONG dwDriverReserved2; + ULONG dwDriverReserved3; + ULONG dwDriverReserved4; + HRESULT ddRVal; +} DD_SYNCSURFACEDATA, *PDD_SYNCSURFACEDATA; +typedef DWORD (WINAPI *PDD_KERNELCB_SYNCSURFACE)(PDD_SYNCSURFACEDATA); + +typedef struct _DD_SYNCVIDEOPORTDATA { + PDD_DIRECTDRAW_LOCAL lpDD; + PDD_VIDEOPORT_LOCAL lpVideoPort; + DWORD dwOriginOffset; + DWORD dwHeight; + DWORD dwVBIHeight; + ULONG dwDriverReserved1; + ULONG dwDriverReserved2; + ULONG dwDriverReserved3; + HRESULT ddRVal; +} DD_SYNCVIDEOPORTDATA, *PDD_SYNCVIDEOPORTDATA; +typedef DWORD (WINAPI *PDD_KERNELCB_SYNCVIDEOPORT)(PDD_SYNCVIDEOPORTDATA); + +typedef struct DD_NTPRIVATEDRIVERCAPS { + DWORD dwSize; + DWORD dwPrivateCaps; +} DD_NTPRIVATEDRIVERCAPS; + +typedef struct _DD_UPDATENONLOCALHEAPDATA { + PDD_DIRECTDRAW_GLOBAL lpDD; + DWORD dwHeap; + FLATPTR fpGARTLin; + FLATPTR fpGARTDev; + ULONG_PTR ulPolicyMaxBytes; + HRESULT ddRVal; + VOID* UpdateNonLocalHeap; +} DD_UPDATENONLOCALHEAPDATA, *PDD_UPDATENONLOCALHEAPDATA; + +typedef struct _DD_STEREOMODE { + DWORD dwSize; + DWORD dwHeight; + DWORD dwWidth; + DWORD dwBpp; + DWORD dwRefreshRate; + BOOL bSupported; +} DD_STEREOMODE, *PDD_STEREOMODE; + +typedef struct _DD_MORECAPS { + DWORD dwSize; + DWORD dwAlphaCaps; + DWORD dwSVBAlphaCaps; + DWORD dwVSBAlphaCaps; + DWORD dwSSBAlphaCaps; + DWORD dwFilterCaps; + DWORD dwSVBFilterCaps; + DWORD dwVSBFilterCaps; + DWORD dwSSBFilterCaps; +} DD_MORECAPS, *PDD_MORECAPS; + +typedef struct _DD_CLIPPER_GLOBAL { + ULONG_PTR dwReserved1; +} DD_CLIPPER_GLOBAL; + +typedef struct _DD_CLIPPER_LOCAL { + ULONG_PTR dwReserved1; +} DD_CLIPPER_LOCAL; + +typedef struct _DD_PALETTE_LOCAL { + ULONG dwReserved0; + ULONG_PTR dwReserved1; +} DD_PALETTE_LOCAL; + +typedef struct DD_KERNELCALLBACKS { + DWORD dwSize; + DWORD dwFlags; + PDD_KERNELCB_SYNCSURFACE SyncSurfaceData; + PDD_KERNELCB_SYNCVIDEOPORT SyncVideoPortData; +} DD_KERNELCALLBACKS, *PDD_KERNELCALLBACKS; + +#define MAX_AUTOFLIP_BUFFERS 10 +#define DDSCAPS_EXECUTEBUFFER DDSCAPS_RESERVED2 +#define DDSCAPS_COMMANDBUFFER DDSCAPS_RESERVED3 +#define DDSCAPS_VERTEXBUFFER DDSCAPS_RESERVED4 +#define DDPF_D3DFORMAT 0x00200000l +#define D3DFORMAT_OP_TEXTURE 0x00000001L +#define D3DFORMAT_OP_VOLUMETEXTURE 0x00000002L +#define D3DFORMAT_OP_CUBETEXTURE 0x00000004L +#define D3DFORMAT_OP_OFFSCREEN_RENDERTARGET 0x00000008L +#define D3DFORMAT_OP_SAME_FORMAT_RENDERTARGET 0x00000010L +#define D3DFORMAT_OP_ZSTENCIL 0x00000040L +#define D3DFORMAT_OP_ZSTENCIL_WITH_ARBITRARY_COLOR_DEPTH 0x00000080L +#define D3DFORMAT_OP_SAME_FORMAT_UP_TO_ALPHA_RENDERTARGET 0x00000100L +#define D3DFORMAT_OP_DISPLAYMODE 0x00000400L +#define D3DFORMAT_OP_3DACCELERATION 0x00000800L +#define D3DFORMAT_OP_PIXELSIZE 0x00001000L +#define D3DFORMAT_OP_CONVERT_TO_ARGB 0x00002000L +#define D3DFORMAT_OP_OFFSCREENPLAIN 0x00004000L +#define D3DFORMAT_OP_SRGBREAD 0x00008000L +#define D3DFORMAT_OP_BUMPMAP 0x00010000L +#define D3DFORMAT_OP_DMAP 0x00020000L +#define D3DFORMAT_OP_NOFILTER 0x00040000L +#define D3DFORMAT_MEMBEROFGROUP_ARGB 0x00080000L +#define D3DFORMAT_OP_SRGBWRITE 0x00100000L +#define D3DFORMAT_OP_NOALPHABLEND 0x00200000L +#define D3DFORMAT_OP_AUTOGENMIPMAP 0x00400000L +#define D3DFORMAT_OP_VERTEXTEXTURE 0x00800000L +#define D3DFORMAT_OP_NOTEXCOORDWRAPNORMIP 0x01000000L +#define DDHAL_PLEASEALLOC_BLOCKSIZE 0x00000002l +#define DDHAL_PLEASEALLOC_USERMEM 0x00000004l + +#define VIDMEM_ISLINEAR 0x00000001l +#define VIDMEM_ISRECTANGULAR 0x00000002l +#define VIDMEM_ISHEAP 0x00000004l +#define VIDMEM_ISNONLOCAL 0x00000008l +#define VIDMEM_ISWC 0x00000010l +#define VIDMEM_HEAPDISABLED 0x00000020l + +#define DDHAL_CREATESURFACEEX_SWAPHANDLES 0x00000001l + +#define DDHAL_KERNEL_SYNCSURFACEDATA 0x00000001l +#define DDHAL_KERNEL_SYNCVIDEOPORTDATA 0x00000002l + +#define DDHAL_DRIVER_NOTHANDLED 0x00000000l +#define DDHAL_DRIVER_HANDLED 0x00000001l +#define DDHAL_DRIVER_NOCKEYHW 0x00000002l + +#define DDRAWISURF_HASCKEYSRCBLT 0x00000800L +#define DDRAWISURF_HASPIXELFORMAT 0x00002000L +#define DDRAWISURF_HASOVERLAYDATA 0x00004000L +#define DDRAWISURF_FRONTBUFFER 0x04000000L +#define DDRAWISURF_BACKBUFFER 0x08000000L +#define DDRAWISURF_INVALID 0x10000000L +#define DDRAWISURF_DRIVERMANAGED 0x40000000L + +#define ROP_HAS_SOURCE 0x00000001l +#define ROP_HAS_PATTERN 0x00000002l +#define ROP_HAS_SOURCEPATTERN ROP_HAS_SOURCE | ROP_HAS_PATTERN + +#define DDHAL_EXEBUFCB32_CANCREATEEXEBUF 0x00000001l +#define DDHAL_EXEBUFCB32_CREATEEXEBUF 0x00000002l +#define DDHAL_EXEBUFCB32_DESTROYEXEBUF 0x00000004l +#define DDHAL_EXEBUFCB32_LOCKEXEBUF 0x00000008l +#define DDHAL_EXEBUFCB32_UNLOCKEXEBUF 0x00000010l + +#define DDHAL_D3DBUFCB32_CANCREATED3DBUF DDHAL_EXEBUFCB32_CANCREATEEXEBUF +#define DDHAL_D3DBUFCB32_CREATED3DBUF DDHAL_EXEBUFCB32_CREATEEXEBUF +#define DDHAL_D3DBUFCB32_DESTROYD3DBUF DDHAL_EXEBUFCB32_DESTROYEXEBUF +#define DDHAL_D3DBUFCB32_LOCKD3DBUF DDHAL_EXEBUFCB32_LOCKEXEBUF +#define DDHAL_D3DBUFCB32_UNLOCKD3DBUF DDHAL_EXEBUFCB32_UNLOCKEXEBUF + +#define DDHALINFO_ISPRIMARYDISPLAY 0x00000001 +#define DDHALINFO_MODEXILLEGAL 0x00000002 +#define DDHALINFO_GETDRIVERINFOSET 0x00000004 +#define DDHALINFO_GETDRIVERINFO2 0x00000008 + +#define DDRAWIVPORT_ON 0x00000001 +#define DDRAWIVPORT_SOFTWARE_AUTOFLIP 0x00000002 +#define DDRAWIVPORT_COLORKEYANDINTERP 0x00000004 + +#define DDHAL_PRIVATECAP_ATOMICSURFACECREATION 0x00000001l +#define DDHAL_PRIVATECAP_NOTIFYPRIMARYCREATION 0x00000002l +#define DDHAL_PRIVATECAP_RESERVED1 0x00000004l + +#define DDRAWI_VPORTSTART 0x0001 +#define DDRAWI_VPORTSTOP 0x0002 +#define DDRAWI_VPORTUPDATE 0x0003 +#define DDRAWI_VPORTGETCOLOR 0x0001 +#define DDRAWI_VPORTSETCOLOR 0x0002 + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* GUID_DEFS_ONLY */ + +#endif /* __DD_INCLUDED__ */ diff --git a/include/psdk/dinput.h b/include/psdk/dinput.h index ec4e6ec37f1..6c1a08d844d 100644 --- a/include/psdk/dinput.h +++ b/include/psdk/dinput.h @@ -1975,7 +1975,7 @@ extern const DIDATAFORMAT c_dfDIKeyboard; extern const DIDATAFORMAT c_dfDIJoystick; extern const DIDATAFORMAT c_dfDIJoystick2; #ifdef __cplusplus -}; +} #endif /***************************************************************************** @@ -2285,7 +2285,7 @@ HRESULT WINAPI DirectInputCreateW(HINSTANCE,DWORD,LPDIRECTINPUTW *,LPUNKNOWN); HRESULT WINAPI DirectInputCreateEx(HINSTANCE,DWORD,REFIID,LPVOID *,LPUNKNOWN); #ifdef __cplusplus -}; +} #endif #endif /* __WINE_DINPUT_H */ diff --git a/include/ddk/diskguid.h b/include/psdk/diskguid.h similarity index 100% rename from include/ddk/diskguid.h rename to include/psdk/diskguid.h diff --git a/include/ddk/dmemmgr.h b/include/psdk/dmemmgr.h similarity index 99% rename from include/ddk/dmemmgr.h rename to include/psdk/dmemmgr.h index 3d11f0b559c..5a637f73de7 100644 --- a/include/ddk/dmemmgr.h +++ b/include/psdk/dmemmgr.h @@ -166,7 +166,7 @@ extern FLATPTR WINAPI #ifdef __cplusplus -}; +} #endif #endif diff --git a/include/ddk/dmksctrl.h b/include/psdk/dmksctrl.h similarity index 66% rename from include/ddk/dmksctrl.h rename to include/psdk/dmksctrl.h index 185ed0ee6fc..0420d1baa45 100644 --- a/include/ddk/dmksctrl.h +++ b/include/psdk/dmksctrl.h @@ -1,3 +1,21 @@ +/* + * dmksctrl.h + * + * Contributors: + * Created by Johannes Anderwald + * + * THIS SOFTWARE IS NOT COPYRIGHTED + * + * This source code is offered for use in the public domain. You may + * use, modify or distribute it freely. + * + * This code is distributed in the hope that it will be useful but + * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY + * DISCLAIMED. This includes but is not limited to warranties of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + */ + #ifndef _IKsControl_ #define _IKsControl_ @@ -38,6 +56,3 @@ DECLARE_INTERFACE_(IKsControl, IUnknown) }; #endif - - - diff --git a/include/ddk/driverspecs.h b/include/psdk/driverspecs.h similarity index 95% rename from include/ddk/driverspecs.h rename to include/psdk/driverspecs.h index abbf042ac41..c2b0b5abf6c 100644 --- a/include/ddk/driverspecs.h +++ b/include/psdk/driverspecs.h @@ -26,4 +26,4 @@ #define __inout -#define __deref_out_ecount(Size) \ No newline at end of file +#define __deref_out_ecount(Size) diff --git a/include/ddk/dvp.h b/include/psdk/dvp.h similarity index 99% rename from include/ddk/dvp.h rename to include/psdk/dvp.h index 1a0826f76c5..0e79d3ea62a 100644 --- a/include/ddk/dvp.h +++ b/include/psdk/dvp.h @@ -367,7 +367,7 @@ typedef HRESULT (*LPDDENUMVIDEOCALLBACK)(LPDDVIDEOPORTCAPS, LPVOID); #endif #ifdef __cplusplus -}; +} #endif #endif #endif diff --git a/include/psdk/dwmapi.h b/include/psdk/dwmapi.h index 4fe51bcdbe3..2cf5d6df8f8 100644 --- a/include/psdk/dwmapi.h +++ b/include/psdk/dwmapi.h @@ -41,6 +41,19 @@ typedef struct _MilMatrix3x2D DOUBLE DY; } MilMatrix3x2D; +#define DWM_BB_ENABLE 0x00000001 +#define DWM_BB_BLURREGION 0x00000002 +#define DWM_BB_TRANSITIONONMAXIMIZED 0x00000004 + +typedef struct _DWM_BLURBEHIND +{ + DWORD dwFlags; + BOOL fEnable; + HRGN hRgnBlur; + BOOL fTransitionOnMaximized; +} DWM_BLURBEHIND, *PDWM_BLURBEHIND; + +DWMAPI DwmEnableBlurBehindWindow(HWND, const DWM_BLURBEHIND *); DWMAPI DwmEnableComposition(UINT); DWMAPI DwmEnableMMCSS(BOOL); DWMAPI DwmExtendFrameIntoClientArea(HWND,const MARGINS*); diff --git a/include/psdk/evntrace.h b/include/psdk/evntrace.h index 1940baeef03..dbbc6609635 100644 --- a/include/psdk/evntrace.h +++ b/include/psdk/evntrace.h @@ -1002,6 +1002,7 @@ TraceMessage( EXTERN_C ULONG +WMIAPI TraceMessageVa( IN TRACEHANDLE LoggerHandle, IN ULONG MessageFlags, diff --git a/include/ddk/hidpi.h b/include/psdk/hidpi.h similarity index 100% rename from include/ddk/hidpi.h rename to include/psdk/hidpi.h diff --git a/include/ddk/hidusage.h b/include/psdk/hidusage.h similarity index 100% rename from include/ddk/hidusage.h rename to include/psdk/hidusage.h diff --git a/include/ddk/ieverp.h b/include/psdk/ieverp.h similarity index 100% rename from include/ddk/ieverp.h rename to include/psdk/ieverp.h diff --git a/include/psdk/imagehlp.h b/include/psdk/imagehlp.h index 8d46bae669e..a138cadda08 100644 --- a/include/psdk/imagehlp.h +++ b/include/psdk/imagehlp.h @@ -108,16 +108,22 @@ typedef enum _IMAGEHLP_STATUS_REASON { } IMAGEHLP_STATUS_REASON; typedef BOOL(WINAPI*PIMAGEHLP_STATUS_ROUTINE)(IMAGEHLP_STATUS_REASON,LPSTR,LPSTR,ULONG,ULONG); typedef struct _LOADED_IMAGE { - LPSTR ModuleName; + PSTR ModuleName; HANDLE hFile; PUCHAR MappedAddress; - PIMAGE_NT_HEADERS FileHeader; +#ifdef _IMAGEHLP64 + PIMAGE_NT_HEADERS64 FileHeader; +#else + PIMAGE_NT_HEADERS32 FileHeader; +#endif PIMAGE_SECTION_HEADER LastRvaSection; ULONG NumberOfSections; PIMAGE_SECTION_HEADER Sections; ULONG Characteristics; BOOLEAN fSystemImage; BOOLEAN fDOSImage; + BOOLEAN fReadOnly; + UCHAR Version; LIST_ENTRY Links; ULONG SizeOfImage; } LOADED_IMAGE,*PLOADED_IMAGE; @@ -259,11 +265,11 @@ BOOL IMAGEAPI TouchFileTimes(HANDLE,LPSYSTEMTIME); BOOL IMAGEAPI SplitSymbols(LPSTR,LPSTR,LPSTR,DWORD); HANDLE IMAGEAPI FindDebugInfoFile(LPSTR,LPSTR,LPSTR); HANDLE IMAGEAPI FindExecutableImage(LPSTR,LPSTR,LPSTR); -BOOL IMAGEAPI UpdateDebugInfoFile(LPSTR,LPSTR,LPSTR,PIMAGE_NT_HEADERS); -BOOL IMAGEAPI UpdateDebugInfoFileEx(LPSTR,LPSTR,LPSTR,PIMAGE_NT_HEADERS,DWORD); +BOOL IMAGEAPI UpdateDebugInfoFile(LPSTR,LPSTR,LPSTR,PIMAGE_NT_HEADERS32); +BOOL IMAGEAPI UpdateDebugInfoFileEx(LPSTR,LPSTR,LPSTR,PIMAGE_NT_HEADERS32,DWORD); BOOL IMAGEAPI BindImage(IN LPSTR,IN LPSTR,IN LPSTR); BOOL IMAGEAPI BindImageEx(IN DWORD,IN LPSTR,IN LPSTR,IN LPSTR,IN PIMAGEHLP_STATUS_ROUTINE); -BOOL IMAGEAPI ReBaseImage(IN LPSTR,IN LPSTR,IN BOOL, IN BOOL,IN BOOL, IN ULONG, OUT ULONG*, OUT ULONG*, OUT ULONG*, IN OUT ULONG*, IN ULONG); +BOOL IMAGEAPI ReBaseImage(IN LPSTR,IN LPSTR,IN BOOL, IN BOOL,IN BOOL, IN ULONG, OUT ULONG*, OUT ULONG_PTR*, OUT ULONG*, IN OUT ULONG_PTR*, IN ULONG); PLOADED_IMAGE IMAGEAPI ImageLoad(LPSTR,LPSTR); BOOL IMAGEAPI ImageUnload(PLOADED_IMAGE); diff --git a/include/psdk/imm.h b/include/psdk/imm.h index 57658def7d9..07c2cc38a38 100644 --- a/include/psdk/imm.h +++ b/include/psdk/imm.h @@ -119,7 +119,6 @@ typedef struct tagIMEMENUITEMINFOW DECL_WINELIB_TYPE_AW(IMEMENUITEMINFO) DECL_WINELIB_TYPE_AW(LPIMEMENUITEMINFO) - typedef struct _tagCOMPOSITIONFORM { DWORD dwStyle; @@ -127,6 +126,125 @@ typedef struct _tagCOMPOSITIONFORM RECT rcArea; } COMPOSITIONFORM, *LPCOMPOSITIONFORM; +typedef struct _tagIMEINFO { + DWORD dwPrivateDataSize; + DWORD fdwProperty; + DWORD fdwConversionCaps; + DWORD fdwSentenceCaps; + DWORD fdwUICaps; + DWORD fdwSCSCaps; + DWORD fdwSelectCaps; +} IMEINFO, *LPIMEINFO; + +typedef struct tagCOMPOSITIONSTRING { + DWORD dwSize; + DWORD dwCompReadAttrLen; + DWORD dwCompReadAttrOffset; + DWORD dwCompReadClauseLen; + DWORD dwCompReadClauseOffset; + DWORD dwCompReadStrLen; + DWORD dwCompReadStrOffset; + DWORD dwCompAttrLen; + DWORD dwCompAttrOffset; + DWORD dwCompClauseLen; + DWORD dwCompClauseOffset; + DWORD dwCompStrLen; + DWORD dwCompStrOffset; + DWORD dwCursorPos; + DWORD dwDeltaStart; + DWORD dwResultReadClauseLen; + DWORD dwResultReadClauseOffset; + DWORD dwResultReadStrLen; + DWORD dwResultReadStrOffset; + DWORD dwResultClauseLen; + DWORD dwResultClauseOffset; + DWORD dwResultStrLen; + DWORD dwResultStrOffset; + DWORD dwPrivateSize; + DWORD dwPrivateOffset; +} COMPOSITIONSTRING, *LPCOMPOSITIONSTRING; + +typedef struct tagGUIDELINE { + DWORD dwSize; + DWORD dwLevel; + DWORD dwIndex; + DWORD dwStrLen; + DWORD dwStrOffset; + DWORD dwPrivateSize; + DWORD dwPrivateOffset; +} GUIDELINE, *LPGUIDELINE; + +typedef struct tagCANDIDATEINFO { + DWORD dwSize; + DWORD dwCount; + DWORD dwOffset[32]; + DWORD dwPrivateSize; + DWORD dwPrivateOffset; +} CANDIDATEINFO, *LPCANDIDATEINFO; + +#define IMMGWL_IMC 0 +#define IMMGWL_PRIVATE (sizeof(LONG)) + +/* IME Property bits */ +#define IME_PROP_END_UNLOAD 0x0001 +#define IME_PROP_KBD_CHAR_FIRST 0x0002 +#define IME_PROP_IGNORE_UPKEYS 0x0004 +#define IME_PROP_NEED_ALTKEY 0x0008 +#define IME_PROP_NO_KEYS_ON_CLOSE 0x0010 + +/* for NI_CONTEXTUPDATED */ +#define IMC_SETCONVERSIONMODE 0x0002 +#define IMC_SETSENTENCEMODE 0x0004 +#define IMC_SETOPENSTATUS 0x0006 + +/* dwAction for ImmNotifyIME */ +#define NI_CONTEXTUPDATED 0x0003 +#define NI_OPENCANDIDATE 0x0010 +#define NI_CLOSECANDIDATE 0x0011 +#define NI_SELECTCANDIDATESTR 0x0012 +#define NI_CHANGECANDIDATELIST 0x0013 +#define NI_FINALIZECONVERSIONRESULT 0x0014 +#define NI_COMPOSITIONSTR 0x0015 +#define NI_SETCANDIDATE_PAGESTART 0x0016 +#define NI_SETCANDIDATE_PAGESIZE 0x0017 +#define NI_IMEMENUSELECTED 0x0018 + +BOOL WINAPI ImmUnlockIMC(HIMC); +DWORD WINAPI ImmGetIMCLockCount(HIMC); +HIMCC WINAPI ImmCreateIMCC(DWORD); +HIMCC WINAPI ImmDestroyIMCC(HIMCC); +LPVOID WINAPI ImmLockIMCC(HIMCC); +BOOL WINAPI ImmUnlockIMCC(HIMCC); +DWORD WINAPI ImmGetIMCCLockCount(HIMCC); +HIMCC WINAPI ImmReSizeIMCC(HIMCC, DWORD); +DWORD WINAPI ImmGetIMCCSize(HIMCC); + +BOOL WINAPI ImmGenerateMessage(HIMC); +LRESULT WINAPI ImmRequestMessageA(HIMC, WPARAM, LPARAM); +LRESULT WINAPI ImmRequestMessageW(HIMC, WPARAM, LPARAM); +#define ImmRequestMessage WINELIB_NAME_AW(ImmRequestMessage); +BOOL WINAPI ImmTranslateMessage(HWND, UINT, WPARAM, LPARAM); +HWND WINAPI ImmCreateSoftKeyboard(UINT, UINT, int, int); +BOOL WINAPI ImmDestroySoftKeyboard(HWND); +BOOL WINAPI ImmShowSoftKeyboard(HWND, int); + +BOOL WINAPI ImeInquire(LPIMEINFO, LPWSTR, LPCWSTR lpszOptions); +BOOL WINAPI ImeConfigure (HKL, HWND, DWORD, LPVOID); +DWORD WINAPI ImeConversionList(HIMC, LPCWSTR, LPCANDIDATELIST,DWORD,UINT); +BOOL WINAPI ImeDestroy(UINT); +LRESULT WINAPI ImeEscape(HIMC, UINT, LPVOID); +BOOL WINAPI ImeProcessKey(HIMC, UINT, LPARAM, CONST LPBYTE); +BOOL WINAPI ImeSelect(HIMC, BOOL); +BOOL WINAPI ImeSetActiveContext(HIMC, BOOL); +UINT WINAPI ImeToAsciiEx(UINT, UINT, CONST LPBYTE, LPDWORD, UINT, HIMC); +BOOL WINAPI NotifyIME(HIMC, DWORD, DWORD, DWORD); +BOOL WINAPI ImeRegisterWord(LPCWSTR, DWORD, LPCWSTR); +BOOL WINAPI ImeUnregisterWord(LPCWSTR, DWORD, LPCWSTR); +UINT WINAPI ImeGetRegisterWordStyle(UINT, LPSTYLEBUFW); +UINT WINAPI ImeEnumRegisterWord(REGISTERWORDENUMPROCW, LPCWSTR, DWORD, LPCWSTR, LPVOID); +BOOL WINAPI ImeSetCompositionString(HIMC, DWORD, LPCVOID, DWORD, LPCVOID, DWORD); +DWORD WINAPI ImeGetImeMenuItems(HIMC, DWORD, DWORD, LPIMEMENUITEMINFOW, LPIMEMENUITEMINFOW, DWORD); + /* wParam for WM_IME_CONTROL */ #define IMC_GETCANDIDATEPOS 0x0007 #define IMC_SETCANDIDATEPOS 0x0008 diff --git a/include/ddk/ntdd1394.h b/include/psdk/ntdd1394.h similarity index 70% rename from include/ddk/ntdd1394.h rename to include/psdk/ntdd1394.h index 151f111329d..fa3419418e0 100644 --- a/include/ddk/ntdd1394.h +++ b/include/psdk/ntdd1394.h @@ -1,3 +1,20 @@ +/* + * ntdd1394.h + * + * Contributors: + * Created by Magnus Olsen + * + * THIS SOFTWARE IS NOT COPYRIGHTED + * + * This source code is offered for use in the public domain. You may + * use, modify or distribute it freely. + * + * This code is distributed in the hope that it will be useful but + * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY + * DISCLAIMED. This includes but is not limited to warranties of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + */ #ifndef _NTDD1394_H_ #define _NTDD1394_H_ diff --git a/include/ddk/ntdd8042.h b/include/psdk/ntdd8042.h similarity index 98% rename from include/ddk/ntdd8042.h rename to include/psdk/ntdd8042.h index 4bb32529292..fb82fdec4aa 100644 --- a/include/ddk/ntdd8042.h +++ b/include/psdk/ntdd8042.h @@ -20,8 +20,8 @@ * */ -#ifndef __NTDD8042_H -#define __NTDD8042_H +#ifndef _NTDD8042_ +#define _NTDD8042_ #include "ntddkbd.h" #include "ntddmou.h" @@ -205,4 +205,4 @@ typedef struct _INTERNAL_I8042_HOOK_MOUSE { } #endif -#endif /* __NTDD8042_H */ +#endif /* _NTDD8042_ */ diff --git a/include/psdk/ntddbeep.h b/include/psdk/ntddbeep.h new file mode 100644 index 00000000000..ab3b41e267c --- /dev/null +++ b/include/psdk/ntddbeep.h @@ -0,0 +1,43 @@ +/* + * ntddbeep.h + * + * Contributors: + * Created by Casper S. Hornstrup + * + * THIS SOFTWARE IS NOT COPYRIGHTED + * + * This source code is offered for use in the public domain. You may + * use, modify or distribute it freely. + * + * This code is distributed in the hope that it will be useful but + * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY + * DISCLAIMED. This includes but is not limited to warranties of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + */ + +#ifndef _NTDDBEEP_ +#define _NTDDBEEP_ + + +#ifdef __cplusplus +extern "C" { +#endif + +#define DD_BEEP_DEVICE_NAME "\\Device\\Beep" +#define DD_BEEP_DEVICE_NAME_U L"\\Device\\Beep" +#define BEEP_FREQUENCY_MINIMUM 0x25 +#define BEEP_FREQUENCY_MAXIMUM 0x7FFF +#define IOCTL_BEEP_SET CTL_CODE(FILE_DEVICE_BEEP, 0, METHOD_BUFFERED, FILE_ANY_ACCESS) + +typedef struct _BEEP_SET_PARAMETERS +{ + ULONG Frequency; + ULONG Duration; +} BEEP_SET_PARAMETERS, *PBEEP_SET_PARAMETERS; + +#ifdef __cplusplus +} +#endif +#endif + diff --git a/include/ddk/ntddcdrm.h b/include/psdk/ntddcdrm.h similarity index 99% rename from include/ddk/ntddcdrm.h rename to include/psdk/ntddcdrm.h index 7fab5c42906..06411661995 100644 --- a/include/ddk/ntddcdrm.h +++ b/include/psdk/ntddcdrm.h @@ -20,8 +20,8 @@ * */ -#ifndef __NTDDCDRM_H -#define __NTDDCDRM_H +#ifndef _NTDDCDRM_ +#define _NTDDCDRM_ #include "ntddstor.h" @@ -342,4 +342,4 @@ typedef struct __RAW_READ_INFO { } #endif -#endif /* __NTDDCDRM_H */ +#endif /* _NTDDCDRM_ */ diff --git a/include/ddk/ntddcdvd.h b/include/psdk/ntddcdvd.h similarity index 98% rename from include/ddk/ntddcdvd.h rename to include/psdk/ntddcdvd.h index 4169358fec9..9bd4b3cdc90 100644 --- a/include/ddk/ntddcdvd.h +++ b/include/psdk/ntddcdvd.h @@ -20,8 +20,8 @@ * */ -#ifndef __NTDDCDVD_H -#define __NTDDCDVD_H +#ifndef _NTDDCDVD_ +#define _NTDDCDVD_ #include "ntddstor.h" @@ -205,4 +205,4 @@ typedef struct _DVD_REGION { } #endif -#endif /* __NTDDCDVD_H */ +#endif /* _NTDDCDVD_ */ diff --git a/include/ddk/ntdddisk.h b/include/psdk/ntdddisk.h similarity index 99% rename from include/ddk/ntdddisk.h rename to include/psdk/ntdddisk.h index c475f2cfff9..c52a72d7192 100644 --- a/include/ddk/ntdddisk.h +++ b/include/psdk/ntdddisk.h @@ -20,8 +20,8 @@ * */ -#ifndef __NTDDDISK_H -#define __NTDDDISK_H +#ifndef _NTDDDISK_H_ +#define _NTDDDISK_H_ /* Helper macro to enable gcc's extension. */ #ifndef __GNU_EXTENSION @@ -606,4 +606,4 @@ typedef struct _MAPPED_ADDRESS { } #endif -#endif /* __NTDDDISK_H */ +#endif /* _NTDDDISK_H_ */ diff --git a/include/ddk/ntddft.h b/include/psdk/ntddft.h similarity index 51% rename from include/ddk/ntddft.h rename to include/psdk/ntddft.h index ae7c953f2eb..dac80e0196f 100644 --- a/include/ddk/ntddft.h +++ b/include/psdk/ntddft.h @@ -1,3 +1,20 @@ +/* + * ntddft.h + * + * Contributors: + * Created by Alex Ionescu + * + * THIS SOFTWARE IS NOT COPYRIGHTED + * + * This source code is offered for use in the public domain. You may + * use, modify or distribute it freely. + * + * This code is distributed in the hope that it will be useful but + * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY + * DISCLAIMED. This includes but is not limited to warranties of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + */ #ifndef _NTDDFT_ #define _NTDDFT_ diff --git a/include/psdk/ntddmou.h b/include/psdk/ntddmou.h index 52285141f85..fff16af392b 100644 --- a/include/psdk/ntddmou.h +++ b/include/psdk/ntddmou.h @@ -76,9 +76,9 @@ DEFINE_GUID(GUID_DEVINTERFACE_MOUSE, \ typedef struct _MOUSE_INPUT_DATA { USHORT UnitId; USHORT Flags; - _ANONYMOUS_UNION union { + __MINGW_EXTENSION union { ULONG Buttons; - _ANONYMOUS_STRUCT struct { + __MINGW_EXTENSION struct { USHORT ButtonFlags; USHORT ButtonData; } DUMMYSTRUCTNAME; diff --git a/include/psdk/ntddndis.h b/include/psdk/ntddndis.h index f4278cc4909..10d62d19d4c 100644 --- a/include/psdk/ntddndis.h +++ b/include/psdk/ntddndis.h @@ -20,8 +20,8 @@ * */ -#ifndef __NTDDNDIS_H -#define __NTDDNDIS_H +#ifndef _NTDDNDIS_ +#define _NTDDNDIS_ #ifdef __cplusplus extern "C" { @@ -326,7 +326,7 @@ typedef enum _NDIS_MEDIA_STATE { NdisMediaStateDisconnected } NDIS_MEDIA_STATE, *PNDIS_MEDIA_STATE; -#ifndef __NDIS_H +#ifndef _NDIS_ typedef int NDIS_STATUS, *PNDIS_STATUS; #endif @@ -379,4 +379,4 @@ typedef struct _NDIS_CO_LINK_SPEED { } #endif -#endif /* __NTDDNDIS_H */ +#endif /* _NTDDNDIS_ */ diff --git a/include/ddk/ntddpar.h b/include/psdk/ntddpar.h similarity index 98% rename from include/ddk/ntddpar.h rename to include/psdk/ntddpar.h index 917c7d82785..6de86f1ba85 100644 --- a/include/ddk/ntddpar.h +++ b/include/psdk/ntddpar.h @@ -20,8 +20,8 @@ * */ -#ifndef __NTDDPAR_H -#define __NTDDPAR_H +#ifndef _NTDDPAR_ +#define _NTDDPAR_ #ifdef __cplusplus extern "C" { @@ -110,4 +110,4 @@ typedef struct _PARCLASS_NEGOTIATION_MASK { } #endif -#endif /* __NTDDPAR_H */ +#endif /* _NTDDPAR_ */ diff --git a/include/ddk/ntddser.h b/include/psdk/ntddser.h similarity index 99% rename from include/ddk/ntddser.h rename to include/psdk/ntddser.h index c83147341f7..881c47da709 100644 --- a/include/ddk/ntddser.h +++ b/include/psdk/ntddser.h @@ -20,8 +20,8 @@ * */ -#ifndef __NTDDSER_H -#define __NTDDSER_H +#ifndef _NTDDSER_ +#define _NTDDSER_ #ifdef __cplusplus extern "C" { @@ -444,4 +444,4 @@ typedef struct _SERIALCONFIG { } #endif -#endif /* __NTDDSER_H */ +#endif /* _NTDDSER_ */ diff --git a/include/psdk/ntddstor.h b/include/psdk/ntddstor.h index 5fb0b3b4666..6b74133e0b2 100644 --- a/include/psdk/ntddstor.h +++ b/include/psdk/ntddstor.h @@ -80,7 +80,7 @@ DEFINE_GUID(GUID_DEVINTERFACE_HIDDEN_VOLUME, #endif /* defined(DEFINE_GUID) */ -#ifndef _WINIOCTL_H +#ifndef _WINIOCTL_ #define IOCTL_STORAGE_BASE FILE_DEVICE_MASS_STORAGE @@ -135,7 +135,7 @@ DEFINE_GUID(GUID_DEVINTERFACE_HIDDEN_VOLUME, #define IOCTL_STORAGE_PREDICT_FAILURE \ CTL_CODE(IOCTL_STORAGE_BASE, 0x0440, METHOD_BUFFERED, FILE_ANY_ACCESS) -#endif /* _WINIOCTL_H */ +#endif /* _WINIOCTL_ */ #define IOCTL_STORAGE_GET_MEDIA_SERIAL_NUMBER \ CTL_CODE(IOCTL_STORAGE_BASE, 0x0304, METHOD_BUFFERED, FILE_ANY_ACCESS) @@ -246,7 +246,7 @@ typedef struct _STORAGE_BREAK_RESERVATION_REQUEST { UCHAR Lun; } STORAGE_BREAK_RESERVATION_REQUEST, *PSTORAGE_BREAK_RESERVATION_REQUEST; -#ifndef _WINIOCTL_H +#ifndef _WINIOCTL_ typedef struct _PREVENT_MEDIA_REMOVAL { BOOLEAN PreventMediaRemoval; } PREVENT_MEDIA_REMOVAL, *PPREVENT_MEDIA_REMOVAL; @@ -628,7 +628,7 @@ typedef struct _STORAGE_MEDIA_SERIAL_NUMBER_DATA { typedef struct _PERSISTENT_RESERVE_COMMAND { ULONG Version; ULONG Size; - _ANONYMOUS_UNION union { + __MINGW_EXTENSION union { struct { UCHAR ServiceAction:5; UCHAR Reserved1:3; diff --git a/include/ddk/ntddtape.h b/include/psdk/ntddtape.h similarity index 97% rename from include/ddk/ntddtape.h rename to include/psdk/ntddtape.h index d0deb5a8461..0b31cc6524c 100644 --- a/include/ddk/ntddtape.h +++ b/include/psdk/ntddtape.h @@ -20,8 +20,8 @@ * */ -#ifndef __NTDDTAPE_H -#define __NTDDTAPE_H +#ifndef _NTDDTAPE_ +#define _NTDDTAPE_ #include "ntddstor.h" @@ -71,4 +71,4 @@ typedef enum _TAPE_DRIVE_PROBLEM_TYPE { } #endif -#endif /* __NTDDTAPE_H */ +#endif /* _NTDDTAPE_ */ diff --git a/include/ddk/ntddtdi.h b/include/psdk/ntddtdi.h similarity index 73% rename from include/ddk/ntddtdi.h rename to include/psdk/ntddtdi.h index 04b725bfb92..4ea7d7711ba 100644 --- a/include/ddk/ntddtdi.h +++ b/include/psdk/ntddtdi.h @@ -1,3 +1,20 @@ +/* + * ntddtdi.h + * + * Contributors: + * Created by Casper S. Hornstrup + * + * THIS SOFTWARE IS NOT COPYRIGHTED + * + * This source code is offered for use in the public domain. You may + * use, modify or distribute it freely. + * + * This code is distributed in the hope that it will be useful but + * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY + * DISCLAIMED. This includes but is not limited to warranties of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + */ #ifndef _NTDDTDI_ #define _NTDDTDI_ diff --git a/include/ddk/ntddvdeo.h b/include/psdk/ntddvdeo.h similarity index 97% rename from include/ddk/ntddvdeo.h rename to include/psdk/ntddvdeo.h index f2fdc5bcae7..6bf65a42a17 100644 --- a/include/ddk/ntddvdeo.h +++ b/include/psdk/ntddvdeo.h @@ -20,8 +20,8 @@ * */ -#ifndef __NTDDVDEO_H -#define __NTDDVDEO_H +#ifndef _NTDDVDEO_ +#define _NTDDVDEO_ #ifdef __cplusplus extern "C" { @@ -468,9 +468,18 @@ typedef struct _ENG_EVENT ULONG fFlags; } ENG_EVENT, *PENG_EVENT; +typedef struct _DISPLAY_BRIGHTNESS { + UCHAR ucDisplayPolicy; + UCHAR ucACBrightness; + UCHAR ucDCBrightness; +} DISPLAY_BRIGHTNESS, *PDISPLAY_BRIGHTNESS; + +#define DISPLAYPOLICY_AC 0x00000001 +#define DISPLAYPOLICY_DC 0x00000002 +#define DISPLAYPOLICY_BOTH 0x00000003 #ifdef __cplusplus } #endif -#endif /* __NTDDVDEO_H */ +#endif /* _NTDDVDEO_ */ diff --git a/include/ddk/ntddvol.h b/include/psdk/ntddvol.h similarity index 98% rename from include/ddk/ntddvol.h rename to include/psdk/ntddvol.h index 7898eeee815..0b14c49af4d 100644 --- a/include/ddk/ntddvol.h +++ b/include/psdk/ntddvol.h @@ -20,8 +20,8 @@ * */ -#ifndef __NTDDVOL_H -#define __NTDDVOL_H +#ifndef _NTDDVOL_ +#define _NTDDVOL_ #ifdef __cplusplus extern "C" { @@ -132,4 +132,4 @@ typedef struct _VOLUME_FAILOVER_SET { } #endif -#endif /* __NTDDVOL_H */ +#endif /* _NTDDVOL_ */ diff --git a/include/psdk/ntdef.h b/include/psdk/ntdef.h index d25ff9f3f4a..be71648f18b 100644 --- a/include/psdk/ntdef.h +++ b/include/psdk/ntdef.h @@ -194,7 +194,7 @@ #if defined(_MSC_VER) && (_MSC_VER >= 1300) #define TYPE_ALIGNMENT(t) __alignof(t) #else -#define TYPE_ALIGNMENT(t) FIELD_OFFSET( struct { char x; t test; }, test ) +#define TYPE_ALIGNMENT(t) FIELD_OFFSET(struct { char x; t test; }, test) #endif /* Calling Conventions */ @@ -219,7 +219,7 @@ #else #define DECLSPEC_ADDRSAFE #endif -#endif +#endif /* DECLSPEC_ADDRSAFE */ #if !defined(_NTSYSTEM_) #define NTSYSAPI DECLSPEC_IMPORT @@ -235,14 +235,14 @@ /* Inlines */ #ifndef FORCEINLINE -#if (_MSC_VER >= 1200) +#if defined(_MSC_VER) && (_MSC_VER >= 1200) #define FORCEINLINE __forceinline -#elif (_MSC_VER) +#elif defined(_MSC_VER) #define FORCEINLINE __inline -#else -#define FORCEINLINE static __inline__ __attribute__((always_inline)) -#endif +#else /* __GNUC__ */ +#define FORCEINLINE extern __inline__ __attribute__((always_inline)) #endif +#endif /* FORCEINLINE */ #ifndef DECLSPEC_NOINLINE #if (_MSC_VER >= 1300) @@ -252,7 +252,7 @@ #else #define DECLSPEC_NOINLINE #endif -#endif +#endif /* DECLSPEC_NOINLINE */ #if !defined(_M_CEE_PURE) #define NTAPI_INLINE NTAPI @@ -265,11 +265,11 @@ #if defined(_MSC_VER) && (_MSC_VER >= 1300) && !defined(MIDL_PASS) #define DECLSPEC_ALIGN(x) __declspec(align(x)) #elif defined(__GNUC__) -#define DECLSPEC_ALIGN(x) __attribute__((aligned(x))) +#define DECLSPEC_ALIGN(x) __attribute__ ((__aligned__ (x))) #else #define DECLSPEC_ALIGN(x) #endif -#endif +#endif /* DECLSPEC_ALIGN */ /* Use to silence unused variable warnings when it is intentional */ #define UNREFERENCED_PARAMETER(P) {(P)=(P);} @@ -507,7 +507,7 @@ typedef struct _STRING64 { #define MAKELCID(lgid, srtid) ((ULONG)((((ULONG)((USHORT)(srtid))) << 16) | \ ((ULONG)((USHORT)(lgid))))) -#define MAKESORTLCID(lgid, srtid, ver) \ +#define MAKESORTLCID(lgid, srtid, ver) \ ((ULONG)((MAKELCID(lgid, srtid)) | \ (((ULONG)((USHORT)(ver))) << 20))) #define LANGIDFROMLCID(lcid) ((USHORT)(lcid)) @@ -549,9 +549,9 @@ typedef CONST OBJECT_ATTRIBUTES *PCOBJECT_ATTRIBUTES; /* Product Types */ typedef enum _NT_PRODUCT_TYPE { - NtProductWinNt = 1, - NtProductLanManNt, - NtProductServer + NtProductWinNt = 1, + NtProductLanManNt, + NtProductServer } NT_PRODUCT_TYPE, *PNT_PRODUCT_TYPE; typedef enum _EVENT_TYPE { @@ -560,8 +560,8 @@ typedef enum _EVENT_TYPE { } EVENT_TYPE; typedef enum _TIMER_TYPE { - NotificationTimer, - SynchronizationTimer + NotificationTimer, + SynchronizationTimer } TIMER_TYPE; typedef enum _WAIT_TYPE { @@ -571,25 +571,23 @@ typedef enum _WAIT_TYPE { /* Doubly Linked Lists */ typedef struct _LIST_ENTRY { - struct _LIST_ENTRY *Flink; - struct _LIST_ENTRY *Blink; + struct _LIST_ENTRY *Flink; + struct _LIST_ENTRY *Blink; } LIST_ENTRY, *PLIST_ENTRY, *RESTRICTED_POINTER PRLIST_ENTRY; -typedef struct LIST_ENTRY32 -{ - ULONG Flink; - ULONG Blink; +typedef struct LIST_ENTRY32 { + ULONG Flink; + ULONG Blink; } LIST_ENTRY32, *PLIST_ENTRY32; -typedef struct LIST_ENTRY64 -{ - ULONGLONG Flink; - ULONGLONG Blink; +typedef struct LIST_ENTRY64 { + ULONGLONG Flink; + ULONGLONG Blink; } LIST_ENTRY64, *PLIST_ENTRY64; /* Singly Linked Lists */ typedef struct _SINGLE_LIST_ENTRY { - struct _SINGLE_LIST_ENTRY *Next; + struct _SINGLE_LIST_ENTRY *Next; } SINGLE_LIST_ENTRY, *PSINGLE_LIST_ENTRY; typedef struct _PROCESSOR_NUMBER { @@ -603,10 +601,10 @@ struct _EXCEPTION_RECORD; typedef EXCEPTION_DISPOSITION (NTAPI *PEXCEPTION_ROUTINE)( - IN struct _EXCEPTION_RECORD *ExceptionRecord, - IN PVOID EstablisherFrame, - IN OUT struct _CONTEXT *ContextRecord, - IN OUT PVOID DispatcherContext); + struct _EXCEPTION_RECORD *ExceptionRecord, + PVOID EstablisherFrame, + struct _CONTEXT *ContextRecord, + PVOID DispatcherContext); typedef struct _GROUP_AFFINITY { KAFFINITY Mask; @@ -650,155 +648,154 @@ typedef struct _GROUP_AFFINITY { /* C_ASSERT Definition */ #define C_ASSERT(expr) extern char (*c_assert(void)) [(expr) ? 1 : -1] +#define VER_WORKSTATION_NT 0x40000000 +#define VER_SERVER_NT 0x80000000 +#define VER_SUITE_SMALLBUSINESS 0x00000001 +#define VER_SUITE_ENTERPRISE 0x00000002 +#define VER_SUITE_BACKOFFICE 0x00000004 +#define VER_SUITE_COMMUNICATIONS 0x00000008 +#define VER_SUITE_TERMINAL 0x00000010 +#define VER_SUITE_SMALLBUSINESS_RESTRICTED 0x00000020 +#define VER_SUITE_EMBEDDEDNT 0x00000040 +#define VER_SUITE_DATACENTER 0x00000080 +#define VER_SUITE_SINGLEUSERTS 0x00000100 +#define VER_SUITE_PERSONAL 0x00000200 +#define VER_SUITE_BLADE 0x00000400 +#define VER_SUITE_EMBEDDED_RESTRICTED 0x00000800 +#define VER_SUITE_SECURITY_APPLIANCE 0x00001000 +#define VER_SUITE_STORAGE_SERVER 0x00002000 +#define VER_SUITE_COMPUTE_SERVER 0x00004000 +#define VER_SUITE_WH_SERVER 0x00008000 + /* Primary language IDs. */ -#define LANG_NEUTRAL 0x00 -#define LANG_INVARIANT 0x7f +#define LANG_NEUTRAL 0x00 +#define LANG_INVARIANT 0x7f -#define LANG_AFRIKAANS 0x36 -#define LANG_ALBANIAN 0x1c -#define LANG_ALSATIAN 0x84 -#define LANG_AMHARIC 0x5e -#define LANG_ARABIC 0x01 -#define LANG_ARMENIAN 0x2b -#define LANG_ASSAMESE 0x4d -#define LANG_AZERI 0x2c -#define LANG_BASHKIR 0x6d -#define LANG_BASQUE 0x2d -#define LANG_BELARUSIAN 0x23 -#define LANG_BENGALI 0x45 -#define LANG_BRETON 0x7e -#define LANG_BOSNIAN 0x1a -#define LANG_BOSNIAN_NEUTRAL 0x781a -#define LANG_BULGARIAN 0x02 -#define LANG_CATALAN 0x03 -#define LANG_CHINESE 0x04 -#define LANG_CHINESE_SIMPLIFIED 0x04 -#define LANG_CHINESE_TRADITIONAL 0x7c04 -#define LANG_CORSICAN 0x83 -#define LANG_CROATIAN 0x1a -#define LANG_CZECH 0x05 -#define LANG_DANISH 0x06 -#define LANG_DARI 0x8c -#define LANG_DIVEHI 0x65 -#define LANG_DUTCH 0x13 -#define LANG_ENGLISH 0x09 -#define LANG_ESTONIAN 0x25 -#define LANG_FAEROESE 0x38 -#define LANG_FARSI 0x29 -#define LANG_FILIPINO 0x64 -#define LANG_FINNISH 0x0b -#define LANG_FRENCH 0x0c -#define LANG_FRISIAN 0x62 -#define LANG_GALICIAN 0x56 -#define LANG_GEORGIAN 0x37 -#define LANG_GERMAN 0x07 -#define LANG_GREEK 0x08 -#define LANG_GREENLANDIC 0x6f -#define LANG_GUJARATI 0x47 -#define LANG_HAUSA 0x68 -#define LANG_HEBREW 0x0d -#define LANG_HINDI 0x39 -#define LANG_HUNGARIAN 0x0e -#define LANG_ICELANDIC 0x0f -#define LANG_IGBO 0x70 -#define LANG_INDONESIAN 0x21 -#define LANG_INUKTITUT 0x5d -#define LANG_IRISH 0x3c -#define LANG_ITALIAN 0x10 -#define LANG_JAPANESE 0x11 -#define LANG_KANNADA 0x4b -#define LANG_KASHMIRI 0x60 -#define LANG_KAZAK 0x3f -#define LANG_KHMER 0x53 -#define LANG_KICHE 0x86 -#define LANG_KINYARWANDA 0x87 -#define LANG_KONKANI 0x57 -#define LANG_KOREAN 0x12 -#define LANG_KYRGYZ 0x40 -#define LANG_LAO 0x54 -#define LANG_LATVIAN 0x26 -#define LANG_LITHUANIAN 0x27 -#define LANG_LOWER_SORBIAN 0x2e -#define LANG_LUXEMBOURGISH 0x6e -#define LANG_MACEDONIAN 0x2f -#define LANG_MALAY 0x3e -#define LANG_MALAYALAM 0x4c -#define LANG_MALTESE 0x3a -#define LANG_MANIPURI 0x58 -#define LANG_MAORI 0x81 -#define LANG_MAPUDUNGUN 0x7a -#define LANG_MARATHI 0x4e -#define LANG_MOHAWK 0x7c -#define LANG_MONGOLIAN 0x50 -#define LANG_NEPALI 0x61 -#define LANG_NORWEGIAN 0x14 -#define LANG_OCCITAN 0x82 -#define LANG_ORIYA 0x48 -#define LANG_PASHTO 0x63 -#define LANG_PERSIAN 0x29 -#define LANG_POLISH 0x15 -#define LANG_PORTUGUESE 0x16 -#define LANG_PUNJABI 0x46 -#define LANG_QUECHUA 0x6b -#define LANG_ROMANIAN 0x18 -#define LANG_ROMANSH 0x17 -#define LANG_RUSSIAN 0x19 -#define LANG_SAMI 0x3b -#define LANG_SANSKRIT 0x4f -#define LANG_SERBIAN 0x1a -#define LANG_SERBIAN_NEUTRAL 0x7c1a -#define LANG_SINDHI 0x59 -#define LANG_SINHALESE 0x5b -#define LANG_SLOVAK 0x1b -#define LANG_SLOVENIAN 0x24 -#define LANG_SOTHO 0x6c -#define LANG_SPANISH 0x0a -#define LANG_SWAHILI 0x41 -#define LANG_SWEDISH 0x1d -#define LANG_SYRIAC 0x5a -#define LANG_TAJIK 0x28 -#define LANG_TAMAZIGHT 0x5f -#define LANG_TAMIL 0x49 -#define LANG_TATAR 0x44 -#define LANG_TELUGU 0x4a -#define LANG_THAI 0x1e -#define LANG_TIBETAN 0x51 -#define LANG_TIGRIGNA 0x73 -#define LANG_TSWANA 0x32 -#define LANG_TURKISH 0x1f -#define LANG_TURKMEN 0x42 -#define LANG_UIGHUR 0x80 -#define LANG_UKRAINIAN 0x22 -#define LANG_UPPER_SORBIAN 0x2e -#define LANG_URDU 0x20 -#define LANG_UZBEK 0x43 -#define LANG_VIETNAMESE 0x2a -#define LANG_WELSH 0x52 -#define LANG_WOLOF 0x88 -#define LANG_XHOSA 0x34 -#define LANG_YAKUT 0x85 -#define LANG_YI 0x78 -#define LANG_YORUBA 0x6a -#define LANG_ZULU 0x35 - -#define VER_WORKSTATION_NT 0x40000000 -#define VER_SERVER_NT 0x80000000 - -#define VER_SUITE_SMALLBUSINESS 1 -#define VER_SUITE_ENTERPRISE 2 -#define VER_SUITE_BACKOFFICE 4 -#define VER_SUITE_COMMUNICATIONS 8 -#define VER_SUITE_TERMINAL 16 -#define VER_SUITE_SMALLBUSINESS_RESTRICTED 32 -#define VER_SUITE_EMBEDDEDNT 64 -#define VER_SUITE_DATACENTER 128 -#define VER_SUITE_SINGLEUSERTS 256 -#define VER_SUITE_PERSONAL 512 -#define VER_SUITE_BLADE 1024 -#define VER_SUITE_EMBEDDED_RESTRICTED 2048 -#define VER_SUITE_SECURITY_APPLIANCE 4096 -#define VER_SUITE_STORAGE_SERVER 8192 -#define VER_SUITE_COMPUTE_SERVER 16384 -#define VER_SUITE_WH_SERVER 32768 +#define LANG_AFRIKAANS 0x36 +#define LANG_ALBANIAN 0x1c +#define LANG_ALSATIAN 0x84 +#define LANG_AMHARIC 0x5e +#define LANG_ARABIC 0x01 +#define LANG_ARMENIAN 0x2b +#define LANG_ASSAMESE 0x4d +#define LANG_AZERI 0x2c +#define LANG_BASHKIR 0x6d +#define LANG_BASQUE 0x2d +#define LANG_BELARUSIAN 0x23 +#define LANG_BENGALI 0x45 +#define LANG_BRETON 0x7e +#define LANG_BOSNIAN 0x1a +#define LANG_BOSNIAN_NEUTRAL 0x781a +#define LANG_BULGARIAN 0x02 +#define LANG_CATALAN 0x03 +#define LANG_CHINESE 0x04 +#define LANG_CHINESE_SIMPLIFIED 0x04 +#define LANG_CHINESE_TRADITIONAL 0x7c04 +#define LANG_CORSICAN 0x83 +#define LANG_CROATIAN 0x1a +#define LANG_CZECH 0x05 +#define LANG_DANISH 0x06 +#define LANG_DARI 0x8c +#define LANG_DIVEHI 0x65 +#define LANG_DUTCH 0x13 +#define LANG_ENGLISH 0x09 +#define LANG_ESTONIAN 0x25 +#define LANG_FAEROESE 0x38 +#define LANG_FARSI 0x29 +#define LANG_FILIPINO 0x64 +#define LANG_FINNISH 0x0b +#define LANG_FRENCH 0x0c +#define LANG_FRISIAN 0x62 +#define LANG_GALICIAN 0x56 +#define LANG_GEORGIAN 0x37 +#define LANG_GERMAN 0x07 +#define LANG_GREEK 0x08 +#define LANG_GREENLANDIC 0x6f +#define LANG_GUJARATI 0x47 +#define LANG_HAUSA 0x68 +#define LANG_HEBREW 0x0d +#define LANG_HINDI 0x39 +#define LANG_HUNGARIAN 0x0e +#define LANG_ICELANDIC 0x0f +#define LANG_IGBO 0x70 +#define LANG_INDONESIAN 0x21 +#define LANG_INUKTITUT 0x5d +#define LANG_IRISH 0x3c +#define LANG_ITALIAN 0x10 +#define LANG_JAPANESE 0x11 +#define LANG_KANNADA 0x4b +#define LANG_KASHMIRI 0x60 +#define LANG_KAZAK 0x3f +#define LANG_KHMER 0x53 +#define LANG_KICHE 0x86 +#define LANG_KINYARWANDA 0x87 +#define LANG_KONKANI 0x57 +#define LANG_KOREAN 0x12 +#define LANG_KYRGYZ 0x40 +#define LANG_LAO 0x54 +#define LANG_LATVIAN 0x26 +#define LANG_LITHUANIAN 0x27 +#define LANG_LOWER_SORBIAN 0x2e +#define LANG_LUXEMBOURGISH 0x6e +#define LANG_MACEDONIAN 0x2f +#define LANG_MALAY 0x3e +#define LANG_MALAYALAM 0x4c +#define LANG_MALTESE 0x3a +#define LANG_MANIPURI 0x58 +#define LANG_MAORI 0x81 +#define LANG_MAPUDUNGUN 0x7a +#define LANG_MARATHI 0x4e +#define LANG_MOHAWK 0x7c +#define LANG_MONGOLIAN 0x50 +#define LANG_NEPALI 0x61 +#define LANG_NORWEGIAN 0x14 +#define LANG_OCCITAN 0x82 +#define LANG_ORIYA 0x48 +#define LANG_PASHTO 0x63 +#define LANG_PERSIAN 0x29 +#define LANG_POLISH 0x15 +#define LANG_PORTUGUESE 0x16 +#define LANG_PUNJABI 0x46 +#define LANG_QUECHUA 0x6b +#define LANG_ROMANIAN 0x18 +#define LANG_ROMANSH 0x17 +#define LANG_RUSSIAN 0x19 +#define LANG_SAMI 0x3b +#define LANG_SANSKRIT 0x4f +#define LANG_SERBIAN 0x1a +#define LANG_SERBIAN_NEUTRAL 0x7c1a +#define LANG_SINDHI 0x59 +#define LANG_SINHALESE 0x5b +#define LANG_SLOVAK 0x1b +#define LANG_SLOVENIAN 0x24 +#define LANG_SOTHO 0x6c +#define LANG_SPANISH 0x0a +#define LANG_SWAHILI 0x41 +#define LANG_SWEDISH 0x1d +#define LANG_SYRIAC 0x5a +#define LANG_TAJIK 0x28 +#define LANG_TAMAZIGHT 0x5f +#define LANG_TAMIL 0x49 +#define LANG_TATAR 0x44 +#define LANG_TELUGU 0x4a +#define LANG_THAI 0x1e +#define LANG_TIBETAN 0x51 +#define LANG_TIGRIGNA 0x73 +#define LANG_TSWANA 0x32 +#define LANG_TURKISH 0x1f +#define LANG_TURKMEN 0x42 +#define LANG_UIGHUR 0x80 +#define LANG_UKRAINIAN 0x22 +#define LANG_UPPER_SORBIAN 0x2e +#define LANG_URDU 0x20 +#define LANG_UZBEK 0x43 +#define LANG_VIETNAMESE 0x2a +#define LANG_WELSH 0x52 +#define LANG_WOLOF 0x88 +#define LANG_XHOSA 0x34 +#define LANG_YAKUT 0x85 +#define LANG_YI 0x78 +#define LANG_YORUBA 0x6a +#define LANG_ZULU 0x35 #endif /* _NTDEF_ */ diff --git a/include/ddk/objerror.h b/include/psdk/objerror.h similarity index 100% rename from include/ddk/objerror.h rename to include/psdk/objerror.h diff --git a/include/ddk/polarity.h b/include/psdk/polarity.h similarity index 100% rename from include/ddk/polarity.h rename to include/psdk/polarity.h diff --git a/include/ddk/prntfont.h b/include/psdk/prntfont.h similarity index 100% rename from include/ddk/prntfont.h rename to include/psdk/prntfont.h diff --git a/include/psdk/shlwapi.h b/include/psdk/shlwapi.h index 223bcdd3c05..bec8b3a4f2f 100644 --- a/include/psdk/shlwapi.h +++ b/include/psdk/shlwapi.h @@ -319,6 +319,12 @@ BOOL WINAPI AssocIsDangerous(LPCWSTR); #endif /* NO_SHLWAPI_REG */ +void WINAPI IUnknown_Set(IUnknown **ppunk, IUnknown *punk); +void WINAPI IUnknown_AtomicRelease(IUnknown **punk); +HRESULT WINAPI IUnknown_GetWindow(IUnknown *punk, HWND *phwnd); +HRESULT WINAPI IUnknown_SetSite(IUnknown *punk, IUnknown *punkSite); +HRESULT WINAPI IUnknown_GetSite(IUnknown *punk, REFIID riid, void **ppv); +HRESULT WINAPI IUnknown_QueryService(IUnknown *punk, REFGUID guidService, REFIID riid, void **ppvOut); /* Path functions */ #ifndef NO_SHLWAPI_PATH @@ -579,6 +585,11 @@ typedef enum { URL_SCHEME_MSSHELLROOTED, URL_SCHEME_MSSHELLIDLIST, URL_SCHEME_MSHELP, + URL_SCHEME_MSSHELLDEVICE, + URL_SCHEME_WILDCARD, + URL_SCHEME_SEARCH_MS, + URL_SCHEME_SEARCH, + URL_SCHEME_KNOWNFOLDER, URL_SCHEME_MAXVALUE } URL_SCHEME; @@ -643,7 +654,7 @@ HRESULT WINAPI UrlApplySchemeW(LPCWSTR,LPWSTR,LPDWORD,DWORD); HRESULT WINAPI UrlCanonicalizeA(LPCSTR,LPSTR,LPDWORD,DWORD); HRESULT WINAPI UrlCanonicalizeW(LPCWSTR,LPWSTR,LPDWORD,DWORD); -#define UrlCanonicalize WINELIB_NAME_AW(UrlCanoncalize) +#define UrlCanonicalize WINELIB_NAME_AW(UrlCanonicalize) HRESULT WINAPI UrlCombineA(LPCSTR,LPCSTR,LPSTR,LPDWORD,DWORD); HRESULT WINAPI UrlCombineW(LPCWSTR,LPCWSTR,LPWSTR,LPDWORD,DWORD); @@ -870,6 +881,9 @@ LPSTR WINAPI StrStrIA(LPCSTR,LPCSTR); LPWSTR WINAPI StrStrIW(LPCWSTR,LPCWSTR); #define StrStrI WINELIB_NAME_AW(StrStrI) +LPWSTR WINAPI StrStrNW(LPCWSTR,LPCWSTR,UINT); +LPWSTR WINAPI StrStrNIW(LPCWSTR,LPCWSTR,UINT); + int WINAPI StrToIntA(LPCSTR); int WINAPI StrToIntW(LPCWSTR); #define StrToInt WINELIB_NAME_AW(StrToInt) @@ -974,6 +988,7 @@ HRESULT WINAPI SHCreateStreamWrapper(LPBYTE,DWORD,DWORD,struct IStream**); HRESULT WINAPI SHAutoComplete(HWND,DWORD); /* Threads */ +HRESULT WINAPI SHCreateThreadRef(LONG*, IUnknown**); HRESULT WINAPI SHGetThreadRef(IUnknown**); HRESULT WINAPI SHSetThreadRef(IUnknown*); HRESULT WINAPI SHReleaseThreadRef(void); diff --git a/include/psdk/sti.h b/include/psdk/sti.h index 204492d9a2f..fd6c0a5033f 100644 --- a/include/psdk/sti.h +++ b/include/psdk/sti.h @@ -173,7 +173,7 @@ DECLARE_INTERFACE_(IStillImageW, IUnknown) #endif #ifdef __cplusplus -}; +} #endif #include diff --git a/include/ddk/stierr.h b/include/psdk/stierr.h similarity index 100% rename from include/ddk/stierr.h rename to include/psdk/stierr.h diff --git a/include/ddk/stireg.h b/include/psdk/stireg.h similarity index 100% rename from include/ddk/stireg.h rename to include/psdk/stireg.h diff --git a/include/ddk/tdi.h b/include/psdk/tdi.h similarity index 100% rename from include/ddk/tdi.h rename to include/psdk/tdi.h diff --git a/include/ddk/tdiinfo.h b/include/psdk/tdiinfo.h similarity index 100% rename from include/ddk/tdiinfo.h rename to include/psdk/tdiinfo.h diff --git a/include/ddk/unknown.h b/include/psdk/unknown.h similarity index 67% rename from include/ddk/unknown.h rename to include/psdk/unknown.h index bdeb26d0212..6fe27fc3658 100644 --- a/include/ddk/unknown.h +++ b/include/psdk/unknown.h @@ -1,3 +1,21 @@ +/* + * unknown.h + * + * Contributors: + * Created by Magnus Olsen + * + * THIS SOFTWARE IS NOT COPYRIGHTED + * + * This source code is offered for use in the public domain. You may + * use, modify or distribute it freely. + * + * This code is distributed in the hope that it will be useful but + * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY + * DISCLAIMED. This includes but is not limited to warranties of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + */ + #ifndef __unknwn_h__ #define __unknwn_h__ diff --git a/include/psdk/usbuser.h b/include/psdk/usbuser.h index 188d9484abd..fe95d647af3 100644 --- a/include/psdk/usbuser.h +++ b/include/psdk/usbuser.h @@ -342,6 +342,8 @@ typedef struct _USBUSER_REFRESH_HCT_REG { #include +#endif /* _WIN32_WINNT >= 0x0501 */ + #ifdef __cplusplus } #endif diff --git a/include/ddk/warning.h b/include/psdk/warning.h similarity index 100% rename from include/ddk/warning.h rename to include/psdk/warning.h diff --git a/include/psdk/winddi.h b/include/psdk/winddi.h index ceeb206dbb9..ab5da250cd6 100644 --- a/include/psdk/winddi.h +++ b/include/psdk/winddi.h @@ -84,7 +84,7 @@ DECLARE_HANDLE(DHSURF); DECLARE_HANDLE(DHPDEV); DECLARE_HANDLE(HDRVOBJ); -#ifndef __NTDDVDEO_H +#ifndef _NTDDVDEO_ typedef struct _ENG_EVENT *PEVENT; #endif diff --git a/include/psdk/windef.h b/include/psdk/windef.h index bcd7c4dcd76..a29a959e747 100644 --- a/include/psdk/windef.h +++ b/include/psdk/windef.h @@ -395,6 +395,7 @@ DECLARE_HANDLE(HKL); typedef int HFILE; typedef HICON HCURSOR; typedef DWORD COLORREF; +typedef DWORD* LPCOLORREF; #ifdef _WIN64 typedef INT_PTR (FAR WINAPI *FARPROC)(); typedef INT_PTR (NEAR WINAPI *NEARPROC)(); diff --git a/include/psdk/wingdi.h b/include/psdk/wingdi.h index 09a7718ea3e..550ef68c626 100644 --- a/include/psdk/wingdi.h +++ b/include/psdk/wingdi.h @@ -3022,6 +3022,7 @@ BOOL WINAPI GetCharWidth32A(HDC,UINT,UINT,LPINT); BOOL WINAPI GetCharWidth32W(HDC,UINT,UINT,LPINT); BOOL WINAPI GetCharWidthA(HDC,UINT,UINT,LPINT); BOOL WINAPI GetCharWidthW(HDC,UINT,UINT,LPINT); +BOOL WINAPI GetCharWidthI(HDC,UINT,UINT,LPWORD,LPINT); BOOL WINAPI GetCharWidthFloatA(HDC,UINT,UINT,PFLOAT); BOOL WINAPI GetCharWidthFloatW(HDC,UINT,UINT,PFLOAT); int WINAPI GetClipBox(HDC,LPRECT); @@ -3094,12 +3095,14 @@ UINT WINAPI GetSystemPaletteUse(HDC); UINT WINAPI GetTextAlign(HDC); int WINAPI GetTextCharacterExtra(HDC); int WINAPI GetTextCharset(HDC); -UINT WINAPI GetTextCharsetInfo(HDC,LPFONTSIGNATURE,DWORD); +int WINAPI GetTextCharsetInfo(HDC,LPFONTSIGNATURE,DWORD); COLORREF WINAPI GetTextColor(HDC); BOOL WINAPI GetTextExtentExPointA(HDC,LPCSTR,int,int,LPINT,LPINT,LPSIZE); -BOOL WINAPI GetTextExtentExPointW( HDC,LPCWSTR,int,int,LPINT,LPINT,LPSIZE ); +BOOL WINAPI GetTextExtentExPointW(HDC,LPCWSTR,int,int,LPINT,LPINT,LPSIZE); +BOOL WINAPI GetTextExtentExPointI(HDC,LPWORD,int,int,LPINT,LPINT,LPSIZE); BOOL WINAPI GetTextExtentPointA(HDC,LPCSTR,int,LPSIZE); BOOL WINAPI GetTextExtentPointW(HDC,LPCWSTR,int,LPSIZE); +BOOL WINAPI GetTextExtentPointI(HDC,LPWORD,int,LPSIZE); BOOL WINAPI GetTextExtentPoint32A(HDC,LPCSTR,int,LPSIZE); BOOL WINAPI GetTextExtentPoint32W( HDC,LPCWSTR,int,LPSIZE); int WINAPI GetTextFaceA(HDC,int,LPSTR); diff --git a/include/psdk/winioctl.h b/include/psdk/winioctl.h index 8f7e535ff73..13ccbaec3c2 100644 --- a/include/psdk/winioctl.h +++ b/include/psdk/winioctl.h @@ -1,5 +1,5 @@ -#ifndef _WINIOCTL_H -#define _WINIOCTL_H +#ifndef _WINIOCTL_ +#define _WINIOCTL_ #ifdef __cplusplus extern "C" { @@ -574,4 +574,4 @@ typedef struct { #ifdef __cplusplus } #endif -#endif +#endif /* _WINIOCTL_ */ diff --git a/include/psdk/winnt.h b/include/psdk/winnt.h index 2df2d5fa55e..859acc5f212 100644 --- a/include/psdk/winnt.h +++ b/include/psdk/winnt.h @@ -79,7 +79,7 @@ extern "C" { #elif (_MSC_VER) #define FORCEINLINE __inline #else -#define FORCEINLINE static __inline__ __attribute__((always_inline)) +#define FORCEINLINE extern __inline__ __attribute__((always_inline)) #endif #endif @@ -742,7 +742,12 @@ typedef enum { #define SE_SYSTEM_ENVIRONMENT_NAME TEXT("SeSystemEnvironmentPrivilege") #define SE_CHANGE_NOTIFY_NAME TEXT("SeChangeNotifyPrivilege") #define SE_REMOTE_SHUTDOWN_NAME TEXT("SeRemoteShutdownPrivilege") -#define SE_CREATE_GLOBAL_NAME TEXT("SeCreateGlobalPrivilege") +#define SE_UNDOCK_NAME TEXT("SeUndockPrivilege") +#define SE_SYNC_AGENT_NAME TEXT("SeSyncAgentPrivilege") +#define SE_ENABLE_DELEGATION_NAME TEXT("SeEnableDelegationPrivilege") +#define SE_MANAGE_VOLUME_NAME TEXT("SeManageVolumePrivilege") +#define SE_IMPERSONATE_NAME TEXT("SeImpersonatePrivilege") +#define SE_CREATE_GLOBAL_NAME TEXT("SeCreateGlobalPrivilege") #define SE_GROUP_MANDATORY 1 #define SE_GROUP_ENABLED_BY_DEFAULT 2 #define SE_GROUP_ENABLED 4 @@ -1367,6 +1372,18 @@ typedef enum { #define IMAGE_FILE_MACHINE_TRICORE 0x0520 #define IMAGE_FILE_MACHINE_CEF 0x0CEF +#define IMAGE_FILE_EXPORT_DIRECTORY 0 +#define IMAGE_FILE_IMPORT_DIRECTORY 1 +#define IMAGE_FILE_RESOURCE_DIRECTORY 2 +#define IMAGE_FILE_EXCEPTION_DIRECTORY 3 +#define IMAGE_FILE_SECURITY_DIRECTORY 4 +#define IMAGE_FILE_BASE_RELOCATION_TABLE 5 +#define IMAGE_FILE_DEBUG_DIRECTORY 6 +#define IMAGE_FILE_DESCRIPTION_STRING 7 +#define IMAGE_FILE_MACHINE_VALUE 8 /* Mips */ +#define IMAGE_FILE_THREAD_LOCAL_STORAGE 9 +#define IMAGE_FILE_CALLBACK_DIRECTORY 10 + #define IMAGE_DOS_SIGNATURE 0x5A4D #define IMAGE_OS2_SIGNATURE 0x454E #define IMAGE_OS2_SIGNATURE_LE 0x454C @@ -2198,7 +2215,6 @@ typedef struct _CONTEXT { } CONTEXT; #elif defined(__x86_64__) - #define CONTEXT_AMD64 0x100000 #if !defined(RC_INVOKED) @@ -4171,16 +4187,16 @@ typedef struct _IMAGE_RESOURCE_DIRECTORY_ENTRY { _ANONYMOUS_STRUCT struct { DWORD NameOffset:31; DWORD NameIsString:1; - } DUMMYSTRUCTNAME; + } DUMMYSTRUCTNAME1; DWORD Name; WORD Id; - } DUMMYUNIONNAME; + } DUMMYUNIONNAME1; _ANONYMOUS_UNION union { DWORD OffsetToData; _ANONYMOUS_STRUCT struct { DWORD OffsetToDirectory:31; DWORD DataIsDirectory:1; - } DUMMYSTRUCTNAME; + } DUMMYSTRUCTNAME3; } DUMMYUNIONNAME2; } IMAGE_RESOURCE_DIRECTORY_ENTRY, *PIMAGE_RESOURCE_DIRECTORY_ENTRY; @@ -5112,7 +5128,7 @@ static __inline__ PVOID GetCurrentFiber(void) #endif #if defined(_M_IX86) -static __inline__ struct _TEB * NtCurrentTeb(void) +extern __inline__ struct _TEB * NtCurrentTeb(void) { struct _TEB *ret; @@ -5137,12 +5153,12 @@ FORCEINLINE struct _TEB * NtCurrentTeb(VOID) return (struct _TEB *)__readgsqword(FIELD_OFFSET(NT_TIB, Self)); } #elif defined(_M_PPC) -static __inline__ struct _TEB * NtCurrentTeb(void) +extern __inline__ struct _TEB * NtCurrentTeb(void) { return __readfsdword_winnt(0x18); } #else -static __inline__ struct _TEB * NtCurrentTeb(void) +extern __inline__ struct _TEB * NtCurrentTeb(void) { return __readfsdword_winnt(0x18); } diff --git a/include/psdk/winuser.h b/include/psdk/winuser.h index 132a1328d9b..dd1ba77bcdf 100644 --- a/include/psdk/winuser.h +++ b/include/psdk/winuser.h @@ -269,6 +269,7 @@ extern "C" { #define BS_MULTILINE 0x2000 #define BS_NOTIFY 0x4000 #define BS_OWNERDRAW 0xb +#define BS_TYPEMASK 0xFL #define BS_PUSHBUTTON 0 #define BS_PUSHLIKE 4096 #define BS_RADIOBUTTON 4 @@ -4163,8 +4164,8 @@ HBRUSH WINAPI GetSysColorBrush(int); #define GetSysModalWindow() (NULL) HMENU WINAPI GetSystemMenu(HWND,BOOL); int WINAPI GetSystemMetrics(int); -DWORD WINAPI GetTabbedTextExtentA(HDC,LPCSTR,int,int,CONST LPINT); -DWORD WINAPI GetTabbedTextExtentW(HDC,LPCWSTR,int,int,CONST LPINT); +DWORD WINAPI GetTabbedTextExtentA(HDC,LPCSTR,int,int,CONST INT*); +DWORD WINAPI GetTabbedTextExtentW(HDC,LPCWSTR,int,int,CONST INT*); LONG WINAPI GetWindowLongA(HWND,int); LONG WINAPI GetWindowLongW(HWND,int); #ifdef _WIN64 @@ -4491,13 +4492,13 @@ VOID WINAPI SwitchToThisWindow(HWND,BOOL); #endif /* (_WIN32_WINNT >= 0x0500) */ BOOL WINAPI SystemParametersInfoA(UINT,UINT,PVOID,UINT); BOOL WINAPI SystemParametersInfoW(UINT,UINT,PVOID,UINT); -LONG WINAPI TabbedTextOutA(HDC,int,int,LPCSTR,int,int,CONST LPINT,int); -LONG WINAPI TabbedTextOutW(HDC,int,int,LPCWSTR,int,int,CONST LPINT,int); +LONG WINAPI TabbedTextOutA(HDC,int,int,LPCSTR,int,int,CONST INT*,int); +LONG WINAPI TabbedTextOutW(HDC,int,int,LPCWSTR,int,int,CONST INT*,int); WORD WINAPI TileWindows(HWND,UINT,LPCRECT,UINT,const HWND *); -int WINAPI ToAscii(UINT,UINT,CONST PBYTE,LPWORD,UINT); -int WINAPI ToAsciiEx(UINT,UINT,CONST PBYTE,LPWORD,UINT,HKL); -int WINAPI ToUnicode(UINT,UINT,CONST PBYTE,LPWSTR,int,UINT); -int WINAPI ToUnicodeEx(UINT,UINT,CONST PBYTE,LPWSTR,int,UINT,HKL); +int WINAPI ToAscii(UINT,UINT,CONST BYTE*,LPWORD,UINT); +int WINAPI ToAsciiEx(UINT,UINT,CONST BYTE*,LPWORD,UINT,HKL); +int WINAPI ToUnicode(UINT,UINT,CONST BYTE*,LPWSTR,int,UINT); +int WINAPI ToUnicodeEx(UINT,UINT,CONST BYTE*,LPWSTR,int,UINT,HKL); BOOL WINAPI TrackMouseEvent(LPTRACKMOUSEEVENT); BOOL WINAPI TrackPopupMenu(HMENU,UINT,int,int,int,HWND,LPCRECT); BOOL WINAPI TrackPopupMenuEx(HMENU,UINT,int,int,HWND,LPTPMPARAMS); diff --git a/include/psdk/ws2tcpip.h b/include/psdk/ws2tcpip.h index fe955fa7479..d6e8620b632 100644 --- a/include/psdk/ws2tcpip.h +++ b/include/psdk/ws2tcpip.h @@ -528,10 +528,9 @@ char * gai_strerrorA( IN int ecode) { - DWORD dwMsgLen; static char buff[GAI_STRERROR_BUFFER_SIZE + 1]; - dwMsgLen = FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM + FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM |FORMAT_MESSAGE_IGNORE_INSERTS |FORMAT_MESSAGE_MAX_WIDTH_MASK, NULL, @@ -549,10 +548,9 @@ WCHAR * gai_strerrorW( IN int ecode) { - DWORD dwMsgLen; static WCHAR buff[GAI_STRERROR_BUFFER_SIZE + 1]; - dwMsgLen = FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM + FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM |FORMAT_MESSAGE_IGNORE_INSERTS |FORMAT_MESSAGE_MAX_WIDTH_MASK, NULL, diff --git a/include/psdk/wspiapi.h b/include/psdk/wspiapi.h index 4b4b5ce6008..ea41ec8ab47 100644 --- a/include/psdk/wspiapi.h +++ b/include/psdk/wspiapi.h @@ -236,7 +236,7 @@ WspiapiClone( return 0; } -FORCEINLINE +static __inline void WINAPI WspiapiLegacyFreeAddrInfo( @@ -252,7 +252,7 @@ WspiapiLegacyFreeAddrInfo( } } -FORCEINLINE +static __inline int WINAPI WspiapiLegacyGetAddrInfo( @@ -352,7 +352,7 @@ WspiapiLegacyGetAddrInfo( return (iError); } -FORCEINLINE +static __inline int WINAPI WspiapiLegacyGetNameInfo( diff --git a/include/reactos/drivers/serial/ns16550.h b/include/reactos/drivers/serial/ns16550.h new file mode 100644 index 00000000000..4a69824da73 --- /dev/null +++ b/include/reactos/drivers/serial/ns16550.h @@ -0,0 +1,108 @@ +/* + * PROJECT: ReactOS ComPort Library + * LICENSE: BSD - See COPYING.ARM in the top level directory + * FILE: include/reactos/drivers/serial/ns16550.h + * PURPOSE: Header for National Semiconductor 16550 UART + * PROGRAMMERS: ReactOS Portable Systems Group + */ + +/* INCLUDES *******************************************************************/ + +#pragma once + +/* Note: These definitions are the internal definitions used by Microsoft serial + driver (see src/kernel/serial/serial.h in WDK source code). Linux uses its own, as + do most other OS. +*/ + +#if !defined(SERIAL_REGISTER_STRIDE) +#define SERIAL_REGISTER_STRIDE 1 +#endif + +#define RECEIVE_BUFFER_REGISTER ((ULONG)((0x00)*SERIAL_REGISTER_STRIDE)) +#define TRANSMIT_HOLDING_REGISTER ((ULONG)((0x00)*SERIAL_REGISTER_STRIDE)) +#define INTERRUPT_ENABLE_REGISTER ((ULONG)((0x01)*SERIAL_REGISTER_STRIDE)) +#define INTERRUPT_IDENT_REGISTER ((ULONG)((0x02)*SERIAL_REGISTER_STRIDE)) +#define FIFO_CONTROL_REGISTER ((ULONG)((0x02)*SERIAL_REGISTER_STRIDE)) +#define LINE_CONTROL_REGISTER ((ULONG)((0x03)*SERIAL_REGISTER_STRIDE)) +#define MODEM_CONTROL_REGISTER ((ULONG)((0x04)*SERIAL_REGISTER_STRIDE)) +#define LINE_STATUS_REGISTER ((ULONG)((0x05)*SERIAL_REGISTER_STRIDE)) +#define MODEM_STATUS_REGISTER ((ULONG)((0x06)*SERIAL_REGISTER_STRIDE)) +#define DIVISOR_LATCH_LSB ((ULONG)((0x00)*SERIAL_REGISTER_STRIDE)) +#define DIVISOR_LATCH_MSB ((ULONG)((0x01)*SERIAL_REGISTER_STRIDE)) +#define SERIAL_REGISTER_SPAN ((ULONG)(7*SERIAL_REGISTER_STRIDE)) +#define SERIAL_STATUS_LENGTH ((ULONG)(1*SERIAL_REGISTER_STRIDE)) + +#define SERIAL_DATA_LENGTH_5 0x00 +#define SERIAL_DATA_LENGTH_6 0x01 +#define SERIAL_DATA_LENGTH_7 0x02 +#define SERIAL_DATA_LENGTH_8 0x03 + +#define SERIAL_IER_RDA 0x01 +#define SERIAL_IER_THR 0x02 +#define SERIAL_IER_RLS 0x04 +#define SERIAL_IER_MS 0x08 + +#define SERIAL_IIR_RLS 0x06 +#define SERIAL_IIR_RDA 0x04 +#define SERIAL_IIR_CTI 0x0c +#define SERIAL_IIR_THR 0x02 +#define SERIAL_IIR_MS 0x00 +#define SERIAL_IIR_FIFOS_ENABLED 0xc0 +#define SERIAL_IIR_NO_INTERRUPT_PENDING 0x01 +#define SERIAL_IIR_MUST_BE_ZERO 0x30 + +#define SERIAL_FCR_ENABLE ((UCHAR)0x01) +#define SERIAL_FCR_RCVR_RESET ((UCHAR)0x02) +#define SERIAL_FCR_TXMT_RESET ((UCHAR)0x04) + +#define SERIAL_1_BYTE_HIGH_WATER ((UCHAR)0x00) +#define SERIAL_4_BYTE_HIGH_WATER ((UCHAR)0x40) +#define SERIAL_8_BYTE_HIGH_WATER ((UCHAR)0x80) +#define SERIAL_14_BYTE_HIGH_WATER ((UCHAR)0xc0) + +#define SERIAL_LCR_DLAB 0x80 +#define SERIAL_LCR_BREAK 0x40 + +#define SERIAL_5_DATA ((UCHAR)0x00) +#define SERIAL_6_DATA ((UCHAR)0x01) +#define SERIAL_7_DATA ((UCHAR)0x02) +#define SERIAL_8_DATA ((UCHAR)0x03) +#define SERIAL_DATA_MASK ((UCHAR)0x03) + +#define SERIAL_1_STOP ((UCHAR)0x00) +#define SERIAL_1_5_STOP ((UCHAR)0x04) // Only valid for 5 data bits +#define SERIAL_2_STOP ((UCHAR)0x04) // Not valid for 5 data bits +#define SERIAL_STOP_MASK ((UCHAR)0x04) + +#define SERIAL_NONE_PARITY ((UCHAR)0x00) +#define SERIAL_ODD_PARITY ((UCHAR)0x08) +#define SERIAL_EVEN_PARITY ((UCHAR)0x18) +#define SERIAL_MARK_PARITY ((UCHAR)0x28) +#define SERIAL_SPACE_PARITY ((UCHAR)0x38) +#define SERIAL_PARITY_MASK ((UCHAR)0x38) + +#define SERIAL_MCR_DTR 0x01 +#define SERIAL_MCR_RTS 0x02 +#define SERIAL_MCR_OUT1 0x04 +#define SERIAL_MCR_OUT2 0x08 +#define SERIAL_MCR_LOOP 0x10 +#define SERIAL_MCR_TL16C550CAFE 0x20 + +#define SERIAL_LSR_DR 0x01 +#define SERIAL_LSR_OE 0x02 +#define SERIAL_LSR_PE 0x04 +#define SERIAL_LSR_FE 0x08 +#define SERIAL_LSR_BI 0x10 +#define SERIAL_LSR_THRE 0x20 +#define SERIAL_LSR_TEMT 0x40 +#define SERIAL_LSR_FIFOERR 0x80 + +#define SERIAL_MSR_DCTS 0x01 +#define SERIAL_MSR_DDSR 0x02 +#define SERIAL_MSR_TERI 0x04 +#define SERIAL_MSR_DDCD 0x08 +#define SERIAL_MSR_CTS 0x10 +#define SERIAL_MSR_DSR 0x20 +#define SERIAL_MSR_RI 0x40 +#define SERIAL_MSR_DCD 0x80 diff --git a/include/reactos/libs/cportlib/cportlib.h b/include/reactos/libs/cportlib/cportlib.h new file mode 100644 index 00000000000..be64007a42c --- /dev/null +++ b/include/reactos/libs/cportlib/cportlib.h @@ -0,0 +1,74 @@ +/* + * PROJECT: ReactOS ComPort Library + * LICENSE: BSD - See COPYING.ARM in the top level directory + * FILE: include/reactos/lib/cportlib/cportlib.h + * PURPOSE: Header for the ComPort Library + * PROGRAMMERS: ReactOS Portable Systems Group + */ + +/* INCLUDES *******************************************************************/ + +#include + +#define CP_GET_SUCCESS 0 +#define CP_GET_NODATA 1 +#define CP_GET_ERROR 2 + +#define CPPORT_FLAG_MODEM_CONTROL 0x02 +typedef struct _CPPORT +{ + PUCHAR Address; + ULONG Baud; + USHORT Flags; +} CPPORT, *PCPPORT; + +VOID +NTAPI +CpInitialize( + IN PCPPORT Port, + IN PUCHAR Address, + IN ULONG Rate + ); + +VOID +NTAPI +CpEnableFifo( + IN PUCHAR Address, + IN BOOLEAN Enable + ); + +BOOLEAN +NTAPI +CpDoesPortExist( + IN PUCHAR Address + ); + +UCHAR +NTAPI +CpReadLsr( + IN PCPPORT Port, + IN UCHAR ExpectedValue + ); + +VOID +NTAPI +CpSetBaud( + IN PCPPORT Port, + IN ULONG Rate + ); + +USHORT +NTAPI +CpGetByte( + IN PCPPORT Port, + IN PUCHAR Byte, + IN BOOLEAN Wait, + IN BOOLEAN Poll + ); + +VOID +NTAPI +CpPutByte( + IN PCPPORT Port, + IN UCHAR Byte + ); diff --git a/include/reactos/libs/libmpg123/aligncheck.h b/include/reactos/libs/libmpg123/aligncheck.h new file mode 100644 index 00000000000..502264b196f --- /dev/null +++ b/include/reactos/libs/libmpg123/aligncheck.h @@ -0,0 +1,45 @@ +/* + aligncheck: Some insane hacking to ensure stack alignment on library entry. + + copyright 2010 by the mpg123 project - free software under the terms of the LGPL 2.1 + see COPYING and AUTHORS files in distribution or http://mpg123.org + + intially written by Thomas Orgis + + Include this header once at the appropriate place. It is not supposed for general use... +*/ + + +#define ALIGNCHECK(mh) +#define ALIGNCHECKK +/* On compilers that support data alignment but not the automatic stack realignment. + We check for properly aligned stack before risking a crash because of badly compiled + client program. */ +#if (defined CCALIGN) && (defined NEED_ALIGNCHECK) && ((defined DEBUG) || (defined CHECK_ALIGN)) + +/* Common building block. */ +#define ALIGNMAINPART \ + /* minimum size of 16 bytes, not all compilers would align a smaller piece of data */ \ + double ALIGNED(16) altest[2]; \ + debug2("testing alignment, with %lu %% 16 = %lu", \ + (unsigned long)altest, (unsigned long)((size_t)altest % 16)); \ + if((size_t)altest % 16 != 0) + +#undef ALIGNCHECK +#define ALIGNCHECK(mh) \ + ALIGNMAINPART \ + { \ + error("Stack variable is not aligned! Your combination of compiler/library is dangerous!"); \ + if(mh != NULL) mh->err = MPG123_BAD_ALIGN; \ +\ + return MPG123_ERR; \ + } +#undef ALIGNCHECKK +#define ALIGNCHECKK \ + ALIGNMAINPART \ + { \ + error("Stack variable is not aligned! Your combination of compiler/library is dangerous!"); \ + return MPG123_BAD_ALIGN; \ + } + +#endif diff --git a/include/reactos/libs/libmpg123/compat.h b/include/reactos/libs/libmpg123/compat.h new file mode 100644 index 00000000000..aa8c99c1e2d --- /dev/null +++ b/include/reactos/libs/libmpg123/compat.h @@ -0,0 +1,177 @@ +/* + compat: Some compatibility functions and header inclusions. + Basic standard C stuff, that may barely be above/around C89. + + The mpg123 code is determined to keep it's legacy. A legacy of old, old UNIX. + It is envisioned to include this compat header instead of any of the "standard" headers, to catch compatibility issues. + So, don't include stdlib.h or string.h ... include compat.h. + + copyright 2007-8 by the mpg123 project - free software under the terms of the LGPL 2.1 + see COPYING and AUTHORS files in distribution or http://mpg123.org + initially written by Thomas Orgis +*/ + +#ifndef MPG123_COMPAT_H +#define MPG123_COMPAT_H + +#include "config.h" + +#ifdef HAVE_STDLIB_H +/* realloc, size_t */ +#include +#endif + +#include +#include + +#ifdef HAVE_SIGNAL_H +#include +#else +#ifdef HAVE_SYS_SIGNAL_H +#include +#endif +#endif + +#ifdef HAVE_UNISTD_H +#include +#endif + +/* Types, types, types. */ +/* Do we actually need these two in addition to sys/types.h? As replacement? */ +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_INTTYPES_H +#include +#endif +#ifdef HAVE_STDINT_H +#include +#endif +/* We want SIZE_MAX, etc. */ +#ifdef HAVE_LIMITS_H +#include +#endif + +#ifndef SIZE_MAX +#define SIZE_MAX ((size_t)-1) +#endif +#ifndef ULONG_MAX +#define ULONG_MAX ((unsigned long)-1) +#endif + +#ifdef HAVE_STRING_H +#include +#endif + +#ifdef OS2 +#include +#endif + +#ifdef HAVE_SYS_TIME_H +#include +#endif +/* For select(), I need select.h according to POSIX 2001, else: sys/time.h sys/types.h unistd.h */ +#ifdef HAVE_SYS_SELECT_H +#include +#endif + +/* To parse big numbers... */ +#ifdef HAVE_ATOLL +#define atobigint atoll +#else +#define atobigint atol +#endif + +// typedef unsigned char byte; + +/* A safe realloc also for very old systems where realloc(NULL, size) returns NULL. */ +void *safe_realloc(void *ptr, size_t size); +#ifndef HAVE_STRERROR +const char *strerror(int errnum); +#endif + +#ifndef HAVE_STRDUP +char *strdup(const char *s); +#endif + +/* If we have the size checks enabled, try to derive some sane printfs. + Simple start: Use max integer type and format if long is not big enough. + I am hesitating to use %ll without making sure that it's there... */ +#if !(defined PLAIN_C89) && (defined SIZEOF_OFF_T) && (SIZEOF_OFF_T > SIZEOF_LONG) && (defined PRIiMAX) +# define OFF_P PRIiMAX +typedef intmax_t off_p; +#else +# define OFF_P "li" +typedef long off_p; +#endif + +#if !(defined PLAIN_C89) && (defined SIZEOF_SIZE_T) && (SIZEOF_SIZE_T > SIZEOF_LONG) && (defined PRIuMAX) +# define SIZE_P PRIuMAX +typedef uintmax_t size_p; +#else +# define SIZE_P "lu" +typedef unsigned long size_p; +#endif + +#if !(defined PLAIN_C89) && (defined SIZEOF_SSIZE_T) && (SIZEOF_SSIZE_T > SIZEOF_LONG) && (defined PRIiMAX) +# define SSIZE_P PRIuMAX +typedef intmax_t ssize_p; +#else +# define SSIZE_P "li" +typedef long ssize_p; +#endif + +/** + * Opening a file handle can be different. + * This function here is defined to take a path in native encoding (ISO8859 / UTF-8 / ...), or, when MS Windows Unicode support is enabled, an UTF-8 string that will be converted back to native UCS-2 (wide character) before calling the system's open function. + * @param[in] wptr Pointer to wide string. + * @param[in] mbptr Pointer to multibyte string. + * @return file descriptor (>=0) or error code. + */ +int compat_open(const char *filename, int mode); + +/** + * Closing a file handle can be platform specific. + * This function takes a file descriptor that is to be closed. + * @param[in] infd File descriptor to be closed. + * @return 0 if the file was successfully closed. A return value of -1 indicates an error. + */ +int compat_close(int infd); + +/* Those do make sense in a separate file, but I chose to include them in compat.c because that's the one source whose object is shared between mpg123 and libmpg123 -- and both need the functionality internally. */ + +#ifdef WANT_WIN32_UNICODE +/** + * win32_uni2mbc + * Converts a null terminated UCS-2 string to a multibyte (UTF-8) equivalent. + * Caller is supposed to free allocated buffer. + * @param[in] wptr Pointer to wide string. + * @param[out] mbptr Pointer to multibyte string. + * @param[out] buflen Optional parameter for length of allocated buffer. + * @return status of WideCharToMultiByte conversion. + * + * WideCharToMultiByte - http://msdn.microsoft.com/en-us/library/dd374130(VS.85).aspx + */ +int win32_wide_utf8 (const wchar_t * const wptr, const char **const mbptr, size_t * const buflen); + +/** + * win32_mbc2uni + * Converts a null terminated UTF-8 string to a UCS-2 equivalent. + * Caller is supposed to free allocated buffer. + * @param[out] mbptr Pointer to multibyte string. + * @param[in] wptr Pointer to wide string. + * @param[out] buflen Optional parameter for length of allocated buffer. + * @return status of WideCharToMultiByte conversion. + * + * MultiByteToWideChar - http://msdn.microsoft.com/en-us/library/dd319072(VS.85).aspx + */ + +int win32_utf8_wide (const char *const mbptr, const wchar_t ** const wptr, size_t * const buflen); +#endif + +/* That one comes from Tellie on OS/2, needed in resolver. */ +#ifdef __KLIBC__ +typedef int socklen_t; +#endif + +#endif diff --git a/include/reactos/libs/libmpg123/config.h b/include/reactos/libs/libmpg123/config.h new file mode 100644 index 00000000000..d461c552e97 --- /dev/null +++ b/include/reactos/libs/libmpg123/config.h @@ -0,0 +1,408 @@ +/* src/config.h. Generated from config.h.in by configure. */ +/* src/config.h.in. Generated from configure.ac by autoheader. */ + +/* Define if your architecture wants/needs/can use attribute_align_arg and + alignment checks. It's for 32bit x86... */ +#define ABI_ALIGN_FUN 1 + +/* Define to use proper rounding. */ +/* #undef ACCURATE_ROUNDING */ + +/* Define if .align takes 3 for alignment of 2^3=8 bytes instead of 8. */ +/* #undef ASMALIGN_EXP */ + +/* Define if __attribute__((aligned(16))) shall be used */ +#define CCALIGN 1 + +/* Define if checking of stack alignment is wanted. */ +#define CHECK_ALIGN 1 + +/* Define if debugging is enabled. */ +/* #undef DEBUG */ + +/* The default audio output module(s) to use */ +#define DEFAULT_OUTPUT_MODULE "win32" + +/* Define if building with dynamcally linked libmpg123 */ +/* #undef DYNAMIC_BUILD */ + +/* Define if FIFO support is enabled. */ +/* #undef FIFO */ + +/* Define if frame index should be used. */ +#define FRAME_INDEX 1 + +/* Define if gapless is enabled. */ +#define GAPLESS 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_ALC_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_ALIB_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_AL_ALC_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_AL_AL_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_AL_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_ARPA_INET_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_ASM_AUDIOIO_H */ + +/* Define to 1 if you have the `atoll' function. */ +#define HAVE_ATOLL 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_AUDIOS_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_AUDIOTOOLBOX_AUDIOTOOLBOX_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_AUDIOUNIT_AUDIOUNIT_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_CORESERVICES_CORESERVICES_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_CULIB_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_DLFCN_H */ + +/* Define if getaddrinfo accepts the AI_ADDRCONFIG flag */ +/* #undef HAVE_GAI_ADDRCONFIG */ + +/* Define to 1 if you have the `getaddrinfo' function. */ +/* #undef HAVE_GETADDRINFO */ + +/* Define to 1 if you have the `getpagesize' function. */ +#define HAVE_GETPAGESIZE 1 + +/* Define to 1 if you have the `getuid' function. */ +/* #undef HAVE_GETUID */ + +/* Define to 1 if you have the header file. */ +#define HAVE_INTTYPES_H 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_LANGINFO_H */ + +/* Define to 1 if you have the `m' library (-lm). */ +#define HAVE_LIBM 1 + +/* Define to 1 if you have the `mx' library (-lmx). */ +/* #undef HAVE_LIBMX */ + +/* Define to 1 if you have the header file. */ +#define HAVE_LIMITS_H 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_LINUX_SOUNDCARD_H */ + +/* Define to 1 if you have the header file. */ +#define HAVE_LOCALE_H 1 + +/* Define if libltdl is available */ +/* #undef HAVE_LTDL */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_MACHINE_SOUNDCARD_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_MEMORY_H */ + +/* Define to 1 if you have the `mkfifo' function. */ +/* #undef HAVE_MKFIFO */ + +/* Define to 1 if you have a working `mmap' system call. */ +/* #undef HAVE_MMAP */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_NETDB_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_NETINET_IN_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_NETINET_TCP_H */ + +/* Define to 1 if you have the `nl_langinfo' function. */ +/* #undef HAVE_NL_LANGINFO */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_OPENAL_ALC_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_OPENAL_AL_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_OS2ME_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_OS2_H */ + +/* Define to 1 if you have the `random' function. */ +/* #undef HAVE_RANDOM */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_SCHED_H */ + +/* Define to 1 if you have the `sched_setscheduler' function. */ +/* #undef HAVE_SCHED_SETSCHEDULER */ + +/* Define to 1 if you have the `setlocale' function. */ +#define HAVE_SETLOCALE 1 + +/* Define to 1 if you have the `setpriority' function. */ +/* #undef HAVE_SETPRIORITY */ + +/* Define to 1 if you have the `setuid' function. */ +/* #undef HAVE_SETUID */ + +/* Define to 1 if you have the header file. */ +#define HAVE_SIGNAL_H 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_SNDIO_H */ + +/* Define to 1 if you have the header file. */ +#define HAVE_STDINT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDIO_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDLIB_H 1 + +/* Define to 1 if you have the `strdup' function. */ +#define HAVE_STRDUP 1 + +/* Define to 1 if you have the `strerror' function. */ +#define HAVE_STRERROR 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_STRINGS_H */ + +/* Define to 1 if you have the header file. */ +#define HAVE_STRING_H 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_SUN_AUDIOIO_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_SYS_AUDIOIO_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_SYS_AUDIO_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_SYS_IOCTL_H */ + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_PARAM_H 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_SYS_RESOURCE_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_SYS_SIGNAL_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_SYS_SOCKET_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_SYS_SOUNDCARD_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_SYS_STAT_H */ + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_TIME_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_TYPES_H 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_SYS_WAIT_H */ + +/* Define this if you have the POSIX termios library */ +/* #undef HAVE_TERMIOS */ + +/* Define to 1 if you have the header file. */ +#define HAVE_UNISTD_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_WINDOWS_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_WS2TCPIP_H 1 + +/* Define to indicate that float storage follows IEEE754. */ +#define IEEE_FLOAT 1 + +/* size of the frame index seek table */ +#define INDEX_SIZE 1000 + +/* Define if IPV6 support is enabled. */ +#define IPV6 1 + +/* Define this to the size of long type in bits, used for LFS small/native + alias functions. */ +#define LFS_ALIAS_BITS 32 + +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#define LT_OBJDIR ".libs/" + +/* Define if network support is enabled. */ +#define NETWORK 1 + +/* Define to disable 16 bit integer output. */ +/* #undef NO_16BIT */ + +/* Define to disable 32 bit integer output. */ +/* #undef NO_32BIT */ + +/* Define to disable 8 bit integer output. */ +/* #undef NO_8BIT */ + +/* Define to disable downsampled decoding. */ +/* #undef NO_DOWNSAMPLE */ + +/* Define to disable error messages in combination with a return value (the + return is left intact). */ +/* #undef NO_ERETURN */ + +/* Define to disable error messages. */ +/* #undef NO_ERROR */ + +/* Define to disable feeder and buffered readers. */ +/* #undef NO_FEEDER */ + +/* Define to disable ICY handling. */ +/* #undef NO_ICY */ + +/* Define to disable ID3v2 parsing. */ +/* #undef NO_ID3V2 */ + +/* Define to disable layer I. */ +/* #undef NO_LAYER1 */ + +/* Define to disable layer II. */ +/* #undef NO_LAYER2 */ + +/* Define to disable layer III. */ +/* #undef NO_LAYER3 */ + +/* Define to disable ntom resampling. */ +/* #undef NO_NTOM */ + +/* Define to disable real output. */ +/* #undef NO_REAL */ + +/* Define to disable string functions. */ +/* #undef NO_STRING */ + +/* Define to disable warning messages. */ +/* #undef NO_WARNING */ + +/* Name of package */ +#define PACKAGE "mpg123" + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "mpg123-devel@lists.sourceforge.net" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "mpg123" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "mpg123 1.12.3" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "mpg123" + +/* Define to the home page for this package. */ +#define PACKAGE_URL "" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "1.12.3" + +/* Define if portaudio v18 API is wanted. */ +/* #undef PORTAUDIO18 */ + +/* The size of `int32_t', as computed by sizeof. */ +#define SIZEOF_INT32_T 4 + +/* The size of `long', as computed by sizeof. */ +#define SIZEOF_LONG 4 + +/* The size of `off_t', as computed by sizeof. */ +#define SIZEOF_OFF_T 4 + +/* The size of `size_t', as computed by sizeof. */ +#define SIZEOF_SIZE_T 4 + +/* The size of `ssize_t', as computed by sizeof. */ +#define SIZEOF_SSIZE_T 4 + +/* Define to 1 if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Define if modules are enabled */ +/* #undef USE_MODULES */ + +/* Version number of package */ +#define VERSION "1.12.3" + +/* Define to use Win32 sockets */ +#define WANT_WIN32_SOCKETS 1 + +/* Define to use Unicode for Windows */ +#define WANT_WIN32_UNICODE 1 + +/* Number of bits in a file offset, on hosts where this is settable. */ +/* #undef _FILE_OFFSET_BITS */ + +/* Define for large files, on AIX-style hosts. */ +/* #undef _LARGE_FILES */ + +/* Define to empty if `const' does not conform to ANSI C. */ +/* #undef const */ + +/* Define to `__inline__' or `__inline' if that's what the C compiler + calls it, or to nothing if 'inline' is not supported under any name. */ +#ifndef __cplusplus +/* #undef inline */ +#endif + +/* Define to `short' if does not define. */ +/* #undef int16_t */ + +/* Define to `int' if does not define. */ +/* #undef int32_t */ + +/* Define to `long int' if does not define. */ +/* #undef off_t */ + +/* Define to `unsigned long' if does not define. */ +/* #undef size_t */ + +/* Define to `long' if does not define. */ +/* #undef ssize_t */ + +/* Define to `unsigned short' if does not define. */ +/* #undef uint16_t */ + +/* Define to `unsigned int' if does not define. */ +/* #undef uint32_t */ + +/* Define to `unsigned long' if does not define. */ +/* #undef uintptr_t */ diff --git a/include/reactos/libs/libmpg123/debug.h b/include/reactos/libs/libmpg123/debug.h new file mode 100644 index 00000000000..8cfd67b2d21 --- /dev/null +++ b/include/reactos/libs/libmpg123/debug.h @@ -0,0 +1,171 @@ +/* + debug.h: + if DEBUG defined: debugging macro fprintf wrappers + else: macros defined to do nothing + That saves typing #ifdef DEBUG all the time and still preserves + lean code without debugging. + + public domain (or LGPL / GPL, if you like that more;-) + generated by debugdef.pl, what was + trivially written by Thomas Orgis +*/ + +#include "config.h" + +/* + I could do that with variadic macros available: + #define sdebug(me, s) fprintf(stderr, "[location] " s "\n") + #define debug(me, s, ...) fprintf(stderr, "[location] " s "}n", __VA_ARGS__) + + Variadic macros are a C99 feature... + Now just predefining stuff non-variadic for up to 15 arguments. + It's cumbersome to have them all with different names, though... +*/ + +#ifdef DEBUG +#include +#define debug(s) fprintf(stderr, "[" __FILE__ ":%i] debug: " s "\n", __LINE__) +#define debug1(s, a) fprintf(stderr, "[" __FILE__ ":%i] debug: " s "\n", __LINE__, a) +#define debug2(s, a, b) fprintf(stderr, "[" __FILE__ ":%i] debug: " s "\n", __LINE__, a, b) +#define debug3(s, a, b, c) fprintf(stderr, "[" __FILE__ ":%i] debug: " s "\n", __LINE__, a, b, c) +#define debug4(s, a, b, c, d) fprintf(stderr, "[" __FILE__ ":%i] debug: " s "\n", __LINE__, a, b, c, d) +#define debug5(s, a, b, c, d, e) fprintf(stderr, "[" __FILE__ ":%i] debug: " s "\n", __LINE__, a, b, c, d, e) +#define debug6(s, a, b, c, d, e, f) fprintf(stderr, "[" __FILE__ ":%i] debug: " s "\n", __LINE__, a, b, c, d, e, f) +#define debug7(s, a, b, c, d, e, f, g) fprintf(stderr, "[" __FILE__ ":%i] debug: " s "\n", __LINE__, a, b, c, d, e, f, g) +#define debug8(s, a, b, c, d, e, f, g, h) fprintf(stderr, "[" __FILE__ ":%i] debug: " s "\n", __LINE__, a, b, c, d, e, f, g, h) +#define debug9(s, a, b, c, d, e, f, g, h, i) fprintf(stderr, "[" __FILE__ ":%i] debug: " s "\n", __LINE__, a, b, c, d, e, f, g, h, i) +#define debug10(s, a, b, c, d, e, f, g, h, i, j) fprintf(stderr, "[" __FILE__ ":%i] debug: " s "\n", __LINE__, a, b, c, d, e, f, g, h, i, j) +#define debug11(s, a, b, c, d, e, f, g, h, i, j, k) fprintf(stderr, "[" __FILE__ ":%i] debug: " s "\n", __LINE__, a, b, c, d, e, f, g, h, i, j, k) +#define debug12(s, a, b, c, d, e, f, g, h, i, j, k, l) fprintf(stderr, "[" __FILE__ ":%i] debug: " s "\n", __LINE__, a, b, c, d, e, f, g, h, i, j, k, l) +#define debug13(s, a, b, c, d, e, f, g, h, i, j, k, l, m) fprintf(stderr, "[" __FILE__ ":%i] debug: " s "\n", __LINE__, a, b, c, d, e, f, g, h, i, j, k, l, m) +#define debug14(s, a, b, c, d, e, f, g, h, i, j, k, l, m, n) fprintf(stderr, "[" __FILE__ ":%i] debug: " s "\n", __LINE__, a, b, c, d, e, f, g, h, i, j, k, l, m, n) +#define debug15(s, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) fprintf(stderr, "[" __FILE__ ":%i] debug: " s "\n", __LINE__, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) +#else +#define debug(s) +#define debug1(s, a) +#define debug2(s, a, b) +#define debug3(s, a, b, c) +#define debug4(s, a, b, c, d) +#define debug5(s, a, b, c, d, e) +#define debug6(s, a, b, c, d, e, f) +#define debug7(s, a, b, c, d, e, f, g) +#define debug8(s, a, b, c, d, e, f, g, h) +#define debug9(s, a, b, c, d, e, f, g, h, i) +#define debug10(s, a, b, c, d, e, f, g, h, i, j) +#define debug11(s, a, b, c, d, e, f, g, h, i, j, k) +#define debug12(s, a, b, c, d, e, f, g, h, i, j, k, l) +#define debug13(s, a, b, c, d, e, f, g, h, i, j, k, l, m) +#define debug14(s, a, b, c, d, e, f, g, h, i, j, k, l, m, n) +#define debug15(s, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) +#endif + +/* warning macros also here... */ +#ifndef NO_WARNING +#define warning(s) fprintf(stderr, "[" __FILE__ ":%i] warning: " s "\n", __LINE__) +#define warning1(s, a) fprintf(stderr, "[" __FILE__ ":%i] warning: " s "\n", __LINE__, a) +#define warning2(s, a, b) fprintf(stderr, "[" __FILE__ ":%i] warning: " s "\n", __LINE__, a, b) +#define warning3(s, a, b, c) fprintf(stderr, "[" __FILE__ ":%i] warning: " s "\n", __LINE__, a, b, c) +#define warning4(s, a, b, c, d) fprintf(stderr, "[" __FILE__ ":%i] warning: " s "\n", __LINE__, a, b, c, d) +#define warning5(s, a, b, c, d, e) fprintf(stderr, "[" __FILE__ ":%i] warning: " s "\n", __LINE__, a, b, c, d, e) +#define warning6(s, a, b, c, d, e, f) fprintf(stderr, "[" __FILE__ ":%i] warning: " s "\n", __LINE__, a, b, c, d, e, f) +#define warning7(s, a, b, c, d, e, f, g) fprintf(stderr, "[" __FILE__ ":%i] warning: " s "\n", __LINE__, a, b, c, d, e, f, g) +#define warning8(s, a, b, c, d, e, f, g, h) fprintf(stderr, "[" __FILE__ ":%i] warning: " s "\n", __LINE__, a, b, c, d, e, f, g, h) +#define warning9(s, a, b, c, d, e, f, g, h, i) fprintf(stderr, "[" __FILE__ ":%i] warning: " s "\n", __LINE__, a, b, c, d, e, f, g, h, i) +#define warning10(s, a, b, c, d, e, f, g, h, i, j) fprintf(stderr, "[" __FILE__ ":%i] warning: " s "\n", __LINE__, a, b, c, d, e, f, g, h, i, j) +#define warning11(s, a, b, c, d, e, f, g, h, i, j, k) fprintf(stderr, "[" __FILE__ ":%i] warning: " s "\n", __LINE__, a, b, c, d, e, f, g, h, i, j, k) +#define warning12(s, a, b, c, d, e, f, g, h, i, j, k, l) fprintf(stderr, "[" __FILE__ ":%i] warning: " s "\n", __LINE__, a, b, c, d, e, f, g, h, i, j, k, l) +#define warning13(s, a, b, c, d, e, f, g, h, i, j, k, l, m) fprintf(stderr, "[" __FILE__ ":%i] warning: " s "\n", __LINE__, a, b, c, d, e, f, g, h, i, j, k, l, m) +#define warning14(s, a, b, c, d, e, f, g, h, i, j, k, l, m, n) fprintf(stderr, "[" __FILE__ ":%i] warning: " s "\n", __LINE__, a, b, c, d, e, f, g, h, i, j, k, l, m, n) +#define warning15(s, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) fprintf(stderr, "[" __FILE__ ":%i] warning: " s "\n", __LINE__, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) +#else +#define warning(s) +#define warning1(s, a) +#define warning2(s, a, b) +#define warning3(s, a, b, c) +#define warning4(s, a, b, c, d) +#define warning5(s, a, b, c, d, e) +#define warning6(s, a, b, c, d, e, f) +#define warning7(s, a, b, c, d, e, f, g) +#define warning8(s, a, b, c, d, e, f, g, h) +#define warning9(s, a, b, c, d, e, f, g, h, i) +#define warning10(s, a, b, c, d, e, f, g, h, i, j) +#define warning11(s, a, b, c, d, e, f, g, h, i, j, k) +#define warning12(s, a, b, c, d, e, f, g, h, i, j, k, l) +#define warning13(s, a, b, c, d, e, f, g, h, i, j, k, l, m) +#define warning14(s, a, b, c, d, e, f, g, h, i, j, k, l, m, n) +#define warning15(s, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) +#endif + +/* error macros also here... */ +#ifndef NO_ERROR +#define error(s) fprintf(stderr, "[" __FILE__ ":%i] error: " s "\n", __LINE__) +#define error1(s, a) fprintf(stderr, "[" __FILE__ ":%i] error: " s "\n", __LINE__, a) +#define error2(s, a, b) fprintf(stderr, "[" __FILE__ ":%i] error: " s "\n", __LINE__, a, b) +#define error3(s, a, b, c) fprintf(stderr, "[" __FILE__ ":%i] error: " s "\n", __LINE__, a, b, c) +#define error4(s, a, b, c, d) fprintf(stderr, "[" __FILE__ ":%i] error: " s "\n", __LINE__, a, b, c, d) +#define error5(s, a, b, c, d, e) fprintf(stderr, "[" __FILE__ ":%i] error: " s "\n", __LINE__, a, b, c, d, e) +#define error6(s, a, b, c, d, e, f) fprintf(stderr, "[" __FILE__ ":%i] error: " s "\n", __LINE__, a, b, c, d, e, f) +#define error7(s, a, b, c, d, e, f, g) fprintf(stderr, "[" __FILE__ ":%i] error: " s "\n", __LINE__, a, b, c, d, e, f, g) +#define error8(s, a, b, c, d, e, f, g, h) fprintf(stderr, "[" __FILE__ ":%i] error: " s "\n", __LINE__, a, b, c, d, e, f, g, h) +#define error9(s, a, b, c, d, e, f, g, h, i) fprintf(stderr, "[" __FILE__ ":%i] error: " s "\n", __LINE__, a, b, c, d, e, f, g, h, i) +#define error10(s, a, b, c, d, e, f, g, h, i, j) fprintf(stderr, "[" __FILE__ ":%i] error: " s "\n", __LINE__, a, b, c, d, e, f, g, h, i, j) +#define error11(s, a, b, c, d, e, f, g, h, i, j, k) fprintf(stderr, "[" __FILE__ ":%i] error: " s "\n", __LINE__, a, b, c, d, e, f, g, h, i, j, k) +#define error12(s, a, b, c, d, e, f, g, h, i, j, k, l) fprintf(stderr, "[" __FILE__ ":%i] error: " s "\n", __LINE__, a, b, c, d, e, f, g, h, i, j, k, l) +#define error13(s, a, b, c, d, e, f, g, h, i, j, k, l, m) fprintf(stderr, "[" __FILE__ ":%i] error: " s "\n", __LINE__, a, b, c, d, e, f, g, h, i, j, k, l, m) +#define error14(s, a, b, c, d, e, f, g, h, i, j, k, l, m, n) fprintf(stderr, "[" __FILE__ ":%i] error: " s "\n", __LINE__, a, b, c, d, e, f, g, h, i, j, k, l, m, n) +#define error15(s, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) fprintf(stderr, "[" __FILE__ ":%i] error: " s "\n", __LINE__, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) +#else +#define error(s) +#define error1(s, a) +#define error2(s, a, b) +#define error3(s, a, b, c) +#define error4(s, a, b, c, d) +#define error5(s, a, b, c, d, e) +#define error6(s, a, b, c, d, e, f) +#define error7(s, a, b, c, d, e, f, g) +#define error8(s, a, b, c, d, e, f, g, h) +#define error9(s, a, b, c, d, e, f, g, h, i) +#define error10(s, a, b, c, d, e, f, g, h, i, j) +#define error11(s, a, b, c, d, e, f, g, h, i, j, k) +#define error12(s, a, b, c, d, e, f, g, h, i, j, k, l) +#define error13(s, a, b, c, d, e, f, g, h, i, j, k, l, m) +#define error14(s, a, b, c, d, e, f, g, h, i, j, k, l, m, n) +#define error15(s, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) +#endif + +/* ereturn macros also here... */ +#ifndef NO_ERETURN +#define ereturn(rv, s) do{ fprintf(stderr, "[" __FILE__ ":%i] ereturn: " s "\n", __LINE__); return rv; }while(0) +#define ereturn1(rv, s, a) do{ fprintf(stderr, "[" __FILE__ ":%i] ereturn: " s "\n", __LINE__, a); return rv; }while(0) +#define ereturn2(rv, s, a, b) do{ fprintf(stderr, "[" __FILE__ ":%i] ereturn: " s "\n", __LINE__, a, b); return rv; }while(0) +#define ereturn3(rv, s, a, b, c) do{ fprintf(stderr, "[" __FILE__ ":%i] ereturn: " s "\n", __LINE__, a, b, c); return rv; }while(0) +#define ereturn4(rv, s, a, b, c, d) do{ fprintf(stderr, "[" __FILE__ ":%i] ereturn: " s "\n", __LINE__, a, b, c, d); return rv; }while(0) +#define ereturn5(rv, s, a, b, c, d, e) do{ fprintf(stderr, "[" __FILE__ ":%i] ereturn: " s "\n", __LINE__, a, b, c, d, e); return rv; }while(0) +#define ereturn6(rv, s, a, b, c, d, e, f) do{ fprintf(stderr, "[" __FILE__ ":%i] ereturn: " s "\n", __LINE__, a, b, c, d, e, f); return rv; }while(0) +#define ereturn7(rv, s, a, b, c, d, e, f, g) do{ fprintf(stderr, "[" __FILE__ ":%i] ereturn: " s "\n", __LINE__, a, b, c, d, e, f, g); return rv; }while(0) +#define ereturn8(rv, s, a, b, c, d, e, f, g, h) do{ fprintf(stderr, "[" __FILE__ ":%i] ereturn: " s "\n", __LINE__, a, b, c, d, e, f, g, h); return rv; }while(0) +#define ereturn9(rv, s, a, b, c, d, e, f, g, h, i) do{ fprintf(stderr, "[" __FILE__ ":%i] ereturn: " s "\n", __LINE__, a, b, c, d, e, f, g, h, i); return rv; }while(0) +#define ereturn10(rv, s, a, b, c, d, e, f, g, h, i, j) do{ fprintf(stderr, "[" __FILE__ ":%i] ereturn: " s "\n", __LINE__, a, b, c, d, e, f, g, h, i, j); return rv; }while(0) +#define ereturn11(rv, s, a, b, c, d, e, f, g, h, i, j, k) do{ fprintf(stderr, "[" __FILE__ ":%i] ereturn: " s "\n", __LINE__, a, b, c, d, e, f, g, h, i, j, k); return rv; }while(0) +#define ereturn12(rv, s, a, b, c, d, e, f, g, h, i, j, k, l) do{ fprintf(stderr, "[" __FILE__ ":%i] ereturn: " s "\n", __LINE__, a, b, c, d, e, f, g, h, i, j, k, l); return rv; }while(0) +#define ereturn13(rv, s, a, b, c, d, e, f, g, h, i, j, k, l, m) do{ fprintf(stderr, "[" __FILE__ ":%i] ereturn: " s "\n", __LINE__, a, b, c, d, e, f, g, h, i, j, k, l, m); return rv; }while(0) +#define ereturn14(rv, s, a, b, c, d, e, f, g, h, i, j, k, l, m, n) do{ fprintf(stderr, "[" __FILE__ ":%i] ereturn: " s "\n", __LINE__, a, b, c, d, e, f, g, h, i, j, k, l, m, n); return rv; }while(0) +#define ereturn15(rv, s, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) do{ fprintf(stderr, "[" __FILE__ ":%i] ereturn: " s "\n", __LINE__, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o); return rv; }while(0) +#else +#define ereturn(rv, s) return rv +#define ereturn1(rv, s, a) return rv +#define ereturn2(rv, s, a, b) return rv +#define ereturn3(rv, s, a, b, c) return rv +#define ereturn4(rv, s, a, b, c, d) return rv +#define ereturn5(rv, s, a, b, c, d, e) return rv +#define ereturn6(rv, s, a, b, c, d, e, f) return rv +#define ereturn7(rv, s, a, b, c, d, e, f, g) return rv +#define ereturn8(rv, s, a, b, c, d, e, f, g, h) return rv +#define ereturn9(rv, s, a, b, c, d, e, f, g, h, i) return rv +#define ereturn10(rv, s, a, b, c, d, e, f, g, h, i, j) return rv +#define ereturn11(rv, s, a, b, c, d, e, f, g, h, i, j, k) return rv +#define ereturn12(rv, s, a, b, c, d, e, f, g, h, i, j, k, l) return rv +#define ereturn13(rv, s, a, b, c, d, e, f, g, h, i, j, k, l, m) return rv +#define ereturn14(rv, s, a, b, c, d, e, f, g, h, i, j, k, l, m, n) return rv +#define ereturn15(rv, s, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) return rv +#endif diff --git a/include/reactos/libs/libmpg123/decode.h b/include/reactos/libs/libmpg123/decode.h new file mode 100644 index 00000000000..f35768d1b95 --- /dev/null +++ b/include/reactos/libs/libmpg123/decode.h @@ -0,0 +1,262 @@ +/* + decode.h: common definitions for decode functions + + This file is strongly tied with optimize.h concerning the synth functions. + Perhaps one should restructure that a bit. + + copyright 2007-8 by the mpg123 project - free software under the terms of the LGPL 2.1 + see COPYING and AUTHORS files in distribution or http://mpg123.org + initially written by Thomas Orgis, taking WRITE_SAMPLE from decode.c +*/ +#ifndef MPG123_DECODE_H +#define MPG123_DECODE_H + +/* Selection of class of output routines for basic format. */ +#ifndef REAL_IS_FIXED +#define OUT_FORMATS 4 /* Basic output formats: 16bit, 8bit, real and s32 */ +#else +#define OUT_FORMATS 2 /* Only up to 16bit */ +#endif + +#define OUT_16 0 +#define OUT_8 1 +/* Those are defined but not supported for fixed point decoding! */ +#define OUT_REAL 2 /* Write a floating point sample (that is, one matching the internal real type). */ +#define OUT_S32 3 + +#ifdef NO_NTOM +#define NTOM_MAX 1 +#else +#define NTOM_MAX 8 /* maximum allowed factor for upsampling */ +#define NTOM_MAX_FREQ 96000 /* maximum frequency to upsample to / downsample from */ +#define NTOM_MUL (32768) +void ntom_set_ntom(mpg123_handle *fr, off_t num); +#endif + +/* Let's collect all possible synth functions here, for an overview. + If they are actually defined and used depends on preprocessor machinery. + See synth.c and optimize.h for that, also some special C and assembler files. */ + +#ifndef NO_16BIT +/* The signed-16bit-producing variants. */ +int synth_1to1 (real*, int, mpg123_handle*, int); +int synth_1to1_dither (real*, int, mpg123_handle*, int); +int synth_1to1_i386 (real*, int, mpg123_handle*, int); +int synth_1to1_i586 (real*, int, mpg123_handle*, int); +int synth_1to1_i586_dither(real*, int, mpg123_handle*, int); +int synth_1to1_mmx (real*, int, mpg123_handle*, int); +int synth_1to1_3dnow (real*, int, mpg123_handle*, int); +int synth_1to1_sse (real*, int, mpg123_handle*, int); +int synth_1to1_stereo_sse (real*, real*, mpg123_handle*); +int synth_1to1_3dnowext (real*, int, mpg123_handle*, int); +int synth_1to1_altivec (real*, int, mpg123_handle*, int); +int synth_1to1_stereo_altivec(real*, real*, mpg123_handle*); +int synth_1to1_x86_64 (real*, int, mpg123_handle*, int); +int synth_1to1_stereo_x86_64(real*, real*, mpg123_handle*); +int synth_1to1_arm (real*, int, mpg123_handle*, int); +/* This is different, special usage in layer3.c only. + Hence, the name... and now forget about it. + Never use it outside that special portion of code inside layer3.c! */ +int absynth_1to1_i486(real*, int, mpg123_handle*, int); +/* These mono/stereo converters use one of the above for the grunt work. */ +int synth_1to1_mono (real*, mpg123_handle*); +int synth_1to1_mono2stereo(real*, mpg123_handle*); + +/* Sample rate decimation comes in less flavours. */ +#ifndef NO_DOWNSAMPLE +int synth_2to1 (real*, int, mpg123_handle*, int); +int synth_2to1_dither (real*, int, mpg123_handle*, int); +int synth_2to1_i386 (real*, int, mpg123_handle*, int); +int synth_2to1_mono (real*, mpg123_handle*); +int synth_2to1_mono2stereo(real*, mpg123_handle*); +int synth_4to1 (real *,int, mpg123_handle*, int); +int synth_4to1_dither (real *,int, mpg123_handle*, int); +int synth_4to1_i386 (real*, int, mpg123_handle*, int); +int synth_4to1_mono (real*, mpg123_handle*); +int synth_4to1_mono2stereo(real*, mpg123_handle*); +#endif +#ifndef NO_NTOM +/* NtoM is really just one implementation. */ +int synth_ntom (real *,int, mpg123_handle*, int); +int synth_ntom_mono (real *, mpg123_handle *); +int synth_ntom_mono2stereo (real *, mpg123_handle *); +#endif +#endif + +#ifndef NO_8BIT +/* The 8bit-producing variants. */ +/* There are direct 8-bit synths and wrappers over a possibly optimized 16bit one. */ +int synth_1to1_8bit (real*, int, mpg123_handle*, int); +int synth_1to1_8bit_i386 (real*, int, mpg123_handle*, int); +#ifndef NO_16BIT +int synth_1to1_8bit_wrap (real*, int, mpg123_handle*, int); +int synth_1to1_8bit_mono (real*, mpg123_handle*); +#endif +int synth_1to1_8bit_mono2stereo(real*, mpg123_handle*); +#ifndef NO_16BIT +int synth_1to1_8bit_wrap_mono (real*, mpg123_handle*); +int synth_1to1_8bit_wrap_mono2stereo(real*, mpg123_handle*); +#endif +#ifndef NO_DOWNSAMPLE +int synth_2to1_8bit (real*, int, mpg123_handle*, int); +int synth_2to1_8bit_i386 (real*, int, mpg123_handle*, int); +int synth_2to1_8bit_mono (real*, mpg123_handle*); +int synth_2to1_8bit_mono2stereo(real*, mpg123_handle*); +int synth_4to1_8bit (real*, int, mpg123_handle*, int); +int synth_4to1_8bit_i386 (real*, int, mpg123_handle*, int); +int synth_4to1_8bit_mono (real*, mpg123_handle*); +int synth_4to1_8bit_mono2stereo(real*, mpg123_handle*); +#endif +#ifndef NO_NTOM +int synth_ntom_8bit (real*, int, mpg123_handle*, int); +int synth_ntom_8bit_mono (real*, mpg123_handle*); +int synth_ntom_8bit_mono2stereo(real*, mpg123_handle*); +#endif +#endif + +#ifndef REAL_IS_FIXED + +#ifndef NO_REAL +/* The real-producing variants. */ +int synth_1to1_real (real*, int, mpg123_handle*, int); +int synth_1to1_real_i386 (real*, int, mpg123_handle*, int); +int synth_1to1_real_sse (real*, int, mpg123_handle*, int); +int synth_1to1_real_stereo_sse (real*, real*, mpg123_handle*); +int synth_1to1_real_x86_64 (real*, int, mpg123_handle*, int); +int synth_1to1_real_stereo_x86_64(real*, real*, mpg123_handle*); +int synth_1to1_real_altivec (real*, int, mpg123_handle*, int); +int synth_1to1_real_stereo_altivec(real*, real*, mpg123_handle*); +int synth_1to1_real_mono (real*, mpg123_handle*); +int synth_1to1_real_mono2stereo(real*, mpg123_handle*); +#ifndef NO_DOWNSAMPLE +int synth_2to1_real (real*, int, mpg123_handle*, int); +int synth_2to1_real_i386 (real*, int, mpg123_handle*, int); +int synth_2to1_real_mono (real*, mpg123_handle*); +int synth_2to1_real_mono2stereo(real*, mpg123_handle*); +int synth_4to1_real (real*, int, mpg123_handle*, int); +int synth_4to1_real_i386 (real*, int, mpg123_handle*, int); +int synth_4to1_real_mono (real*, mpg123_handle*); +int synth_4to1_real_mono2stereo(real*, mpg123_handle*); +#endif +#ifndef NO_NTOM +int synth_ntom_real (real*, int, mpg123_handle*, int); +int synth_ntom_real_mono (real*, mpg123_handle*); +int synth_ntom_real_mono2stereo(real*, mpg123_handle*); +#endif +#endif + +#ifndef NO_32BIT +/* 32bit integer */ +int synth_1to1_s32 (real*, int, mpg123_handle*, int); +int synth_1to1_s32_i386 (real*, int, mpg123_handle*, int); +int synth_1to1_s32_sse (real*, int, mpg123_handle*, int); +int synth_1to1_s32_stereo_sse (real*, real*, mpg123_handle*); +int synth_1to1_s32_x86_64 (real*, int, mpg123_handle*, int); +int synth_1to1_s32_stereo_x86_64(real*, real*, mpg123_handle*); +int synth_1to1_s32_altivec (real*, int, mpg123_handle*, int); +int synth_1to1_s32_stereo_altivec(real*, real*, mpg123_handle*); +int synth_1to1_s32_mono (real*, mpg123_handle*); +int synth_1to1_s32_mono2stereo(real*, mpg123_handle*); +#ifndef NO_DOWNSAMPLE +int synth_2to1_s32 (real*, int, mpg123_handle*, int); +int synth_2to1_s32_i386 (real*, int, mpg123_handle*, int); +int synth_2to1_s32_mono (real*, mpg123_handle*); +int synth_2to1_s32_mono2stereo(real*, mpg123_handle*); +int synth_4to1_s32 (real*, int, mpg123_handle*, int); +int synth_4to1_s32_i386 (real*, int, mpg123_handle*, int); +int synth_4to1_s32_mono (real*, mpg123_handle*); +int synth_4to1_s32_mono2stereo(real*, mpg123_handle*); +#endif +#ifndef NO_NTOM +int synth_ntom_s32 (real*, int, mpg123_handle*, int); +int synth_ntom_s32_mono (real*, mpg123_handle*); +int synth_ntom_s32_mono2stereo(real*, mpg123_handle*); +#endif +#endif + +#endif /* FIXED */ + + +/* Inside these synth functions, some dct64 variants may be used. + The special optimized ones that only appear in assembler code are not mentioned here. + And, generally, these functions are only employed in a matching synth function. */ +void dct64 (real *,real *,real *); +void dct64_i386 (real *,real *,real *); +void dct64_altivec(real *,real *,real *); +void dct64_i486(int*, int* , real*); /* Yeah, of no use outside of synth_i486.c .*/ + +/* This is used by the layer 3 decoder, one generic function and 3DNow variants. */ +void dct36 (real *,real *,real *,real *,real *); +void dct36_3dnow (real *,real *,real *,real *,real *); +void dct36_3dnowext(real *,real *,real *,real *,real *); + +/* Tools for NtoM resampling synth, defined in ntom.c . */ +int synth_ntom_set_step(mpg123_handle *fr); /* prepare ntom decoding */ +unsigned long ntom_val(mpg123_handle *fr, off_t frame); /* compute ntom_val for frame offset */ +/* Frame and sample offsets. */ +#ifndef NO_NTOM +/* + Outsamples of _this_ frame. + To be exact: The samples to be expected from the next frame decode (using the current ntom_val). When you already decoded _this_ frame, this is the number of samples to be expected from the next one. +*/ +off_t ntom_frame_outsamples(mpg123_handle *fr); +/* Total out/insample offset. */ +off_t ntom_frmouts(mpg123_handle *fr, off_t frame); +off_t ntom_ins2outs(mpg123_handle *fr, off_t ins); +off_t ntom_frameoff(mpg123_handle *fr, off_t soff); +#endif + +/* Initialization of any static data that majy be needed at runtime. + Make sure you call these once before it is too late. */ +#ifndef NO_LAYER3 +void init_layer3(void); +real init_layer3_gainpow2(mpg123_handle *fr, int i); +void init_layer3_stuff(mpg123_handle *fr, real (*gainpow2)(mpg123_handle *fr, int i)); +#endif +#ifndef NO_LAYER12 +void init_layer12(void); +real* init_layer12_table(mpg123_handle *fr, real *table, int m); +void init_layer12_stuff(mpg123_handle *fr, real* (*init_table)(mpg123_handle *fr, real *table, int m)); +#endif + +void prepare_decode_tables(void); + +extern real *pnts[5]; /* tabinit provides, dct64 needs */ + +/* Runtime (re)init functions; needed more often. */ +void make_decode_tables(mpg123_handle *fr); /* For every volume change. */ +/* Stuff needed after updating synth setup (see set_synth_functions()). */ + +#ifdef OPT_MMXORSSE +/* Special treatment for mmx-like decoders, these functions go into the slots below. */ +void make_decode_tables_mmx(mpg123_handle *fr); +#ifndef NO_LAYER3 +real init_layer3_gainpow2_mmx(mpg123_handle *fr, int i); +#endif +#ifndef NO_LAYER12 +real* init_layer12_table_mmx(mpg123_handle *fr, real *table, int m); +#endif +#endif + +#ifndef NO_8BIT +/* Needed when switching to 8bit output. */ +int make_conv16to8_table(mpg123_handle *fr); +#endif + +/* These are the actual workers. + They operate on the parsed frame data and handle decompression to audio samples. + The synth functions defined above are called from inside the layer handlers. */ + +#ifndef NO_LAYER3 +int do_layer3(mpg123_handle *fr); +#endif +#ifndef NO_LAYER2 +int do_layer2(mpg123_handle *fr); +#endif +#ifndef NO_LAYER1 +int do_layer1(mpg123_handle *fr); +#endif +/* There's an 3DNow counterpart in asm. */ +void do_equalizer(real *bandPtr,int channel, real equalizer[2][32]); + +#endif diff --git a/include/reactos/libs/libmpg123/dither.h b/include/reactos/libs/libmpg123/dither.h new file mode 100644 index 00000000000..6a6cb3e4794 --- /dev/null +++ b/include/reactos/libs/libmpg123/dither.h @@ -0,0 +1,23 @@ +/* + dither: Generate noise for dithering / noise shaping. + + copyright 2009 by the mpg123 project - free software under the terms of the LGPL 2.1 + see COPYING and AUTHORS files in distribution or http://mpg123.org + initially written by Taihei Monma +*/ + +#ifndef MPG123_DITHER_H +#define MPG123_DITHER_H + +#define DITHERSIZE 65536 +enum mpg123_noise_type +{ + mpg123_white_noise = 0 + ,mpg123_tpdf_noise + ,mpg123_highpass_tpdf_noise +}; + +void mpg123_noise(float* table, size_t count, enum mpg123_noise_type noisetype); +void dither_table_init(float *dithertable); + +#endif diff --git a/include/reactos/libs/libmpg123/frame.h b/include/reactos/libs/libmpg123/frame.h new file mode 100644 index 00000000000..bdb7ccc5409 --- /dev/null +++ b/include/reactos/libs/libmpg123/frame.h @@ -0,0 +1,401 @@ +/* + frame: Central data structures and opmitization hooks. + + copyright 2007 by the mpg123 project - free software under the terms of the LGPL 2.1 + see COPYING and AUTHORS files in distribution or http://mpg123.org + initially written by Thomas Orgis +*/ + +#ifndef MPG123_FRAME_H +#define MPG123_FRAME_H + +#include +#include "config.h" +#include "mpg123.h" +#include "optimize.h" +#include "id3.h" +#include "icy.h" +#include "reader.h" +#ifdef FRAME_INDEX +#include "index.h" +#endif +#include "synths.h" + +#ifdef OPT_DITHER +#include "dither.h" +int frame_dither_init(mpg123_handle *fr); +#endif + +/* max = 1728 */ +#define MAXFRAMESIZE 3456 + +struct al_table +{ + short bits; + short d; +}; + +/* the output buffer, used to be pcm_sample, pcm_point and audiobufsize */ +struct outbuffer +{ + unsigned char *data; + unsigned char *p; /* read pointer */ + size_t fill; /* fill from read pointer */ + size_t size; /* that's actually more like a safe size, after we have more than that, flush it */ +}; + +struct audioformat +{ + int encoding; + int encsize; /* Size of one sample in bytes, plain int should be fine here... */ + int channels; + long rate; +}; + +void invalidate_format(struct audioformat *af); + +struct mpg123_pars_struct +{ + int verbose; /* verbose level */ + long flags; /* combination of above */ +#ifndef NO_NTOM + long force_rate; +#endif + int down_sample; + int rva; /* (which) rva to do: 0: nothing, 1: radio/mix/track 2: album/audiophile */ + long halfspeed; + long doublespeed; + long timeout; +#define NUM_CHANNELS 2 + char audio_caps[NUM_CHANNELS][MPG123_RATES+1][MPG123_ENCODINGS]; +/* long start_frame; */ /* frame offset to begin with */ +/* long frame_number;*/ /* number of frames to decode */ +#ifndef NO_ICY + long icy_interval; +#endif + double outscale; + long resync_limit; + long index_size; /* Long, because: negative values have a meaning. */ + long preframes; +}; + + + +/* There is a lot to condense here... many ints can be merged as flags; though the main space is still consumed by buffers. */ +struct mpg123_handle_struct +{ + int fresh; /* to be moved into flags */ + int new_format; + real hybrid_block[2][2][SBLIMIT*SSLIMIT]; + int hybrid_blc[2]; + /* the scratch vars for the decoders, sometimes real, sometimes short... sometimes int/long */ + short *short_buffs[2][2]; + real *real_buffs[2][2]; + unsigned char *rawbuffs; + int rawbuffss; +#ifdef OPT_I486 + int i486bo[2]; +#endif + int bo; /* Just have it always here. */ +#ifdef OPT_DITHER + int ditherindex; + float *dithernoise; +#endif + unsigned char* rawdecwin; /* the block with all decwins */ + int rawdecwins; /* size of rawdecwin memory */ + real *decwin; /* _the_ decode table */ +#ifdef OPT_MMXORSSE + /* I am not really sure that I need both of them... used in assembler */ + float *decwin_mmx; + float *decwins; +#endif + int have_eq_settings; + real equalizer[2][32]; + + /* for halfspeed mode */ + unsigned char ssave[34]; + int halfphase; +#ifndef NO_8BIT + /* a raw buffer and a pointer into the middle for signed short conversion, only allocated on demand */ + unsigned char *conv16to8_buf; + unsigned char *conv16to8; +#endif + /* There's some possible memory saving for stuff that is not _really_ dynamic. */ + + /* layer3 */ + int longLimit[9][23]; + int shortLimit[9][14]; + real gainpow2[256+118+4]; /* not really dynamic, just different for mmx */ + + /* layer2 */ + real muls[27][64]; /* also used by layer 1 */ + +#ifndef NO_NTOM + /* decode_ntom */ + unsigned long ntom_val[2]; + unsigned long ntom_step; +#endif + /* special i486 fun */ +#ifdef OPT_I486 + int *int_buffs[2][2]; +#endif + /* special altivec... */ +#ifdef OPT_ALTIVEC + real *areal_buffs[4][4]; +#endif + struct synth_s synths; + struct + { +#ifdef OPT_MULTI + +#ifndef NO_LAYER3 +#if (defined OPT_3DNOW || defined OPT_3DNOWEXT) + void (*the_dct36)(real *,real *,real *,real *,real *); +#endif +#endif + +#endif + enum optdec type; + enum optcla class; + } cpu_opts; + + int verbose; /* 0: nothing, 1: just print chosen decoder, 2: be verbose */ + + const struct al_table *alloc; + /* The runtime-chosen decoding, based on input and output format. */ + func_synth synth; + func_synth_stereo synth_stereo; + func_synth_mono synth_mono; + /* Yes, this function is runtime-switched, too. */ + void (*make_decode_tables)(mpg123_handle *fr); /* That is the volume control. */ + + int stereo; /* I _think_ 1 for mono and 2 for stereo */ + int jsbound; +#define SINGLE_STEREO -1 +#define SINGLE_LEFT 0 +#define SINGLE_RIGHT 1 +#define SINGLE_MIX 3 + int single; + int II_sblimit; + int down_sample_sblimit; + int lsf; /* 0: MPEG 1.0; 1: MPEG 2.0/2.5 -- both used as bool and array index! */ + /* Many flags in disguise as integers... wasting bytes. */ + int mpeg25; + int down_sample; + int header_change; + int lay; + int (*do_layer)(mpg123_handle *); + int error_protection; + int bitrate_index; + int sampling_frequency; + int padding; + int extension; + int mode; + int mode_ext; + int copyright; + int original; + int emphasis; + int framesize; /* computed framesize */ + int freesize; /* free format frame size */ + enum mpg123_vbr vbr; /* 1 if variable bitrate was detected */ + off_t num; /* frame offset ... */ + off_t playnum; /* playback offset... includes repetitions, reset at seeks */ + off_t audio_start; /* The byte offset in the file where audio data begins. */ + char accurate; /* Flag to see if we trust the frame number. */ + char silent_resync; /* Do not complain for the next n resyncs. */ + unsigned char* xing_toc; /* The seek TOC from Xing header. */ + int freeformat; + long freeformat_framesize; + + /* bitstream info; bsi */ + int bitindex; + unsigned char *wordpointer; + /* temporary storage for getbits stuff */ + unsigned long ultmp; + unsigned char uctmp; + + /* rva data, used in common.c, set in id3.c */ + + double maxoutburst; /* The maximum amplitude in current sample represenation. */ + double lastscale; + struct + { + int level[2]; + float gain[2]; + float peak[2]; + } rva; + + /* input data */ + off_t track_frames; + off_t track_samples; + double mean_framesize; + off_t mean_frames; + int fsizeold; + int ssize; + unsigned int bitreservoir; + unsigned char bsspace[2][MAXFRAMESIZE+512]; /* MAXFRAMESIZE */ + unsigned char *bsbuf; + unsigned char *bsbufold; + int bsnum; + unsigned long oldhead; + unsigned long firsthead; + int abr_rate; +#ifdef FRAME_INDEX + struct frame_index index; +#endif + + /* output data */ + struct outbuffer buffer; + struct audioformat af; + int own_buffer; + size_t outblock; /* number of bytes that this frame produces (upper bound) */ + int to_decode; /* this frame holds data to be decoded */ + int to_ignore; /* the same, somehow */ + off_t firstframe; /* start decoding from here */ + off_t lastframe; /* last frame to decode (for gapless or num_frames limit) */ + off_t ignoreframe; /* frames to decode but discard before firstframe */ +#ifdef GAPLESS + off_t firstoff; /* number of samples to ignore from firstframe */ + off_t lastoff; /* number of samples to use from lastframe */ + off_t begin_s; /* overall begin offset in samples */ + off_t begin_os; + off_t end_s; /* overall end offset in samples */ + off_t end_os; +#endif + unsigned int crc; /* Well, I need a safe 16bit type, actually. But wider doesn't hurt. */ + struct reader *rd; /* pointer to the reading functions */ + struct reader_data rdat; /* reader data and state info */ + struct mpg123_pars_struct p; + int err; + int decoder_change; + int delayed_change; + long clip; + /* the meta crap */ + int metaflags; + unsigned char id3buf[128]; +#ifndef NO_ID3V2 + mpg123_id3v2 id3v2; +#endif +#ifndef NO_ICY + struct icy_meta icy; +#endif + /* + More variables needed for decoders, layerX.c. + This time it is not about static variables but about the need for alignment which cannot be guaranteed on the stack by certain compilers (Sun Studio). + We do not require the compiler to align stuff for our hand-written assembly. We only hope that it's able to align stuff for SSE and similar ops it generates itself. + */ + /* + Those layer-specific structs could actually share memory, as they are not in use simultaneously. One might allocate on decoder switch, too. + They all reside in one lump of memory (after each other), allocated to layerscratch. + */ + real *layerscratch; +#ifndef NO_LAYER1 + struct + { + real (*fraction)[SBLIMIT]; /* ALIGNED(16) real fraction[2][SBLIMIT]; */ + } layer1; +#endif +#ifndef NO_LAYER2 + struct + { + real (*fraction)[4][SBLIMIT]; /* ALIGNED(16) real fraction[2][4][SBLIMIT] */ + } layer2; +#endif +#ifndef NO_LAYER3 + /* These are significant chunks of memory already... */ + struct + { + real (*hybrid_in)[SBLIMIT][SSLIMIT]; /* ALIGNED(16) real hybridIn[2][SBLIMIT][SSLIMIT]; */ + real (*hybrid_out)[SSLIMIT][SBLIMIT]; /* ALIGNED(16) real hybridOut[2][SSLIMIT][SBLIMIT]; */ + } layer3; +#endif + /* A place for storing additional data for the large file wrapper. + This is cruft! */ + void *wrapperdata; + /* A callback used to properly destruct the wrapper data. */ + void (*wrapperclean)(void*); +}; + +/* generic init, does not include dynamic buffers */ +void frame_init(mpg123_handle *fr); +void frame_init_par(mpg123_handle *fr, mpg123_pars *mp); +/* output buffer and format */ +int frame_outbuffer(mpg123_handle *fr); +int frame_output_format(mpg123_handle *fr); + +int frame_buffers(mpg123_handle *fr); /* various decoder buffers, needed once */ +int frame_reset(mpg123_handle* fr); /* reset for next track */ +int frame_buffers_reset(mpg123_handle *fr); +void frame_exit(mpg123_handle *fr); /* end, free all buffers */ + +/* Index functions... */ +/* Well... print it... */ +int mpg123_print_index(mpg123_handle *fr, FILE* out); +/* Find a seek position in index. */ +off_t frame_index_find(mpg123_handle *fr, off_t want_frame, off_t* get_frame); +/* Apply index_size setting. */ +int frame_index_setup(mpg123_handle *fr); + +void do_volume(mpg123_handle *fr, double factor); +void do_rva(mpg123_handle *fr); + +/* samples per frame ... +Layer I +Layer II +Layer III +MPEG-1 +384 +1152 +1152 +MPEG-2 LSF +384 +1152 +576 +MPEG 2.5 +384 +1152 +576 +*/ +#define spf(fr) ((fr)->lay == 1 ? 384 : ((fr)->lay==2 ? 1152 : ((fr)->lsf || (fr)->mpeg25 ? 576 : 1152))) + +#ifdef GAPLESS +/* well, I take that one for granted... at least layer3 */ +#define GAPLESS_DELAY 529 +/* still fine-tuning the "real music" window... see read_frame */ +void frame_gapless_init(mpg123_handle *fr, off_t b, off_t e); +void frame_gapless_realinit(mpg123_handle *fr); +void frame_gapless_update(mpg123_handle *mh, off_t total_samples); +/*void frame_gapless_position(mpg123_handle* fr); +void frame_gapless_bytify(mpg123_handle *fr); +void frame_gapless_ignore(mpg123_handle *fr, off_t frames);*/ +/* void frame_gapless_buffercheck(mpg123_handle *fr); */ +#endif + +/* Number of samples the decoding of the current frame should yield. */ +off_t frame_expect_outsamples(mpg123_handle *fr); + +/* Skip this frame... do some fake action to get away without actually decoding it. */ +void frame_skip(mpg123_handle *fr); + +/* + Seeking core functions: + - convert input sample offset to output sample offset + - convert frame offset to output sample offset + - get leading frame offset for output sample offset + The offsets are "unadjusted"/internal; resampling is being taken care of. +*/ +off_t frame_ins2outs(mpg123_handle *fr, off_t ins); +off_t frame_outs(mpg123_handle *fr, off_t num); +/* This one just computes the expected sample count for _this_ frame. */ +off_t frame_expect_outsampels(mpg123_handle *fr); +off_t frame_offset(mpg123_handle *fr, off_t outs); +void frame_set_frameseek(mpg123_handle *fr, off_t fe); +void frame_set_seek(mpg123_handle *fr, off_t sp); +off_t frame_tell_seek(mpg123_handle *fr); +/* Take a copy of the Xing VBR TOC for fuzzy seeking. */ +int frame_fill_toc(mpg123_handle *fr, unsigned char* in); + + +/* adjust volume to current outscale and rva values if wanted */ +void do_rva(mpg123_handle *fr); +#endif diff --git a/include/reactos/libs/libmpg123/getbits.h b/include/reactos/libs/libmpg123/getbits.h new file mode 100644 index 00000000000..8eff00ed694 --- /dev/null +++ b/include/reactos/libs/libmpg123/getbits.h @@ -0,0 +1,100 @@ +/* + getbits + + copyright ?-2009 by the mpg123 project - free software under the terms of the LGPL 2.1 + see COPYING and AUTHORS files in distribution or http://mpg123.org + initially written by Michael Hipp + + All code is in the header to suggest/force inlining of these small often-used functions. + This indeed has some impact on performance. +*/ + +#ifndef _MPG123_GETBITS_H_ +#define _MPG123_GETBITS_H_ + +#include "mpg123lib_intern.h" + +#define backbits(fr,nob) ((void)( \ + fr->bitindex -= nob, \ + fr->wordpointer += (fr->bitindex>>3), \ + fr->bitindex &= 0x7 )) + +#define getbitoffset(fr) ((-fr->bitindex)&0x7) +#define getbyte(fr) (*fr->wordpointer++) + +/* There is something wrong with that macro... the function below works also for the layer1 test case. */ +#define macro_getbits(fr, nob) ( \ + fr->ultmp = fr->wordpointer[0],\ + fr->ultmp <<= 8, \ + fr->ultmp |= fr->wordpointer[1], \ + fr->ultmp <<= 8, \ + fr->ultmp |= fr->wordpointer[2], \ + fr->ultmp <<= fr->bitindex, \ + fr->ultmp &= 0xffffff, \ + fr->bitindex += nob, \ + fr->ultmp >>= (24-nob), \ + fr->wordpointer += (fr->bitindex>>3), \ + fr->bitindex &= 7, \ + fr->ultmp) + +static unsigned int getbits(mpg123_handle *fr, int number_of_bits) +{ + unsigned long rval; + +#ifdef DEBUG_GETBITS +fprintf(stderr,"g%d",number_of_bits); +#endif + +/* This is actually slow: if(!number_of_bits) + return 0; */ + +#if 0 + check_buffer_range(number_of_bits+fr->bitindex); +#endif + + { + rval = fr->wordpointer[0]; + rval <<= 8; + rval |= fr->wordpointer[1]; + rval <<= 8; + rval |= fr->wordpointer[2]; + + rval <<= fr->bitindex; + rval &= 0xffffff; + + fr->bitindex += number_of_bits; + + rval >>= (24-number_of_bits); + + fr->wordpointer += (fr->bitindex>>3); + fr->bitindex &= 7; + } + +#ifdef DEBUG_GETBITS +fprintf(stderr,":%lx\n",rval); +#endif + + return rval; +} + + +#define skipbits(fr, nob) fr->ultmp = ( \ + fr->ultmp = fr->wordpointer[0], fr->ultmp <<= 8, fr->ultmp |= fr->wordpointer[1], \ + fr->ultmp <<= 8, fr->ultmp |= fr->wordpointer[2], fr->ultmp <<= fr->bitindex, \ + fr->ultmp &= 0xffffff, fr->bitindex += nob, \ + fr->ultmp >>= (24-nob), fr->wordpointer += (fr->bitindex>>3), \ + fr->bitindex &= 7 ) + +#define getbits_fast(fr, nob) ( \ + fr->ultmp = (unsigned char) (fr->wordpointer[0] << fr->bitindex), \ + fr->ultmp |= ((unsigned long) fr->wordpointer[1]<bitindex)>>8, \ + fr->ultmp <<= nob, fr->ultmp >>= 8, \ + fr->bitindex += nob, fr->wordpointer += (fr->bitindex>>3), \ + fr->bitindex &= 7, fr->ultmp ) + +#define get1bit(fr) ( \ + fr->uctmp = *fr->wordpointer << fr->bitindex, fr->bitindex++, \ + fr->wordpointer += (fr->bitindex>>3), fr->bitindex &= 7, fr->uctmp>>7 ) + + +#endif diff --git a/include/reactos/libs/libmpg123/getcpuflags.h b/include/reactos/libs/libmpg123/getcpuflags.h new file mode 100644 index 00000000000..ec565417c63 --- /dev/null +++ b/include/reactos/libs/libmpg123/getcpuflags.h @@ -0,0 +1,49 @@ +/* + getcpucpuflags: get cpuflags for ia32 + + copyright ?-2007 by the mpg123 project - free software under the terms of the LGPL 2.1 + see COPYING and AUTHORS files in distribution or http:#mpg123.org + initially written by KIMURA Takuhiro (for 3DNow!) + extended for general use by Thomas Orgis +*/ + +#ifndef MPG123_H_GETCPUFLAGS +#define MPG123_H_GETCPUFLAGS + +/* standard level flags part 1 (ECX)*/ +#define FLAG_SSE3 0x00000001 + +/* standard level flags part 2 (EDX) */ +#define FLAG2_MMX 0x00800000 +#define FLAG2_SSE 0x02000000 +#define FLAG2_SSE2 0x04000000 +#define FLAG2_FPU 0x00000001 +/* cpuid extended level 1 (AMD) */ +#define XFLAG_MMX 0x00800000 +#define XFLAG_3DNOW 0x80000000 +#define XFLAG_3DNOWEXT 0x40000000 + +struct cpuflags +{ + unsigned int id; + unsigned int std; + unsigned int std2; + unsigned int ext; +}; + +extern struct cpuflags cpu_flags; + +unsigned int getcpuflags(struct cpuflags* cf); + +/* checks the family */ +#define cpu_i586(s) ( ((s.id & 0xf00)>>8) == 0 || ((s.id & 0xf00)>>8) > 4 ) +/* checking some flags... */ +#define cpu_fpu(s) (FLAG2_FPU & s.std2) +#define cpu_mmx(s) (FLAG2_MMX & s.std2 || XFLAG_MMX & s.ext) +#define cpu_3dnow(s) (XFLAG_3DNOW & s.ext) +#define cpu_3dnowext(s) (XFLAG_3DNOWEXT & s.ext) +#define cpu_sse(s) (FLAG2_SSE & s.std2) +#define cpu_sse2(s) (FLAG2_SSE2 & s.std2) +#define cpu_sse3(s) (FLAG_SSE3 & s.std) + +#endif diff --git a/dll/win32/winemp3.acm/huffman.h b/include/reactos/libs/libmpg123/huffman.h similarity index 90% rename from dll/win32/winemp3.acm/huffman.h rename to include/reactos/libs/libmpg123/huffman.h index 8adac04fc92..74b543cc4d9 100644 --- a/dll/win32/winemp3.acm/huffman.h +++ b/include/reactos/libs/libmpg123/huffman.h @@ -1,70 +1,61 @@ /* - * Copyright (c) Michael Hipp and other authors of the mpglib project. - * - * huffman tables ... recalculated to work with my optimized - * decoder scheme (MH) - * - * probably we could save a few bytes of memory, because the - * smaller tables are often part of a bigger table - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ + huffman.h: huffman tables ... recalcualted to work with optimzed decoder scheme (MH) -struct newhuff + copyright ?-2006 by the mpg123 project - free software under the terms of the LGPL 2.1 + see COPYING and AUTHORS files in distribution or http://mpg123.org + initially written by Michael Hipp + + probably we could save a few bytes of memory, because the + smaller tables are often the part of a bigger table +*/ + + +#ifndef _MPG123_HUFFMAN_H_ +#define _MPG123_HUFFMAN_H_ + +struct newhuff { unsigned int linbits; - const short *table; + short *table; }; -static const short tab0[] = -{ +static short tab0[] = +{ 0 }; -static const short tab1[] = +static short tab1[] = { -5, -3, -1, 17, 1, 16, 0 }; -static const short tab2[] = +static short tab2[] = { -15, -11, -9, -5, -3, -1, 34, 2, 18, -1, 33, 32, 17, -1, 1, 16, 0 }; -static const short tab3[] = +static short tab3[] = { -13, -11, -9, -5, -3, -1, 34, 2, 18, -1, 33, 32, 16, 17, -1, 1, 0 }; -static const short tab5[] = +static short tab5[] = { -29, -25, -23, -15, -7, -5, -3, -1, 51, 35, 50, 49, -3, -1, 19, 3, -1, 48, 34, -3, -1, 18, 33, -1, 2, 32, 17, -1, 1, 16, 0 }; -static const short tab6[] = +static short tab6[] = { -25, -19, -13, -9, -5, -3, -1, 51, 3, 35, -1, 50, 48, -1, 19, 49, -3, -1, 34, 2, 18, -3, -1, 33, 32, 1, -1, 17, -1, 16, 0 }; -static const short tab7[] = +static short tab7[] = { -69, -65, -57, -39, -29, -17, -11, -7, -3, -1, 85, 69, -1, 84, 83, -1, 53, 68, -3, -1, 37, 82, 21, -5, -1, 81, -1, 5, 52, -1, @@ -73,7 +64,7 @@ static const short tab7[] = -5, -1, 33, -1, 2, 32, 17, -1, 1, 16, 0 }; -static const short tab8[] = +static short tab8[] = { -65, -63, -59, -45, -31, -19, -13, -7, -5, -3, -1, 85, 84, 69, 83, -3, -1, 53, 68, 37, -3, -1, 82, 5, 21, -5, -1, 81, -1, 52, @@ -82,7 +73,7 @@ static const short tab8[] = 2, 32, -1, 18, 33, 17, -3, -1, 1, 16, 0 }; -static const short tab9[] = +static short tab9[] = { -63, -53, -41, -29, -19, -11, -5, -3, -1, 85, 69, 53, -1, 83, -1, 84, 5, -3, -1, 68, 37, -1, 82, 21, -3, -1, 81, 52, -1, 67, @@ -91,7 +82,7 @@ static const short tab9[] = 18, -1, 33, 32, -3, -1, 17, 1, -1, 16, 0 }; -static const short tab10[] = +static short tab10[] = { -125,-121,-111, -83, -55, -35, -21, -13, -7, -3, -1, 119, 103, -1, 118, 87, -3, -1, 117, 102, 71, -3, -1, 116, 86, -1, 101, 55, -9, -3, @@ -104,7 +95,7 @@ static const short tab10[] = 2, 32, 17, -1, 1, 16, 0 }; -static const short tab11[] = +static short tab11[] = { -121,-113, -89, -59, -43, -27, -17, -7, -3, -1, 119, 103, -1, 118, 117, -3, -1, 102, 71, -1, 116, -1, 87, 85, -5, -3, -1, 86, 101, 55, @@ -117,7 +108,7 @@ static const short tab11[] = 32, 17, -3, -1, 1, 16, 0 }; -static const short tab12[] = +static short tab12[] = { -115, -99, -73, -45, -27, -17, -9, -5, -3, -1, 119, 103, 118, -1, 87, 117, -3, -1, 102, 71, -1, 116, 101, -3, -1, 86, 55, -3, -1, 115, @@ -130,7 +121,7 @@ static const short tab12[] = 2, 32, 0, 17, -1, 1, 16 }; -static const short tab13[] = +static short tab13[] = { -509,-503,-475,-405,-333,-265,-205,-153,-115, -83, -53, -35, -21, -13, -9, -7, -5, -3, -1, 254, 252, 253, 237, 255, -1, 239, 223, -3, -1, 238, @@ -169,7 +160,7 @@ static const short tab13[] = 0 }; -static const short tab15[] = +static short tab15[] = { -495,-445,-355,-263,-183,-115, -77, -43, -27, -13, -7, -3, -1, 255, 239, -1, 254, 223, -1, 238, -1, 253, 207, -7, -3, -1, 252, 222, -1, 237, @@ -208,7 +199,7 @@ static const short tab15[] = 0 }; -static const short tab16[] = +static short tab16[] = { -509,-503,-461,-323,-103, -37, -27, -15, -7, -3, -1, 239, 254, -1, 223, 253, -3, -1, 207, 252, -1, 191, 251, -5, -1, 175, -1, 250, 159, -3, @@ -247,7 +238,7 @@ static const short tab16[] = 0 }; -static const short tab24[] = +static short tab24[] = { -451,-117, -43, -25, -15, -7, -3, -1, 239, 254, -1, 223, 253, -3, -1, 207, 252, -1, 191, 251, -5, -1, 250, -1, 175, 159, -1, 249, 248, -9, @@ -286,14 +277,14 @@ static const short tab24[] = 0 }; -static const short tab_c0[] = +static short tab_c0[] = { -29, -21, -13, -7, -3, -1, 11, 15, -1, 13, 14, -3, -1, 7, 5, 9, -3, -1, 6, 3, -1, 10, 12, -3, -1, 2, 1, -1, 4, 8, 0 }; -static const short tab_c1[] = +static short tab_c1[] = { -15, -7, -3, -1, 15, 14, -1, 13, 12, -3, -1, 11, 10, -1, 9, 8, -7, -3, -1, 7, 6, -1, 5, 4, -3, -1, 3, 2, -1, 1, @@ -302,7 +293,7 @@ static const short tab_c1[] = -static const struct newhuff ht[] = +static struct newhuff ht[] = { { /* 0 */ 0 , tab0 } , { /* 2 */ 0 , tab1 } , @@ -339,8 +330,11 @@ static const struct newhuff ht[] = { /* 16 */ 13, tab24 } }; -static const struct newhuff htc[] = +static struct newhuff htc[] = { { /* 1 , 1 , */ 0 , tab_c0 } , { /* 1 , 1 , */ 0 , tab_c1 } }; + + +#endif diff --git a/include/reactos/libs/libmpg123/icy.h b/include/reactos/libs/libmpg123/icy.h new file mode 100644 index 00000000000..050a0560f1d --- /dev/null +++ b/include/reactos/libs/libmpg123/icy.h @@ -0,0 +1,35 @@ +/* + icy: support for SHOUTcast ICY meta info, an attempt to keep it organized + + copyright 2006-7 by the mpg123 project - free software under the terms of the LGPL 2.1 + see COPYING and AUTHORS files in distribution or http://mpg123.org + initially written by Thomas Orgis and modelled after patch by Honza +*/ +#ifndef MPG123_ICY_H +#define MPG123_ICY_H + +#ifndef NO_ICY + +#include "compat.h" +#include "mpg123.h" + +struct icy_meta +{ + char* data; + off_t interval; + off_t next; +}; + +void init_icy(struct icy_meta *); +void clear_icy(struct icy_meta *); +void reset_icy(struct icy_meta *); + +#else + +#define init_icy(a) +#define clear_icy(a) +#define reset_icy(a) + +#endif /* NO_ICY */ + +#endif diff --git a/include/reactos/libs/libmpg123/icy2utf8.h b/include/reactos/libs/libmpg123/icy2utf8.h new file mode 100644 index 00000000000..aeec0121309 --- /dev/null +++ b/include/reactos/libs/libmpg123/icy2utf8.h @@ -0,0 +1,10 @@ +/* You expect a license plate for _this_ file? */ +#ifndef MPG123_ICY2UTF_H +#define MPG123_ICY2UTF_H + +#ifndef NO_ICY +/* (string, force conversion) */ +char *icy2utf8(const char *, int); +#endif + +#endif diff --git a/include/reactos/libs/libmpg123/id3.h b/include/reactos/libs/libmpg123/id3.h new file mode 100644 index 00000000000..b172040ff08 --- /dev/null +++ b/include/reactos/libs/libmpg123/id3.h @@ -0,0 +1,31 @@ +/* + id3: ID3v2.3 and ID3v2.4 parsing (a relevant subset) + + copyright 2006-2007 by the mpg123 project - free software under the terms of the LGPL 2.1 + see COPYING and AUTHORS files in distribution or http://mpg123.org + initially written by Thomas Orgis +*/ + +#ifndef MPG123_ID3_H +#define MPG123_ID3_H + +/* really need it _here_! */ +#include "frame.h" + +#ifdef NO_ID3V2 +# define init_id3(fr) +# define exit_id3(fr) +# define reset_id3(fr) +# define id3_link(fr) +#else +void init_id3(mpg123_handle *fr); +void exit_id3(mpg123_handle *fr); +void reset_id3(mpg123_handle *fr); +void id3_link(mpg123_handle *fr); +#endif +int parse_new_id3(mpg123_handle *fr, unsigned long first4bytes); +/* Convert text from some ID3 encoding to UTf-8. + On error, sb->fill is 0. The noquiet flag enables warning/error messages. */ +void id3_to_utf8(mpg123_string *sb, unsigned char encoding, const unsigned char *source, size_t source_size, int noquiet); + +#endif diff --git a/include/reactos/libs/libmpg123/index.h b/include/reactos/libs/libmpg123/index.h new file mode 100644 index 00000000000..3e1ca648a5c --- /dev/null +++ b/include/reactos/libs/libmpg123/index.h @@ -0,0 +1,59 @@ +#ifndef MPG123_H_INDEX +#define MPG123_H_INDEX + +/* + index: frame index data structure and functions + + This is for keeping track of frame positions for accurate seeking. + Now in it's own file, with initial code from frame.c and parse.c . + + The idea of the index with a certain amount of entries is to cover + all yet-encountered frame positions with minimal coarseness. + Meaning: At first every frame position is recorded, then, when + the index is full, every second position is trown away to make + space. Next time it is full, the same happens. And so on. + In this manner we maintain a good resolution with the given + maximum index size while covering the whole stream. + + copyright 2007-8 by the mpg123 project - free software under the terms of the LGPL 2.1 + see COPYING and AUTHORS files in distribution or http://mpg123.org + initially written by Thomas Orgis +*/ + +#include "config.h" +#include "compat.h" + +struct frame_index +{ + off_t *data; /* actual data, the frame positions */ + off_t step; /* advancement in frame number per index point */ + off_t next; /* frame offset supposed to come next into the index */ + size_t size; /* total number of possible entries */ + size_t fill; /* number of used entries */ + size_t grow_size; /* if > 0: index allowed to grow on need with these steps, instead of lowering resolution */ +}; + +/* The condition for a framenum to be appended to the index. + if(FI_NEXT(fr->index, fr->num)) fi_add(offset); */ +#define FI_NEXT(fi, framenum) ((fi).size && framenum == (fi).next) + +/* Initialize stuff, set things to zero and NULL... */ +void fi_init(struct frame_index *fi); +/* Deallocate/zero things. */ +void fi_exit(struct frame_index *fi); + +/* Prepare a given size, preserving current fill, if possible. + If the new size is smaller than fill, the entry density is reduced. + Return 0 on success. */ +int fi_resize(struct frame_index *fi, size_t newsize); + +/* Append a frame position, reducing index density if needed. */ +void fi_add(struct frame_index *fi, off_t pos); + +/* Replace the frame index */ +int fi_set(struct frame_index *fi, off_t *offsets, off_t step, size_t fill); + +/* Empty the index (setting fill=0 and step=1), but keep current size. */ +void fi_reset(struct frame_index *fi); + +#endif diff --git a/include/reactos/libs/libmpg123/l12_integer_tables.h b/include/reactos/libs/libmpg123/l12_integer_tables.h new file mode 100644 index 00000000000..e306fa96166 --- /dev/null +++ b/include/reactos/libs/libmpg123/l12_integer_tables.h @@ -0,0 +1,278 @@ +/* + l12_integer_tables.h: Layer1/2 Constant tables for integer decoders + + copyright 1995-2009 by the mpg123 project - free software under the terms of the LGPL 2.1 + see COPYING and AUTHORS files in distribution or http://mpg123.org + initially written by Taihei Monma +*/ + +#ifndef MPG123_L12_INTEGER_TABLES_H +#define MPG123_L12_INTEGER_TABLES_H + +static const real layer12_table[27][64] = +{ + { + }, + { + -1431655765,-1136305934,-901886617,-715827883,-568152967,-450943309,-357913941,-284076483, + -225471654,-178956971,-142038242,-112735827,-89478485,-71019121,-56367914,-44739243, + -35509560,-28183957,-22369621,-17754780,-14091978,-11184811,-8877390,-7045989, + -5592405,-4438695,-3522995,-2796203,-2219348,-1761497,-1398101,-1109674, + -880749,-699051,-554837,-440374,-349525,-277418,-220187,-174763, + -138709,-110094,-87381,-69355,-55047,-43691,-34677,-27523, + -21845,-17339,-13762,-10923,-8669,-6881,-5461,-4335, + -3440,-2731,-2167,-1720,-1365,-1084,-860,0 + }, + { + 1431655765,1136305934,901886617,715827883,568152967,450943309,357913941,284076483, + 225471654,178956971,142038242,112735827,89478485,71019121,56367914,44739243, + 35509560,28183957,22369621,17754780,14091978,11184811,8877390,7045989, + 5592405,4438695,3522995,2796203,2219348,1761497,1398101,1109674, + 880749,699051,554837,440374,349525,277418,220187,174763, + 138709,110094,87381,69355,55047,43691,34677,27523, + 21845,17339,13762,10923,8669,6881,5461,4335, + 3440,2731,2167,1720,1365,1084,860,0 + }, + { + 613566757,486988257,386522836,306783378,243494129,193261418,153391689,121747064, + 96630709,76695845,60873532,48315355,38347922,30436766,24157677,19173961, + 15218383,12078839,9586981,7609192,6039419,4793490,3804596,3019710, + 2396745,1902298,1509855,1198373,951149,754927,599186,475574, + 377464,299593,237787,188732,149797,118894,94366,74898, + 59447,47183,37449,29723,23591,18725,14862,11796, + 9362,7431,5898,4681,3715,2949,2341,1858, + 1474,1170,929,737,585,464,369,0 + }, + { + 286331153,227261187,180377323,143165577,113630593,90188662,71582788,56815297, + 45094331,35791394,28407648,22547165,17895697,14203824,11273583,8947849, + 7101912,5636791,4473924,3550956,2818396,2236962,1775478,1409198, + 1118481,887739,704599,559241,443870,352299,279620,221935, + 176150,139810,110967,88075,69905,55484,44037,34953, + 27742,22019,17476,13871,11009,8738,6935,5505, + 4369,3468,2752,2185,1734,1376,1092,867, + 688,546,433,344,273,217,172,0 + }, + { + 138547332,109965090,87279350,69273666,54982545,43639675,34636833,27491273, + 21819838,17318417,13745636,10909919,8659208,6872818,5454959,4329604, + 3436409,2727480,2164802,1718205,1363740,1082401,859102,681870, + 541201,429551,340935,270600,214776,170467,135300,107388, + 85234,67650,53694,42617,33825,26847,21308,16913, + 13423,10654,8456,6712,5327,4228,3356,2664, + 2114,1678,1332,1057,839,666,529,419, + 333,264,210,166,132,105,83,0 + }, + { + 68174084,54109806,42946982,34087042,27054903,21473491,17043521,13527452, + 10736745,8521761,6763726,5368373,4260880,3381863,2684186,2130440, + 1690931,1342093,1065220,845466,671047,532610,422733,335523, + 266305,211366,167762,133153,105683,83881,66576,52842, + 41940,33288,26421,20970,16644,13210,10485,8322, + 6605,5243,4161,3303,2621,2081,1651,1311, + 1040,826,655,520,413,328,260,206, + 164,130,103,82,65,52,41,0 + }, + { + 33818640,26841872,21304408,16909320,13420936,10652204,8454660,6710468, + 5326102,4227330,3355234,2663051,2113665,1677617,1331526,1056833, + 838809,665763,528416,419404,332881,264208,209702,166441, + 132104,104851,83220,66052,52426,41610,33026,26213, + 20805,16513,13106,10403,8257,6553,5201,4128, + 3277,2601,2064,1638,1300,1032,819,650, + 516,410,325,258,205,163,129,102, + 81,65,51,41,32,26,20,0 + }, + { + 16843009,13368305,10610431,8421505,6684153,5305215,4210752,3342076, + 2652608,2105376,1671038,1326304,1052688,835519,663152,526344, + 417760,331576,263172,208880,165788,131586,104440,82894, + 65793,52220,41447,32897,26110,20723,16448,13055, + 10362,8224,6527,5181,4112,3264,2590,2056, + 1632,1295,1028,816,648,514,408,324, + 257,204,162,129,102,81,64,51, + 40,32,25,20,16,13,10,0 + }, + { + 8405024,6671072,5294833,4202512,3335536,2647417,2101256,1667768, + 1323708,1050628,833884,661854,525314,416942,330927,262657, + 208471,165464,131329,104236,82732,65664,52118,41366, + 32832,26059,20683,16416,13029,10341,8208,6515, + 5171,4104,3257,2585,2052,1629,1293,1026, + 814,646,513,407,323,257,204,162, + 128,102,81,64,51,40,32,25, + 20,16,13,10,8,6,5,0 + }, + { + 4198404,3332275,2644829,2099202,1666138,1322414,1049601,833069, + 661207,524801,416534,330604,262400,208267,165302,131200, + 104134,82651,65600,52067,41325,32800,26033,20663, + 16400,13017,10331,8200,6508,5166,4100,3254, + 2583,2050,1627,1291,1025,814,646,513, + 407,323,256,203,161,128,102,81, + 64,51,40,32,25,20,16,13, + 10,8,6,5,4,3,3,0 + }, + { + 2098177,1665324,1321768,1049088,832662,660884,524544,416331, + 330442,262272,208165,165221,131136,104083,82611,65568, + 52041,41305,32784,26021,20653,16392,13010,10326, + 8196,6505,5163,4098,3253,2582,2049,1626, + 1291,1025,813,645,512,407,323,256, + 203,161,128,102,81,64,51,40, + 32,25,20,16,13,10,8,6, + 5,4,3,3,2,2,1,0 + }, + { + 1048832,832459,660723,524416,416229,330361,262208,208115, + 165181,131104,104057,82590,65552,52029,41295,32776, + 26014,20648,16388,13007,10324,8194,6504,5162, + 4097,3252,2581,2049,1626,1290,1024,813, + 645,512,406,323,256,203,161,128, + 102,81,64,51,40,32,25,20, + 16,13,10,8,6,5,4,3, + 3,2,2,1,1,1,1,0 + }, + { + 524352,416178,330321,262176,208089,165161,131088,104045, + 82580,65544,52022,41290,32772,26011,20645,16386, + 13006,10323,8193,6503,5161,4097,3251,2581, + 2048,1626,1290,1024,813,645,512,406, + 323,256,203,161,128,102,81,64, + 51,40,32,25,20,16,13,10, + 8,6,5,4,3,3,2,2, + 1,1,1,1,1,0,0,0 + }, + { + 262160,208077,165150,131080,104038,82575,65540,52019, + 41288,32770,26010,20644,16385,13005,10322,8193, + 6502,5161,4096,3251,2580,2048,1626,1290, + 1024,813,645,512,406,323,256,203, + 161,128,102,81,64,51,40,32, + 25,20,16,13,10,8,6,5, + 4,3,3,2,2,1,1,1, + 1,1,0,0,0,0,0,0 + }, + { + 131076,104035,82573,65538,52018,41286,32769,26009, + 20643,16385,13004,10322,8192,6502,5161,4096, + 3251,2580,2048,1626,1290,1024,813,645, + 512,406,323,256,203,161,128,102, + 81,64,51,40,32,25,20,16, + 13,10,8,6,5,4,3,3, + 2,2,1,1,1,1,1,0, + 0,0,0,0,0,0,0,0 + }, + { + 65537,52017,41286,32769,26008,20643,16384,13004, + 10321,8192,6502,5161,4096,3251,2580,2048, + 1626,1290,1024,813,645,512,406,323, + 256,203,161,128,102,81,64,51, + 40,32,25,20,16,13,10,8, + 6,5,4,3,3,2,2,1, + 1,1,1,1,0,0,0,0, + 0,0,0,0,0,0,0,0 + }, + { + -1717986918,-1363567121,-1082263941,-858993459,-681783560,-541131970,-429496730,-340891780, + -270565985,-214748365,-170445890,-135282993,-107374182,-85222945,-67641496,-53687091, + -42611473,-33820748,-26843546,-21305736,-16910374,-13421773,-10652868,-8455187, + -6710886,-5326434,-4227594,-3355443,-2663217,-2113797,-1677722,-1331609, + -1056898,-838861,-665804,-528449,-419430,-332902,-264225,-209715, + -166451,-132112,-104858,-83226,-66056,-52429,-41613,-33028, + -26214,-20806,-16514,-13107,-10403,-8257,-6554,-5202, + -4129,-3277,-2601,-2064,-1638,-1300,-1032,0 + }, + { + -858993459,-681783560,-541131970,-429496730,-340891780,-270565985,-214748365,-170445890, + -135282993,-107374182,-85222945,-67641496,-53687091,-42611473,-33820748,-26843546, + -21305736,-16910374,-13421773,-10652868,-8455187,-6710886,-5326434,-4227594, + -3355443,-2663217,-2113797,-1677722,-1331609,-1056898,-838861,-665804, + -528449,-419430,-332902,-264225,-209715,-166451,-132112,-104858, + -83226,-66056,-52429,-41613,-33028,-26214,-20806,-16514, + -13107,-10403,-8257,-6554,-5202,-4129,-3277,-2601, + -2064,-1638,-1300,-1032,-819,-650,-516,0 + }, + { + 858993459,681783560,541131970,429496730,340891780,270565985,214748365,170445890, + 135282993,107374182,85222945,67641496,53687091,42611473,33820748,26843546, + 21305736,16910374,13421773,10652868,8455187,6710886,5326434,4227594, + 3355443,2663217,2113797,1677722,1331609,1056898,838861,665804, + 528449,419430,332902,264225,209715,166451,132112,104858, + 83226,66056,52429,41613,33028,26214,20806,16514, + 13107,10403,8257,6554,5202,4129,3277,2601, + 2064,1638,1300,1032,819,650,516,0 + }, + { + 1717986918,1363567121,1082263941,858993459,681783560,541131970,429496730,340891780, + 270565985,214748365,170445890,135282993,107374182,85222945,67641496,53687091, + 42611473,33820748,26843546,21305736,16910374,13421773,10652868,8455187, + 6710886,5326434,4227594,3355443,2663217,2113797,1677722,1331609, + 1056898,838861,665804,528449,419430,332902,264225,209715, + 166451,132112,104858,83226,66056,52429,41613,33028, + 26214,20806,16514,13107,10403,8257,6554,5202, + 4129,3277,2601,2064,1638,1300,1032,0 + }, + { + -1908874354,-1515074579,-1202515490,-954437177,-757537289,-601257745,-477218588,-378768645, + -300628872,-238609294,-189384322,-150314436,-119304647,-94692161,-75157218,-59652324, + -47346081,-37578609,-29826162,-23673040,-18789305,-14913081,-11836520,-9394652, + -7456540,-5918260,-4697326,-3728270,-2959130,-2348663,-1864135,-1479565, + -1174332,-932068,-739783,-587166,-466034,-369891,-293583,-233017, + -184946,-146791,-116508,-92473,-73396,-58254,-46236,-36698, + -29127,-23118,-18349,-14564,-11559,-9174,-7282,-5780, + -4587,-3641,-2890,-2294,-1820,-1445,-1147,0 + }, + { + -954437177,-757537289,-601257745,-477218588,-378768645,-300628872,-238609294,-189384322, + -150314436,-119304647,-94692161,-75157218,-59652324,-47346081,-37578609,-29826162, + -23673040,-18789305,-14913081,-11836520,-9394652,-7456540,-5918260,-4697326, + -3728270,-2959130,-2348663,-1864135,-1479565,-1174332,-932068,-739783, + -587166,-466034,-369891,-293583,-233017,-184946,-146791,-116508, + -92473,-73396,-58254,-46236,-36698,-29127,-23118,-18349, + -14564,-11559,-9174,-7282,-5780,-4587,-3641,-2890, + -2294,-1820,-1445,-1147,-910,-722,-573,0 + }, + { + -477218588,-378768645,-300628872,-238609294,-189384322,-150314436,-119304647,-94692161, + -75157218,-59652324,-47346081,-37578609,-29826162,-23673040,-18789305,-14913081, + -11836520,-9394652,-7456540,-5918260,-4697326,-3728270,-2959130,-2348663, + -1864135,-1479565,-1174332,-932068,-739783,-587166,-466034,-369891, + -293583,-233017,-184946,-146791,-116508,-92473,-73396,-58254, + -46236,-36698,-29127,-23118,-18349,-14564,-11559,-9174, + -7282,-5780,-4587,-3641,-2890,-2294,-1820,-1445, + -1147,-910,-722,-573,-455,-361,-287,0 + }, + { + 477218588,378768645,300628872,238609294,189384322,150314436,119304647,94692161, + 75157218,59652324,47346081,37578609,29826162,23673040,18789305,14913081, + 11836520,9394652,7456540,5918260,4697326,3728270,2959130,2348663, + 1864135,1479565,1174332,932068,739783,587166,466034,369891, + 293583,233017,184946,146791,116508,92473,73396,58254, + 46236,36698,29127,23118,18349,14564,11559,9174, + 7282,5780,4587,3641,2890,2294,1820,1445, + 1147,910,722,573,455,361,287,0 + }, + { + 954437177,757537289,601257745,477218588,378768645,300628872,238609294,189384322, + 150314436,119304647,94692161,75157218,59652324,47346081,37578609,29826162, + 23673040,18789305,14913081,11836520,9394652,7456540,5918260,4697326, + 3728270,2959130,2348663,1864135,1479565,1174332,932068,739783, + 587166,466034,369891,293583,233017,184946,146791,116508, + 92473,73396,58254,46236,36698,29127,23118,18349, + 14564,11559,9174,7282,5780,4587,3641,2890, + 2294,1820,1445,1147,910,722,573,0 + }, + { + 1908874354,1515074579,1202515490,954437177,757537289,601257745,477218588,378768645, + 300628872,238609294,189384322,150314436,119304647,94692161,75157218,59652324, + 47346081,37578609,29826162,23673040,18789305,14913081,11836520,9394652, + 7456540,5918260,4697326,3728270,2959130,2348663,1864135,1479565, + 1174332,932068,739783,587166,466034,369891,293583,233017, + 184946,146791,116508,92473,73396,58254,46236,36698, + 29127,23118,18349,14564,11559,9174,7282,5780, + 4587,3641,2890,2294,1820,1445,1147,0 + }, +}; + +#endif diff --git a/dll/win32/winemp3.acm/l2tables.h b/include/reactos/libs/libmpg123/l2tables.h similarity index 86% rename from dll/win32/winemp3.acm/l2tables.h rename to include/reactos/libs/libmpg123/l2tables.h index 09da1c966a4..c671ea14529 100644 --- a/dll/win32/winemp3.acm/l2tables.h +++ b/include/reactos/libs/libmpg123/l2tables.h @@ -1,33 +1,19 @@ /* - * Copyright (c) Michael Hipp and other authors of the mpglib project. - * - * Layer 2 Alloc tables .. - * most other tables are calculated on program start (which is (of course) - * not ISO-conform) .. - * Layer-3 huffman table is in huffman.h - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ + l2tables.h: Layer 2 Alloc tables -struct al_table -{ - short bits; - short d; -}; + copyright ?-2006 by the mpg123 project - free software under the terms of the LGPL 2.1 + see COPYING and AUTHORS files in distribution or http://mpg123.org + initially written by Michael Hipp -static const struct al_table alloc_0[] = { + most other tables are calculated on program start (which is (of course) not ISO-conform) + Layer-3 huffman table is in huffman.h +*/ + + +#ifndef _MPG123_L2TABLES_H_ +#define _MPG123_L2TABLES_H_ + +const struct al_table alloc_0[] = { {4,0},{5,3},{3,-3},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},{9,-255},{10,-511}, {11,-1023},{12,-2047},{13,-4095},{14,-8191},{15,-16383},{16,-32767}, {4,0},{5,3},{3,-3},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},{9,-255},{10,-511}, @@ -67,7 +53,7 @@ static const struct al_table alloc_0[] = { {2,0},{5,3},{7,5},{16,-32767}, {2,0},{5,3},{7,5},{16,-32767} }; -static const struct al_table alloc_1[] = { +const struct al_table alloc_1[] = { {4,0},{5,3},{3,-3},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},{9,-255},{10,-511}, {11,-1023},{12,-2047},{13,-4095},{14,-8191},{15,-16383},{16,-32767}, {4,0},{5,3},{3,-3},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},{9,-255},{10,-511}, @@ -110,7 +96,7 @@ static const struct al_table alloc_1[] = { {2,0},{5,3},{7,5},{16,-32767}, {2,0},{5,3},{7,5},{16,-32767} }; -static const struct al_table alloc_2[] = { +const struct al_table alloc_2[] = { {4,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},{9,-255}, {10,-511},{11,-1023},{12,-2047},{13,-4095},{14,-8191},{15,-16383}, {4,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},{9,-255}, @@ -122,7 +108,7 @@ static const struct al_table alloc_2[] = { {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63}, {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63} }; -static const struct al_table alloc_3[] = { +const struct al_table alloc_3[] = { {4,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},{9,-255}, {10,-511},{11,-1023},{12,-2047},{13,-4095},{14,-8191},{15,-16383}, {4,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},{9,-255}, @@ -138,7 +124,7 @@ static const struct al_table alloc_3[] = { {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63}, {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63} }; -static const struct al_table alloc_4[] = { +const struct al_table alloc_4[] = { {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127}, {9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{14,-8191}, {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127}, @@ -173,3 +159,6 @@ static const struct al_table alloc_4[] = { {2,0},{5,3},{7,5},{10,9}, {2,0},{5,3},{7,5},{10,9}, {2,0},{5,3},{7,5},{10,9} }; + +#endif + diff --git a/include/reactos/libs/libmpg123/l3_integer_tables.h b/include/reactos/libs/libmpg123/l3_integer_tables.h new file mode 100644 index 00000000000..f600c31151e --- /dev/null +++ b/include/reactos/libs/libmpg123/l3_integer_tables.h @@ -0,0 +1,1002 @@ +/* + l3_integer_tables.h: Layer3 Constant tables for integer decoders + + copyright 1995-2009 by the mpg123 project - free software under the terms of the LGPL 2.1 + see COPYING and AUTHORS files in distribution or http://mpg123.org + initially written by Taihei Monma +*/ + +#ifndef MPG123_L3_INTEGER_TABLES_H +#define MPG123_L3_INTEGER_TABLES_H + +#ifdef PRECALC_TABLES +static const real ispow[8207] = +{ + 0,8192,20643,35445,52016,70041,89315,109695,131072,153360, + 176491,200407,225060,250408,276414,303048,330281,358087,386444,415331, + 444730,474623,504995,535830,567116,598839,630988,663552,696521,729884, + 763633,797760,832255,867112,902323,937880,973778,1010010,1046569,1083451, + 1120650,1158160,1195976,1234093,1272507,1311213,1350207,1389485,1429042,1468875, + 1508979,1549352,1589990,1630889,1672046,1713458,1755122,1797035,1839193,1881594, + 1924236,1967115,2010229,2053576,2097152,2140956,2184985,2229238,2273710,2318402, + 2363310,2408432,2453767,2499312,2545065,2591025,2637190,2683558,2730126,2776895, + 2823861,2871023,2918379,2965929,3013670,3061600,3109719,3158025,3206517,3255192, + 3304050,3353089,3402309,3451707,3501282,3551033,3600960,3651060,3701332,3751776, + 3802390,3853172,3904123,3955241,4006524,4057972,4109583,4161357,4213293,4265389, + 4317644,4370058,4422630,4475359,4528243,4581282,4634476,4687822,4741320,4794970, + 4848770,4902720,4956819,5011066,5065460,5120000,5174686,5229517,5284492,5339610, + 5394871,5450274,5505818,5561502,5617327,5673290,5729391,5785631,5842007,5898519, + 5955168,6011951,6068869,6125920,6183105,6240422,6297871,6355451,6413162,6471004, + 6528974,6587074,6645302,6703658,6762141,6820751,6879487,6938349,6997336,7056447, + 7115683,7175042,7234524,7294129,7353855,7413703,7473672,7533762,7593972,7654301, + 7714750,7775317,7836002,7896805,7957725,8018762,8079916,8141185,8202570,8264070, + 8325685,8387413,8449256,8511212,8573281,8635462,8697756,8760161,8822678,8885305, + 8948043,9010892,9073850,9136917,9200094,9263379,9326772,9390274,9453882,9517598, + 9581421,9645351,9709386,9773527,9837774,9902125,9966582,10031143,10095807,10160576, + 10225448,10290423,10355500,10420681,10485963,10551347,10616832,10682419,10748106,10813894, + 10879782,10945770,11011857,11078044,11144330,11210715,11277198,11343779,11410458,11477234, + 11544108,11611079,11678147,11745311,11812571,11879927,11947378,12014925,12082567,12150304, + 12218135,12286061,12354081,12422194,12490401,12558701,12627094,12695580,12764158,12832829, + 12901592,12970446,13039392,13108429,13177557,13246776,13316085,13385485,13454975,13524554, + 13594224,13663982,13733830,13803767,13873792,13943906,14014108,14084398,14154776,14225242, + 14295794,14366435,14437162,14507975,14578876,14649862,14720935,14792093,14863337,14934667, + 15006082,15077582,15149167,15220837,15292591,15364429,15436351,15508358,15580448,15652621, + 15724878,15797217,15869640,15942146,16014734,16087404,16160156,16232991,16305907,16378905, + 16451984,16525145,16598386,16671709,16745112,16818596,16892160,16965804,17039528,17113332, + 17187216,17261179,17335222,17409343,17483544,17557824,17632182,17706618,17781133,17855726, + 17930397,18005146,18079973,18154877,18229858,18304917,18380052,18455265,18530554,18605920, + 18681362,18756880,18832475,18908145,18983891,19059713,19135610,19211583,19287630,19363753, + 19439951,19516223,19592571,19668992,19745488,19822058,19898702,19975420,20052211,20129076, + 20206015,20283027,20360112,20437270,20514501,20591805,20669181,20746630,20824151,20901745, + 20979410,21057148,21134957,21212838,21290791,21368815,21446910,21525076,21603314,21681622, + 21760001,21838451,21916971,21995561,22074222,22152953,22231754,22310625,22389566,22468576, + 22547656,22626806,22706024,22785312,22864669,22944094,23023589,23103152,23182783,23262484, + 23342252,23422089,23501993,23581966,23662007,23742115,23822291,23902534,23982845,24063223, + 24143669,24224181,24304761,24385407,24466120,24546899,24627745,24708658,24789637,24870682, + 24951793,25032970,25114213,25195521,25276895,25358335,25439841,25521411,25603047,25684748, + 25766514,25848345,25930241,26012201,26094226,26176316,26258469,26340688,26422970,26505317, + 26587727,26670202,26752740,26835342,26918008,27000737,27083530,27166386,27249305,27332287, + 27415332,27498440,27581611,27664845,27748142,27831501,27914922,27998406,28081952,28165561, + 28249231,28332963,28416758,28500614,28584532,28668511,28752552,28836655,28920819,29005044, + 29089330,29173677,29258086,29342555,29427085,29511676,29596328,29681040,29765813,29850646, + 29935539,30020493,30105507,30190581,30275714,30360908,30446162,30531475,30616848,30702280, + 30787772,30873323,30958934,31044604,31130332,31216120,31301967,31387873,31473838,31559862, + 31645944,31732084,31818284,31904541,31990857,32077231,32163664,32250154,32336703,32423309, + 32509974,32596696,32683476,32770313,32857208,32944161,33031171,33118238,33205363,33292544, + 33379783,33467079,33554432,33641842,33729308,33816832,33904412,33992048,34079741,34167491, + 34255297,34343159,34431078,34519052,34607083,34695170,34783312,34871511,34959765,35048075, + 35136441,35224862,35313339,35401872,35490459,35579102,35667801,35756554,35845363,35934226, + 36023145,36112118,36201147,36290230,36379367,36468560,36557807,36647108,36736464,36825875, + 36915339,37004858,37094431,37184058,37273739,37363474,37453263,37543106,37633003,37722953, + 37812957,37903015,37993126,38083291,38173509,38263780,38354105,38444483,38534914,38625398, + 38715935,38806525,38897168,38987864,39078612,39169414,39260268,39351174,39442133,39533145, + 39624209,39715325,39806494,39897714,39988987,40080312,40171690,40263119,40354600,40446133, + 40537718,40629354,40721042,40812782,40904574,40996417,41088311,41180257,41272254,41364303, + 41456402,41548553,41640755,41733008,41825313,41917668,42010074,42102530,42195038,42287596, + 42380205,42472865,42565575,42658336,42751147,42844009,42936921,43029883,43122895,43215958, + 43309070,43402233,43495446,43588709,43682022,43775384,43868797,43962259,44055771,44149332, + 44242943,44336604,44430314,44524073,44617882,44711741,44805648,44899605,44993611,45087666, + 45181770,45275923,45370126,45464377,45558677,45653025,45747423,45841869,45936364,46030908, + 46125500,46220141,46314830,46409567,46504353,46599187,46694070,46789001,46883980,46979007, + 47074082,47169205,47264376,47359595,47454862,47550177,47645540,47740950,47836408,47931914, + 48027467,48123068,48218716,48314412,48410155,48505945,48601783,48697668,48793601,48889580, + 48985607,49081681,49177802,49273969,49370184,49466446,49562754,49659109,49755511,49851960, + 49948456,50044998,50141586,50238222,50334903,50431631,50528406,50625227,50722094,50819007, + 50915967,51012973,51110025,51207123,51304267,51401457,51498694,51595976,51693304,51790677, + 51888097,51985562,52083073,52180630,52278232,52375880,52473573,52571312,52669097,52766926, + 52864801,52962722,53060688,53158699,53256755,53354856,53453002,53551194,53649430,53747712, + 53846038,53944410,54042826,54141287,54239793,54338344,54436939,54535579,54634263,54732993, + 54831766,54930585,55029447,55128354,55227306,55326302,55425342,55524426,55623555,55722728, + 55821945,55921206,56020511,56119860,56219253,56318690,56418171,56517696,56617265,56716877, + 56816534,56916234,57015977,57115764,57215595,57315470,57415388,57515349,57615354,57715403, + 57815494,57915629,58015808,58116029,58216294,58316602,58416954,58517348,58617785,58718266, + 58818789,58919356,59019965,59120617,59221312,59322050,59422831,59523654,59624521,59725429, + 59826381,59927375,60028412,60129491,60230613,60331777,60432983,60534232,60635524,60736857, + 60838233,60939651,61041112,61142614,61244159,61345746,61447375,61549046,61650759,61752513, + 61854310,61956149,62058030,62159952,62261916,62363922,62465970,62568059,62670191,62772363, + 62874578,62976833,63079131,63181470,63283850,63386272,63488735,63591239,63693785,63796372, + 63899001,64001670,64104381,64207133,64309926,64412760,64515636,64618552,64721509,64824507, + 64927546,65030627,65133747,65236909,65340112,65443355,65546639,65649964,65753329,65856735, + 65960182,66063669,66167197,66270765,66374374,66478023,66581713,66685443,66789213,66893024, + 66996875,67100766,67204698,67308669,67412681,67516733,67620825,67724957,67829130,67933342, + 68037594,68141886,68246218,68350590,68455002,68559454,68663945,68768476,68873047,68977658, + 69082308,69186998,69291728,69396497,69501306,69606154,69711042,69815969,69920936,70025942, + 70130987,70236072,70341196,70446360,70551562,70656804,70762085,70867406,70972765,71078164, + 71183601,71289078,71394594,71500149,71605742,71711375,71817046,71922757,72028506,72134294, + 72240121,72345987,72451891,72557835,72663817,72769837,72875896,72981994,73088130,73194305, + 73300519,73406770,73513061,73619389,73725757,73832162,73938606,74045088,74151609,74258168, + 74364765,74471400,74578073,74684785,74791535,74898323,75005149,75112012,75218914,75325854, + 75432832,75539848,75646902,75753994,75861123,75968291,76075496,76182739,76290020,76397338, + 76504694,76612088,76719520,76826989,76934495,77042040,77149622,77257241,77364898,77472592, + 77580324,77688093,77795899,77903743,78011625,78119543,78227499,78335492,78443522,78551590, + 78659695,78767836,78876015,78984232,79092485,79200775,79309102,79417467,79525868,79634306, + 79742781,79851293,79959842,80068428,80177050,80285710,80394406,80503139,80611908,80720715, + 80829558,80938438,81047354,81156307,81265296,81374322,81483385,81592484,81701620,81810792, + 81920000,82029245,82138526,82247844,82357198,82466588,82576014,82685477,82794976,82904512, + 83014083,83123691,83233334,83343014,83452730,83562482,83672271,83782095,83891955,84001851, + 84111783,84221751,84331755,84441795,84551870,84661982,84772129,84882312,84992531,85102786, + 85213076,85323402,85433764,85544161,85654594,85765063,85875567,85986107,86096682,86207293, + 86317939,86428621,86539338,86650091,86760879,86871702,86982561,87093455,87204384,87315349, + 87426349,87537384,87648455,87759560,87870701,87981877,88093088,88204334,88315616,88426932, + 88538283,88649670,88761091,88872548,88984039,89095565,89207126,89318723,89430353,89542019, + 89653720,89765455,89877226,89989030,90100870,90212745,90324654,90436598,90548576,90660589, + 90772637,90884719,90996836,91108987,91221173,91333394,91445648,91557938,91670262,91782620, + 91895012,92007439,92119901,92232396,92344926,92457491,92570089,92682722,92795389,92908090, + 93020826,93133595,93246399,93359237,93472109,93585015,93697955,93810929,93923937,94036980, + 94150056,94263166,94376310,94489488,94602700,94715946,94829225,94942539,95055886,95169267, + 95282682,95396131,95509613,95623129,95736679,95850263,95963880,96077530,96191215,96304933, + 96418684,96532470,96646288,96760140,96874026,96987945,97101898,97215884,97329904,97443956, + 97558043,97672162,97786315,97900502,98014721,98128974,98243260,98357580,98471933,98586318, + 98700737,98815190,98929675,99044194,99158745,99273330,99387948,99502598,99617282,99731999, + 99846749,99961532,100076348,100191197,100306078,100420993,100535940,100650921,100765934,100880980, + 100996059,101111170,101226315,101341492,101456702,101571944,101687220,101802528,101917868,102033241, + 102148647,102264086,102379557,102495061,102610597,102726166,102841767,102957401,103073067,103188765, + 103304497,103420260,103536056,103651884,103767745,103883638,103999563,104115521,104231511,104347533, + 104463588,104579675,104695794,104811945,104928128,105044344,105160592,105276871,105393183,105509527, + 105625904,105742312,105858752,105975224,106091729,106208265,106324833,106441433,106558066,106674730, + 106791426,106908154,107024913,107141705,107258528,107375384,107492271,107609190,107726140,107843123, + 107960137,108077182,108194260,108311369,108428510,108545683,108662887,108780122,108897390,109014689, + 109132019,109249381,109366775,109484200,109601656,109719144,109836664,109954215,110071797,110189411, + 110307056,110424733,110542441,110660180,110777950,110895752,111013585,111131450,111249346,111367273, + 111485231,111603220,111721241,111839292,111957375,112075489,112193635,112311811,112430018,112548257, + 112666526,112784827,112903159,113021521,113139915,113258339,113376795,113495282,113613799,113732347, + 113850927,113969537,114088178,114206850,114325552,114444286,114563050,114681845,114800671,114919528, + 115038415,115157333,115276282,115395262,115514272,115633313,115752384,115871486,115990619,116109783, + 116228976,116348201,116467456,116586742,116706058,116825404,116944781,117064189,117183627,117303095, + 117422594,117542124,117661683,117781273,117900894,118020545,118140226,118259937,118379679,118499451, + 118619253,118739086,118858948,118978842,119098765,119218718,119338702,119458716,119578759,119698834, + 119818938,119939072,120059236,120179431,120299655,120419910,120540194,120660509,120780854,120901228, + 121021633,121142067,121262532,121383026,121503550,121624105,121744689,121865303,121985946,122106620, + 122227323,122348057,122468820,122589613,122710435,122831287,122952170,123073081,123194023,123314994, + 123435995,123557025,123678085,123799175,123920295,124041444,124162622,124283830,124405068,124526335, + 124647632,124768959,124890314,125011700,125133114,125254559,125376032,125497536,125619068,125740630, + 125862221,125983842,126105492,126227171,126348880,126470618,126592386,126714182,126836008,126957863, + 127079748,127201661,127323604,127445576,127567578,127689608,127811668,127933756,128055874,128178021, + 128300197,128422403,128544637,128666900,128789193,128911514,129033865,129156244,129278652,129401090, + 129523556,129646052,129768576,129891129,130013711,130136323,130258963,130381631,130504329,130627056, + 130749811,130872595,130995408,131118250,131241120,131364020,131486948,131609905,131732890,131855904, + 131978947,132102019,132225119,132348248,132471406,132594592,132717807,132841050,132964323,133087623, + 133210952,133334310,133457696,133581111,133704554,133828026,133951527,134075055,134198613,134322198, + 134445812,134569455,134693126,134816825,134940553,135064309,135188094,135311906,135435747,135559617, + 135683515,135807441,135931395,136055378,136179388,136303427,136427495,136551590,136675714,136799866, + 136924046,137048254,137172490,137296755,137421048,137545368,137669717,137794094,137918499,138042932, + 138167393,138291882,138416400,138540945,138665518,138790119,138914748,139039405,139164090,139288803, + 139413544,139538313,139663110,139787934,139912787,140037667,140162575,140287511,140412475,140537467, + 140662486,140787533,140912608,141037711,141162842,141288000,141413186,141538399,141663641,141788910, + 141914207,142039531,142164883,142290263,142415670,142541105,142666567,142792057,142917575,143043120, + 143168693,143294294,143419921,143545577,143671260,143796970,143922708,144048473,144174266,144300086, + 144425934,144551809,144677712,144803641,144929599,145055583,145181595,145307635,145433701,145559795, + 145685917,145812065,145938241,146064445,146190675,146316933,146443218,146569530,146695869,146822236, + 146948630,147075051,147201499,147327974,147454477,147581007,147707563,147834147,147960758,148087396, + 148214061,148340754,148467473,148594219,148720993,148847793,148974620,149101475,149228356,149355264, + 149482200,149609162,149736151,149863167,149990210,150117280,150244377,150371501,150498652,150625829, + 150753033,150880265,151007523,151134807,151262119,151389457,151516823,151644215,151771633,151899079, + 152026551,152154050,152281576,152409128,152536707,152664313,152791945,152919604,153047290,153175002, + 153302741,153430507,153558299,153686118,153813963,153941835,154069734,154197659,154325610,154453588, + 154581593,154709624,154837682,154965766,155093876,155222013,155350177,155478367,155606583,155734826, + 155863095,155991391,156119713,156248061,156376436,156504837,156633264,156761718,156890198,157018704, + 157147237,157275796,157404381,157532993,157661630,157790294,157918985,158047701,158176444,158305212, + 158434008,158562829,158691676,158820550,158949449,159078375,159207327,159336305,159465310,159594340, + 159723396,159852479,159981587,160110722,160239882,160369069,160498282,160627520,160756785,160886076, + 161015392,161144735,161274103,161403498,161532918,161662365,161791837,161921335,162050859,162180409, + 162309985,162439587,162569215,162698868,162828547,162958252,163087983,163217740,163347523,163477331, + 163607165,163737025,163866910,163996822,164126759,164256722,164386710,164516724,164646764,164776830, + 164906921,165037038,165167181,165297349,165427543,165557762,165688007,165818278,165948574,166078896, + 166209243,166339616,166470015,166600439,166730888,166861363,166991864,167122390,167252942,167383519, + 167514122,167644750,167775403,167906082,168036786,168167516,168298271,168429052,168559858,168690689, + 168821546,168952428,169083335,169214268,169345226,169476210,169607219,169738253,169869312,170000397, + 170131507,170262642,170393802,170524988,170656199,170787435,170918696,171049983,171181295,171312632, + 171443994,171575381,171706793,171838231,171969694,172101182,172232695,172364233,172495796,172627384, + 172758997,172890636,173022299,173153988,173285702,173417440,173549204,173680993,173812806,173944645, + 174076509,174208397,174340311,174472249,174604213,174736201,174868215,175000253,175132316,175264404, + 175396517,175528655,175660818,175793005,175925218,176057455,176189717,176322004,176454316,176586653, + 176719014,176851400,176983811,177116247,177248708,177381193,177513703,177646237,177778797,177911381, + 178043990,178176624,178309282,178441965,178574672,178707405,178840162,178972943,179105749,179238580, + 179371435,179504316,179637220,179770149,179903103,180036082,180169084,180302112,180435164,180568240, + 180701342,180834467,180967617,181100792,181233991,181367214,181500462,181633735,181767032,181900353, + 182033699,182167069,182300464,182433883,182567326,182700794,182834286,182967803,183101344,183234909, + 183368499,183502113,183635751,183769414,183903101,184036812,184170548,184304307,184438092,184571900, + 184705732,184839589,184973470,185107376,185241305,185375259,185509237,185643239,185777266,185911316, + 186045391,186179490,186313613,186447760,186581931,186716126,186850346,186984590,187118857,187253149, + 187387465,187521805,187656169,187790557,187924969,188059405,188193866,188328350,188462858,188597390, + 188731946,188866527,189001131,189135759,189270411,189405087,189539787,189674511,189809259,189944031, + 190078827,190213646,190348490,190483357,190618249,190753164,190888103,191023066,191158052,191293063, + 191428097,191563155,191698237,191833343,191968473,192103626,192238803,192374004,192509229,192644477, + 192779749,192915045,193050365,193185708,193321075,193456466,193591881,193727319,193862781,193998266, + 194133775,194269308,194404864,194540444,194676048,194811675,194947326,195083001,195218699,195354421, + 195490166,195625935,195761727,195897543,196033383,196169246,196305132,196441042,196576976,196712933, + 196848914,196984918,197120945,197256996,197393071,197529169,197665290,197801435,197937603,198073795, + 198210010,198346249,198482510,198618796,198755104,198891437,199027792,199164171,199300573,199436998, + 199573447,199709919,199846415,199982934,200119476,200256041,200392630,200529242,200665877,200802535, + 200939217,201075922,201212650,201349402,201486176,201622974,201759795,201896639,202033507,202170398, + 202307311,202444248,202581209,202718192,202855198,202992228,203129281,203266357,203403456,203540578, + 203677723,203814891,203952082,204089297,204226534,204363795,204501078,204638385,204775715,204913067, + 205050443,205187842,205325264,205462708,205600176,205737667,205875180,206012717,206150277,206287859, + 206425465,206563093,206700745,206838419,206976116,207113836,207251579,207389345,207527134,207664946, + 207802780,207940638,208078518,208216421,208354347,208492295,208630267,208768261,208906279,209044319, + 209182381,209320467,209458575,209596706,209734860,209873037,210011236,210149458,210287703,210425971, + 210564261,210702574,210840910,210979268,211117649,211256053,211394480,211532929,211671400,211809895, + 211948412,212086952,212225514,212364099,212502706,212641337,212779989,212918665,213057363,213196083, + 213334826,213473592,213612380,213751191,213890024,214028880,214167758,214306659,214445582,214584528, + 214723497,214862488,215001501,215140537,215279595,215418676,215557779,215696904,215836053,215975223, + 216114416,216253631,216392869,216532129,216671412,216810717,216950044,217089394,217228766,217368160, + 217507577,217647016,217786477,217925961,218065467,218204996,218344546,218484119,218623715,218763332, + 218902972,219042634,219182319,219322026,219461754,219601506,219741279,219881075,220020893,220160733, + 220300595,220440479,220580386,220720315,220860266,221000239,221140235,221280252,221420292,221560354, + 221700438,221840544,221980672,222120823,222260995,222401190,222541406,222681645,222821906,222962189, + 223102494,223242821,223383170,223523541,223663934,223804350,223944787,224085246,224225728,224366231, + 224506756,224647303,224787873,224928464,225069077,225209712,225350370,225491049,225631750,225772473, + 225913218,226053985,226194773,226335584,226476417,226617271,226758148,226899046,227039966,227180908, + 227321872,227462858,227603865,227744895,227885946,228027019,228168114,228309231,228450369,228591529, + 228732712,228873916,229015141,229156389,229297658,229438949,229580262,229721596,229862953,230004331, + 230145730,230287152,230428595,230570060,230711546,230853055,230994585,231136136,231277709,231419304, + 231560921,231702559,231844219,231985901,232127604,232269329,232411076,232552844,232694633,232836445, + 232978278,233120132,233262008,233403906,233545825,233687766,233829728,233971712,234113717,234255744, + 234397793,234539863,234681954,234824068,234966202,235108358,235250536,235392735,235534955,235677197, + 235819461,235961746,236104052,236246380,236388729,236531100,236673492,236815905,236958340,237100797, + 237243274,237385774,237528294,237670836,237813399,237955984,238098590,238241217,238383866,238526536, + 238669228,238811940,238954674,239097430,239240207,239383005,239525824,239668664,239811526,239954409, + 240097314,240240240,240383187,240526155,240669144,240812155,240955187,241098240,241241314,241384410, + 241527527,241670665,241813824,241957005,242100206,242243429,242386673,242529938,242673224,242816532, + 242959860,243103210,243246581,243389973,243533386,243676820,243820276,243963752,244107249,244250768, + 244394308,244537869,244681450,244825053,244968677,245112322,245255989,245399676,245543384,245687113, + 245830863,245974635,246118427,246262240,246406074,246549930,246693806,246837703,246981621,247125560, + 247269521,247413502,247557504,247701527,247845571,247989635,248133721,248277828,248421956,248566104, + 248710273,248854464,248998675,249142907,249287160,249431434,249575729,249720044,249864381,250008738, + 250153116,250297515,250441935,250586375,250730837,250875319,251019822,251164346,251308890,251453456, + 251598042,251742649,251887277,252031925,252176594,252321284,252465995,252610727,252755479,252900252, + 253045045,253189860,253334695,253479551,253624427,253769324,253914242,254059181,254204140,254349120, + 254494121,254639142,254784184,254929246,255074329,255219433,255364558,255509703,255654868,255800054, + 255945261,256090489,256235737,256381006,256526295,256671605,256816935,256962286,257107657,257253049, + 257398462,257543895,257689349,257834823,257980318,258125833,258271369,258416925,258562502,258708099, + 258853717,258999355,259145014,259290693,259436392,259582112,259727853,259873614,260019395,260165197, + 260311019,260456862,260602725,260748609,260894513,261040437,261186382,261332347,261478333,261624339, + 261770365,261916411,262062478,262208566,262354674,262500802,262646950,262793119,262939308,263085517, + 263231747,263377997,263524267,263670558,263816869,263963200,264109551,264255923,264402315,264548728, + 264695160,264841613,264988086,265134579,265281093,265427627,265574181,265720755,265867349,266013964, + 266160599,266307254,266453929,266600625,266747340,266894076,267040832,267187608,267334404,267481221, + 267628057,267774914,267921791,268068688,268215605,268362542,268509500,268656477,268803475,268950493, + 269097530,269244588,269391666,269538764,269685882,269833021,269980179,270127357,270274555,270421774, + 270569012,270716271,270863549,271010848,271158166,271305505,271452863,271600242,271747640,271895059, + 272042497,272189956,272337434,272484933,272632451,272779990,272927548,273075126,273222724,273370342, + 273517981,273665639,273813316,273961014,274108732,274256470,274404227,274552005,274699802,274847619, + 274995456,275143313,275291190,275439087,275587003,275734940,275882896,276030872,276178868,276326884, + 276474919,276622975,276771050,276919145,277067260,277215394,277363549,277511723,277659917,277808130, + 277956364,278104617,278252890,278401183,278549496,278697828,278846180,278994552,279142943,279291354, + 279439785,279588236,279736706,279885196,280033706,280182236,280330785,280479353,280627942,280776550, + 280925178,281073825,281222493,281371179,281519886,281668612,281817358,281966123,282114908,282263713, + 282412537,282561381,282710244,282859127,283008030,283156952,283305894,283454855,283603836,283752836, + 283901856,284050896,284199955,284349034,284498132,284647250,284796387,284945544,285094721,285243917, + 285393132,285542367,285691621,285840895,285990189,286139502,286288834,286438186,286587557,286736948, + 286886358,287035788,287185237,287334706,287484194,287633701,287783228,287932774,288082340,288231925, + 288381530,288531154,288680797,288830460,288980142,289129844,289279565,289429305,289579065,289728844, + 289878642,290028460,290178297,290328153,290478029,290627924,290777839,290927773,291077726,291227698, + 291377690,291527701,291677731,291827781,291977850,292127938,292278045,292428172,292578318,292728484, + 292878668,293028872,293179095,293329337,293479599,293629880,293780180,293930499,294080837,294231195, + 294381572,294531968,294682383,294832818,294983272,295133744,295284237,295434748,295585278,295735828, + 295886396,296036984,296187591,296338218,296488863,296639527,296790211,296940914,297091636,297242377, + 297393137,297543916,297694714,297845532,297996368,298147224,298298098,298448992,298599905,298750837, + 298901788,299052758,299203747,299354755,299505782,299656829,299807894,299958978,300110081,300261204, + 300412345,300563505,300714685,300865883,301017101,301168337,301319592,301470867,301622160,301773472, + 301924804,302076154,302227523,302378911,302530318,302681744,302833189,302984653,303136136,303287638, + 303439159,303590698,303742257,303893834,304045431,304197046,304348680,304500333,304652005,304803696, + 304955405,305107134,305258881,305410648,305562433,305714237,305866060,306017901,306169762,306321641, + 306473539,306625456,306777392,306929347,307081320,307233312,307385323,307537353,307689402,307841469, + 307993555,308145660,308297784,308449927,308602088,308754268,308906467,309058684,309210921,309363176, + 309515449,309667742,309820053,309972383,310124732,310277099,310429485,310581890,310734313,310886755, + 311039216,311191696,311344194,311496711,311649247,311801801,311954374,312106965,312259575,312412204, + 312564852,312717518,312870203,313022906,313175628,313328369,313481128,313633906,313786703,313939518, + 314092351,314245204,314398074,314550964,314703872,314856799,315009744,315162708,315315690,315468691, + 315621710,315774748,315927805,316080880,316233973,316387086,316540216,316693365,316846533,316999719, + 317152924,317306147,317459389,317612649,317765928,317919225,318072541,318225875,318379228,318532599, + 318685988,318839396,318992823,319146268,319299731,319453213,319606713,319760232,319913769,320067324, + 320220898,320374491,320528101,320681731,320835378,320989044,321142729,321296431,321450153,321603892, + 321757650,321911426,322065221,322219034,322372865,322526715,322680583,322834470,322988374,323142297, + 323296239,323450199,323604177,323758173,323912188,324066221,324220272,324374342,324528430,324682536, + 324836660,324990803,325144964,325299144,325453341,325607557,325761791,325916044,326070314,326224603, + 326378910,326533236,326687579,326841941,326996321,327150720,327305136,327459571,327614024,327768495, + 327922984,328077492,328232018,328386562,328541124,328695704,328850302,329004919,329159554,329314207, + 329468878,329623567,329778275,329933000,330087744,330242506,330397286,330552084,330706900,330861735, + 331016587,331171458,331326347,331481254,331636178,331791121,331946083,332101062,332256059,332411074, + 332566108,332721159,332876229,333031317,333186422,333341546,333496688,333651848,333807026,333962221, + 334117435,334272667,334427917,334583185,334738471,334893776,335049098,335204438,335359796,335515172, + 335670566,335825978,335981408,336136856,336292322,336447806,336603308,336758828,336914365,337069921, + 337225495,337381087,337536696,337692324,337847969,338003633,338159314,338315013,338470730,338626465, + 338782218,338937989,339093778,339249585,339405409,339561252,339717112,339872990,340028886,340184800, + 340340732,340496682,340652650,340808635,340964638,341120659,341276698,341432755,341588830,341744922, + 341901032,342057161,342213306,342369470,342525652,342681851,342838068,342994303,343150556,343306826, + 343463115,343619421,343775745,343932086,344088446,344244823,344401218,344557631,344714061,344870509, + 345026975,345183459,345339960,345496480,345653016,345809571,345966143,346122733,346279341,346435967, + 346592610,346749271,346905949,347062646,347219359,347376091,347532840,347689607,347846392,348003194, + 348160014,348316852,348473707,348630580,348787471,348944379,349101305,349258249,349415210,349572189, + 349729185,349886199,350043231,350200280,350357347,350514432,350671534,350828653,350985791,351142946, + 351300118,351457308,351614516,351771741,351928984,352086244,352243522,352400817,352558130,352715461, + 352872809,353030175,353187558,353344959,353502377,353659813,353817266,353974737,354132225,354289731, + 354447254,354604795,354762354,354919929,355077523,355235134,355392762,355550408,355708071,355865752, + 356023450,356181166,356338899,356496649,356654418,356812203,356970006,357127826,357285664,357443520, + 357601392,357759282,357917190,358075115,358233057,358391017,358548994,358706989,358865001,359023030, + 359181077,359339141,359497223,359655322,359813438,359971572,360129723,360287891,360446077,360604280, + 360762501,360920738,361078994,361237266,361395556,361553863,361712188,361870530,362028889,362187265, + 362345659,362504070,362662499,362820944,362979407,363137888,363296385,363454900,363613432,363771982, + 363930549,364089133,364247734,364406353,364564988,364723642,364882312,365041000,365199704,365358426, + 365517166,365675922,365834696,365993487,366152296,366311121,366469964,366628824,366787701,366946595, + 367105507,367264435,367423381,367582344,367741325,367900322,368059337,368218369,368377418,368536484, + 368695567,368854668,369013785,369172920,369332072,369491241,369650428,369809631,369968852,370128089, + 370287344,370446616,370605905,370765211,370924535,371083875,371243232,371402607,371561999,371721408, + 371880833,372040276,372199737,372359214,372518708,372678219,372837748,372997293,373156856,373316435, + 373476032,373635645,373795276,373954924,374114589,374274270,374433969,374593685,374753418,374913168, + 375072935,375232719,375392520,375552338,375712173,375872025,376031894,376191780,376351683,376511603, + 376671540,376831494,376991465,377151453,377311458,377471479,377631518,377791574,377951647,378111736, + 378271843,378431966,378592107,378752264,378912439,379072630,379232838,379393063,379553305,379713564, + 379873840,380034133,380194443,380354769,380515113,380675473,380835850,380996244,381156655,381317083, + 381477528,381637990,381798468,381958964,382119476,382280005,382440551,382601114,382761694,382922290, + 383082903,383243534,383404181,383564844,383725525,383886223,384046937,384207668,384368416,384529181, + 384689962,384850761,385011576,385172408,385333256,385494122,385655004,385815903,385976819,386137752, + 386298701,386459667,386620650,386781650,386942667,387103700,387264750,387425816,387586900,387748000, + 387909117,388070251,388231401,388392568,388553752,388714952,388876170,389037404,389198654,389359922, + 389521206,389682507,389843824,390005158,390166509,390327877,390489261,390650662,390812079,390973513, + 391134964,391296432,391457916,391619417,391780934,391942469,392104019,392265587,392427171,392588772, + 392750389,392912023,393073674,393235341,393397025,393558725,393720442,393882176,394043926,394205693, + 394367477,394529277,394691093,394852927,395014776,395176643,395338526,395500425,395662342,395824274, + 395986224,396148189,396310172,396472171,396634186,396796218,396958267,397120332,397282414,397444512, + 397606627,397768758,397930906,398093070,398255251,398417448,398579662,398741892,398904139,399066402, + 399228682,399390979,399553291,399715621,399877966,400040329,400202707,400365103,400527514,400689943, + 400852387,401014848,401177326,401339820,401502330,401664857,401827400,401989960,402152536,402315129, + 402477738,402640363,402803005,402965664,403128338,403291030,403453737,403616461,403779201,403941958, + 404104731,404267521,404430327,404593149,404755988,404918843,405081715,405244602,405407507,405570427, + 405733364,405896317,406059287,406222273,406385275,406548294,406711329,406874381,407037448,407200532, + 407363633,407526750,407689883,407853032,408016198,408179380,408342578,408505793,408669024,408832271, + 408995534,409158814,409322110,409485423,409648751,409812096,409975457,410138835,410302229,410465639, + 410629065,410792508,410955967,411119442,411282933,411446441,411609964,411773505,411937061,412100633, + 412264222,412427827,412591449,412755086,412918740,413082410,413246096,413409798,413573517,413737251, + 413901002,414064769,414228553,414392352,414556168,414720000,414883848,415047712,415211593,415375489, + 415539402,415703331,415867276,416031238,416195215,416359209,416523218,416687244,416851286,417015344, + 417179419,417343509,417507616,417671738,417835877,418000032,418164203,418328390,418492594,418656813, + 418821048,418985300,419149568,419313852,419478151,419642467,419806800,419971148,420135512,420299892, + 420464289,420628701,420793130,420957574,421122035,421286511,421451004,421615513,421780038,421944579, + 422109136,422273709,422438298,422602903,422767524,422932161,423096814,423261483,423426168,423590870, + 423755587,423920320,424085069,424249834,424414616,424579413,424744226,424909055,425073900,425238762, + 425403639,425568532,425733441,425898366,426063307,426228264,426393237,426558226,426723231,426888252, + 427053288,427218341,427383410,427548494,427713595,427878711,428043844,428208992,428374156,428539337, + 428704533,428869745,429034973,429200217,429365476,429530752,429696043,429861351,430026674,430192013, + 430357369,430522740,430688126,430853529,431018948,431184382,431349833,431515299,431680781,431846279, + 432011793,432177323,432342868,432508430,432674007,432839600,433005209,433170834,433336474,433502131, + 433667803,433833491,433999195,434164914,434330650,434496401,434662168,434827951,434993750,435159565, + 435325395,435491241,435657103,435822981,435988874,436154784,436320709,436486650,436652606,436818579, + 436984567,437150571,437316590,437482626,437648677,437814744,437980827,438146925,438313039,438479169, + 438645315,438811476,438977653,439143846,439310055,439476279,439642519,439808775,439975046,440141333, + 440307636,440473955,440640289,440806639,440973005,441139386,441305783,441472196,441638624,441805068, + 441971528,442138004,442304495,442471002,442637524,442804062,442970616,443137185,443303770,443470371, + 443636988,443803620,443970267,444136931,444303610,444470304,444637014,444803740,444970482,445137239, + 445304012,445470800,445637604,445804423,445971259,446138109,446304976,446471858,446638755,446805668, + 446972597,447139542,447306501,447473477,447640468,447807475,447974497,448141535,448308588,448475657, + 448642742,448809842,448976957,449144088,449311235,449478397,449645575,449812768,449979977,450147202, + 450314442,450481697,450648968,450816255,450983557,451150874,451318207,451485556,451652920,451820300, + 451987695,452155105,452322531,452489973,452657430,452824903,452992391,453159894,453327413,453494948, + 453662498,453830063,453997644,454165240,454332852,454500480,454668122,454835781,455003454,455171143, + 455338848,455506568,455674303,455842054,456009821,456177602,456345399,456513212,456681040,456848884, + 457016742,457184617,457352506,457520411,457688332,457856268,458024219,458192186,458360168,458528165, + 458696178,458864207,459032250,459200309,459368384,459536474,459704579,459872699,460040835,460208986, + 460377153,460545335,460713532,460881745,461049973,461218216,461386475,461554749,461723039,461891343, + 462059663,462227999,462396350,462564716,462733097,462901494,463069906,463238333,463406776,463575234, + 463743707,463912196,464080699,464249219,464417753,464586303,464754868,464923448,465092044,465260655, + 465429281,465597922,465766579,465935251,466103938,466272641,466441358,466610091,466778840,466947603, + 467116382,467285176,467453985,467622810,467791650,467960505,468129375,468298260,468467161,468636077, + 468805008,468973954,469142916,469311893,469480885,469649892,469818914,469987952,470157005,470326073, + 470495156,470664254,470833368,471002497,471171641,471340800,471509974,471679164,471848368,472017588, + 472186823,472356073,472525339,472694619,472863915,473033226,473202552,473371893,473541249,473710620, + 473880007,474049409,474218825,474388257,474557704,474727167,474896644,475066136,475235644,475405167, + 475574704,475744257,475913825,476083408,476253007,476422620,476592248,476761892,476931550,477101224, + 477270913,477440617,477610336,477780070,477949819,478119583,478289362,478459157,478628966,478798790, + 478968630,479138484,479308354,479478239,479648138,479818053,479987983,480157928,480327888,480497863, + 480667853,480837858,481007878,481177913,481347963,481518028,481688108,481858203,482028313,482198438, + 482368578,482538734,482708904,482879089,483049289,483219504,483389734,483559979,483730240,483900515, + 484070805,484241110,484411430,484581765,484752115,484922480,485092860,485263254,485433664,485604089, + 485774529,485944983,486115453,486285938,486456437,486626952,486797481,486968025,487138585,487309159, + 487479748,487650352,487820971,487991605,488162254,488332917,488503596,488674290,488844998,489015721, + 489186460,489357213,489527981,489698764,489869562,490040374,490211202,490382044,490552902,490723774, + 490894661,491065563,491236480,491407412,491578358,491749320,491920296,492091287,492262294,492433314, + 492604350,492775401,492946466,493117547,493288642,493459752,493630876,493802016,493973171,494144340, + 494315524,494486723,494657937,494829165,495000409,495171667,495342940,495514228,495685530,495856848, + 496028180,496199527,496370889,496542265,496713657,496885063,497056484,497227919,497399370,497570835, + 497742315,497913810,498085320,498256844,498428383,498599937,498771506,498943089,499114687,499286300, + 499457928,499629570,499801227,499972899,500144586,500316287,500488003,500659734,500831480,501003240, + 501175015,501346805,501518609,501690428,501862262,502034111,502205974,502377852,502549745,502721652, + 502893574,503065511,503237462,503409429,503581409,503753405,503925415,504097440,504269480,504441534, + 504613603,504785686,504957785,505129897,505302025,505474167,505646324,505818496,505990682,506162883, + 506335098,506507328,506679573,506851833,507024107,507196395,507368699,507541017,507713349,507885697, + 508058058,508230435,508402826,508575232,508747652,508920087,509092536,509265000,509437479,509609972, + 509782480,509955003,510127540,510300092,510472658,510645239,510817834,510990444,511163069,511335708, + 511508362,511681030,511853713,512026411,512199123,512371849,512544590,512717346,512890116,513062901, + 513235701,513408514,513581343,513754186,513927043,514099916,514272802,514445703,514618619,514791549, + 514964494,515137453,515310427,515483415,515656418,515829435,516002467,516175513,516348574,516521649, + 516694739,516867844,517040962,517214096,517387243,517560406,517733582,517906774,518079979,518253200, + 518426434,518599683,518772947,518946225,519119518,519292825,519466146,519639482,519812833,519986197, + 520159577,520332970,520506379,520679801,520853238,521026690,521200156,521373636,521547131,521720640, + 521894164,522067702,522241255,522414822,522588403,522761999,522935609,523109234,523282873,523456526, + 523630194,523803876,523977573,524151284,524325009,524498749,524672503,524846272,525020055,525193852, + 525367664,525541490,525715330,525889185,526063054,526236938,526410836,526584748,526758675,526932616, + 527106571,527280541,527454525,527628524,527802536,527976563,528150605,528324661,528498731,528672815, + 528846914,529021027,529195155,529369297,529543453,529717623,529891808,530066007,530240220,530414448, + 530588690,530762946,530937217,531111502,531285801,531460115,531634442,531808785,531983141,532157512, + 532331897,532506296,532680709,532855137,533029579,533204036,533378506,533552991,533727490,533902004, + 534076531,534251073,534425630,534600200,534774785,534949384,535123997,535298624,535473266,535647922, + 535822592,535997276,536171975,536346688,536521415,536696156,536870912,537045682,537220466,537395264, + 537570076,537744903,537919744,538094599,538269468,538444352,538619249,538794161,538969087,539144028, + 539318982,539493951,539668934,539843931,540018942,540193967,540369007,540544060,540719128,540894210, + 541069307,541244417,541419542,541594680,541769833,541945000,542120182,542295377,542470587,542645810, + 542821048,542996300,543171566,543346846,543522141,543697449,543872772,544048109,544223460,544398825, + 544574204,544749597,544925004,545100426,545275862,545451311,545626775,545802253,545977745,546153251, + 546328772,546504306,546679854,546855417,547030994,547206584,547382189,547557808,547733441,547909088, + 548084749,548260425,548436114,548611817,548787535,548963266,549139012,549314771,549490545,549666333, + 549842135,550017950,550193780,550369624,550545482,550721354,550897241,551073141,551249055,551424983, + 551600925,551776882,551952852,552128836,552304835,552480847,552656873,552832914,553008968,553185037, + 553361119,553537215,553713326,553889450,554065589,554241741,554417908,554594088,554770283,554946491, + 555122714,555298950,555475201,555651465,555827743,556004036,556180342,556356662,556532997,556709345, + 556885707,557062083,557238473,557414877,557591295,557767727,557944173,558120633,558297107,558473595, + 558650097,558826612,559003142,559179686,559356243,559532814,559709400,559885999,560062612,560239240, + 560415881,560592536,560769205,560945887,561122584,561299295,561476019,561652758,561829510,562006276, + 562183057,562359851,562536659,562713480,562890316,563067166,563244029,563420907,563597798,563774703, + 563951622,564128555,564305502,564482463,564659437,564836426,565013428,565190444,565367474,565544518, + 565721576,565898647,566075733,566252832,566429945,566607072,566784213,566961368,567138536,567315719, + 567492915,567670125,567847349,568024586,568201838,568379103,568556382,568733675,568910982,569088303, + 569265637,569442985,569620347,569797723,569975113,570152516,570329933,570507365,570684809,570862268, + 571039740,571217227,571394727,571572240,571749768,571927309,572104865,572282433,572460016,572637613, + 572815223,572992847,573170485,573348136,573525802,573703481,573881173,574058880,574236600,574414334, + 574592082,574769844,574947619,575125408,575303211,575481028,575658858,575836702,576014560,576192431, + 576370316,576548215,576726128,576904054,577081994,577259948,577437916,577615897,577793892,577971901, + 578149923,578327959,578506009,578684072,578862149,579040240,579218345,579396463,579574595,579752741, + 579930900,580109073,580287260,580465460,580643674,580821902,581000143,581178399,581356667,581534950, + 581713246,581891555,582069879,582248216,582426567,582604931,582783309,582961701,583140106,583318525, + 583496958,583675404,583853864,584032337,584210825,584389325,584567840,584746368,584924910,585103465, + 585282034,585460616,585639213,585817822,585996446,586175083,586353733,586532398,586711076,586889767, + 587068472,587247191,587425923,587604669,587783428,587962201,588140988,588319788,588498602,588677429, + 588856270,589035125,589213993,589392875,589571770,589750679,589929601,590108537,590287487,590466450, + 590645427,590824417,591003421,591182438,591361469,591540513,591719571,591898643,592077728,592256827, + 592435939,592615065,592794204,592973357,593152523,593331703,593510896,593690103,593869324,594048558, + 594227805,594407066,594586341,594765629,594944930,595124245,595303574,595482916,595662271,595841640, + 596021023,596200419,596379829,596559252,596738688,596918138,597097602,597277079,597456569,597636073, + 597815591,597995122,598174666,598354224,598533795,598713380,598892979,599072590,599252216,599431854, + 599611506,599791172,599970851,600150544,600330250,600509969,600689702,600869448,601049208,601228981, + 601408768,601588568,601768381,601948208,602128049,602307902,602487770,602667650,602847544,603027452, + 603207373,603387307,603567255,603747216,603927191,604107179,604287180,604467195,604647223,604827265, + 605007320,605187388,605367470,605547565,605727674,605907796,606087931,606268080,606448242,606628417, + 606808606,606988808,607169024,607349253,607529496,607709751,607890020,608070303,608250599,608430908, + 608611231,608791566,608971916,609152278,609332654,609513044,609693446,609873862,610054292,610234735, + 610415191,610595660,610776143,610956639,611137148,611317671,611498207,611678756,611859319,612039895, + 612220484,612401087,612581703,612762332,612942975,613123631,613304300,613484983,613665679,613846388, + 614027110,614207846,614388595,614569357,614750133,614930922,615111724,615292540,615473368,615654210, + 615835066,616015934,616196816,616377712,616558620,616739542,616920477,617101425,617282386,617463361, + 617644349,617825351,618006365,618187393,618368434,618549488,618730556,618911637,619092731,619273838, + 619454959,619636093,619817240,619998400,620179573,620360760,620541960,620723173,620904400,621085639, + 621266892,621448158,621629438,621810730,621992036,622173355,622354687,622536032,622717391,622898763, + 623080148,623261546,623442957,623624382,623805820,623987271,624168735,624350212,624531703,624713207, + 624894724,625076254,625257797,625439354,625620923,625802506,625984102,626165711,626347334,626528969, + 626710618,626892280,627073955,627255643,627437344,627619058,627800786,627982527,628164281,628346048, + 628527828,628709621,628891428,629073248,629255080,629436926,629618785,629800658,629982543,630164441, + 630346353,630528278,630710215,630892166,631074130,631256108,631438098,631620101,631802118,631984147, + 632166190,632348246,632530315,632712397,632894492,633076600,633258722,633440856,633623004,633805164, + 633987338,634169525,634351725,634533938,634716164,634898403,635080655,635262921,635445199,635627490, + 635809795,635992113,636174443,636356787,636539144,636721514,636903896,637086292,637268701,637451123, + 637633559,637816007,637998468,638180942,638363430,638545930,638728443,638910970,639093509,639276062, + 639458627,639641206,639823797,640006402,640189020,640371650,640554294,640736951,640919621,641102303, + 641284999,641467708,641650430,641833165,642015912,642198673,642381447,642564234,642747034,642929846, + 643112672,643295511,643478363,643661228,643844105,644026996,644209900,644392817,644575746,644758689, + 644941645,645124613,645307595,645490590,645673597,645856618,646039651,646222698,646405757,646588830, + 646771915,646955013,647138125,647321249,647504386,647687536,647870699,648053875,648237064,648420266, + 648603481,648786709,648969949,649153203,649336470,649519749,649703042,649886347,650069665,650252997, + 650436341,650619698,650803068,650986451,651169847,651353255,651536677,651720112,651903559,652087020, + 652270493,652453979,652637478,652820990,653004515,653188053,653371604,653555167,653738744,653922333, + 654105935,654289550,654473178,654656819,654840473,655024140,655207819,655391512,655575217,655758935, + 655942666,656126410,656310167,656493936,656677719,656861514,657045322,657229143,657412977,657596824, + 657780683,657964556,658148441,658332339,658516250,658700174,658884111,659068060,659252023,659435998, + 659619986,659803987,659988000,660172027,660356066,660540118,660724183,660908261,661092351,661276455, + 661460571,661644700,661828842,662012997,662197164,662381344,662565538,662749743,662933962,663118194, + 663302438,663486695,663670965,663855247,664039543,664223851,664408172,664592506,664776853,664961212, + 665145584,665329969,665514367,665698777,665883200,666067636,666252085,666436547,666621021,666805508, + 666990008,667174521,667359046,667543584,667728135,667912699,668097275,668281864,668466466,668651081, + 668835708,669020348,669205001,669389667,669574345,669759036,669943740,670128456,670313185,670497927, + 670682682,670867450,671052230,671237023,671421828,671606647,671791478,671976321,672161178,672346047, + 672530929,672715823,672900731,673085651,673270583,673455529,673640487,673825458,674010441,674195437, + 674380446,674565468,674750502,674935549,675120609,675305681,675490766,675675863,675860974,676046097, + 676231232,676416381,676601542,676786716,676971902,677157101,677342313,677527537,677712774,677898024, + 678083286,678268561,678453849,678639149,678824462,679009787,679195126,679380477,679565840,679751216, + 679936605,680122006,680307421,680492847,680678287,680863739,681049203,681234680,681420170,681605673, + 681791188,681976716,682162256,682347809,682533374,682718953,682904543,683090147,683275763,683461391, + 683647033,683832687,684018353,684204032,684389724,684575428,684761145,684946874,685132616,685318371, + 685504138,685689918,685875710,686061515,686247332,686433163,686619005,686804861,686990728,687176609, + 687362502,687548407,687734325,687920256,688106199,688292155,688478123,688664104,688850098,689036104, + 689222122,689408154,689594197,689780254,689966322,690152404,690338498,690524604,690710723,690896854, + 691082998,691269155,691455324,691641506,691827700,692013907,692200126,692386358,692572602,692758859, + 692945128,693131410,693317704,693504011,693690330,693876662,694063007,694249364,694435733,694622115, + 694808509,694994916,695181336,695367768,695554212,695740669,695927138,696113620,696300115,696486621, + 696673141,696859673,697046217,697232774,697419343,697605925,697792519,697979126,698165745,698352377, + 698539021,698725677,698912347,699099028,699285722,699472429,699659147,699845879,700032623,700219379, + 700406148,700592929,700779723,700966529,701153347,701340178,701527022,701713878,701900746,702087627, + 702274520,702461425,702648343,702835274,703022217,703209172,703396140,703583120,703770113,703957118, + 704144135,704331165,704518208,704705262,704892329,705079409,705266501,705453605,705640722,705827851, + 706014993,706202147,706389313,706576492,706763683,706950887,707138103,707325331,707512572,707699825, + 707887090,708074368,708261659,708448961,708636276,708823604,709010944,709198296,709385660,709573037, + 709760427,709947828,710135242,710322669,710510107,710697559,710885022,711072498,711259986,711447487, + 711635000,711822525,712010063,712197613,712385175,712572750,712760337,712947936,713135548,713323172, + 713510808,713698457,713886118,714073791,714261477,714449175,714636885,714824608,715012343,715200090, + 715387850,715575622,715763406,715951203,716139012,716326833,716514667,716702513,716890371,717078242, + 717266124,717454019,717641927,717829847,718017779,718205723,718393680,718581648,718769630,718957623, + 719145629,719333647,719521677,719709720,719897775,720085842,720273922,720462013,720650117,720838234, + 721026362,721214503,721402656,721590822,721778999,721967189,722155392,722343606,722531833,722720072, + 722908323,723096587,723284862,723473150,723661451,723849763,724038088,724226425,724414774,724603136, + 724791509,724979895,725168294,725356704,725545127,725733562,725922009,726110468,726298940,726487424, + 726675920,726864428,727052949,727241481,727430026,727618583,727807153,727995734,728184328,728372934, + 728561553,728750183,728938826,729127480,729316148,729504827,729693518,729882222,730070938,730259666, + 730448406,730637159,730825923,731014700,731203489,731392290,731581104,731769929,731958767,732147617, + 732336479,732525353,732714240,732903139,733092049,733280972,733469908,733658855,733847814,734036786, + 734225770,734414766,734603774,734792794,734981827,735170871,735359928,735548997,735738078,735927171, + 736116277,736305394,736494524,736683666,736872820,737061986,737251164,737440354,737629557,737818771, + 738007998,738197237,738386488,738575751,738765026,738954314,739143613,739332925,739522249,739711585, + 739900933,740090293,740279665,740469049,740658446,740847854,741037275,741226708,741416152,741605609, + 741795078,741984560,742174053,742363558,742553076,742742605,742932147,743121701,743311266,743500844, + 743690434,743880036,744069651,744259277,744448915,744638566,744828228,745017903,745207589,745397288, + 745586999,745776721,745966456,746156203,746345962,746535733,746725517,746915312,747105119,747294938, + 747484770,747674613,747864469,748054336,748244216,748434107,748624011,748813927,749003855,749193794, + 749383746,749573710,749763686,749953674,750143674,750333686,750523710,750713746,750903794,751093854, + 751283926,751474011,751664107,751854215,752044335,752234467,752424612,752614768,752804936,752995117, + 753185309,753375513,753565729,753755958,753946198,754136450,754326715,754516991,754707279,754897580, + 755087892,755278216,755468553,755658901,755849261,756039633,756230018,756420414,756610822,756801242, + 756991675,757182119,757372575,757563043,757753523,757944015,758134519,758325035,758515563,758706103, + 758896655,759087219,759277794,759468382,759658982,759849593,760040217,760230853,760421500,760612160, + 760802831,760993514,761184210,761374917,761565636,761756367,761947110,762137866,762328632,762519411, + 762710202,762901005,763091820,763282646,763473485,763664335,763855198,764046072,764236958,764427856, + 764618767,764809689,765000622,765191568,765382526,765573496,765764477,765955471,766146476,766337493, + 766528523,766719564,766910617,767101682,767292758,767483847,767674948,767866060,768057185,768248321, + 768439469,768630629,768821801,769012985,769204180,769395388,769586607,769777839,769969082,770160337, + 770351604,770542883,770734174,770925476,771116791,771308117,771499455,771690805,771882167,772073541, + 772264926,772456324,772647733,772839155,773030588,773222032,773413489,773604958,773796438,773987931, + 774179435,774370951,774562479,774754018,774945570,775137133,775328708,775520295,775711894,775903505, + 776095127,776286762,776478408,776670066,776861736,777053417,777245111,777436816,777628533,777820262, + 778012003,778203755,778395520,778587296,778779084,778970884,779162695,779354519,779546354,779738201, + 779930060,780121930,780313813,780505707,780697613,780889531,781081460,781273402,781465355,781657320, + 781849297,782041285,782233285,782425297,782617321,782809357,783001404,783193464,783385535,783577617, + 783769712,783961818,784153936,784346066,784538208,784730361,784922526,785114703,785306892,785499092, + 785691304,785883528,786075764,786268012,786460271,786652542,786844824,787037119,787229425,787421743, + 787614073,787806414,787998767,788191132,788383509,788575897,788768297,788960709,789153133,789345568, + 789538015,789730474,789922944,790115426,790307920,790500426,790692943,790885472,791078013,791270566, + 791463130,791655706,791848294,792040893,792233504,792426127,792618762,792811408,793004066,793196735, + 793389417,793582110,793774814,793967531,794160259,794352999,794545750,794738513,794931288,795124075, + 795316873,795509683,795702505,795895338,796088183,796281039,796473908,796666788,796859680,797052583, + 797245498,797438425,797631363,797824313,798017275,798210248,798403233,798596230,798789238,798982258, + 799175290,799368333,799561388,799754455,799947533,800140623,800333725,800526838,800719963,800913099, + 801106248,801299407,801492579,801685762,801878957,802072163,802265381,802458611,802651852,802845105, + 803038370,803231646,803424934,803618233,803811544,804004867,804198201,804391547,804584905,804778274, + 804971654,805165047,805358451,805551866,805745294,805938733,806132183,806325645,806519119,806712604, + 806906101,807099609,807293129,807486661,807680204,807873759,808067326,808260904,808454493,808648094, + 808841707,809035332,809228968,809422615,809616274,809809945,810003627,810197321,810391027,810584744, + 810778472,810972213,811165964,811359728,811553503,811747289,811941087,812134897,812328718,812522551, + 812716395,812910251,813104118,813297997,813491888,813685790,813879703,814073628,814267565,814461513, + 814655473,814849445,815043427,815237422,815431428,815625445,815819475,816013515,816207567,816401631, + 816595706,816789793,816983891,817178001,817372122,817566255,817760400,817954555,818148723,818342902, + 818537092,818731294,818925508,819119733,819313969,819508217,819702477,819896748,820091031,820285325, + 820479630,820673947,820868276,821062616,821256968,821451331,821645705,821840091,822034489,822228898, + 822423319,822617751,822812194,823006649,823201116,823395594,823590083,823784584,823979097,824173621, + 824368156,824562703,824757261,824951831,825146413,825341005,825535610,825730225,825924853,826119491, + 826314141,826508803,826703476,826898160,827092856,827287564,827482283,827677013,827871755,828066508, + 828261273,828456049,828650837,828845636,829040446,829235268,829430102,829624946,829819803,830014670, + 830209550,830404440,830599342,830794256,830989181,831184117,831379065,831574024,831768994,831963976, + 832158970,832353975,832548991,832744019,832939058,833134109,833329170,833524244,833719329,833914425, + 834109533,834304652,834499782,834694924,834890077,835085242,835280418,835475605,835670804,835866015, + 836061236,836256469,836451714,836646970,836842237,837037516,837232806,837428107,837623420,837818744, + 838014080,838209427,838404785,838600155,838795536,838990928,839186332,839381747,839577174,839772612, + 839968061,840163522,840358994,840554478,840749972,840945479,841140996,841336525,841532065,841727617, + 841923180,842118754,842314340,842509937,842705546,842901165,843096797,843292439,843488093,843683758, + 843879435,844075122,844270822,844466532,844662254,844857987,845053732,845249488,845445255,845641034, + 845836823,846032625,846228437,846424261,846620096,846815943,847011801,847207670,847403550,847599442, + 847795345,847991260,848187186,848383123,848579071,848775031,848971002,849166984,849362978,849558983, + 849754999,849951027,850147065,850343116,850539177,850735250,850931334,851127429,851323536,851519654, + 851715783,851911924,852108076,852304239,852500413,852696599,852892796,853089004,853285224,853481454, + 853677697,853873950,854070215,854266491,854462778,854659076,854855386,855051707,855248039,855444383, + 855640738,855837104,856033481,856229870,856426270,856622681,856819103,857015537,857211982,857408438, + 857604905,857801384,857997874,858194375,858390888,858587411,858783946,858980492,859177050,859373619, + 859570198,859766790,859963392,860160006,860356630,860553267,860749914,860946572,861143242,861339923, + 861536615,861733319,861930034,862126760,862323497,862520245,862717005,862913775,863110557,863307351, + 863504155,863700971,863897798,864094636,864291485,864488346,864685217,864882100,865078994,865275900, + 865472816,865669744,865866683,866063633,866260595,866457567,866654551,866851546,867048552,867245569, + 867442598,867639637,867836688,868033750,868230823,868427908,868625004,868822110,869019228,869216357, + 869413498,869610649,869807812,870004986,870202171,870399367,870596574,870793793,870991023,871188264, + 871385516,871582779,871780053,871977339,872174635,872371943,872569262,872766592,872963934,873161286, + 873358650,873556024,873753410,873950807,874148216,874345635,874543065,874740507,874937960,875135424, + 875332899,875530385,875727882,875925391,876122910,876320441,876517983,876715536,876913100,877110675, + 877308262,877505859,877703468,877901088,878098719,878296361,878494014,878691678,878889353,879087040, + 879284737,879482446,879680166,879877897,880075639,880273392,880471156,880668932,880866718,881064516, + 881262324,881460144,881657975,881855817,882053670,882251534,882449409,882647296,882845193,883043102, + 883241021,883438952,883636894,883834847,884032811,884230786,884428772,884626769,884824777,885022797, + 885220827,885418869,885616921,885814985,886013060,886211145,886409242,886607350,886805469,887003599, + 887201741,887399893,887598056,887796230,887994416,888192612,888390820,888589038,888787268,888985509, + 889183760,889382023,889580297,889778582,889976878,890175185,890373503,890571832,890770172,890968523, + 891166885,891365258,891563643,891762038,891960444,892158862,892357290,892555729,892754180,892952641, + 893151114,893349597,893548092,893746597,893945114,894143642,894342180,894540730,894739291,894937862, + 895136445,895335039,895533644,895732259,895930886,896129524,896328173,896526833,896725503,896924185, + 897122878,897321582,897520297,897719022,897917759,898116507,898315266,898514036,898712816,898911608, + 899110411,899309225,899508050,899706885,899905732,900104590,900303458,900502338,900701229,900900130, + 901099043,901297967,901496901,901695847,901894803,902093771,902292749,902491739,902690739,902889750, + 903088773,903287806,903486850,903685906,903884972,904084049,904283137,904482236,904681346,904880467, + 905079599,905278742,905477896,905677061,905876237,906075423,906274621,906473829,906673049,906872279, + 907071521,907270773,907470037,907669311,907868596,908067892,908267199,908466517,908665846,908865186, + 909064537,909263899,909463271,909662655,909862049,910061455,910260871,910460298,910659737,910859186, + 911058646,911258117,911457599,911657091,911856595,912056110,912255635,912455172,912654719,912854277, + 913053846,913253426,913453017,913652619,913852232,914051856,914251490,914451136,914650792,914850459, + 915050138,915249827,915449527,915649237,915848959,916048692,916248435,916448190,916647955,916847731, + 917047518,917247316,917447125,917646945,917846775,918046617,918246469,918446332,918646206,918846091, + 919045987,919245894,919445811,919645740,919845679,920045629,920245590,920445562,920645545,920845538, + 921045543,921245558,921445584,921645621,921845669,922045728,922245797,922445878,922645969,922846071, + 923046184,923246308,923446443,923646588,923846745,924046912,924247090,924447279,924647479,924847689, + 925047911,925248143,925448386,925648640,925848904,926049180,926249466,926449764,926650072,926850391, + 927050720,927251061,927451412,927651774,927852147,928052531,928252926,928453331,928653747,928854174, + 929054612,929255061,929455521,929655991,929856472,930056964,930257467,930457980,930658504,930859040, + 931059586,931260142,931460710,931661288,931861877,932062477,932263088,932463709,932664342,932864985, + 933065639,933266303,933466979,933667665,933868362,934069070,934269789,934470518,934671258,934872009, + 935072771,935273543,935474326,935675120,935875925,936076741,936277567,936478404,936679252,936880111, + 937080980,937281861,937482751,937683653,937884566,938085489,938286423,938487368,938688323,938889289, + 939090266,939291254,939492253,939693262,939894282,940095313,940296354,940497407,940698470,940899543, + 941100628,941301723,941502829,941703946,941905073,942106212,942307361,942508520,942709691,942910872, + 943112064,943313266,943514480,943715704,943916938,944118184,944319440,944520707,944721985,944923273, + 945124572,945325882,945527203,945728534,945929876,946131229,946332592,946533966,946735351,946936747, + 947138153,947339570,947540998,947742436,947943885,948145345,948346815,948548297,948749789,948951291, + 949152804,949354328,949555863,949757409,949958965,950160531,950362109,950563697,950765296,950966905, + 951168526,951370156,951571798,951773450,951975113,952176787,952378471,952580166,952781872,952983588, + 953185315,953387053,953588801,953790560,953992330,954194110,954395901,954597703,954799515,955001338, + 955203172,955405016,955606871,955808737,956010613,956212500,956414398,956616306,956818225,957020155, + 957222095,957424046,957626008,957827980,958029963,958231956,958433960,958635975,958838001,959040037, + 959242083,959444141,959646209,959848287,960050377,960252477,960454587,960656708,960858840,961060983, + 961263136,961465299,961667474,961869659,962071854,962274060,962476277,962678505,962880743,963082991, + 963285251,963487521,963689801,963892092,964094394,964296707,964499030,964701363,964903707,965106062, + 965308428,965510804,965713190,965915588,966117995,966320414,966522843,966725283,966927733,967130194, + 967332665,967535147,967737640,967940143,968142657,968345181,968547716,968750262,968952818,969155385, + 969357962,969560550,969763149,969965758,970168378,970371008,970573649,970776300,970978962,971181635, + 971384318,971587011,971789716,971992431,972195156,972397892,972600639,972803396,973006163,973208942, + 973411731,973614530,973817340,974020160,974222991,974425833,974628685,974831548,975034421,975237305, + 975440200,975643105,975846020,976048946,976251883,976454830,976657788,976860756,977063735,977266724, + 977469724,977672734,977875755,978078787,978281829,978484881,978687944,978891018,979094102,979297197, + 979500302,979703418,979906544,980109681,980312828,980515986,980719154,980922333,981125523,981328723, + 981531933,981735154,981938386,982141628,982344880,982548143,982751417,982954701,983157995,983361300, + 983564616,983767942,983971279,984174626,984377983,984581352,984784730,984988119,985191519,985394929, + 985598350,985801781,986005222,986208675,986412137,986615610,986819094,987022588,987226092,987429608, + 987633133,987836669,988040216,988243773,988447340,988650918,988854506,989058105,989261715,989465335, + 989668965,989872606,990076257,990279919,990483591,990687274,990890967,991094671,991298385,991502109, + 991705844,991909590,992113346,992317112,992520889,992724677,992928475,993132283,993336102,993539931, + 993743770,993947620,994151481,994355352,994559234,994763125,994967028,995170941,995374864,995578798, + 995782742,995986696,996190661,996394637,996598623,996802619,997006626,997210643,997414671,997618709, + 997822757,998026816,998230886,998434965,998639056,998843156,999047267,999251389,999455521,999659663, + 999863816,1000067979,1000272153,1000476337,1000680531,1000884736,1001088952,1001293177,1001497413,1001701660, + 1001905917,1002110184,1002314462,1002518750,1002723049,1002927358,1003131677,1003336007,1003540347,1003744698, + 1003949059,1004153430,1004357812,1004562204,1004766607,1004971020,1005175443,1005379877,1005584321,1005788776, + 1005993241,1006197716,1006402202,1006606698,1006811205,1007015722,1007220249,1007424787,1007629335,1007833893, + 1008038462,1008243041,1008447631,1008652231,1008856841,1009061462,1009266093,1009470734,1009675386,1009880048, + 1010084721,1010289404,1010494097,1010698801,1010903515,1011108239,1011312974,1011517719,1011722475,1011927241, + 1012132017,1012336803,1012541600,1012746407,1012951225,1013156053,1013360891,1013565740,1013770599,1013975469, + 1014180348,1014385238,1014590139,1014795050,1014999971,1015204902,1015409844,1015614796,1015819759,1016024732, + 1016229715,1016434708,1016639712,1016844726,1017049751,1017254786,1017459831,1017664886,1017869952,1018075028, + 1018280115,1018485212,1018690319,1018895436,1019100564,1019305702,1019510851,1019716009,1019921179,1020126358, + 1020331548,1020536748,1020741958,1020947179,1021152410,1021357651,1021562903,1021768165,1021973437,1022178719, + 1022384012,1022589315,1022794629,1022999953,1023205287,1023410631,1023615986,1023821351,1024026726,1024232111, + 1024437507,1024642913,1024848330,1025053757,1025259194,1025464641,1025670099,1025875566,1026081045,1026286533, + 1026492032,1026697541,1026903060,1027108590,1027314130,1027519680,1027725240,1027930811,1028136392,1028341984, + 1028547585,1028753197,1028958819,1029164451,1029370094,1029575747,1029781410,1029987084,1030192768,1030398462, + 1030604166,1030809880,1031015605,1031221340,1031427086,1031632841,1031838607,1032044383,1032250170,1032455966, + 1032661773,1032867590,1033073418,1033279255,1033485103,1033690961,1033896830,1034102708,1034308597,1034514496, + 1034720406,1034926325,1035132255,1035338195,1035544146,1035750106,1035956077,1036162058,1036368050,1036574051, + 1036780063,1036986085,1037192117,1037398160,1037604212,1037810275,1038016348,1038222432,1038428526,1038634629, + 1038840743,1039046868,1039253002,1039459147,1039665302,1039871467,1040077643,1040283828,1040490024,1040696230, + 1040902446,1041108673,1041314910,1041521157,1041727414,1041933681,1042139959,1042346246,1042552544,1042758852, + 1042965171,1043171499,1043377838,1043584187,1043790546,1043996916,1044203295,1044409685,1044616085,1044822495, + 1045028916,1045235346,1045441787,1045648238,1045854699,1046061170,1046267652,1046474144,1046680645,1046887158, + 1047093680,1047300212,1047506755,1047713308,1047919871,1048126444,1048333027,1048539621,1048746224,1048952838, + 1049159462,1049366097,1049572741,1049779396,1049986060,1050192735,1050399420,1050606116,1050812821,1051019537, + 1051226262,1051432998,1051639744,1051846500,1052053267,1052260043,1052466830,1052673627,1052880434,1053087251, + 1053294079,1053500916,1053707764,1053914622,1054121489,1054328368,1054535256,1054742154,1054949063,1055155981, + 1055362910,1055569849,1055776798,1055983758,1056190727,1056397707,1056604696,1056811696,1057018706,1057225726, + 1057432756,1057639797,1057846847,1058053908,1058260979,1058468059,1058675150,1058882252,1059089363,1059296484, + 1059503616,1059710757,1059917909,1060125071,1060332243,1060539425,1060746617,1060953820,1061161032,1061368255, + 1061575488,1061782730,1061989983,1062197246,1062404520,1062611803,1062819096,1063026400,1063233713,1063441037, + 1063648371,1063855715,1064063069,1064270433,1064477807,1064685192,1064892586,1065099990,1065307405,1065514830, + 1065722265,1065929709,1066137164,1066344630,1066552105,1066759590,1066967085,1067174591,1067382106,1067589632, + 1067797168,1068004714,1068212269,1068419835,1068627411,1068834998,1069042594,1069250200,1069457816,1069665443, + 1069873079,1070080726,1070288383,1070496049,1070703726,1070911413,1071119110,1071326817,1071534534,1071742261, + 1071949998,1072157746,1072365503,1072573270,1072781048,1072988835,1073196633,1073404441,1073612258,1073820086, + 1074027924,1074235772,1074443630,1074651498,1074859376,1075067264,1075275162,1075483070,1075690988,1075898917, + 1076106855,1076314803,1076522762,1076730730,1076938709,1077146697,1077354696,1077562705,1077770723,1077978752, + 1078186791,1078394839,1078602898,1078810967,1079019046,1079227135,1079435234,1079643343,1079851462,1080059591, + 1080267730,1080475879,1080684038,1080892207,1081100386,1081308576,1081516775,1081724984,1081933203,1082141432, + 1082349672,1082557921,1082766180,1082974450,1083182729,1083391018,1083599318,1083807627,1084015947,1084224276, + 1084432615,1084640965,1084849324,1085057694,1085266073,1085474462,1085682862,1085891271,1086099691,1086308120, + 1086516560,1086725009,1086933468,1087141938,1087350417,1087558907,1087767406,1087975915,1088184435,1088392964, + 1088601503,1088810053,1089018612,1089227181,1089435761,1089644350,1089852949,1090061559,1090270178,1090478807, + 1090687446,1090896095,1091104754,1091313424,1091522103,1091730792,1091939491,1092148200,1092356919,1092565648, + 1092774387,1092983136,1093191894,1093400663,1093609442,1093818231,1094027030,1094235838,1094444657,1094653486, + 1094862324,1095071173,1095280031,1095488900,1095697778,1095906666,1096115565,1096324473,1096533391,1096742319, + 1096951257,1097160206,1097369164,1097578132,1097787109,1097996097,1098205095,1098414103,1098623121,1098832148, + 1099041186,1099250233,1099459291,1099668358,1099877435,1100086523,1100295620,1100504727,1100713844,1100922971, + 1101132108,1101341255,1101550412,1101759578,1101968755,1102177942,1102387138,1102596345,1102805561,1103014787, + 1103224023,1103433270,1103642526,1103851792,1104061067,1104270353,1104479649,1104688955,1104898270,1105107596, + 1105316931,1105526276,1105735631,1105944997,1106154372,1106363756,1106573151,1106782556,1106991971,1107201395, + 1107410830,1107620274,1107829728,1108039192,1108248667,1108458150,1108667644,1108877148,1109086662,1109296185, + 1109505719,1109715262,1109924815,1110134378,1110343951,1110553534,1110763127,1110972730,1111182342,1111391965, + 1111601597,1111811239,1112020891,1112230553,1112440225,1112649907,1112859598,1113069300,1113279011,1113488733, + 1113698464,1113908205,1114117956,1114327716,1114537487,1114747267,1114957058,1115166858,1115376668,1115586488, + 1115796318,1116006157,1116216007,1116425866,1116635736,1116845615,1117055504,1117265403,1117475311,1117685230, + 1117895158,1118105097,1118315045,1118525003,1118734971,1118944948,1119154936,1119364933,1119574941,1119784958, + 1119994985,1120205022,1120415068,1120625125,1120835191,1121045267,1121255353,1121465449,1121675555,1121885670, + 1122095796,1122305931,1122516076,1122726231,1122936396,1123146570,1123356755,1123566949,1123777153,1123987367, + 1124197590,1124407824,1124618067,1124828321,1125038584,1125248856,1125459139,1125669432,1125879734,1126090046, + 1126300368,1126510700,1126721041,1126931393,1127141754,1127352125,1127562506,1127772897,1127983297,1128193707, + 1128404127,1128614557,1128824997,1129035447,1129245906,1129456375,1129666854,1129877343,1130087841,1130298350, + 1130508868,1130719396,1130929934,1131140481,1131351039,1131561606,1131772183,1131982769,1132193366,1132403972, + 1132614588,1132825214,1133035850,1133246496,1133457151,1133667816,1133878491,1134089176,1134299870,1134510574, + 1134721288,1134932012,1135142746,1135353489,1135564242,1135775005,1135985778,1136196560,1136407352,1136618154, + 1136828966,1137039788,1137250619,1137461460,1137672311,1137883172,1138094042,1138304922,1138515812,1138726712, + 1138937622,1139148541,1139359470,1139570409,1139781357,1139992315,1140203284,1140414261,1140625249,1140836246, + 1141047253,1141258270,1141469297,1141680333,1141891379,1142102435,1142313501,1142524576,1142735661,1142946756, + 1143157861,1143368975,1143580099,1143791233,1144002377,1144213530,1144424693,1144635866,1144847048,1145058241, + 1145269443,1145480655,1145691876,1145903107,1146114348,1146325599,1146536859,1146748130,1146959410,1147170699, + 1147381999,1147593308,1147804626,1148015955,1148227293,1148438641,1148649999,1148861367,1149072744,1149284131, + 1149495527,1149706934,1149918350,1150129775,1150341211,1150552656,1150764111,1150975576,1151187050,1151398534, + 1151610028,1151821531,1152033044,1152244567,1152456100,1152667642,1152879194,1153090756,1153302327,1153513909, + 1153725499,1153937100,1154148710,1154360330,1154571960,1154783599,1154995248,1155206907,1155418575,1155630253, + 1155841941,1156053639,1156265346,1156477063,1156688789,1156900526,1157112272,1157324027,1157535793,1157747568, + 1157959352,1158171147,1158382951,1158594765,1158806588,1159018421,1159230264,1159442116,1159653979,1159865850, + 1160077732,1160289623,1160501524,1160713435,1160925355,1161137285,1161349224,1161561173,1161773132,1161985101, + 1162197079,1162409067,1162621064,1162833072,1163045089,1163257115,1163469151,1163681197,1163893253,1164105318, + 1164317393,1164529477,1164741571,1164953675,1165165789,1165377912,1165590045,1165802187,1166014339,1166226501, + 1166438672,1166650853,1166863044,1167075244,1167287454,1167499674,1167711903,1167924142,1168136390,1168348649, + 1168560916,1168773194,1168985481,1169197778,1169410084,1169622400,1169834726,1170047061,1170259406,1170471761, + 1170684125,1170896499,1171108882,1171321275,1171533678,1171746090,1171958512,1172170944,1172383385,1172595836, + 1172808296,1173020766,1173233246,1173445735,1173658234,1173870743,1174083261,1174295789,1174508326,1174720873, + 1174933430,1175145996,1175358572,1175571158,1175783753,1175996357,1176208972,1176421596,1176634229,1176846872, + 1177059525,1177272187,1177484859,1177697541,1177910232,1178122933,1178335643,1178548363,1178761093,1178973832, + 1179186581,1179399339,1179612107,1179824884,1180037672,1180250468,1180463275,1180676090,1180888916,1181101751, + 1181314596,1181527450,1181740314,1181953187,1182166070,1182378963,1182591865,1182804777,1183017698,1183230629, + 1183443570,1183656520,1183869480,1184082449,1184295428,1184508416,1184721414,1184934422,1185147439,1185360465, + 1185573502,1185786548,1185999603,1186212668,1186425743,1186638827,1186851920,1187065024,1187278136,1187491259, + 1187704391,1187917532,1188130683,1188343844,1188557014,1188770194,1188983383,1189196582,1189409790,1189623008, + 1189836236,1190049473,1190262720,1190475976,1190689242,1190902517,1191115802,1191329096,1191542400,1191755713, + 1191969036,1192182369,1192395711,1192609063,1192822424,1193035795,1193249175,1193462565,1193675964,1193889373, + 1194102791,1194316219,1194529657,1194743104,1194956561,1195170027,1195383502,1195596987,1195810482,1196023986, + 1196237500,1196451023,1196664556,1196878099,1197091650,1197305212,1197518783,1197732363,1197945953,1198159553, + 1198373162,1198586780,1198800408,1199014046,1199227693,1199441349,1199655015,1199868691,1200082376,1200296071, + 1200509775,1200723489,1200937212,1201150944,1201364687,1201578438,1201792200,1202005970,1202219750,1202433540, + 1202647339,1202861148,1203074966,1203288794,1203502631,1203716478,1203930334,1204144200,1204358075,1204571960, + 1204785854,1204999758,1205213671,1205427594,1205641526,1205855467,1206069419,1206283379,1206497349,1206711329, + 1206925318,1207139317,1207353325,1207567342,1207781369,1207995406,1208209452,1208423507,1208637572,1208851647, + 1209065731,1209279824,1209493927,1209708039,1209922161,1210136293,1210350433,1210564584,1210778743,1210992912, + 1211207091,1211421279,1211635477,1211849684,1212063900,1212278126,1212492362,1212706607,1212920861,1213135125, + 1213349398,1213563681,1213777973,1213992275,1214206586,1214420907,1214635237,1214849576,1215063925,1215278284, + 1215492652,1215707029,1215921416,1216135812,1216350218,1216564633,1216779057,1216993491,1217207935,1217422388, + 1217636850,1217851322,1218065803,1218280294,1218494794,1218709304,1218923823,1219138351,1219352889,1219567436, + 1219781993,1219996559,1220211135,1220425720,1220640314,1220854918,1221069532,1221284154,1221498787,1221713428, + 1221928079,1222142740,1222357410,1222572089,1222786778,1223001476,1223216184,1223430901,1223645627,1223860363, + 1224075109,1224289863,1224504627,1224719401,1224934184,1225148976,1225363778,1225578589,1225793410,1226008240, + 1226223080,1226437928,1226652787,1226867654,1227082531,1227297418,1227512314,1227727219,1227942134,1228157058, + 1228371992,1228586934,1228801887,1229016849,1229231820,1229446800,1229661790,1229876789,1230091798,1230306816, + 1230521844,1230736881,1230951927,1231166983,1231382048,1231597122,1231812206,1232027299,1232242402,1232457514, + 1232672636,1232887766,1233102907,1233318056,1233533215,1233748383,1233963561,1234178748,1234393945,1234609151, + 1234824366,1235039590,1235254824,1235470068,1235685321,1235900583,1236115854,1236331135,1236546425,1236761725, + 1236977034,1237192352,1237407680,1237623017,1237838364,1238053719,1238269085,1238484459,1238699843,1238915236, + 1239130639,1239346051,1239561472,1239776903,1239992343,1240207793,1240423251,1240638720,1240854197,1241069684, + 1241285180,1241500686,1241716201,1241931725,1242147259,1242362802,1242578354,1242793916,1243009487,1243225067, + 1243440657,1243656256,1243871864,1244087482,1244303109,1244518745,1244734391,1244950046,1245165711,1245381385, + 1245597068,1245812760,1246028462,1246244173,1246459894,1246675623,1246891363,1247107111,1247322869,1247538636, + 1247754413,1247970198,1248185993,1248401798,1248617612,1248833435,1249049267,1249265109,1249480960,1249696820, + 1249912690,1250128569,1250344458,1250560355,1250776262,1250992179,1251208104,1251424039,1251639983,1251855937, + 1252071900,1252287872,1252503854,1252719845,1252935845,1253151854,1253367873,1253583901,1253799938,1254015985, + 1254232041,1254448106,1254664181,1254880265,1255096358,1255312461,1255528572,1255744693,1255960824,1256176964, + 1256393113,1256609271,1256825438,1257041615,1257257802,1257473997,1257690202,1257906416,1258122639,1258338872, + 1258555114,1258771365,1258987626,1259203895,1259420174,1259636463,1259852760,1260069067,1260285384,1260501709, + 1260718044,1260934388,1261150741,1261367104,1261583476,1261799857,1262016248,1262232647,1262449056,1262665475, + 1262881902,1263098339,1263314785,1263531241,1263747705,1263964179,1264180662,1264397155,1264613657,1264830168, + 1265046688,1265263217,1265479756,1265696304,1265912861,1266129428,1266346004,1266562589,1266779183,1266995787, + 1267212400,1267429022,1267645653,1267862294,1268078944,1268295603,1268512271,1268728949,1268945636,1269162332, + 1269379038,1269595752,1269812476,1270029209,1270245952,1270462703,1270679464,1270896234,1271113014,1271329802, + 1271546600,1271763407,1271980224,1272197049,1272413884,1272630728,1272847582,1273064444,1273281316,1273498197, + 1273715087,1273931987,1274148895,1274365813,1274582740,1274799677,1275016622,1275233577,1275450541,1275667515, + 1275884497,1276101489,1276318490,1276535500,1276752520,1276969548,1277186586,1277403633,1277620690,1277837755, + 1278054830,1278271914,1278489007,1278706110,1278923221,1279140342,1279357472,1279574611,1279791760,1280008918, + 1280226085,1280443261,1280660446,1280877641,1281094844,1281312057,1281529279,1281746511,1281963751,1282181001, + 1282398260,1282615528,1282832806,1283050092,1283267388,1283484693,1283702007,1283919331,1284136663,1284354005, + 1284571356,1284788716,1285006085,1285223464,1285440852,1285658249,1285875655,1286093070,1286310494,1286527928, + 1286745371,1286962823,1287180284,1287397755,1287615234,1287832723,1288050221,1288267728,1288485245,1288702770, + 1288920305,1289137849,1289355402,1289572964,1289790535,1290008116,1290225706,1290443305,1290660913,1290878530, + 1291096157,1291313792,1291531437,1291749091,1291966754,1292184426,1292402108,1292619799,1292837498,1293055207, + 1293272925,1293490653,1293708389,1293926135,1294143890,1294361654,1294579427,1294797209,1295015000,1295232801, + 1295450611,1295668430,1295886258,1296104095,1296321941,1296539797,1296757661,1296975535,1297193418,1297411310, + 1297629211,1297847122,1298065041,1298282970,1298500908,1298718855,1298936811,1299154776,1299372751,1299590734, + 1299808727,1300026729,1300244740,1300462760,1300680789,1300898828,1301116875,1301334932,1301552998,1301771072, + 1301989157,1302207250,1302425352,1302643464,1302861584,1303079714,1303297853,1303516001,1303734158,1303952324, + 1304170499,1304388684,1304606878,1304825080,1305043292,1305261513,1305479743,1305697982,1305916231,1306134488, + 1306352755,1306571030,1306789315,1307007609,1307225912,1307444224,1307662546,1307880876,1308099216,1308317564, + 1308535922,1308754289,1308972665,1309191050,1309409444,1309627847,1309846259,1310064681,1310283112,1310501551, + 1310720000,1310938458,1311156925,1311375401,1311593886,1311812380,1312030884,1312249396,1312467918,1312686449, + 1312904988,1313123537,1313342095,1313560662,1313779238,1313997824,1314216418,1314435021,1314653634,1314872255, + 1315090886,1315309526,1315528175,1315746833,1315965500,1316184176,1316402861,1316621555,1316840259,1317058971, + 1317277693,1317496423,1317715163,1317933912,1318152669,1318371436,1318590212,1318808997,1319027792,1319246595, + 1319465407,1319684228,1319903059,1320121898,1320340747,1320559605,1320778471,1320997347,1321216232,1321435126, + 1321654029,1321872941,1322091862,1322310792,1322529731,1322748679,1322967637,1323186603,1323405579,1323624563, + 1323843557,1324062559,1324281571,1324500592,1324719622,1324938661,1325157708,1325376765,1325595831,1325814906, + 1326033991,1326253084,1326472186,1326691297,1326910418,1327129547,1327348685,1327567833,1327786989,1328006155, + 1328225329,1328444513,1328663706,1328882907,1329102118,1329321338,1329540567,1329759804,1329979051,1330198307, + 1330417572,1330636846,1330856129,1331075421,1331294722,1331514033,1331733352,1331952680,1332172017,1332391363, + 1332610719,1332830083,1333049456,1333268839,1333488230,1333707630,1333927040,1334146458,1334365886,1334585322, + 1334804768,1335024222,1335243686,1335463158,1335682640,1335902131,1336121630,1336341139,1336560657,1336780183, + 1336999719,1337219264,1337438817,1337658380,1337877952,1338097532,1338317122,1338536721,1338756329,1338975945, + 1339195571,1339415206,1339634850,1339854503,1340074164,1340293835,1340513515,1340733204,1340952901,1341172608, + 1341392324,1341612049,1341831783,1342051525,1342271277,1342491038,1342710808,1342930586,1343150374,1343370171, + 1343589977,1343809791,1344029615,1344249448,1344469289,1344689140,1344909000,1345128868,1345348746,1345568633, + 1345788528,1346008433,1346228346,1346448269,1346668200,1346888141,1347108090,1347328049,1347548016,1347767993, + 1347987978,1348207972,1348427976,1348647988,1348868009,1349088040,1349308079,1349528127,1349748184,1349968250, + 1350188326,1350408410,1350628503,1350848605,1351068716,1351288836,1351508965,1351729102,1351949249,1352169405, + 1352389570,1352609744,1352829926,1353050118,1353270318,1353490528,1353710747,1353930974,1354151210,1354371456, + 1354591710,1354811973,1355032246,1355252527,1355472817,1355693116,1355913424, +}; + +static real aa_cs[8] = +{ + 14386344,14793176,15932125,16497281,16702017,16763133,16775525,16777101 +}; + +static real aa_ca[8] = +{ + -8631806,-7914349,-5257601,-3051997,-1586692,-687288,-238212,-62075 +}; + +static real win[4][36] = +{ + { + 541609,1798624,3379171,5462936,8388608,12881122,20824265,39123649,129925287,-141788570,-50986933,-32687548, + -24744405,-20251891,-17326219,-15242454,-13661907,-12404893,-11366990,-10483150,-9710514,-9019459,-8388608,-7801881, + -7246655,-6712557,-6190623,-5672661,-5150726,-4616628,-4061402,-3474675,-2843824,-2152769,-1380133,-496293 + }, + { + 541609,1798624,3379171,5462936,8388608,12881122,20824265,39123649,129925287,-141788570,-50986933,-32687548, + -24744405,-20251891,-17326219,-15242454,-13661907,-12404893,-11377819,-10573609,-9946281,-9457165,-9079764,-8795700, + -8518771,-7816938,-6661470,-5111526,-3237882,-1121518, + }, + { + 1798624,8388608,39123649,-50986933,-20251891,-13661907,-10483150,-8388608,-6712557,-5150726,-3474675,-1380133, + }, + { + 0,0,0,0,0,0,5058839,24594154,117073194,-152572757,-59375541,-38425694, + -27896396,-21920489,-18167045,-15612533,-13779795,-12416710,-11366990,-10483150,-9710514,-9019459,-8388608,-7801881, + -7246655,-6712557,-6190623,-5672661,-5150726,-4616628,-4061402,-3474675,-2843824,-2152769,-1380133,-496293 + } +}; + +const real COS9[9] = +{ + 16777216,16522332,15765426,14529495,12852093,10784187,8388608,5738146,2913333 +}; + +static const real COS6_1 = 14529495; + +static const real COS6_2 = 8388608; + +const real tfcos36[9] = +{ + 8420651,8684526,9255805,10240599,11863283,14625092,19849138,32411092,96248483 +}; + +static const real tfcos12[3] = +{ + 8684526,11863283,32411092 +}; + +#ifdef NEW_DCT9 +static const real cos9[3] = +{ + 15765426,-2913333,-12852093 +}; + +static const real cos18[3] = +{ + 16522332,-5738146,-10784187 +}; +#endif + +static const real tan1_1[16] = +{ + 0,6925,11994,16384,20774,25843,32768,44762,77530,2147483647,-44762,-11994,0,6925,11994,16384 +}; + +static const real tan2_1[16] = +{ + 32768,25843,20774,16384,11994,6925,0,-11994,-44762,2147483647,77530,44762,32768,25843,20774,16384 +}; + +static const real tan1_2[16] = +{ + 0,9793,16962,23170,29379,36548,46341,63303,109644,2147483647,-63303,-16962,0,9793,16962,23170 +}; + +static real tan2_2[16] = +{ + 46341,36548,29379,23170,16962,9793,0,-16962,-63303,2147483647,109644,63303,46341,36548,29379,23170 +}; + +static const real pow1_1[2][16] = +{ + {32768,27554,32768,23170,32768,19484,32768,16384,32768,13777,32768,11585,32768,9742,32768,8192}, + {32768,23170,32768,16384,32768,11585,32768,8192,32768,5793,32768,4096,32768,2896,32768,2048} +}; + +static const real pow2_1[2][16] = +{ + {32768,32768,27554,32768,23170,32768,19484,32768,16384,32768,13777,32768,11585,32768,9742,32768}, + {32768,32768,23170,32768,16384,32768,11585,32768,8192,32768,5793,32768,4096,32768,2896,32768} +}; + +static const real pow1_2[2][16] = +{ + {46341,38968,46341,32768,46341,27554,46341,23170,46341,19484,46341,16384,46341,13777,46341,11585}, + {46341,32768,46341,23170,46341,16384,46341,11585,46341,8192,46341,5793,46341,4096,46341,2896} +}; + +static const real pow2_2[2][16] = +{ + {46341,46341,38968,46341,32768,46341,27554,46341,23170,46341,19484,46341,16384,46341,13777,46341}, + {46341,46341,32768,46341,23170,46341,16384,46341,11585,46341,8192,46341,5793,46341,4096,46341} +}; + +static const real gainpow2[256+118+4] = +{ + 1518500250,1276901417,1073741824,1805811301,1518500250,1276901417,1073741824,1805811301,1518500250,1276901417, + 1073741824,1805811301,1518500250,1276901417,1073741824,1805811301,1518500250,1276901417,1073741824,1805811301, + 1518500250,1276901417,1073741824,1805811301,1518500250,1276901417,1073741824,1805811301,1518500250,1276901417, + 1073741824,1805811301,1518500250,1276901417,1073741824,1805811301,1518500250,1276901417,1073741824,1805811301, + 1518500250,1276901417,1073741824,1805811301,1518500250,1276901417,1073741824,1805811301,1518500250,1276901417, + 1073741824,1805811301,1518500250,1276901417,1073741824,1805811301,1518500250,1276901417,1073741824,1805811301, + 1518500250,1276901417,1073741824,902905651,759250125,638450708,536870912,451452825,379625062,319225354, + 268435456,225726413,189812531,159612677,134217728,112863206,94906266,79806339,67108864,56431603, + 47453133,39903169,33554432,28215802,23726566,19951585,16777216,14107901,11863283,9975792, + 8388608,7053950,5931642,4987896,4194304,3526975,2965821,2493948,2097152,1763488, + 1482910,1246974,1048576,881744,741455,623487,524288,440872,370728,311744, + 262144,220436,185364,155872,131072,110218,92682,77936,65536,55109, + 46341,38968,32768,27554,23170,19484,16384,13777,11585,9742, + 8192,6889,5793,4871,4096,3444,2896,2435,2048,1722, + 1448,1218,1024,861,724,609,512,431,362,304, + 256,215,181,152,128,108,91,76,64,54, + 45,38,32,27,23,19,16,13,11,10, + 8,7,6,5,4,3,3,2,2,2, + 1,1,1,1,1,1,1, +}; + +#else +static real ispow[8207]; +static real aa_ca[8],aa_cs[8]; +static real win[4][36]; +static real win1[4][36]; +real COS9[9]; /* dct36_3dnow wants to use that */ +static real COS6_1,COS6_2; +real tfcos36[9]; /* dct36_3dnow wants to use that */ +static real tfcos12[3]; +#ifdef NEW_DCT9 +static real cos9[3],cos18[3]; +static real tan1_1[16],tan2_1[16],tan1_2[16],tan2_2[16]; +static real pow1_1[2][16],pow2_1[2][16],pow1_2[2][16],pow2_2[2][16]; +#endif +#endif + +static real win1[4][36]; + +static const char gainpow2_scale[256+118+4+1] = +{ + 19,19,19,20,20,20,20,21,21,21,21,22,22,22,22,23,23,23,23,24,24,24,24,25,25,25,25,26,26,26,26,27, + 27,27,27,28,28,28,28,29,29,29,29,30,30,30,30,31,31,31,31,32,32,32,32,33,33,33,33,34,34,34,34,34, + 34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34, + 34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34, + 34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34, + 34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34, + 34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34, + 34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34, + 34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34, + 34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34, + 34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34, + 34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,0 +}; + +#endif diff --git a/include/reactos/libs/libmpg123/mangle.h b/include/reactos/libs/libmpg123/mangle.h new file mode 100644 index 00000000000..bef4655426d --- /dev/null +++ b/include/reactos/libs/libmpg123/mangle.h @@ -0,0 +1,69 @@ +/* + mangle: support defines for preprocessed assembler + + copyright 1995-2007 by the mpg123 project - free software under the terms of the LGPL 2.1 + see COPYING and AUTHORS files in distribution or http://mpg123.org + + This once started out as mangle.h from MPlayer, but you can't really call it derived work... the small part that in principle stems from MPlayer also being not very special (once you decided to use such a header at all, it's quite obvious material). +*/ + +#ifndef __MANGLE_H +#define __MANGLE_H + +#include "config.h" + +#ifdef CCALIGN +#define MOVUAPS movaps +#else +#define MOVUAPS movups +#endif + +#ifdef ASMALIGN_EXP +#define ALIGN4 .align 2 +#define ALIGN8 .align 3 +#define ALIGN16 .align 4 +#define ALIGN32 .align 5 +#else +#define ALIGN4 .align 4 +#define ALIGN8 .align 8 +#define ALIGN16 .align 16 +#define ALIGN32 .align 32 +#endif + +#define MANGLE_MACROCAT_REALLY(a, b) a ## b +#define MANGLE_MACROCAT(a, b) MANGLE_MACROCAT_REALLY(a, b) +/* Feel free to add more to the list, eg. a.out IMO */ +#if defined(__USER_LABEL_PREFIX__) +#define ASM_NAME(a) MANGLE_MACROCAT(__USER_LABEL_PREFIX__,a) +#define ASM_VALUE(a) MANGLE_MACROCAT($,ASM_NAME(a)) +#elif defined(__CYGWIN__) || defined(_WIN32) && !defined (_WIN64) || defined(__OS2__) || \ + (defined(__OpenBSD__) && !defined(__ELF__)) || defined(__APPLE__) +#define ASM_NAME(a) MANGLE_MACROCAT(_,a) +#define ASM_VALUE(a) MANGLE_MACROCAT($_,a) +#else +#define ASM_NAME(a) a +#define ASM_VALUE(a) MANGLE_MACROCAT($,a) +#endif + +#if defined(__CYGWIN__) || defined(__MINGW32__) || defined(__APPLE__) +#define COMM(a,b,c) .comm a,b +#else +#define COMM(a,b,c) .comm a,b,c +#endif +/* more hacks for macosx; no .bss ... */ +#ifdef __APPLE__ +#define BSS .data +#else +#define BSS .bss +#endif + +/* Mark non-executable stack. + It's mainly for GNU on Linux... who else does (not) like this? */ +#if !defined(__SUNPRO_C) && defined(__linux__) && defined(__ELF__) +#define NONEXEC_STACK .section .note.GNU-stack,"",%progbits +#else +#define NONEXEC_STACK +#endif + +#endif /* !__MANGLE_H */ + diff --git a/include/reactos/libs/libmpg123/mpg123.h b/include/reactos/libs/libmpg123/mpg123.h new file mode 100644 index 00000000000..5a4c85fb017 --- /dev/null +++ b/include/reactos/libs/libmpg123/mpg123.h @@ -0,0 +1,1015 @@ +/* + libmpg123: MPEG Audio Decoder library (version 1.12.3) + + copyright 1995-2009 by the mpg123 project - free software under the terms of the LGPL 2.1 + see COPYING and AUTHORS files in distribution or http://mpg123.org +*/ + +#ifndef MPG123_LIB_H +#define MPG123_LIB_H + +/** \file mpg123.h The header file for the libmpg123 MPEG Audio decoder */ + +/* A macro to check at compile time which set of API functions to expect. + This should be incremented at least each time a new symbol is added to the header. */ +#define MPG123_API_VERSION 25 + +/* These aren't actually in use... seems to work without using libtool. */ +#ifdef BUILD_MPG123_DLL +/* The dll exports. */ +#define EXPORT __declspec(dllexport) +#else +#ifdef LINK_MPG123_DLL +/* The exe imports. */ +#define EXPORT __declspec(dllimport) +#else +/* Nothing on normal/UNIX builds */ +#define EXPORT +#endif +#endif + +#ifndef MPG123_NO_CONFIGURE /* Enable use of this file without configure. */ +#include +#include + +/* Simplified large file handling. + I used to have a check here that prevents building for a library with conflicting large file setup + (application that uses 32 bit offsets with library that uses 64 bits). + While that was perfectly fine in an environment where there is one incarnation of the library, + it hurt GNU/Linux and Solaris systems with multilib where the distribution fails to provide the + correct header matching the 32 bit library (where large files need explicit support) or + the 64 bit library (where there is no distinction). + + New approach: When the app defines _FILE_OFFSET_BITS, it wants non-default large file support, + and thus functions with added suffix (mpg123_open_64). + Any mismatch will be caught at link time because of the _FILE_OFFSET_BITS setting used when + building libmpg123. Plus, there's dual mode large file support in mpg123 since 1.12 now. + Link failure is not the expected outcome of any half-sane usage anymore. + + More complication: What about client code defining _LARGEFILE64_SOURCE? It might want direct access to the _64 functions, along with the ones without suffix. Well, that's possible now via defining MPG123_NO_LARGENAME and MPG123_LARGESUFFIX, respectively, for disabling or enforcing the suffix names. +*/ + +/* + Now, the renaming of large file aware functions. + By default, it appends underscore _FILE_OFFSET_BITS (so, mpg123_seek_64 for mpg123_seek), if _FILE_OFFSET_BITS is defined. You can force a different suffix via MPG123_LARGESUFFIX (that must include the underscore), or you can just disable the whole mess by defining MPG123_NO_LARGENAME. +*/ +#if (!defined MPG123_NO_LARGENAME) && ((defined _FILE_OFFSET_BITS) || (defined MPG123_LARGESUFFIX)) + +/* Need some trickery to concatenate the value(s) of the given macro(s). */ + +#define MPG123_MACROCAT_REALLY(a, b) a ## b +#define MPG123_MACROCAT(a, b) MPG123_MACROCAT_REALLY(a, b) +#ifndef MPG123_LARGESUFFIX +#define MPG123_LARGESUFFIX MPG123_MACROCAT(_, _FILE_OFFSET_BITS) +#endif +#define MPG123_LARGENAME(func) MPG123_MACROCAT(func, MPG123_LARGESUFFIX) + +#define mpg123_open MPG123_LARGENAME(mpg123_open) +#define mpg123_open_fd MPG123_LARGENAME(mpg123_open_fd) +#define mpg123_open_handle MPG123_LARGENAME(mpg123_open_handle) +#define mpg123_framebyframe_decode MPG123_LARGENAME(mpg123_framebyframe_decode) +#define mpg123_decode_frame MPG123_LARGENAME(mpg123_decode_frame) +#define mpg123_tell MPG123_LARGENAME(mpg123_tell) +#define mpg123_tellframe MPG123_LARGENAME(mpg123_tellframe) +#define mpg123_tell_stream MPG123_LARGENAME(mpg123_tell_stream) +#define mpg123_seek MPG123_LARGENAME(mpg123_seek) +#define mpg123_feedseek MPG123_LARGENAME(mpg123_feedseek) +#define mpg123_seek_frame MPG123_LARGENAME(mpg123_seek_frame) +#define mpg123_timeframe MPG123_LARGENAME(mpg123_timeframe) +#define mpg123_index MPG123_LARGENAME(mpg123_index) +#define mpg123_set_index MPG123_LARGENAME(mpg123_set_index) +#define mpg123_position MPG123_LARGENAME(mpg123_position) +#define mpg123_length MPG123_LARGENAME(mpg123_length) +#define mpg123_set_filesize MPG123_LARGENAME(mpg123_set_filesize) +#define mpg123_replace_reader MPG123_LARGENAME(mpg123_replace_reader) +#define mpg123_replace_reader_handle MPG123_LARGENAME(mpg123_replace_reader_handle) + +#endif /* largefile hackery */ + +#endif /* MPG123_NO_CONFIGURE */ + +#ifdef __cplusplus +extern "C" { +#endif + +/** \defgroup mpg123_init mpg123 library and handle setup + * + * Functions to initialise and shutdown the mpg123 library and handles. + * The parameters of handles have workable defaults, you only have to tune them when you want to tune something;-) + * Tip: Use a RVA setting... + * + * @{ + */ + +/** Opaque structure for the libmpg123 decoder handle. */ +struct mpg123_handle_struct; + +/** Opaque structure for the libmpg123 decoder handle. + * Most functions take a pointer to a mpg123_handle as first argument and operate on its data in an object-oriented manner. + */ +typedef struct mpg123_handle_struct mpg123_handle; + +/** Function to initialise the mpg123 library. + * This function is not thread-safe. Call it exactly once per process, before any other (possibly threaded) work with the library. + * + * \return MPG123_OK if successful, otherwise an error number. + */ +EXPORT int mpg123_init(void); + +/** Function to close down the mpg123 library. + * This function is not thread-safe. Call it exactly once per process, before any other (possibly threaded) work with the library. */ +EXPORT void mpg123_exit(void); + +/** Create a handle with optional choice of decoder (named by a string, see mpg123_decoders() or mpg123_supported_decoders()). + * and optional retrieval of an error code to feed to mpg123_plain_strerror(). + * Optional means: Any of or both the parameters may be NULL. + * + * \return Non-NULL pointer when successful. + */ +EXPORT mpg123_handle *mpg123_new(const char* decoder, int *error); + +/** Delete handle, mh is either a valid mpg123 handle or NULL. */ +EXPORT void mpg123_delete(mpg123_handle *mh); + +/** Enumeration of the parameters types that it is possible to set/get. */ +enum mpg123_parms +{ + MPG123_VERBOSE, /**< set verbosity value for enabling messages to stderr, >= 0 makes sense (integer) */ + MPG123_FLAGS, /**< set all flags, p.ex val = MPG123_GAPLESS|MPG123_MONO_MIX (integer) */ + MPG123_ADD_FLAGS, /**< add some flags (integer) */ + MPG123_FORCE_RATE, /**< when value > 0, force output rate to that value (integer) */ + MPG123_DOWN_SAMPLE, /**< 0=native rate, 1=half rate, 2=quarter rate (integer) */ + MPG123_RVA, /**< one of the RVA choices above (integer) */ + MPG123_DOWNSPEED, /**< play a frame N times (integer) */ + MPG123_UPSPEED, /**< play every Nth frame (integer) */ + MPG123_START_FRAME, /**< start with this frame (skip frames before that, integer) */ + MPG123_DECODE_FRAMES, /**< decode only this number of frames (integer) */ + MPG123_ICY_INTERVAL, /**< stream contains ICY metadata with this interval (integer) */ + MPG123_OUTSCALE, /**< the scale for output samples (amplitude - integer or float according to mpg123 output format, normally integer) */ + MPG123_TIMEOUT, /**< timeout for reading from a stream (not supported on win32, integer) */ + MPG123_REMOVE_FLAGS, /**< remove some flags (inverse of MPG123_ADD_FLAGS, integer) */ + MPG123_RESYNC_LIMIT, /**< Try resync on frame parsing for that many bytes or until end of stream (<0 ... integer). */ + MPG123_INDEX_SIZE /**< Set the frame index size (if supported). Values <0 mean that the index is allowed to grow dynamically in these steps (in positive direction, of course) -- Use this when you really want a full index with every individual frame. */ + ,MPG123_PREFRAMES /**< Decode/ignore that many frames in advance for layer 3. This is needed to fill bit reservoir after seeking, for example (but also at least one frame in advance is needed to have all "normal" data for layer 3). Give a positive integer value, please.*/ +}; + +/** Flag bits for MPG123_FLAGS, use the usual binary or to combine. */ +enum mpg123_param_flags +{ + MPG123_FORCE_MONO = 0x7 /**< 0111 Force some mono mode: This is a test bitmask for seeing if any mono forcing is active. */ + ,MPG123_MONO_LEFT = 0x1 /**< 0001 Force playback of left channel only. */ + ,MPG123_MONO_RIGHT = 0x2 /**< 0010 Force playback of right channel only. */ + ,MPG123_MONO_MIX = 0x4 /**< 0100 Force playback of mixed mono. */ + ,MPG123_FORCE_STEREO = 0x8 /**< 1000 Force stereo output. */ + ,MPG123_FORCE_8BIT = 0x10 /**< 00010000 Force 8bit formats. */ + ,MPG123_QUIET = 0x20 /**< 00100000 Suppress any printouts (overrules verbose). */ + ,MPG123_GAPLESS = 0x40 /**< 01000000 Enable gapless decoding (default on if libmpg123 has support). */ + ,MPG123_NO_RESYNC = 0x80 /**< 10000000 Disable resync stream after error. */ + ,MPG123_SEEKBUFFER = 0x100 /**< 000100000000 Enable small buffer on non-seekable streams to allow some peek-ahead (for better MPEG sync). */ + ,MPG123_FUZZY = 0x200 /**< 001000000000 Enable fuzzy seeks (guessing byte offsets or using approximate seek points from Xing TOC) */ + ,MPG123_FORCE_FLOAT = 0x400 /**< 010000000000 Force floating point output (32 or 64 bits depends on mpg123 internal precision). */ + ,MPG123_PLAIN_ID3TEXT = 0x800 /**< 100000000000 Do not translate ID3 text data to UTF-8. ID3 strings will contain the raw text data, with the first byte containing the ID3 encoding code. */ + ,MPG123_IGNORE_STREAMLENGTH = 0x1000 /**< 1000000000000 Ignore any stream length information contained in the stream, which can be contained in a 'TLEN' frame of an ID3v2 tag or a Xing tag */ +}; + +/** choices for MPG123_RVA */ +enum mpg123_param_rva +{ + MPG123_RVA_OFF = 0 /**< RVA disabled (default). */ + ,MPG123_RVA_MIX = 1 /**< Use mix/track/radio gain. */ + ,MPG123_RVA_ALBUM = 2 /**< Use album/audiophile gain */ + ,MPG123_RVA_MAX = MPG123_RVA_ALBUM /**< The maximum RVA code, may increase in future. */ +}; + +/* TODO: Assess the possibilities and troubles of changing parameters during playback. */ + +/** Set a specific parameter, for a specific mpg123_handle, using a parameter + * type key chosen from the mpg123_parms enumeration, to the specified value. */ +EXPORT int mpg123_param(mpg123_handle *mh, enum mpg123_parms type, long value, double fvalue); + +/** Get a specific parameter, for a specific mpg123_handle. + * See the mpg123_parms enumeration for a list of available parameters. */ +EXPORT int mpg123_getparam(mpg123_handle *mh, enum mpg123_parms type, long *val, double *fval); + +/** Feature set available for query with mpg123_feature. */ +enum mpg123_feature_set +{ + MPG123_FEATURE_ABI_UTF8OPEN = 0 /**< mpg123 expects path names to be given in UTF-8 encoding instead of plain native. */ + ,MPG123_FEATURE_OUTPUT_8BIT /**< 8bit output */ + ,MPG123_FEATURE_OUTPUT_16BIT /**< 16bit output */ + ,MPG123_FEATURE_OUTPUT_32BIT /**< 32bit output */ + ,MPG123_FEATURE_INDEX /**< support for building a frame index for accurate seeking */ + ,MPG123_FEATURE_PARSE_ID3V2 /**< id3v2 parsing */ + ,MPG123_FEATURE_DECODE_LAYER1 /**< mpeg layer-1 decoder enabled */ + ,MPG123_FEATURE_DECODE_LAYER2 /**< mpeg layer-2 decoder enabled */ + ,MPG123_FEATURE_DECODE_LAYER3 /**< mpeg layer-3 decoder enabled */ + ,MPG123_FEATURE_DECODE_ACCURATE /**< accurate decoder rounding */ + ,MPG123_FEATURE_DECODE_DOWNSAMPLE /**< downsample (sample omit) */ + ,MPG123_FEATURE_DECODE_NTOM /**< flexible rate decoding */ + ,MPG123_FEATURE_PARSE_ICY /**< ICY support */ + ,MPG123_FEATURE_TIMEOUT_READ /**< Reader with timeout (network). */ +}; + +/** Query libmpg123 feature, 1 for success, 0 for unimplemented functions. */ +EXPORT int mpg123_feature(const enum mpg123_feature_set key); + +/* @} */ + + +/** \defgroup mpg123_error mpg123 error handling + * + * Functions to get text version of the error numbers and an enumeration + * of the error codes returned by libmpg123. + * + * Most functions operating on a mpg123_handle simply return MPG123_OK on success and MPG123_ERR on failure (setting the internal error variable of the handle to the specific error code). + * Decoding/seek functions may also return message codes MPG123_DONE, MPG123_NEW_FORMAT and MPG123_NEED_MORE (please read up on these on how to react!). + * The positive range of return values is used for "useful" values when appropriate. + * + * @{ + */ + +/** Enumeration of the message and error codes and returned by libmpg123 functions. */ +enum mpg123_errors +{ + MPG123_DONE=-12, /**< Message: Track ended. Stop decoding. */ + MPG123_NEW_FORMAT=-11, /**< Message: Output format will be different on next call. Note that some libmpg123 versions between 1.4.3 and 1.8.0 insist on you calling mpg123_getformat() after getting this message code. Newer verisons behave like advertised: You have the chance to call mpg123_getformat(), but you can also just continue decoding and get your data. */ + MPG123_NEED_MORE=-10, /**< Message: For feed reader: "Feed me more!" (call mpg123_feed() or mpg123_decode() with some new input data). */ + MPG123_ERR=-1, /**< Generic Error */ + MPG123_OK=0, /**< Success */ + MPG123_BAD_OUTFORMAT, /**< Unable to set up output format! */ + MPG123_BAD_CHANNEL, /**< Invalid channel number specified. */ + MPG123_BAD_RATE, /**< Invalid sample rate specified. */ + MPG123_ERR_16TO8TABLE, /**< Unable to allocate memory for 16 to 8 converter table! */ + MPG123_BAD_PARAM, /**< Bad parameter id! */ + MPG123_BAD_BUFFER, /**< Bad buffer given -- invalid pointer or too small size. */ + MPG123_OUT_OF_MEM, /**< Out of memory -- some malloc() failed. */ + MPG123_NOT_INITIALIZED, /**< You didn't initialize the library! */ + MPG123_BAD_DECODER, /**< Invalid decoder choice. */ + MPG123_BAD_HANDLE, /**< Invalid mpg123 handle. */ + MPG123_NO_BUFFERS, /**< Unable to initialize frame buffers (out of memory?). */ + MPG123_BAD_RVA, /**< Invalid RVA mode. */ + MPG123_NO_GAPLESS, /**< This build doesn't support gapless decoding. */ + MPG123_NO_SPACE, /**< Not enough buffer space. */ + MPG123_BAD_TYPES, /**< Incompatible numeric data types. */ + MPG123_BAD_BAND, /**< Bad equalizer band. */ + MPG123_ERR_NULL, /**< Null pointer given where valid storage address needed. */ + MPG123_ERR_READER, /**< Error reading the stream. */ + MPG123_NO_SEEK_FROM_END,/**< Cannot seek from end (end is not known). */ + MPG123_BAD_WHENCE, /**< Invalid 'whence' for seek function.*/ + MPG123_NO_TIMEOUT, /**< Build does not support stream timeouts. */ + MPG123_BAD_FILE, /**< File access error. */ + MPG123_NO_SEEK, /**< Seek not supported by stream. */ + MPG123_NO_READER, /**< No stream opened. */ + MPG123_BAD_PARS, /**< Bad parameter handle. */ + MPG123_BAD_INDEX_PAR, /**< Bad parameters to mpg123_index() and mpg123_set_index() */ + MPG123_OUT_OF_SYNC, /**< Lost track in bytestream and did not try to resync. */ + MPG123_RESYNC_FAIL, /**< Resync failed to find valid MPEG data. */ + MPG123_NO_8BIT, /**< No 8bit encoding possible. */ + MPG123_BAD_ALIGN, /**< Stack aligmnent error */ + MPG123_NULL_BUFFER, /**< NULL input buffer with non-zero size... */ + MPG123_NO_RELSEEK, /**< Relative seek not possible (screwed up file offset) */ + MPG123_NULL_POINTER, /**< You gave a null pointer somewhere where you shouldn't have. */ + MPG123_BAD_KEY, /**< Bad key value given. */ + MPG123_NO_INDEX, /**< No frame index in this build. */ + MPG123_INDEX_FAIL, /**< Something with frame index went wrong. */ + MPG123_BAD_DECODER_SETUP, /**< Something prevents a proper decoder setup */ + MPG123_MISSING_FEATURE /**< This feature has not been built into libmpg123. */ + ,MPG123_BAD_VALUE /**< A bad value has been given, somewhere. */ + ,MPG123_LSEEK_FAILED /**< Low-level seek failed. */ + ,MPG123_BAD_CUSTOM_IO /**< Custom I/O not prepared. */ + ,MPG123_LFS_OVERFLOW /**< Offset value overflow during translation of large file API calls -- your client program cannot handle that large file. */ +}; + +/** Return a string describing that error errcode means. */ +EXPORT const char* mpg123_plain_strerror(int errcode); + +/** Give string describing what error has occured in the context of handle mh. + * When a function operating on an mpg123 handle returns MPG123_ERR, you should check for the actual reason via + * char *errmsg = mpg123_strerror(mh) + * This function will catch mh == NULL and return the message for MPG123_BAD_HANDLE. */ +EXPORT const char* mpg123_strerror(mpg123_handle *mh); + +/** Return the plain errcode intead of a string. */ +EXPORT int mpg123_errcode(mpg123_handle *mh); + +/*@}*/ + + +/** \defgroup mpg123_decoder mpg123 decoder selection + * + * Functions to list and select the available decoders. + * Perhaps the most prominent feature of mpg123: You have several (optimized) decoders to choose from (on x86 and PPC (MacOS) systems, that is). + * + * @{ + */ + +/** Return a NULL-terminated array of generally available decoder names (plain 8bit ASCII). */ +EXPORT const char **mpg123_decoders(void); + +/** Return a NULL-terminated array of the decoders supported by the CPU (plain 8bit ASCII). */ +EXPORT const char **mpg123_supported_decoders(void); + +/** Set the chosen decoder to 'decoder_name' */ +EXPORT int mpg123_decoder(mpg123_handle *mh, const char* decoder_name); + +/** Get the currently active decoder engine name. + The active decoder engine can vary depening on output constraints, + mostly non-resampling, integer output is accelerated via 3DNow & Co. but for other modes a fallback engine kicks in. + Note that this can return a decoder that is ony active in the hidden and not available as decoder choice from the outside. + \return The decoder name or NULL on error. */ +EXPORT const char* mpg123_current_decoder(mpg123_handle *mh); + +/*@}*/ + + +/** \defgroup mpg123_output mpg123 output audio format + * + * Functions to get and select the format of the decoded audio. + * + * @{ + */ + +/** An enum over all sample types possibly known to mpg123. + * The values are designed as bit flags to allow bitmasking for encoding families. + * + * Note that (your build of) libmpg123 does not necessarily support all these. + * Usually, you can expect the 8bit encodings and signed 16 bit. + * Also 32bit float will be usual beginning with mpg123-1.7.0 . + * What you should bear in mind is that (SSE, etc) optimized routines are just for + * signed 16bit (and 8bit derived from that). Other formats use plain C code. + * + * All formats are in native byte order. On a little endian machine this should mean + * that you can just feed the MPG123_ENC_SIGNED_32 data to common 24bit hardware that + * ignores the lowest byte (or you could choose to do rounding with these lower bits). + */ +enum mpg123_enc_enum +{ + MPG123_ENC_8 = 0x00f /**< 0000 0000 1111 Some 8 bit integer encoding. */ + ,MPG123_ENC_16 = 0x040 /**< 0000 0100 0000 Some 16 bit integer encoding. */ + ,MPG123_ENC_32 = 0x100 /**< 0001 0000 0000 Some 32 bit integer encoding. */ + ,MPG123_ENC_SIGNED = 0x080 /**< 0000 1000 0000 Some signed integer encoding. */ + ,MPG123_ENC_FLOAT = 0xe00 /**< 1110 0000 0000 Some float encoding. */ + ,MPG123_ENC_SIGNED_16 = (MPG123_ENC_16|MPG123_ENC_SIGNED|0x10) /**< 1101 0000 signed 16 bit */ + ,MPG123_ENC_UNSIGNED_16 = (MPG123_ENC_16|0x20) /**< 0110 0000 unsigned 16 bit */ + ,MPG123_ENC_UNSIGNED_8 = 0x01 /**< 0000 0001 unsigned 8 bit */ + ,MPG123_ENC_SIGNED_8 = (MPG123_ENC_SIGNED|0x02) /**< 1000 0010 signed 8 bit */ + ,MPG123_ENC_ULAW_8 = 0x04 /**< 0000 0100 ulaw 8 bit */ + ,MPG123_ENC_ALAW_8 = 0x08 /**< 0000 1000 alaw 8 bit */ + ,MPG123_ENC_SIGNED_32 = MPG123_ENC_32|MPG123_ENC_SIGNED|0x1000 /**< 0001 0001 1000 0000 signed 32 bit */ + ,MPG123_ENC_UNSIGNED_32 = MPG123_ENC_32|0x2000 /**< 0010 0001 0000 0000 unsigned 32 bit */ + ,MPG123_ENC_FLOAT_32 = 0x200 /**< 0010 0000 0000 32bit float */ + ,MPG123_ENC_FLOAT_64 = 0x400 /**< 0100 0000 0000 64bit float */ + ,MPG123_ENC_ANY = ( MPG123_ENC_SIGNED_16 | MPG123_ENC_UNSIGNED_16 | MPG123_ENC_UNSIGNED_8 + | MPG123_ENC_SIGNED_8 | MPG123_ENC_ULAW_8 | MPG123_ENC_ALAW_8 + | MPG123_ENC_SIGNED_32 | MPG123_ENC_UNSIGNED_32 + | MPG123_ENC_FLOAT_32 | MPG123_ENC_FLOAT_64 ) /**< any encoding */ +}; + +/** They can be combined into one number (3) to indicate mono and stereo... */ +enum mpg123_channelcount +{ + MPG123_MONO = 1 + ,MPG123_STEREO = 2 +}; + +/** An array of supported standard sample rates + * These are possible native sample rates of MPEG audio files. + * You can still force mpg123 to resample to a different one, but by default you will only get audio in one of these samplings. + * \param list Store a pointer to the sample rates array there. + * \param number Store the number of sample rates there. */ +EXPORT void mpg123_rates(const long **list, size_t *number); + +/** An array of supported audio encodings. + * An audio encoding is one of the fully qualified members of mpg123_enc_enum (MPG123_ENC_SIGNED_16, not MPG123_SIGNED). + * \param list Store a pointer to the encodings array there. + * \param number Store the number of encodings there. */ +EXPORT void mpg123_encodings(const int **list, size_t *number); + +/** Configure a mpg123 handle to accept no output format at all, + * use before specifying supported formats with mpg123_format */ +EXPORT int mpg123_format_none(mpg123_handle *mh); + +/** Configure mpg123 handle to accept all formats + * (also any custom rate you may set) -- this is default. */ +EXPORT int mpg123_format_all(mpg123_handle *mh); + +/** Set the audio format support of a mpg123_handle in detail: + * \param mh audio decoder handle + * \param rate The sample rate value (in Hertz). + * \param channels A combination of MPG123_STEREO and MPG123_MONO. + * \param encodings A combination of accepted encodings for rate and channels, p.ex MPG123_ENC_SIGNED16 | MPG123_ENC_ULAW_8 (or 0 for no support). Please note that some encodings may not be supported in the library build and thus will be ignored here. + * \return MPG123_OK on success, MPG123_ERR if there was an error. */ +EXPORT int mpg123_format(mpg123_handle *mh, long rate, int channels, int encodings); + +/** Check to see if a specific format at a specific rate is supported + * by mpg123_handle. + * \return 0 for no support (that includes invalid parameters), MPG123_STEREO, + * MPG123_MONO or MPG123_STEREO|MPG123_MONO. */ +EXPORT int mpg123_format_support(mpg123_handle *mh, long rate, int encoding); + +/** Get the current output format written to the addresses givenr. */ +EXPORT int mpg123_getformat(mpg123_handle *mh, long *rate, int *channels, int *encoding); + +/*@}*/ + + +/** \defgroup mpg123_input mpg123 file input and decoding + * + * Functions for input bitstream and decoding operations. + * Decoding/seek functions may also return message codes MPG123_DONE, MPG123_NEW_FORMAT and MPG123_NEED_MORE (please read up on these on how to react!). + * @{ + */ + +/* reading samples / triggering decoding, possible return values: */ +/** Enumeration of the error codes returned by libmpg123 functions. */ + +/** Open and prepare to decode the specified file by filesystem path. + * This does not open HTTP urls; libmpg123 contains no networking code. + * If you want to decode internet streams, use mpg123_open_fd() or mpg123_open_feed(). + */ +EXPORT int mpg123_open(mpg123_handle *mh, const char *path); + +/** Use an already opened file descriptor as the bitstream input + * mpg123_close() will _not_ close the file descriptor. + */ +EXPORT int mpg123_open_fd(mpg123_handle *mh, int fd); + +/** Use an opaque handle as bitstream input. This works only with the + * replaced I/O from mpg123_replace_reader_handle()! + * mpg123_close() will call the cleanup callback for your handle (if you gave one). + */ +EXPORT int mpg123_open_handle(mpg123_handle *mh, void *iohandle); + +/** Open a new bitstream and prepare for direct feeding + * This works together with mpg123_decode(); you are responsible for reading and feeding the input bitstream. + */ +EXPORT int mpg123_open_feed(mpg123_handle *mh); + +/** Closes the source, if libmpg123 opened it. */ +EXPORT int mpg123_close(mpg123_handle *mh); + +/** Read from stream and decode up to outmemsize bytes. + * \param outmemory address of output buffer to write to + * \param outmemsize maximum number of bytes to write + * \param done address to store the number of actually decoded bytes to + * \return error/message code (watch out for MPG123_DONE and friends!) */ +EXPORT int mpg123_read(mpg123_handle *mh, unsigned char *outmemory, size_t outmemsize, size_t *done); + +/** Feed data for a stream that has been opened with mpg123_open_feed(). + * It's give and take: You provide the bytestream, mpg123 gives you the decoded samples. + * \param in input buffer + * \param size number of input bytes + * \return error/message code. */ +EXPORT int mpg123_feed(mpg123_handle *mh, const unsigned char *in, size_t size); + +/** Decode MPEG Audio from inmemory to outmemory. + * This is very close to a drop-in replacement for old mpglib. + * When you give zero-sized output buffer the input will be parsed until + * decoded data is available. This enables you to get MPG123_NEW_FORMAT (and query it) + * without taking decoded data. + * Think of this function being the union of mpg123_read() and mpg123_feed() (which it actually is, sort of;-). + * You can actually always decide if you want those specialized functions in separate steps or one call this one here. + * \param inmemory input buffer + * \param inmemsize number of input bytes + * \param outmemory output buffer + * \param outmemsize maximum number of output bytes + * \param done address to store the number of actually decoded bytes to + * \return error/message code (watch out especially for MPG123_NEED_MORE) + */ +EXPORT int mpg123_decode(mpg123_handle *mh, const unsigned char *inmemory, size_t inmemsize, unsigned char *outmemory, size_t outmemsize, size_t *done); + +/** Decode next MPEG frame to internal buffer + * or read a frame and return after setting a new format. + * \param num current frame offset gets stored there + * \param audio This pointer is set to the internal buffer to read the decoded audio from. + * \param bytes number of output bytes ready in the buffer + */ +EXPORT int mpg123_decode_frame(mpg123_handle *mh, off_t *num, unsigned char **audio, size_t *bytes); + +/** Decode current MPEG frame to internal buffer. + * Warning: This is experimental API that might change in future releases! + * Please watch mpg123 development closely when using it. + * \param num last frame offset gets stored there + * \param audio this pointer is set to the internal buffer to read the decoded audio from. + * \param bytes number of output bytes ready in the buffer + */ +EXPORT int mpg123_framebyframe_decode(mpg123_handle *mh, off_t *num, unsigned char **audio, size_t *bytes); + +/** Find, read and parse the next mp3 frame + * Warning: This is experimental API that might change in future releases! + * Please watch mpg123 development closely when using it. + */ +EXPORT int mpg123_framebyframe_next(mpg123_handle *mh); + +/*@}*/ + + +/** \defgroup mpg123_seek mpg123 position and seeking + * + * Functions querying and manipulating position in the decoded audio bitstream. + * The position is measured in decoded audio samples, or MPEG frame offset for the specific functions. + * If gapless code is in effect, the positions are adjusted to compensate the skipped padding/delay - meaning, you should not care about that at all and just use the position defined for the samples you get out of the decoder;-) + * The general usage is modelled after stdlib's ftell() and fseek(). + * Especially, the whence parameter for the seek functions has the same meaning as the one for fseek() and needs the same constants from stdlib.h: + * - SEEK_SET: set position to (or near to) specified offset + * - SEEK_CUR: change position by offset from now + * - SEEK_END: set position to offset from end + * + * Note that sample-accurate seek only works when gapless support has been enabled at compile time; seek is frame-accurate otherwise. + * Also, really sample-accurate seeking (meaning that you get the identical sample value after seeking compared to plain decoding up to the position) is only guaranteed when you do not mess with the position code by using MPG123_UPSPEED, MPG123_DOWNSPEED or MPG123_START_FRAME. The first two mainly should cause trouble with NtoM resampling, but in any case with these options in effect, you have to keep in mind that the sample offset is not the same as counting the samples you get from decoding since mpg123 counts the skipped samples, too (or the samples played twice only once)! + * Short: When you care about the sample position, don't mess with those parameters;-) + * Also, seeking is not guaranteed to work for all streams (underlying stream may not support it). + * + * @{ + */ + +/** Returns the current position in samples. + * On the next read, you'd get that sample. */ +EXPORT off_t mpg123_tell(mpg123_handle *mh); + +/** Returns the frame number that the next read will give you data from. */ +EXPORT off_t mpg123_tellframe(mpg123_handle *mh); + +/** Returns the current byte offset in the input stream. */ +EXPORT off_t mpg123_tell_stream(mpg123_handle *mh); + +/** Seek to a desired sample offset. + * Set whence to SEEK_SET, SEEK_CUR or SEEK_END. + * \return The resulting offset >= 0 or error/message code */ +EXPORT off_t mpg123_seek(mpg123_handle *mh, off_t sampleoff, int whence); + +/** Seek to a desired sample offset in data feeding mode. + * This just prepares things to be right only if you ensure that the next chunk of input data will be from input_offset byte position. + * \param input_offset The position it expects to be at the + * next time data is fed to mpg123_decode(). + * \return The resulting offset >= 0 or error/message code */ +EXPORT off_t mpg123_feedseek(mpg123_handle *mh, off_t sampleoff, int whence, off_t *input_offset); + +/** Seek to a desired MPEG frame index. + * Set whence to SEEK_SET, SEEK_CUR or SEEK_END. + * \return The resulting offset >= 0 or error/message code */ +EXPORT off_t mpg123_seek_frame(mpg123_handle *mh, off_t frameoff, int whence); + +/** Return a MPEG frame offset corresponding to an offset in seconds. + * This assumes that the samples per frame do not change in the file/stream, which is a good assumption for any sane file/stream only. + * \return frame offset >= 0 or error/message code */ +EXPORT off_t mpg123_timeframe(mpg123_handle *mh, double sec); + +/** Give access to the frame index table that is managed for seeking. + * You are asked not to modify the values... Use mpg123_set_index to set the + * seek index + * \param offsets pointer to the index array + * \param step one index byte offset advances this many MPEG frames + * \param fill number of recorded index offsets; size of the array */ +EXPORT int mpg123_index(mpg123_handle *mh, off_t **offsets, off_t *step, size_t *fill); + +/** Set the frame index table + * Setting offsets to NULL and fill > 0 will allocate fill entries. Setting offsets + * to NULL and fill to 0 will clear the index and free the allocated memory used by the index. + * \param offsets pointer to the index array + * \param step one index byte offset advances this many MPEG frames + * \param fill number of recorded index offsets; size of the array */ +EXPORT int mpg123_set_index(mpg123_handle *mh, off_t *offsets, off_t step, size_t fill); + +/** Get information about current and remaining frames/seconds. + * WARNING: This function is there because of special usage by standalone mpg123 and may be removed in the final version of libmpg123! + * You provide an offset (in frames) from now and a number of output bytes + * served by libmpg123 but not yet played. You get the projected current frame + * and seconds, as well as the remaining frames/seconds. This does _not_ care + * about skipped samples due to gapless playback. */ +EXPORT int mpg123_position( mpg123_handle *mh, off_t frame_offset, off_t buffered_bytes, off_t *current_frame, off_t *frames_left, double *current_seconds, double *seconds_left); + +/*@}*/ + + +/** \defgroup mpg123_voleq mpg123 volume and equalizer + * + * @{ + */ + +enum mpg123_channels +{ + MPG123_LEFT=0x1 /**< The Left Channel. */ + ,MPG123_RIGHT=0x2 /**< The Right Channel. */ + ,MPG123_LR=0x3 /**< Both left and right channel; same as MPG123_LEFT|MPG123_RIGHT */ +}; + +/** Set the 32 Band Audio Equalizer settings. + * \param channel Can be MPG123_LEFT, MPG123_RIGHT or MPG123_LEFT|MPG123_RIGHT for both. + * \param band The equaliser band to change (from 0 to 31) + * \param val The (linear) adjustment factor. */ +EXPORT int mpg123_eq(mpg123_handle *mh, enum mpg123_channels channel, int band, double val); + +/** Get the 32 Band Audio Equalizer settings. + * \param channel Can be MPG123_LEFT, MPG123_RIGHT or MPG123_LEFT|MPG123_RIGHT for (arithmetic mean of) both. + * \param band The equaliser band to change (from 0 to 31) + * \return The (linear) adjustment factor. */ +EXPORT double mpg123_geteq(mpg123_handle *mh, enum mpg123_channels channel, int band); + +/** Reset the 32 Band Audio Equalizer settings to flat */ +EXPORT int mpg123_reset_eq(mpg123_handle *mh); + +/** Set the absolute output volume including the RVA setting, + * vol<0 just applies (a possibly changed) RVA setting. */ +EXPORT int mpg123_volume(mpg123_handle *mh, double vol); + +/** Adjust output volume including the RVA setting by chosen amount */ +EXPORT int mpg123_volume_change(mpg123_handle *mh, double change); + +/** Return current volume setting, the actual value due to RVA, and the RVA + * adjustment itself. It's all as double float value to abstract the sample + * format. The volume values are linear factors / amplitudes (not percent) + * and the RVA value is in decibels. */ +EXPORT int mpg123_getvolume(mpg123_handle *mh, double *base, double *really, double *rva_db); + +/* TODO: Set some preamp in addition / to replace internal RVA handling? */ + +/*@}*/ + + +/** \defgroup mpg123_status mpg123 status and information + * + * @{ + */ + +/** Enumeration of the mode types of Variable Bitrate */ +enum mpg123_vbr { + MPG123_CBR=0, /**< Constant Bitrate Mode (default) */ + MPG123_VBR, /**< Variable Bitrate Mode */ + MPG123_ABR /**< Average Bitrate Mode */ +}; + +/** Enumeration of the MPEG Versions */ +enum mpg123_version { + MPG123_1_0=0, /**< MPEG Version 1.0 */ + MPG123_2_0, /**< MPEG Version 2.0 */ + MPG123_2_5 /**< MPEG Version 2.5 */ +}; + + +/** Enumeration of the MPEG Audio mode. + * Only the mono mode has 1 channel, the others have 2 channels. */ +enum mpg123_mode { + MPG123_M_STEREO=0, /**< Standard Stereo. */ + MPG123_M_JOINT, /**< Joint Stereo. */ + MPG123_M_DUAL, /**< Dual Channel. */ + MPG123_M_MONO /**< Single Channel. */ +}; + + +/** Enumeration of the MPEG Audio flag bits */ +enum mpg123_flags { + MPG123_CRC=0x1, /**< The bitstream is error protected using 16-bit CRC. */ + MPG123_COPYRIGHT=0x2, /**< The bitstream is copyrighted. */ + MPG123_PRIVATE=0x4, /**< The private bit has been set. */ + MPG123_ORIGINAL=0x8 /**< The bitstream is an original, not a copy. */ +}; + +/** Data structure for storing information about a frame of MPEG Audio */ +struct mpg123_frameinfo +{ + enum mpg123_version version; /**< The MPEG version (1.0/2.0/2.5). */ + int layer; /**< The MPEG Audio Layer (MP1/MP2/MP3). */ + long rate; /**< The sampling rate in Hz. */ + enum mpg123_mode mode; /**< The audio mode (Mono, Stereo, Joint-stero, Dual Channel). */ + int mode_ext; /**< The mode extension bit flag. */ + int framesize; /**< The size of the frame (in bytes). */ + enum mpg123_flags flags; /**< MPEG Audio flag bits. Just now I realize that it should be declared as int, not enum. It's a bitwise combination of the enum values. */ + int emphasis; /**< The emphasis type. */ + int bitrate; /**< Bitrate of the frame (kbps). */ + int abr_rate; /**< The target average bitrate. */ + enum mpg123_vbr vbr; /**< The VBR mode. */ +}; + +/** Get frame information about the MPEG audio bitstream and store it in a mpg123_frameinfo structure. */ +EXPORT int mpg123_info(mpg123_handle *mh, struct mpg123_frameinfo *mi); + +/** Get the safe output buffer size for all cases (when you want to replace the internal buffer) */ +EXPORT size_t mpg123_safe_buffer(void); + +/** Make a full parsing scan of each frame in the file. ID3 tags are found. An accurate length + * value is stored. Seek index will be filled. A seek back to current position + * is performed. At all, this function refuses work when stream is + * not seekable. + * \return MPG123_OK or MPG123_ERR. + */ +EXPORT int mpg123_scan(mpg123_handle *mh); + +/** Return, if possible, the full (expected) length of current track in samples. + * \return length >= 0 or MPG123_ERR if there is no length guess possible. */ +EXPORT off_t mpg123_length(mpg123_handle *mh); + +/** Override the value for file size in bytes. + * Useful for getting sensible track length values in feed mode or for HTTP streams. + * \return MPG123_OK or MPG123_ERR */ +EXPORT int mpg123_set_filesize(mpg123_handle *mh, off_t size); + +/** Returns the time (seconds) per frame; <0 is error. */ +EXPORT double mpg123_tpf(mpg123_handle *mh); + +/** Get and reset the clip count. */ +EXPORT long mpg123_clip(mpg123_handle *mh); + + +/** The key values for state information from mpg123_getstate(). */ +enum mpg123_state +{ + MPG123_ACCURATE = 1 /**< Query if positons are currently accurate (integer value, 0 if false, 1 if true) */ +}; + +/** Get various current decoder/stream state information. + * \param key the key to identify the information to give. + * \param val the address to return (long) integer values to + * \param fval the address to return floating point values to + * \return MPG123_OK or MPG123_ERR for success + */ +EXPORT int mpg123_getstate(mpg123_handle *mh, enum mpg123_state key, long *val, double *fval); + +/*@}*/ + + +/** \defgroup mpg123_metadata mpg123 metadata handling + * + * Functions to retrieve the metadata from MPEG Audio files and streams. + * Also includes string handling functions. + * + * @{ + */ + +/** Data structure for storing strings in a safer way than a standard C-String. + * Can also hold a number of null-terminated strings. */ +typedef struct +{ + char* p; /**< pointer to the string data */ + size_t size; /**< raw number of bytes allocated */ + size_t fill; /**< number of used bytes (including closing zero byte) */ +} mpg123_string; + +/** Create and allocate memory for a new mpg123_string */ +EXPORT void mpg123_init_string(mpg123_string* sb); + +/** Free-up mempory for an existing mpg123_string */ +EXPORT void mpg123_free_string(mpg123_string* sb); + +/** Change the size of a mpg123_string + * \return 0 on error, 1 on success */ +EXPORT int mpg123_resize_string(mpg123_string* sb, size_t news); + +/** Increase size of a mpg123_string if necessary (it may stay larger). + * Note that the functions for adding and setting in current libmpg123 use this instead of mpg123_resize_string(). + * That way, you can preallocate memory and safely work afterwards with pieces. + * \return 0 on error, 1 on success */ +EXPORT int mpg123_grow_string(mpg123_string* sb, size_t news); + +/** Copy the contents of one mpg123_string string to another. + * \return 0 on error, 1 on success */ +EXPORT int mpg123_copy_string(mpg123_string* from, mpg123_string* to); + +/** Append a C-String to an mpg123_string + * \return 0 on error, 1 on success */ +EXPORT int mpg123_add_string(mpg123_string* sb, const char* stuff); + +/** Append a C-substring to an mpg123 string + * \return 0 on error, 1 on success + * \param from offset to copy from + * \param count number of characters to copy (a null-byte is always appended) */ +EXPORT int mpg123_add_substring(mpg123_string *sb, const char *stuff, size_t from, size_t count); + +/** Set the conents of a mpg123_string to a C-string + * \return 0 on error, 1 on success */ +EXPORT int mpg123_set_string(mpg123_string* sb, const char* stuff); + +/** Set the contents of a mpg123_string to a C-substring + * \return 0 on error, 1 on success + * \param from offset to copy from + * \param count number of characters to copy (a null-byte is always appended) */ +EXPORT int mpg123_set_substring(mpg123_string *sb, const char *stuff, size_t from, size_t count); + +/** The mpg123 text encodings. This contains encodings we encounter in ID3 tags or ICY meta info. */ +enum mpg123_text_encoding +{ + mpg123_text_unknown = 0 /**< Unkown encoding... mpg123_id3_encoding can return that on invalid codes. */ + ,mpg123_text_utf8 = 1 /**< UTF-8 */ + ,mpg123_text_latin1 = 2 /**< ISO-8859-1. Note that sometimes latin1 in ID3 is abused for totally different encodings. */ + ,mpg123_text_icy = 3 /**< ICY metadata encoding, usually CP-1252 but we take it as UTF-8 if it qualifies as such. */ + ,mpg123_text_cp1252 = 4 /**< Really CP-1252 without any guessing. */ + ,mpg123_text_utf16 = 5 /**< Some UTF-16 encoding. The last of a set of leading BOMs (byte order mark) rules. + * When there is no BOM, big endian ordering is used. Note that UCS-2 qualifies as UTF-8 when + * you don't mess with the reserved code points. If you want to decode little endian data + * without BOM you need to prepend 0xff 0xfe yourself. */ + ,mpg123_text_utf16bom = 6 /**< Just an alias for UTF-16, ID3v2 has this as distinct code. */ + ,mpg123_text_utf16be = 7 /**< Another alias for UTF16 from ID3v2. Note, that, because of the mess that is reality, + * BOMs are used if encountered. There really is not much distinction between the UTF16 types for mpg123 + * One exception: Since this is seen in ID3v2 tags, leading null bytes are skipped for all other UTF16 + * types (we expect a BOM before real data there), not so for utf16be!*/ + ,mpg123_text_max = 7 /**< Placeholder for the maximum encoding value. */ +}; + +/** The encoding byte values from ID3v2. */ +enum mpg123_id3_enc +{ + mpg123_id3_latin1 = 0 /**< Note: This sometimes can mean anything in practice... */ + ,mpg123_id3_utf16bom = 1 /**< UTF16, UCS-2 ... it's all the same for practical purposes. */ + ,mpg123_id3_utf16be = 2 /**< Big-endian UTF-16, BOM see note for mpg123_text_utf16be. */ + ,mpg123_id3_utf8 = 3 /**< Our lovely overly ASCII-compatible 8 byte encoding for the world. */ + ,mpg123_id3_enc_max = 3 /**< Placeholder to check valid range of encoding byte. */ +}; + +/** Convert ID3 encoding byte to mpg123 encoding index. */ +EXPORT enum mpg123_text_encoding mpg123_enc_from_id3(unsigned char id3_enc_byte); + +/** Store text data in string, after converting to UTF-8 from indicated encoding + * \return 0 on error, 1 on success (on error, mpg123_free_string is called on sb) + * \param sb target string + * \param enc mpg123 text encoding value + * \param source source buffer with plain unsigned bytes (you might need to cast from char *) + * \param source_size number of bytes in the source buffer + * + * A prominent error can be that you provided an unknown encoding value, or this build of libmpg123 lacks support for certain encodings (ID3 or ICY stuff missing). + * Also, you might want to take a bit of care with preparing the data; for example, strip leading zeroes (I have seen that). + */ +EXPORT int mpg123_store_utf8(mpg123_string *sb, enum mpg123_text_encoding enc, const unsigned char *source, size_t source_size); + +/** Sub data structure for ID3v2, for storing various text fields (including comments). + * This is for ID3v2 COMM, TXXX and all the other text fields. + * Only COMM and TXXX have a description, only COMM and USLT have a language. + * You should consult the ID3v2 specification for the use of the various text fields ("frames" in ID3v2 documentation, I use "fields" here to separate from MPEG frames). */ +typedef struct +{ + char lang[3]; /**< Three-letter language code (not terminated). */ + char id[4]; /**< The ID3v2 text field id, like TALB, TPE2, ... (4 characters, no string termination). */ + mpg123_string description; /**< Empty for the generic comment... */ + mpg123_string text; /**< ... */ +} mpg123_text; + +/** Data structure for storing IDV3v2 tags. + * This structure is not a direct binary mapping with the file contents. + * The ID3v2 text frames are allowed to contain multiple strings. + * So check for null bytes until you reach the mpg123_string fill. + * All text is encoded in UTF-8. */ +typedef struct +{ + unsigned char version; /**< 3 or 4 for ID3v2.3 or ID3v2.4. */ + mpg123_string *title; /**< Title string (pointer into text_list). */ + mpg123_string *artist; /**< Artist string (pointer into text_list). */ + mpg123_string *album; /**< Album string (pointer into text_list). */ + mpg123_string *year; /**< The year as a string (pointer into text_list). */ + mpg123_string *genre; /**< Genre String (pointer into text_list). The genre string(s) may very well need postprocessing, esp. for ID3v2.3. */ + mpg123_string *comment; /**< Pointer to last encountered comment text with empty description. */ + /* Encountered ID3v2 fields are appended to these lists. + There can be multiple occurences, the pointers above always point to the last encountered data. */ + mpg123_text *comment_list; /**< Array of comments. */ + size_t comments; /**< Number of comments. */ + mpg123_text *text; /**< Array of ID3v2 text fields (including USLT) */ + size_t texts; /**< Numer of text fields. */ + mpg123_text *extra; /**< The array of extra (TXXX) fields. */ + size_t extras; /**< Number of extra text (TXXX) fields. */ +} mpg123_id3v2; + +/** Data structure for ID3v1 tags (the last 128 bytes of a file). + * Don't take anything for granted (like string termination)! + * Also note the change ID3v1.1 did: comment[28] = 0; comment[19] = track_number + * It is your task to support ID3v1 only or ID3v1.1 ...*/ +typedef struct +{ + char tag[3]; /**< Always the string "TAG", the classic intro. */ + char title[30]; /**< Title string. */ + char artist[30]; /**< Artist string. */ + char album[30]; /**< Album string. */ + char year[4]; /**< Year string. */ + char comment[30]; /**< Comment string. */ + unsigned char genre; /**< Genre index. */ +} mpg123_id3v1; + +#define MPG123_ID3 0x3 /**< 0011 There is some ID3 info. Also matches 0010 or NEW_ID3. */ +#define MPG123_NEW_ID3 0x1 /**< 0001 There is ID3 info that changed since last call to mpg123_id3. */ +#define MPG123_ICY 0xc /**< 1100 There is some ICY info. Also matches 0100 or NEW_ICY.*/ +#define MPG123_NEW_ICY 0x4 /**< 0100 There is ICY info that changed since last call to mpg123_icy. */ + +/** Query if there is (new) meta info, be it ID3 or ICY (or something new in future). + The check function returns a combination of flags. */ +EXPORT int mpg123_meta_check(mpg123_handle *mh); /* On error (no valid handle) just 0 is returned. */ + +/** Point v1 and v2 to existing data structures wich may change on any next read/decode function call. + * v1 and/or v2 can be set to NULL when there is no corresponding data. + * \return Return value is MPG123_OK or MPG123_ERR, */ +EXPORT int mpg123_id3(mpg123_handle *mh, mpg123_id3v1 **v1, mpg123_id3v2 **v2); + +/** Point icy_meta to existing data structure wich may change on any next read/decode function call. + * \return Return value is MPG123_OK or MPG123_ERR, */ +EXPORT int mpg123_icy(mpg123_handle *mh, char **icy_meta); /* same for ICY meta string */ + +/** Decode from windows-1252 (the encoding ICY metainfo used) to UTF-8. + * Note that this is very similar to mpg123_store_utf8(&sb, mpg123_text_icy, icy_text, strlen(icy_text+1)) . + * \param icy_text The input data in ICY encoding + * \return pointer to newly allocated buffer with UTF-8 data (You free() it!) */ +EXPORT char* mpg123_icy2utf8(const char* icy_text); + + +/* @} */ + + +/** \defgroup mpg123_advpar mpg123 advanced parameter API + * + * Direct access to a parameter set without full handle around it. + * Possible uses: + * - Influence behaviour of library _during_ initialization of handle (MPG123_VERBOSE). + * - Use one set of parameters for multiple handles. + * + * The functions for handling mpg123_pars (mpg123_par() and mpg123_fmt() + * family) directly return a fully qualified mpg123 error code, the ones + * operating on full handles normally MPG123_OK or MPG123_ERR, storing the + * specific error code itseld inside the handle. + * + * @{ + */ + +/** Opaque structure for the libmpg123 decoder parameters. */ +struct mpg123_pars_struct; + +/** Opaque structure for the libmpg123 decoder parameters. */ +typedef struct mpg123_pars_struct mpg123_pars; + +/** Create a handle with preset parameters. */ +EXPORT mpg123_handle *mpg123_parnew(mpg123_pars *mp, const char* decoder, int *error); + +/** Allocate memory for and return a pointer to a new mpg123_pars */ +EXPORT mpg123_pars *mpg123_new_pars(int *error); + +/** Delete and free up memory used by a mpg123_pars data structure */ +EXPORT void mpg123_delete_pars(mpg123_pars* mp); + +/** Configure mpg123 parameters to accept no output format at all, + * use before specifying supported formats with mpg123_format */ +EXPORT int mpg123_fmt_none(mpg123_pars *mp); + +/** Configure mpg123 parameters to accept all formats + * (also any custom rate you may set) -- this is default. */ +EXPORT int mpg123_fmt_all(mpg123_pars *mp); + +/** Set the audio format support of a mpg123_pars in detail: + \param rate The sample rate value (in Hertz). + \param channels A combination of MPG123_STEREO and MPG123_MONO. + \param encodings A combination of accepted encodings for rate and channels, p.ex MPG123_ENC_SIGNED16|MPG123_ENC_ULAW_8 (or 0 for no support). + \return 0 on success, -1 if there was an error. / +*/ +EXPORT int mpg123_fmt(mpg123_pars *mh, long rate, int channels, int encodings); /* 0 is good, -1 is error */ + +/** Check to see if a specific format at a specific rate is supported + * by mpg123_pars. + * \return 0 for no support (that includes invalid parameters), MPG123_STEREO, + * MPG123_MONO or MPG123_STEREO|MPG123_MONO. */ +EXPORT int mpg123_fmt_support(mpg123_pars *mh, long rate, int encoding); + +/** Set a specific parameter, for a specific mpg123_pars, using a parameter + * type key chosen from the mpg123_parms enumeration, to the specified value. */ +EXPORT int mpg123_par(mpg123_pars *mp, enum mpg123_parms type, long value, double fvalue); + +/** Get a specific parameter, for a specific mpg123_pars. + * See the mpg123_parms enumeration for a list of available parameters. */ +EXPORT int mpg123_getpar(mpg123_pars *mp, enum mpg123_parms type, long *val, double *fval); + +/* @} */ + + +/** \defgroup mpg123_lowio mpg123 low level I/O + * You may want to do tricky stuff with I/O that does not work with mpg123's default file access or you want to make it decode into your own pocket... + * + * @{ */ + +/** Replace default internal buffer with user-supplied buffer. + * Instead of working on it's own private buffer, mpg123 will directly use the one you provide for storing decoded audio. */ +EXPORT int mpg123_replace_buffer(mpg123_handle *mh, unsigned char *data, size_t size); + +/** The max size of one frame's decoded output with current settings. + * Use that to determine an appropriate minimum buffer size for decoding one frame. */ +EXPORT size_t mpg123_outblock(mpg123_handle *mh); + +/** Replace low-level stream access functions; read and lseek as known in POSIX. + * You can use this to make any fancy file opening/closing yourself, + * using mpg123_open_fd() to set the file descriptor for your read/lseek (doesn't need to be a "real" file descriptor...). + * Setting a function to NULL means that the default internal read is + * used (active from next mpg123_open call on). + * Note: As it would be troublesome to mess with this while having a file open, + * this implies mpg123_close(). */ +EXPORT int mpg123_replace_reader(mpg123_handle *mh, long (*r_read) (int, void *, size_t), off_t (*r_lseek)(int, off_t, int)); + +/** Replace I/O functions with your own ones operating on some kind of handle instead of integer descriptors. + * The handle is a void pointer, so you can pass any data you want... + * mpg123_open_handle() is the call you make to use the I/O defined here. + * There is no fallback to internal read/seek here. + * Note: As it would be troublesome to mess with this while having a file open, + * this mpg123_close() is implied here. + * \param r_read The callback for reading (behaviour like posix read). + * \param r_lseek The callback for seeking (like posix lseek). + * \param cleanup A callback to clean up an I/O handle on mpg123_close, can be NULL for none (you take care of cleaning your handles). */ +EXPORT int mpg123_replace_reader_handle(mpg123_handle *mh, long (*r_read) (void *, void *, size_t), off_t (*r_lseek)(void *, off_t, int), void (*cleanup)(void*)); + +/* @} */ + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/reactos/libs/libmpg123/mpg123lib_intern.h b/include/reactos/libs/libmpg123/mpg123lib_intern.h new file mode 100644 index 00000000000..55935bcff79 --- /dev/null +++ b/include/reactos/libs/libmpg123/mpg123lib_intern.h @@ -0,0 +1,333 @@ +/* + mpg123lib_intern: Common non-public stuff for libmpg123 + + copyright 1995-2008 by the mpg123 project - free software under the terms of the LGPL 2.1 + see COPYING and AUTHORS files in distribution or http://mpg123.org + + derived from the old mpg123.h +*/ + +#ifndef MPG123_H_INTERN +#define MPG123_H_INTERN + +#define MPG123_RATES 9 +#define MPG123_ENCODINGS 10 + +#include "config.h" /* Load this before _anything_ */ + +/* ABI conformance for other compilers. + mpg123 needs 16byte-aligned stack for SSE and friends. + gcc provides that, but others don't necessarily. */ +#ifdef ABI_ALIGN_FUN +#ifndef attribute_align_arg +#if defined(__GNUC__) && (__GNUC__ > 4 || __GNUC__ == 4 && __GNUC_MINOR__>1) +# define attribute_align_arg __attribute__((force_align_arg_pointer)) +/* The gcc that can align the stack does not need the check... nor does it work with gcc 4.3+, anyway. */ +#else + +# define attribute_align_arg +/* Other compilers get code to catch misaligned stack. + Well, except Sun Studio, which accepts the aligned attribute but does not honor it. */ +#if !defined(__SUNPRO_C) +# define NEED_ALIGNCHECK +#endif + +#endif +#endif +#else +#define attribute_align_arg +/* We won't try the align check... */ +#endif + +/* export DLL symbols */ +#if defined(WIN32) && defined(DYNAMIC_BUILD) +#define BUILD_MPG123_DLL +#endif +#include "compat.h" +#include "mpg123.h" + +#define SKIP_JUNK 1 + +#ifndef M_PI +# define M_PI 3.14159265358979323846 +#endif +#ifndef M_SQRT2 +# define M_SQRT2 1.41421356237309504880 +#endif + +#ifdef SUNOS +#define memmove(dst,src,size) bcopy(src,dst,size) +#endif + +/* some stuff has to go back to mpg123.h */ +#ifdef REAL_IS_FLOAT +# define real float +# define REAL_SCANF "%f" +# define REAL_PRINTF "%f" +#elif defined(REAL_IS_LONG_DOUBLE) +# define real long double +# define REAL_SCANF "%Lf" +# define REAL_PRINTF "%Lf" +#elif defined(REAL_IS_FIXED) +/* Disable some output formats for fixed point decoder... */ + +# define real long + +/* + for fixed-point decoders, use pre-calculated tables to avoid expensive floating-point maths + undef this macro for run-time calculation +*/ +#define PRECALC_TABLES + +# define REAL_RADIX 24 +# define REAL_FACTOR 16777216.0 + +static inline long double_to_long_rounded(double x, double scalefac) +{ + x *= scalefac; + x += (x > 0) ? 0.5 : -0.5; + return (long)x; +} + +static inline long scale_rounded(long x, int shift) +{ + x += (x >> 31); + x >>= (shift - 1); + x += (x & 1); + return (x >> 1); +} + +# ifdef __GNUC__ +# if defined(OPT_I386) +/* for i386_nofpu decoder */ +# define REAL_MUL_ASM(x, y, radix) \ +({ \ + long _x=(x), _y=(y); \ + __asm__ ( \ + "imull %1 \n\t" \ + "shrdl %2, %%edx, %0 \n\t" \ + : "+&a" (_x) \ + : "mr" (_y), "I" (radix) \ + : "%edx", "cc" \ + ); \ + _x; \ +}) + +# define REAL_MUL_SCALE_LAYER3_ASM(x, y, radix) \ +({ \ + long _x=(x), _y=(y), _radix=(radix); \ + __asm__ ( \ + "imull %1 \n\t" \ + "shrdl %%cl, %%edx, %0 \n\t" \ + : "+&a" (_x) \ + : "mr" (_y), "c" (_radix) \ + : "%edx", "cc" \ + ); \ + _x; \ +}) +# elif defined(OPT_PPC) +/* for powerpc */ +# define REAL_MUL_ASM(x, y, radix) \ +({ \ + long _x=(x), _y=(y), _mull, _mulh; \ + __asm__ ( \ + "mullw %0, %2, %3 \n\t" \ + "mulhw %1, %2, %3 \n\t" \ + "srwi %0, %0, %4 \n\t" \ + "rlwimi %0, %1, %5, 0, %6 \n\t" \ + : "=&r" (_mull), "=&r" (_mulh) \ + : "%r" (_x), "r" (_y), "i" (radix), "i" (32-(radix)), "i" ((radix)-1) \ + ); \ + _mull; \ +}) + +# define REAL_MUL_SCALE_LAYER3_ASM(x, y, radix) \ +({ \ + long _x=(x), _y=(y), _radix=(radix), _mull, _mulh, _radix2; \ + __asm__ ( \ + "mullw %0, %3, %4 \n\t" \ + "mulhw %1, %3, %4 \n\t" \ + "subfic %2, %5, 32 \n\t" \ + "srw %0, %0, %5 \n\t" \ + "slw %1, %1, %2 \n\t" \ + "or %0, %0, %1 \n\t" \ + : "=&r" (_mull), "=&r" (_mulh), "=&r" (_radix2) \ + : "%r" (_x), "r" (_y), "r" (_radix) \ + : "cc" \ + ); \ + _mull; \ +}) +# elif defined(OPT_ARM) +/* for arm */ +# define REAL_MUL_ASM(x, y, radix) \ +({ \ + long _x=(x), _y=(y), _mull, _mulh; \ + __asm__ ( \ + "smull %0, %1, %2, %3 \n\t" \ + "mov %0, %0, lsr %4 \n\t" \ + "orr %0, %0, %1, lsl %5 \n\t" \ + : "=&r" (_mull), "=&r" (_mulh) \ + : "%r" (_x), "r" (_y), "M" (radix), "M" (32-(radix)) \ + ); \ + _mull; \ +}) + +# define REAL_MUL_SCALE_LAYER3_ASM(x, y, radix) \ +({ \ + long _x=(x), _y=(y), _radix=(radix), _mull, _mulh, _radix2; \ + __asm__ ( \ + "smull %0, %1, %3, %4 \n\t" \ + "mov %0, %0, lsr %5 \n\t" \ + "rsb %2, %5, #32 \n\t" \ + "orr %0, %0, %1, lsl %2 \n\t" \ + : "=&r" (_mull), "=&r" (_mulh), "=&r" (_radix2) \ + : "%r" (_x), "r" (_y), "r" (_radix) \ + ); \ + _mull; \ +}) +# endif +# endif + +/* I just changed the (int) to (long) there... seemed right. */ +# define DOUBLE_TO_REAL(x) (double_to_long_rounded(x, REAL_FACTOR)) +# define DOUBLE_TO_REAL_15(x) (double_to_long_rounded(x, 32768.0)) +# define DOUBLE_TO_REAL_POW43(x) (double_to_long_rounded(x, 8192.0)) +# define DOUBLE_TO_REAL_SCALE_LAYER12(x) (double_to_long_rounded(x, 1073741824.0)) +# define DOUBLE_TO_REAL_SCALE_LAYER3(x, y) (double_to_long_rounded(x, pow(2.0,gainpow2_scale[y]))) +# define REAL_TO_DOUBLE(x) ((double)(x) / REAL_FACTOR) +# ifdef REAL_MUL_ASM +# define REAL_MUL(x, y) REAL_MUL_ASM(x, y, REAL_RADIX) +# define REAL_MUL_15(x, y) REAL_MUL_ASM(x, y, 15) +# define REAL_MUL_SCALE_LAYER12(x, y) REAL_MUL_ASM(x, y, 15 + 30 - REAL_RADIX) +# else +# define REAL_MUL(x, y) (((long long)(x) * (long long)(y)) >> REAL_RADIX) +# define REAL_MUL_15(x, y) (((long long)(x) * (long long)(y)) >> 15) +# define REAL_MUL_SCALE_LAYER12(x, y) (((long long)(x) * (long long)(y)) >> (15 + 30 - REAL_RADIX)) +# endif +# ifdef REAL_MUL_SCALE_LAYER3_ASM +# define REAL_MUL_SCALE_LAYER3(x, y, z) REAL_MUL_SCALE_LAYER3_ASM(x, y, 13 + gainpow2_scale[z] - REAL_RADIX) +# else +# define REAL_MUL_SCALE_LAYER3(x, y, z) (((long long)(x) * (long long)(y)) >> (13 + gainpow2_scale[z] - REAL_RADIX)) +# endif +# define REAL_SCALE_LAYER12(x) ((long)((x) >> (30 - REAL_RADIX))) +# define REAL_SCALE_LAYER3(x, y) ((long)((x) >> (gainpow2_scale[y] - REAL_RADIX))) +# ifdef ACCURATE_ROUNDING +# define REAL_MUL_SYNTH(x, y) REAL_MUL(x, y) +# define REAL_SCALE_DCT64(x) (x) +# define REAL_SCALE_WINDOW(x) (x) +# else +# define REAL_MUL_SYNTH(x, y) ((x) * (y)) +# define REAL_SCALE_DCT64(x) ((x) >> 8) +# define REAL_SCALE_WINDOW(x) scale_rounded(x, 16) +# endif +# define REAL_SCANF "%ld" +# define REAL_PRINTF "%ld" + +#else +# define real double +# define REAL_SCANF "%lf" +# define REAL_PRINTF "%f" +#endif + +#ifndef REAL_IS_FIXED +# if (defined SIZEOF_INT32_T) && (SIZEOF_INT32_T != 4) +# error "Bad 32bit types!!!" +# endif +#endif + +#ifndef DOUBLE_TO_REAL +# define DOUBLE_TO_REAL(x) (real)(x) +#endif +#ifndef DOUBLE_TO_REAL_15 +# define DOUBLE_TO_REAL_15(x) (real)(x) +#endif +#ifndef DOUBLE_TO_REAL_POW43 +# define DOUBLE_TO_REAL_POW43(x) (real)(x) +#endif +#ifndef DOUBLE_TO_REAL_SCALE_LAYER12 +# define DOUBLE_TO_REAL_SCALE_LAYER12(x) (real)(x) +#endif +#ifndef DOUBLE_TO_REAL_SCALE_LAYER3 +# define DOUBLE_TO_REAL_SCALE_LAYER3(x, y) (real)(x) +#endif +#ifndef REAL_TO_DOUBLE +# define REAL_TO_DOUBLE(x) (x) +#endif + +#ifndef REAL_MUL +# define REAL_MUL(x, y) ((x) * (y)) +#endif +#ifndef REAL_MUL_SYNTH +# define REAL_MUL_SYNTH(x, y) ((x) * (y)) +#endif +#ifndef REAL_MUL_15 +# define REAL_MUL_15(x, y) ((x) * (y)) +#endif +#ifndef REAL_MUL_SCALE_LAYER12 +# define REAL_MUL_SCALE_LAYER12(x, y) ((x) * (y)) +#endif +#ifndef REAL_MUL_SCALE_LAYER3 +# define REAL_MUL_SCALE_LAYER3(x, y, z) ((x) * (y)) +#endif +#ifndef REAL_SCALE_LAYER12 +# define REAL_SCALE_LAYER12(x) (x) +#endif +#ifndef REAL_SCALE_LAYER3 +# define REAL_SCALE_LAYER3(x, y) (x) +#endif +#ifndef REAL_SCALE_DCT64 +# define REAL_SCALE_DCT64(x) (x) +#endif + +/* used to be: AUDIOBUFSIZE = n*64 with n=1,2,3 ... + now: factor on minimum frame buffer size (which takes upsampling into account) */ +#define AUDIOBUFSIZE 2 + +#include "true.h" + +#define MAX_NAME_SIZE 81 +#define SBLIMIT 32 +#define SCALE_BLOCK 12 +#define SSLIMIT 18 + +/* Same as MPG_M_* */ +#define MPG_MD_STEREO 0 +#define MPG_MD_JOINT_STEREO 1 +#define MPG_MD_DUAL_CHANNEL 2 +#define MPG_MD_MONO 3 + +/* We support short or float output samples... + Short integer amplitude is scaled by this. */ +#define SHORT_SCALE 32768 +/* That scales a short-scaled value to a 32bit integer scaled one + value = 2**31/2**15 */ +#define S32_RESCALE 65536 + +/* Pre Shift fo 16 to 8 bit converter table */ +#define AUSHIFT (3) + +#include "optimize.h" +#include "decode.h" +#include "parse.h" +#include "frame.h" + +/* fr is a mpg123_handle* by convention here... */ +#define NOQUIET (!(fr->p.flags & MPG123_QUIET)) +#define VERBOSE (NOQUIET && fr->p.verbose) +#define VERBOSE2 (NOQUIET && fr->p.verbose > 1) +#define VERBOSE3 (NOQUIET && fr->p.verbose > 2) +#define VERBOSE4 (NOQUIET && fr->p.verbose > 3) +#define PVERB(mp, level) (!((mp)->flags & MPG123_QUIET) && (mp)->verbose >= (level)) + +int decode_update(mpg123_handle *mh); +/* residing in format.c */ +off_t samples_to_bytes(mpg123_handle *fr , off_t s); +off_t bytes_to_samples(mpg123_handle *fr , off_t b); + +/* If networking is enabled and we really mean internal networking, the timeout_read function is available. */ +#if defined (NETWORK) && !defined (WANT_WIN32_SOCKETS) +/* Does not work with win32 */ +#define TIMEOUT_READ +#endif + +#endif diff --git a/include/reactos/libs/libmpg123/optimize.h b/include/reactos/libs/libmpg123/optimize.h new file mode 100644 index 00000000000..620c3ad7daa --- /dev/null +++ b/include/reactos/libs/libmpg123/optimize.h @@ -0,0 +1,211 @@ +#ifndef MPG123_H_OPTIMIZE +#define MPG123_H_OPTIMIZE +/* + optimize: get a grip on the different optimizations + + copyright 2007 by the mpg123 project - free software under the terms of the LGPL 2.1 + see COPYING and AUTHORS files in distribution or http://mpg123.org + initially written by Thomas Orgis, taking from mpg123.[hc] + + for building mpg123 with one optimization only, you have to choose exclusively between + OPT_GENERIC (generic C code for everyone) + OPT_GENERIC_DITHER (same with dithering for 1to1) + OPT_I386 (Intel i386) + OPT_I486 (Somewhat special code for i486; does not work together with others.) + OPT_I586 (Intel Pentium) + OPT_I586_DITHER (Intel Pentium with dithering/noise shaping for enhanced quality) + OPT_MMX (Intel Pentium and compatibles with MMX, fast, but not the best accuracy) + OPT_3DNOW (AMD 3DNow!, K6-2/3, Athlon, compatibles...) + OPT_3DNOWEXT (AMD 3DNow! extended, generally Athlon, compatibles...) + OPT_ALTIVEC (Motorola/IBM PPC with AltiVec under MacOSX) + OPT_X86_64 (x86-64 / AMD64 / Intel 64) + + or you define OPT_MULTI and give a combination which makes sense (do not include i486, do not mix altivec and x86). + + I still have to examine the dynamics of this here together with REAL_IS_FIXED. + Basic point is: Don't use REAL_IS_FIXED with something else than generic or i386. + + Also, one should minimize code size by really ensuring that only functions that are really needed are included. + Currently, all generic functions will be always there (to be safe for fallbacks for advanced decoders). + Strictly, at least the synth_1to1 should not be necessary for single-decoder mode. +*/ + + +/* Runtime optimization interface now here: */ + +enum optdec +{ /* autodec needs to be =0 and the first, nodec needs to be the last -- for loops! */ + autodec=0, generic, generic_dither, idrei, + ivier, ifuenf, ifuenf_dither, mmx, + dreidnow, dreidnowext, altivec, sse, x86_64, arm, + nodec +}; +enum optcla { nocla=0, normal, mmxsse }; + +/* - Set up the table of synth functions for current decoder choice. */ +int frame_cpu_opt(mpg123_handle *fr, const char* cpu); +/* - Choose, from the synth table, the synth functions to use for current output format/rate. */ +int set_synth_functions(mpg123_handle *fr); +/* - Parse decoder name and return numerical code. */ +enum optdec dectype(const char* decoder); +/* - Return the default decoder type. */ +enum optdec defdec(void); +/* - Return the class of a decoder type (mmxsse or normal). */ +enum optcla decclass(const enum optdec); + +/* Now comes a whole lot of definitions, for multi decoder mode and single decoder mode. + Because of the latter, it may look redundant at times. */ + +/* this is included in mpg123.h, which includes config.h */ +#ifdef CCALIGN +#define ALIGNED(a) __attribute__((aligned(a))) +#else +#define ALIGNED(a) +#endif + +/* Safety catch for invalid decoder choice. */ +#ifdef REAL_IS_FIXED +#if (defined OPT_I486) || (defined OPT_I586) || (defined OPT_I586_DITHER) \ + || (defined OPT_MMX) || (defined OPT_SSE) || (defined_OPT_ALTIVEC) \ + || (defined OPT_3DNOW) || (defined OPT_3DNOWEXT) || (defined OPT_X86_64) || (defined OPT_GENERIC_DITHER) +#error "Bad decoder choice together with fixed point math!" +#endif +#endif + +#if (defined NO_LAYER1 && defined NO_LAYER2) +#define NO_LAYER12 +#endif + +#ifdef OPT_GENERIC +#ifndef OPT_MULTI +# define defopt generic +#endif +#endif + +#ifdef OPT_GENERIC_DITHER +#define OPT_DITHER +#ifndef OPT_MULTI +# define defopt generic_dither +#endif +#endif + +/* i486 is special... always alone! */ +#ifdef OPT_I486 +#define OPT_X86 +#define defopt ivier +#ifdef OPT_MULTI +#error "i486 can only work alone!" +#endif +#define FIR_BUFFER_SIZE 128 +#define FIR_SIZE 16 +#endif + +#ifdef OPT_I386 +#define OPT_X86 +#ifndef OPT_MULTI +# define defopt idrei +#endif +#endif + +#ifdef OPT_I586 +#define OPT_X86 +#ifndef OPT_MULTI +# define defopt ifuenf +#endif +#endif + +#ifdef OPT_I586_DITHER +#define OPT_X86 +#define OPT_DITHER +#ifndef OPT_MULTI +# define defopt ifuenf_dither +#endif +#endif + +/* We still have some special code around MMX tables. */ + +#ifdef OPT_MMX +#define OPT_MMXORSSE +#define OPT_X86 +#ifndef OPT_MULTI +# define defopt mmx +#endif +#endif + +#ifdef OPT_SSE +#define OPT_MMXORSSE +#define OPT_MPLAYER +#define OPT_X86 +#ifndef OPT_MULTI +# define defopt sse +#endif +#endif + +#ifdef OPT_3DNOWEXT +#define OPT_MMXORSSE +#define OPT_MPLAYER +#define OPT_X86 +#ifndef OPT_MULTI +# define defopt dreidnowext +# define opt_dct36(fr) dct36_3dnowext +#endif +#endif + +#ifdef OPT_MPLAYER +extern const int costab_mmxsse[]; +#endif + +/* 3dnow used to use synth_1to1_i586 for mono / 8bit conversion - was that intentional? */ +/* I'm trying to skip the pentium code here ... until I see that that is indeed a bad idea */ +#ifdef OPT_3DNOW +#define OPT_X86 +#ifndef OPT_MULTI +# define defopt dreidnow +# define opt_dct36(fr) dct36_3dnow +#endif +#endif + +#ifdef OPT_ALTIVEC +#ifndef OPT_MULTI +# define defopt altivec +#endif +#endif + +#ifdef OPT_X86_64 +#define OPT_MMXORSSE +#ifndef OPT_MULTI +# define defopt x86_64 +#endif +#endif + +#ifdef OPT_ARM +#ifndef OPT_MULTI +# define defopt arm +#endif +#endif + +/* used for multi opt mode and the single 3dnow mode to have the old 3dnow test flag still working */ +void check_decoders(void); + +/* + Now come two blocks of standard definitions for multi-decoder mode and single-decoder mode. + Most stuff is so automatic that it's indeed generated by some inline shell script. + Remember to use these scripts when possible, instead of direct repetitive hacking. +*/ + +#ifdef OPT_MULTI + +# define defopt nodec + +# if (defined OPT_3DNOW || defined OPT_3DNOWEXT) +# define opt_dct36(fr) ((fr)->cpu_opts.the_dct36) +# endif + +#endif /* OPT_MULTI else */ + +# ifndef opt_dct36 +# define opt_dct36(fr) dct36 +# endif + +#endif /* MPG123_H_OPTIMIZE */ + diff --git a/include/reactos/libs/libmpg123/parse.h b/include/reactos/libs/libmpg123/parse.h new file mode 100644 index 00000000000..91f9f7d8eed --- /dev/null +++ b/include/reactos/libs/libmpg123/parse.h @@ -0,0 +1,25 @@ +/* + parse: spawned from common; clustering around stream/frame parsing + + copyright ?-2007 by the mpg123 project - free software under the terms of the LGPL 2.1 + see COPYING and AUTHORS files in distribution or http://mpg123.org + initially written by Michael Hipp & Thomas Orgis +*/ + +#ifndef MPG123_PARSE_H +#define MPG123_PARSE_H + +#include "frame.h" + +int read_frame_init(mpg123_handle* fr); +int frame_bitrate(mpg123_handle *fr); +long frame_freq(mpg123_handle *fr); +int read_frame_recover(mpg123_handle* fr); /* dead? */ +int read_frame(mpg123_handle *fr); +void set_pointer(mpg123_handle *fr, long backstep); +int position_info(mpg123_handle* fr, unsigned long no, long buffsize, unsigned long* frames_left, double* current_seconds, double* seconds_left); +double compute_bpf(mpg123_handle *fr); +long time_to_frame(mpg123_handle *fr, double seconds); +int get_songlen(mpg123_handle *fr,int no); + +#endif diff --git a/include/reactos/libs/libmpg123/reader.h b/include/reactos/libs/libmpg123/reader.h new file mode 100644 index 00000000000..c0e3222ac52 --- /dev/null +++ b/include/reactos/libs/libmpg123/reader.h @@ -0,0 +1,117 @@ +/* + reader: reading input data + + copyright ?-2007 by the mpg123 project - free software under the terms of the LGPL 2.1 + see COPYING and AUTHORS files in distribution or http://mpg123.org + initially written by Thomas Orgis (after code from Michael Hipp) +*/ + +#ifndef MPG123_READER_H +#define MPG123_READER_H + +#include "config.h" +#include "mpg123.h" + +struct buffy +{ + unsigned char *data; + long size; + long realsize; + struct buffy *next; +}; + +struct bufferchain +{ + struct buffy* first; /* The beginning of the chain. */ + struct buffy* last; /* The end... of the chain. */ + long size; /* Aggregated size of all buffies. */ + /* These positions are relative to buffer chain beginning. */ + long pos; /* Position in whole chain. */ + long firstpos; /* The point of return on non-forget() */ + /* The "real" filepos is fileoff + pos. */ + off_t fileoff; /* Beginning of chain is at this file offset. */ +}; + +struct reader_data +{ + off_t filelen; /* total file length or total buffer size */ + off_t filepos; /* position in file or position in buffer chain */ + int filept; + /* Custom opaque I/O handle from the client. */ + void *iohandle; + int flags; + long timeout_sec; + long (*fdread) (mpg123_handle *, void *, size_t); + /* User can replace the read and lseek functions. The r_* are the stored replacement functions or NULL. */ + long (*r_read) (int fd, void *buf, size_t count); + off_t (*r_lseek)(int fd, off_t offset, int whence); + /* These are custom I/O routines for opaque user handles. + They get picked if there's some iohandle set. */ + long (*r_read_handle) (void *handle, void *buf, size_t count); + off_t (*r_lseek_handle)(void *handle, off_t offset, int whence); + /* An optional cleaner for the handle on closing the stream. */ + void (*cleanup_handle)(void *handle); + /* These two pointers are the actual workers (default map to POSIX read/lseek). */ + long (*read) (int fd, void *buf, size_t count); + off_t (*lseek)(int fd, off_t offset, int whence); + /* Buffered readers want that abstracted, set internally. */ + long (*fullread)(mpg123_handle *, unsigned char *, long); + struct bufferchain buffer; /* Not dynamically allocated, these few struct bytes aren't worth the trouble. */ +}; + +/* start to use off_t to properly do LFS in future ... used to be long */ +struct reader +{ + int (*init) (mpg123_handle *); + void (*close) (mpg123_handle *); + long (*fullread) (mpg123_handle *, unsigned char *, long); + int (*head_read) (mpg123_handle *, unsigned long *newhead); /* succ: TRUE, else <= 0 (FALSE or READER_MORE) */ + int (*head_shift) (mpg123_handle *, unsigned long *head); /* succ: TRUE, else <= 0 (FALSE or READER_MORE) */ + off_t (*skip_bytes) (mpg123_handle *, off_t len); /* succ: >=0, else error or READER_MORE */ + int (*read_frame_body)(mpg123_handle *, unsigned char *, int size); + int (*back_bytes) (mpg123_handle *, off_t bytes); + int (*seek_frame) (mpg123_handle *, off_t num); + off_t (*tell) (mpg123_handle *); + void (*rewind) (mpg123_handle *); + void (*forget) (mpg123_handle *); +}; + +/* Open a file by path or use an opened file descriptor. */ +int open_stream(mpg123_handle *, const char *path, int fd); +/* Open an external handle. */ +int open_stream_handle(mpg123_handle *, void *iohandle); + +/* feed based operation has some specials */ +int open_feed(mpg123_handle *); +/* externally called function, returns 0 on success, -1 on error */ +int feed_more(mpg123_handle *fr, const unsigned char *in, long count); +void feed_forget(mpg123_handle *fr); /* forget the data that has been read (free some buffers) */ +off_t feed_set_pos(mpg123_handle *fr, off_t pos); /* Set position (inside available data if possible), return wanted byte offset of next feed. */ + +void open_bad(mpg123_handle *); + +#define READER_FD_OPENED 0x1 +#define READER_ID3TAG 0x2 +#define READER_SEEKABLE 0x4 +#define READER_BUFFERED 0x8 +#define READER_NONBLOCK 0x20 +#define READER_HANDLEIO 0x40 + +#define READER_STREAM 0 +#define READER_ICY_STREAM 1 +#define READER_FEED 2 +/* These two add a little buffering to enable small seeks for peek ahead. */ +#define READER_BUF_STREAM 3 +#define READER_BUF_ICY_STREAM 4 + +#ifdef READ_SYSTEM +#define READER_SYSTEM 5 +#define READERS 6 +#else +#define READERS 5 +#endif + +#define READER_ERROR MPG123_ERR +#define READER_MORE MPG123_NEED_MORE + +#endif diff --git a/include/reactos/libs/libmpg123/sample.h b/include/reactos/libs/libmpg123/sample.h new file mode 100644 index 00000000000..08df28b1a0e --- /dev/null +++ b/include/reactos/libs/libmpg123/sample.h @@ -0,0 +1,132 @@ +/* + sample.h: The conversion from internal data to output samples of differing formats. + + copyright 2007-9 by the mpg123 project - free software under the terms of the LGPL 2.1 + see COPYING and AUTHORS files in distribution or http://mpg123.org + initially written by Thomas Orgis, taking WRITE_SAMPLE from decode.c + Later added the end-conversion specific macros here, too. +*/ + +#ifndef SAMPLE_H +#define SAMPLE_H + +/* mpg123lib_intern.h is included already, right? */ + +/* Special case is fixed point math... which does work, but not that nice yet. */ +#ifdef REAL_IS_FIXED +static inline short idiv_signed_rounded(long x, int shift) +{ + x >>= (shift - 1); + x += (x & 1); + return (short)(x >> 1); +} +# define REAL_PLUS_32767 ( 32767 << 15 ) +# define REAL_MINUS_32768 ( -32768 << 15 ) +# define REAL_TO_SHORT(x) (idiv_signed_rounded(x, 15)) +/* No better code (yet). */ +# define REAL_TO_SHORT_ACCURATE(x) REAL_TO_SHORT(x) +/* This is just here for completeness, it is not used! */ +# define REAL_TO_S32(x) (x) +#endif + +/* From now on for single precision float... double precision is a possible option once we added some bits. But, it would be rather insane. */ +#ifndef REAL_TO_SHORT + +/* Define the accurate rounding function. */ +# if (defined REAL_IS_FLOAT) && (defined IEEE_FLOAT) +/* This function is only available for IEEE754 single-precision values + This is nearly identical to proper rounding, just -+0.5 is rounded to 0 */ +static inline short ftoi16(float x) +{ + union + { + float f; + int32_t i; + } u_fi; + u_fi.f = x + 12582912.0f; /* Magic Number: 2^23 + 2^22 */ + return (short)u_fi.i; +} +# define REAL_TO_SHORT_ACCURATE(x) ftoi16(x) +# else +/* The "proper" rounding, plain C, a bit slow. */ +# define REAL_TO_SHORT_ACCURATE(x) (short)((x)>0.0?(x)+0.5:(x)-0.5) +# endif + +/* Now define the normal rounding. */ +# ifdef ACCURATE_ROUNDING +# define REAL_TO_SHORT(x) REAL_TO_SHORT_ACCURATE(x) +# else +/* Non-accurate rounding... simple truncation. Fastest, most LSB errors. */ +# define REAL_TO_SHORT(x) (short)(x) +# endif + +#endif /* REAL_TO_SHORT */ + +/* We should add dithering for S32, too? */ +#ifndef REAL_TO_S32 +# ifdef ACCURATE_ROUNDING +# define REAL_TO_S32(x) (int32_t)((x)>0.0?(x)+0.5:(x)-0.5) +# else +# define REAL_TO_S32(x) (int32_t)(x) +# endif +#endif + +#ifndef REAL_PLUS_32767 +# define REAL_PLUS_32767 32767.0 +#endif +#ifndef REAL_MINUS_32768 +# define REAL_MINUS_32768 -32768.0 +#endif +#ifndef REAL_PLUS_S32 +# define REAL_PLUS_S32 2147483647.0 +#endif +#ifndef REAL_MINUS_S32 +# define REAL_MINUS_S32 -2147483648.0 +#endif + + +/* The actual storage of a decoded sample is separated in the following macros. + We can handle different types, we could also handle dithering here. */ + +/* Macro to produce a short (signed 16bit) output sample from internal representation, + which may be float, double or indeed some integer for fixed point handling. */ +#define WRITE_SHORT_SAMPLE(samples,sum,clip) \ + if( (sum) > REAL_PLUS_32767) { *(samples) = 0x7fff; (clip)++; } \ + else if( (sum) < REAL_MINUS_32768) { *(samples) = -0x8000; (clip)++; } \ + else { *(samples) = REAL_TO_SHORT(sum); } + +/* Same as above, but always using accurate rounding. Would we want softer clipping here, too? */ +#define WRITE_SHORT_SAMPLE_ACCURATE(samples,sum,clip) \ + if( (sum) > REAL_PLUS_32767) { *(samples) = 0x7fff; (clip)++; } \ + else if( (sum) < REAL_MINUS_32768) { *(samples) = -0x8000; (clip)++; } \ + else { *(samples) = REAL_TO_SHORT_ACCURATE(sum); } + +/* + 32bit signed + We do clipping with the same old borders... but different conversion. + We see here that we need extra work for non-16bit output... we optimized for 16bit. + -0x7fffffff-1 is the minimum 32 bit signed integer value expressed so that MSVC + does not give a compile time warning. +*/ +#define WRITE_S32_SAMPLE(samples,sum,clip) \ + { \ + real tmpsum = REAL_MUL((sum),S32_RESCALE); \ + if( tmpsum > REAL_PLUS_S32 ){ *(samples) = 0x7fffffff; (clip)++; } \ + else if( tmpsum < REAL_MINUS_S32 ) { *(samples) = -0x7fffffff-1; (clip)++; } \ + else { *(samples) = REAL_TO_S32(tmpsum); } \ + } + +/* Produce an 8bit sample, via 16bit intermediate. */ +#define WRITE_8BIT_SAMPLE(samples,sum,clip) \ +{ \ + short write_8bit_tmp; \ + if( (sum) > REAL_PLUS_32767) { write_8bit_tmp = 0x7fff; (clip)++; } \ + else if( (sum) < REAL_MINUS_32768) { write_8bit_tmp = -0x8000; (clip)++; } \ + else { write_8bit_tmp = REAL_TO_SHORT(sum); } \ + *(samples) = fr->conv16to8[write_8bit_tmp>>AUSHIFT]; \ +} +#ifndef REAL_IS_FIXED +#define WRITE_REAL_SAMPLE(samples,sum,clip) *(samples) = ((real)1./SHORT_SCALE)*(sum) +#endif + +#endif diff --git a/include/reactos/libs/libmpg123/synth.h b/include/reactos/libs/libmpg123/synth.h new file mode 100644 index 00000000000..6cdac581d3d --- /dev/null +++ b/include/reactos/libs/libmpg123/synth.h @@ -0,0 +1,196 @@ +/* + synth.h: generic synth functions + + copyright 1995-2008 by the mpg123 project - free software under the terms of the LGPL 2.1 + see COPYING and AUTHORS files in distribution or http://mpg123.org + initially written by Michael Hipp, generalized by Thomas Orgis + + This header is used multiple times to create different variants of these functions. + See decode.c and friends. + Hint: BLOCK, MONO_NAME, MONO2STEREO_NAME, SYNTH_NAME and SAMPLE_T as well as WRITE_SAMPLE do vary. + + Thomas looked closely at the decode_1to1, decode_2to1 and decode_4to1 contents, seeing that they are too similar to be separate files. + This is what resulted... + + Basically, you need one set of these functions for each output sample type. + That currently means signed short, 8bit or float/double; though unsigned short may come, too. + + Define NO_AUTOINCREMENT i386 code that shall not rely on autoincrement. + Actual benefit of this has to be examined; may apply to specific (old) compilers, only. +*/ + + +/* Main synth function, uses the plain dct64 or dct64_i386. */ +int SYNTH_NAME(real *bandPtr, int channel, mpg123_handle *fr, int final) +{ +#ifndef NO_AUTOINCREMENT +#define BACKPEDAL 0x10 /* We use autoincrement and thus need this re-adjustment for window/b0. */ +#define MY_DCT64 dct64 +#else +#define BACKPEDAL 0x00 /* i386 code does not need that. */ +#define MY_DCT64 dct64_i386 +#endif + static const int step = 2; + SAMPLE_T *samples = (SAMPLE_T *) (fr->buffer.data + fr->buffer.fill); + + real *b0, **buf; /* (*buf)[0x110]; */ + int clip = 0; + int bo1; + + if(fr->have_eq_settings) do_equalizer(bandPtr,channel,fr->equalizer); + + if(!channel) + { + fr->bo--; + fr->bo &= 0xf; + buf = fr->real_buffs[0]; + } + else + { +#ifdef USE_DITHER + /* We always go forward 32 dither points (and back again for the second channel), + (re)sampling the noise the same way as the original signal. */ + fr->ditherindex -= 32; +#endif + samples++; + buf = fr->real_buffs[1]; + } +#ifdef USE_DITHER + /* We check only once for the overflow of dither index here ... + this wraps differently than the original i586 dither code, in theory (but when DITHERSIZE % BLOCK/2 == 0 it's the same). */ + if(DITHERSIZE-fr->ditherindex < 32) fr->ditherindex = 0; + /* And we define a macro for the dither action... */ + #define ADD_DITHER(fr,sum) sum+=fr->dithernoise[fr->ditherindex]; fr->ditherindex += 64/BLOCK; +#else + #define ADD_DITHER(fr,sum) +#endif + + if(fr->bo & 0x1) + { + b0 = buf[0]; + bo1 = fr->bo; + MY_DCT64(buf[1]+((fr->bo+1)&0xf),buf[0]+fr->bo,bandPtr); + } + else + { + b0 = buf[1]; + bo1 = fr->bo+1; + MY_DCT64(buf[0]+fr->bo,buf[1]+fr->bo+1,bandPtr); + } + + { + register int j; + real *window = fr->decwin + 16 - bo1; + + for(j=(BLOCK/4); j; j--, b0+=0x400/BLOCK-BACKPEDAL, window+=0x800/BLOCK-BACKPEDAL, samples+=step) + { + real sum; +#ifndef NO_AUTOINCREMENT + sum = REAL_MUL_SYNTH(*window++, *b0++); + sum -= REAL_MUL_SYNTH(*window++, *b0++); + sum += REAL_MUL_SYNTH(*window++, *b0++); + sum -= REAL_MUL_SYNTH(*window++, *b0++); + sum += REAL_MUL_SYNTH(*window++, *b0++); + sum -= REAL_MUL_SYNTH(*window++, *b0++); + sum += REAL_MUL_SYNTH(*window++, *b0++); + sum -= REAL_MUL_SYNTH(*window++, *b0++); + sum += REAL_MUL_SYNTH(*window++, *b0++); + sum -= REAL_MUL_SYNTH(*window++, *b0++); + sum += REAL_MUL_SYNTH(*window++, *b0++); + sum -= REAL_MUL_SYNTH(*window++, *b0++); + sum += REAL_MUL_SYNTH(*window++, *b0++); + sum -= REAL_MUL_SYNTH(*window++, *b0++); + sum += REAL_MUL_SYNTH(*window++, *b0++); + sum -= REAL_MUL_SYNTH(*window++, *b0++); +#else + sum = REAL_MUL_SYNTH(window[0x0], b0[0x0]); + sum -= REAL_MUL_SYNTH(window[0x1], b0[0x1]); + sum += REAL_MUL_SYNTH(window[0x2], b0[0x2]); + sum -= REAL_MUL_SYNTH(window[0x3], b0[0x3]); + sum += REAL_MUL_SYNTH(window[0x4], b0[0x4]); + sum -= REAL_MUL_SYNTH(window[0x5], b0[0x5]); + sum += REAL_MUL_SYNTH(window[0x6], b0[0x6]); + sum -= REAL_MUL_SYNTH(window[0x7], b0[0x7]); + sum += REAL_MUL_SYNTH(window[0x8], b0[0x8]); + sum -= REAL_MUL_SYNTH(window[0x9], b0[0x9]); + sum += REAL_MUL_SYNTH(window[0xA], b0[0xA]); + sum -= REAL_MUL_SYNTH(window[0xB], b0[0xB]); + sum += REAL_MUL_SYNTH(window[0xC], b0[0xC]); + sum -= REAL_MUL_SYNTH(window[0xD], b0[0xD]); + sum += REAL_MUL_SYNTH(window[0xE], b0[0xE]); + sum -= REAL_MUL_SYNTH(window[0xF], b0[0xF]); +#endif + + ADD_DITHER(fr,sum) + WRITE_SAMPLE(samples,sum,clip); + } + + { + real sum; + sum = REAL_MUL_SYNTH(window[0x0], b0[0x0]); + sum += REAL_MUL_SYNTH(window[0x2], b0[0x2]); + sum += REAL_MUL_SYNTH(window[0x4], b0[0x4]); + sum += REAL_MUL_SYNTH(window[0x6], b0[0x6]); + sum += REAL_MUL_SYNTH(window[0x8], b0[0x8]); + sum += REAL_MUL_SYNTH(window[0xA], b0[0xA]); + sum += REAL_MUL_SYNTH(window[0xC], b0[0xC]); + sum += REAL_MUL_SYNTH(window[0xE], b0[0xE]); + + ADD_DITHER(fr,sum) + WRITE_SAMPLE(samples,sum,clip); + samples += step; + b0-=0x400/BLOCK; + window-=0x800/BLOCK; + } + window += bo1<<1; + + for(j=(BLOCK/4)-1; j; j--, b0-=0x400/BLOCK+BACKPEDAL, window-=0x800/BLOCK-BACKPEDAL, samples+=step) + { + real sum; +#ifndef NO_AUTOINCREMENT + sum = -REAL_MUL_SYNTH(*(--window), *b0++); + sum -= REAL_MUL_SYNTH(*(--window), *b0++); + sum -= REAL_MUL_SYNTH(*(--window), *b0++); + sum -= REAL_MUL_SYNTH(*(--window), *b0++); + sum -= REAL_MUL_SYNTH(*(--window), *b0++); + sum -= REAL_MUL_SYNTH(*(--window), *b0++); + sum -= REAL_MUL_SYNTH(*(--window), *b0++); + sum -= REAL_MUL_SYNTH(*(--window), *b0++); + sum -= REAL_MUL_SYNTH(*(--window), *b0++); + sum -= REAL_MUL_SYNTH(*(--window), *b0++); + sum -= REAL_MUL_SYNTH(*(--window), *b0++); + sum -= REAL_MUL_SYNTH(*(--window), *b0++); + sum -= REAL_MUL_SYNTH(*(--window), *b0++); + sum -= REAL_MUL_SYNTH(*(--window), *b0++); + sum -= REAL_MUL_SYNTH(*(--window), *b0++); + sum -= REAL_MUL_SYNTH(*(--window), *b0++); +#else + sum = -REAL_MUL_SYNTH(window[-0x1], b0[0x0]); + sum -= REAL_MUL_SYNTH(window[-0x2], b0[0x1]); + sum -= REAL_MUL_SYNTH(window[-0x3], b0[0x2]); + sum -= REAL_MUL_SYNTH(window[-0x4], b0[0x3]); + sum -= REAL_MUL_SYNTH(window[-0x5], b0[0x4]); + sum -= REAL_MUL_SYNTH(window[-0x6], b0[0x5]); + sum -= REAL_MUL_SYNTH(window[-0x7], b0[0x6]); + sum -= REAL_MUL_SYNTH(window[-0x8], b0[0x7]); + sum -= REAL_MUL_SYNTH(window[-0x9], b0[0x8]); + sum -= REAL_MUL_SYNTH(window[-0xA], b0[0x9]); + sum -= REAL_MUL_SYNTH(window[-0xB], b0[0xA]); + sum -= REAL_MUL_SYNTH(window[-0xC], b0[0xB]); + sum -= REAL_MUL_SYNTH(window[-0xD], b0[0xC]); + sum -= REAL_MUL_SYNTH(window[-0xE], b0[0xD]); + sum -= REAL_MUL_SYNTH(window[-0xF], b0[0xE]); + sum -= REAL_MUL_SYNTH(window[-0x0], b0[0xF]); /* Is that right? 0x0? Just wondering... */ +#endif + ADD_DITHER(fr,sum) + WRITE_SAMPLE(samples,sum,clip); + } + } + + if(final) fr->buffer.fill += BLOCK*sizeof(SAMPLE_T); + + return clip; +#undef ADD_DITHER +#undef BACKPEDAL +#undef MY_DCT64 +} diff --git a/include/reactos/libs/libmpg123/synth_8bit.h b/include/reactos/libs/libmpg123/synth_8bit.h new file mode 100644 index 00000000000..e518d4f1d71 --- /dev/null +++ b/include/reactos/libs/libmpg123/synth_8bit.h @@ -0,0 +1,86 @@ +/* + synth_8bit.h: Wrappers over optimized synth_xtoy for converting signed short to 8bit. + + copyright 1995-2008 by the mpg123 project - free software under the terms of the LGPL 2.1 + see COPYING and AUTHORS files in distribution or http://mpg123.org + initially written by Michael Hipp, code generalized to the wrapper by Thomas Orgis + + Only variable is the BLOCK size to choose 1to1, 2to1 or 4to1. + Oh, and the names: BASE_SYNTH_NAME, SYNTH_NAME, MONO_NAME, MONO2STEREO_NAME + (p.ex. opt_synth_1to1(fr), synth_1to1_8bit, synth_1to1_8bit_mono, ...). +*/ + +int SYNTH_NAME(real *bandPtr, int channel, mpg123_handle *fr, int final) +{ + short samples_tmp[BLOCK]; + short *tmp1 = samples_tmp + channel; + int i,ret; + + unsigned char *samples = fr->buffer.data; + int pnt = fr->buffer.fill; + fr->buffer.data = (unsigned char*) samples_tmp; + fr->buffer.fill = 0; + ret = BASE_SYNTH_NAME(bandPtr, channel, fr , 0); + fr->buffer.data = samples; + + samples += channel + pnt; + for(i=0;i<(BLOCK/2);i++) + { + *samples = fr->conv16to8[*tmp1>>AUSHIFT]; + samples += 2; + tmp1 += 2; + } + fr->buffer.fill = pnt + (final ? BLOCK : 0 ); + + return ret; +} + +int MONO_NAME(real *bandPtr, mpg123_handle *fr) +{ + short samples_tmp[BLOCK]; + short *tmp1 = samples_tmp; + int i,ret; + + unsigned char *samples = fr->buffer.data; + int pnt = fr->buffer.fill; + fr->buffer.data = (unsigned char*) samples_tmp; + fr->buffer.fill = 0; + ret = BASE_SYNTH_NAME(bandPtr, 0, fr, 0); + fr->buffer.data = samples; + + samples += pnt; + for(i=0;i<(BLOCK/2);i++) + { + *samples++ = fr->conv16to8[*tmp1>>AUSHIFT]; + tmp1+=2; + } + fr->buffer.fill = pnt + BLOCK/2; + + return ret; +} + +int MONO2STEREO_NAME(real *bandPtr, mpg123_handle *fr) +{ + short samples_tmp[BLOCK]; + short *tmp1 = samples_tmp; + int i,ret; + + unsigned char *samples = fr->buffer.data; + int pnt = fr->buffer.fill; + fr->buffer.data = (unsigned char*) samples_tmp; + fr->buffer.fill = 0; + ret = BASE_SYNTH_NAME(bandPtr, 0, fr, 0); + fr->buffer.data = samples; + + samples += pnt; + for(i=0;i<(BLOCK/2);i++) + { + *samples++ = fr->conv16to8[*tmp1>>AUSHIFT]; + *samples++ = fr->conv16to8[*tmp1>>AUSHIFT]; + tmp1 += 2; + } + fr->buffer.fill = pnt + BLOCK; + + return ret; +} + diff --git a/include/reactos/libs/libmpg123/synth_mono.h b/include/reactos/libs/libmpg123/synth_mono.h new file mode 100644 index 00000000000..907aa254c92 --- /dev/null +++ b/include/reactos/libs/libmpg123/synth_mono.h @@ -0,0 +1,64 @@ +/* + monosynth.h: generic mono related synth functions + + copyright 1995-2008 by the mpg123 project - free software under the terms of the LGPL 2.1 + see COPYING and AUTHORS files in distribution or http://mpg123.org + initially written by Michael Hipp, generalized by Thomas Orgis + + This header is used multiple times to create different variants of these functions. + See decode.c and synth.h . + Hint: BLOCK, MONO_NAME, MONO2STEREO_NAME, SYNTH_NAME and SAMPLE_T do vary. + + Thomas looked closely at the decode_1to1, decode_2to1 and decode_4to1 contents, seeing that they are too similar to be separate files. + This is what resulted... + + Reason to separate this from synth.h: + There are decoders that have a special synth_1to1 but still can use these generic derivations for the mono stuff. + It generally makes a good deal of sense to set SYNTH_NAME to opt_synth_1to1(fr) (or opt_synth_2to1(fr), etc.). +*/ + +/* Mono synth, wrapping over SYNTH_NAME */ +int MONO_NAME(real *bandPtr, mpg123_handle *fr) +{ + SAMPLE_T samples_tmp[BLOCK]; + SAMPLE_T *tmp1 = samples_tmp; + int i,ret; + + /* save buffer stuff, trick samples_tmp into there, decode, restore */ + unsigned char *samples = fr->buffer.data; + int pnt = fr->buffer.fill; + fr->buffer.data = (unsigned char*) samples_tmp; + fr->buffer.fill = 0; + ret = SYNTH_NAME(bandPtr, 0, fr, 0); /* decode into samples_tmp */ + fr->buffer.data = samples; /* restore original value */ + + /* now append samples from samples_tmp */ + samples += pnt; /* just the next mem in frame buffer */ + for(i=0;i<(BLOCK/2);i++) + { + *( (SAMPLE_T *)samples) = *tmp1; + samples += sizeof(SAMPLE_T); + tmp1 += 2; + } + fr->buffer.fill = pnt + (BLOCK/2)*sizeof(SAMPLE_T); + + return ret; +} + +/* Mono to stereo synth, wrapping over SYNTH_NAME */ +int MONO2STEREO_NAME(real *bandPtr, mpg123_handle *fr) +{ + int i,ret; + unsigned char *samples = fr->buffer.data; + + ret = SYNTH_NAME(bandPtr,0,fr,1); + samples += fr->buffer.fill - BLOCK*sizeof(SAMPLE_T); + + for(i=0;i<(BLOCK/2);i++) + { + ((SAMPLE_T *)samples)[1] = ((SAMPLE_T *)samples)[0]; + samples+=2*sizeof(SAMPLE_T); + } + + return ret; +} diff --git a/include/reactos/libs/libmpg123/synth_ntom.h b/include/reactos/libs/libmpg123/synth_ntom.h new file mode 100644 index 00000000000..6142778754b --- /dev/null +++ b/include/reactos/libs/libmpg123/synth_ntom.h @@ -0,0 +1,213 @@ +/* + synth_ntom.h: ntom-resampling synth functions + + This header is used multiple times to create different variants of this function. + Hint: MONO_NAME, MONO2STEREO_NAME, SYNTH_NAME and SAMPLE_T as well as WRITE_SAMPLE do vary. + + copyright 1995-2008 by the mpg123 project - free software under the terms of the LGPL 2.1 + see COPYING and AUTHORS files in distribution or http://mpg123.org + initially written by Michael Hipp, generalized by Thomas Orgis + + Well, this is very simple resampling... you may or may not like what you hear. + But it's cheap. + But still, we don't implement a non-autoincrement version of this one. +*/ + +/* Note: These mono functions would also work generically, + it's just that they need a runtime calculation for the conversion loop... + The fixed XtoY functions have the chance for loop unrolling... */ + +int MONO_NAME(real *bandPtr, mpg123_handle *fr) +{ + SAMPLE_T samples_tmp[8*64]; + SAMPLE_T *tmp1 = samples_tmp; + size_t i; + int ret; + + size_t pnt = fr->buffer.fill; + unsigned char *samples = fr->buffer.data; + fr->buffer.data = (unsigned char*) samples_tmp; + fr->buffer.fill = 0; + ret = SYNTH_NAME(bandPtr, 0, fr, 1); + fr->buffer.data = samples; + + samples += pnt; + for(i=0;i<(fr->buffer.fill/(2*sizeof(SAMPLE_T)));i++) + { + *( (SAMPLE_T *)samples) = *tmp1; + samples += sizeof(SAMPLE_T); + tmp1 += 2; + } + fr->buffer.fill = pnt + (fr->buffer.fill/2); + + return ret; +} + + +int MONO2STEREO_NAME(real *bandPtr, mpg123_handle *fr) +{ + size_t i; + int ret; + size_t pnt1 = fr->buffer.fill; + unsigned char *samples = fr->buffer.data + pnt1; + + ret = SYNTH_NAME(bandPtr, 0, fr, 1); + + for(i=0;i<((fr->buffer.fill-pnt1)/(2*sizeof(SAMPLE_T)));i++) + { + ((SAMPLE_T *)samples)[1] = ((SAMPLE_T *)samples)[0]; + samples+=2*sizeof(SAMPLE_T); + } + + return ret; +} + + +int SYNTH_NAME(real *bandPtr,int channel, mpg123_handle *fr, int final) +{ + static const int step = 2; + SAMPLE_T *samples = (SAMPLE_T *) (fr->buffer.data + fr->buffer.fill); + + real *b0, **buf; /* (*buf)[0x110]; */ + int clip = 0; + int bo1; + int ntom; + + if(fr->have_eq_settings) do_equalizer(bandPtr,channel,fr->equalizer); + + if(!channel) + { + fr->bo--; + fr->bo &= 0xf; + buf = fr->real_buffs[0]; + ntom = fr->ntom_val[1] = fr->ntom_val[0]; + } + else + { + samples++; + buf = fr->real_buffs[1]; + ntom = fr->ntom_val[1]; + } + + if(fr->bo & 0x1) + { + b0 = buf[0]; + bo1 = fr->bo; + dct64(buf[1]+((fr->bo+1)&0xf),buf[0]+fr->bo,bandPtr); + } + else + { + b0 = buf[1]; + bo1 = fr->bo+1; + dct64(buf[0]+fr->bo,buf[1]+fr->bo+1,bandPtr); + } + + { + register int j; + real *window = fr->decwin + 16 - bo1; + + for (j=16;j;j--,window+=0x10) + { + real sum; + + ntom += fr->ntom_step; + if(ntom < NTOM_MUL) + { + window += 16; + b0 += 16; + continue; + } + + sum = REAL_MUL_SYNTH(*window++, *b0++); + sum -= REAL_MUL_SYNTH(*window++, *b0++); + sum += REAL_MUL_SYNTH(*window++, *b0++); + sum -= REAL_MUL_SYNTH(*window++, *b0++); + sum += REAL_MUL_SYNTH(*window++, *b0++); + sum -= REAL_MUL_SYNTH(*window++, *b0++); + sum += REAL_MUL_SYNTH(*window++, *b0++); + sum -= REAL_MUL_SYNTH(*window++, *b0++); + sum += REAL_MUL_SYNTH(*window++, *b0++); + sum -= REAL_MUL_SYNTH(*window++, *b0++); + sum += REAL_MUL_SYNTH(*window++, *b0++); + sum -= REAL_MUL_SYNTH(*window++, *b0++); + sum += REAL_MUL_SYNTH(*window++, *b0++); + sum -= REAL_MUL_SYNTH(*window++, *b0++); + sum += REAL_MUL_SYNTH(*window++, *b0++); + sum -= REAL_MUL_SYNTH(*window++, *b0++); + + while(ntom >= NTOM_MUL) + { + WRITE_SAMPLE(samples,sum,clip); + samples += step; + ntom -= NTOM_MUL; + } + } + + ntom += fr->ntom_step; + if(ntom >= NTOM_MUL) + { + real sum; + sum = REAL_MUL_SYNTH(window[0x0], b0[0x0]); + sum += REAL_MUL_SYNTH(window[0x2], b0[0x2]); + sum += REAL_MUL_SYNTH(window[0x4], b0[0x4]); + sum += REAL_MUL_SYNTH(window[0x6], b0[0x6]); + sum += REAL_MUL_SYNTH(window[0x8], b0[0x8]); + sum += REAL_MUL_SYNTH(window[0xA], b0[0xA]); + sum += REAL_MUL_SYNTH(window[0xC], b0[0xC]); + sum += REAL_MUL_SYNTH(window[0xE], b0[0xE]); + + while(ntom >= NTOM_MUL) + { + WRITE_SAMPLE(samples,sum,clip); + samples += step; + ntom -= NTOM_MUL; + } + } + + b0-=0x10,window-=0x20; + window += bo1<<1; + + for (j=15;j;j--,b0-=0x20,window-=0x10) + { + real sum; + + ntom += fr->ntom_step; + if(ntom < NTOM_MUL) + { + window -= 16; + b0 += 16; + continue; + } + + sum = REAL_MUL_SYNTH(-*(--window), *b0++); + sum -= REAL_MUL_SYNTH(*(--window), *b0++); + sum -= REAL_MUL_SYNTH(*(--window), *b0++); + sum -= REAL_MUL_SYNTH(*(--window), *b0++); + sum -= REAL_MUL_SYNTH(*(--window), *b0++); + sum -= REAL_MUL_SYNTH(*(--window), *b0++); + sum -= REAL_MUL_SYNTH(*(--window), *b0++); + sum -= REAL_MUL_SYNTH(*(--window), *b0++); + sum -= REAL_MUL_SYNTH(*(--window), *b0++); + sum -= REAL_MUL_SYNTH(*(--window), *b0++); + sum -= REAL_MUL_SYNTH(*(--window), *b0++); + sum -= REAL_MUL_SYNTH(*(--window), *b0++); + sum -= REAL_MUL_SYNTH(*(--window), *b0++); + sum -= REAL_MUL_SYNTH(*(--window), *b0++); + sum -= REAL_MUL_SYNTH(*(--window), *b0++); + sum -= REAL_MUL_SYNTH(*(--window), *b0++); + + while(ntom >= NTOM_MUL) + { + WRITE_SAMPLE(samples,sum,clip); + samples += step; + ntom -= NTOM_MUL; + } + } + } + + fr->ntom_val[channel] = ntom; + if(final) fr->buffer.fill = ((unsigned char *) samples - fr->buffer.data - (channel ? sizeof(SAMPLE_T) : 0)); + + return clip; +} + diff --git a/include/reactos/libs/libmpg123/synth_sse3d.h b/include/reactos/libs/libmpg123/synth_sse3d.h new file mode 100644 index 00000000000..47a1ba9c983 --- /dev/null +++ b/include/reactos/libs/libmpg123/synth_sse3d.h @@ -0,0 +1,246 @@ +/* + decode_sse3d: Synth for SSE and extended 3DNow (yeah, the name is a relic) + + copyright 2006-2007 by Zuxy Meng/the mpg123 project - free software under the terms of the LGPL 2.1 + see COPYING and AUTHORS files in distribution or http://mpg123.org + initially written by the mysterious higway for MMX (apparently) + then developed into SSE opt by Zuxy Meng, also building on Romain Dolbeau's AltiVec + Both have agreed to distribution under LGPL 2.1 . + + Transformed back into standalone asm, with help of + gcc -S -DHAVE_CONFIG_H -I. -march=pentium -O3 -Wall -pedantic -fno-strict-aliasing -DREAL_IS_FLOAT -c -o decode_mmxsse.{S,c} + + The difference between SSE and 3DNowExt is the dct64 function and the synth function name. + This template here uses the SYNTH_NAME and MPL_DCT64 macros for this - see decode_sse.S and decode_3dnowext.S... + That's not memory efficient since there's doubled code, but it's easier than giving another function pointer. + Maybe I'll change it in future, but now I need something that works. + + Original comment from MPlayer source follows: +*/ + +/* + * this code comes under GPL + * This code was taken from http://www.mpg123.org + * See ChangeLog of mpg123-0.59s-pre.1 for detail + * Applied to mplayer by Nick Kurshev + * + * Local ChangeLog: + * - Partial loops unrolling and removing MOVW insn from loops +*/ + +#include "mangle.h" + + .data + ALIGN8 +one_null: + .long -65536 + .long -65536 + ALIGN8 +null_one: + .long 65535 + .long 65535 + + .text + ALIGN16 + /* void SYNTH_NAME(real *bandPtr, int channel, short *samples, short *buffs, int *bo, float *decwins) */ +.globl SYNTH_NAME +SYNTH_NAME: + pushl %ebp +/* stack:0=ebp 4=back 8=bandptr 12=channel 16=samples 20=buffs 24=bo 28=decwins */ + movl %esp, %ebp +/* Now the old stack addresses are preserved via %epb. */ + subl $4,%esp /* What has been called temp before. */ + pushl %edi + pushl %esi + pushl %ebx +#define TEMP 12(%esp) +/* APP */ + movl 12(%ebp),%ecx + movl 16(%ebp),%edi + movl $15,%ebx + movl 24(%ebp),%edx + leal (%edi,%ecx,2),%edi + decl %ecx + movl 20(%ebp),%esi + movl (%edx),%eax + jecxz .L01 + decl %eax + andl %ebx,%eax + leal 1088(%esi),%esi + movl %eax,(%edx) + .L01: + leal (%esi,%eax,2),%edx + movl %eax,TEMP + incl %eax + andl %ebx,%eax + leal 544(%esi,%eax,2),%ecx + incl %ebx + testl $1, %eax + jnz .L02 + xchgl %edx,%ecx + incl TEMP + leal 544(%esi),%esi + .L02: + pushl 8(%ebp) + pushl %edx + pushl %ecx + call MPL_DCT64 + addl $12, %esp + leal 1(%ebx), %ecx + subl TEMP,%ebx + pushl %ecx + /* leal ASM_NAME(decwins)(%ebx,%ebx,1), %edx */ + movl 28(%ebp),%ecx + leal (%ecx,%ebx,2), %edx + movl (%esp),%ecx /* restore, but leave value on stack */ + shrl $1, %ecx + ALIGN16 + .L03: + movq (%edx),%mm0 + movq 64(%edx),%mm4 + pmaddwd (%esi),%mm0 + pmaddwd 32(%esi),%mm4 + movq 8(%edx),%mm1 + movq 72(%edx),%mm5 + pmaddwd 8(%esi),%mm1 + pmaddwd 40(%esi),%mm5 + movq 16(%edx),%mm2 + movq 80(%edx),%mm6 + pmaddwd 16(%esi),%mm2 + pmaddwd 48(%esi),%mm6 + movq 24(%edx),%mm3 + movq 88(%edx),%mm7 + pmaddwd 24(%esi),%mm3 + pmaddwd 56(%esi),%mm7 + paddd %mm1,%mm0 + paddd %mm5,%mm4 + paddd %mm2,%mm0 + paddd %mm6,%mm4 + paddd %mm3,%mm0 + paddd %mm7,%mm4 + movq %mm0,%mm1 + movq %mm4,%mm5 + psrlq $32,%mm1 + psrlq $32,%mm5 + paddd %mm1,%mm0 + paddd %mm5,%mm4 + psrad $13,%mm0 + psrad $13,%mm4 + packssdw %mm0,%mm0 + packssdw %mm4,%mm4 + movq (%edi), %mm1 + punpckldq %mm4, %mm0 + pand one_null, %mm1 + pand null_one, %mm0 + por %mm0, %mm1 + movq %mm1,(%edi) + leal 64(%esi),%esi + leal 128(%edx),%edx + leal 8(%edi),%edi + decl %ecx + jnz .L03 + popl %ecx + andl $1, %ecx + jecxz .next_loop + movq (%edx),%mm0 + pmaddwd (%esi),%mm0 + movq 8(%edx),%mm1 + pmaddwd 8(%esi),%mm1 + movq 16(%edx),%mm2 + pmaddwd 16(%esi),%mm2 + movq 24(%edx),%mm3 + pmaddwd 24(%esi),%mm3 + paddd %mm1,%mm0 + paddd %mm2,%mm0 + paddd %mm3,%mm0 + movq %mm0,%mm1 + psrlq $32,%mm1 + paddd %mm1,%mm0 + psrad $13,%mm0 + packssdw %mm0,%mm0 + movd %mm0,%eax + movw %ax, (%edi) + leal 32(%esi),%esi + leal 64(%edx),%edx + leal 4(%edi),%edi + .next_loop: + subl $64,%esi + movl $7,%ecx + ALIGN16 + .L04: + movq (%edx),%mm0 + movq 64(%edx),%mm4 + pmaddwd (%esi),%mm0 + pmaddwd -32(%esi),%mm4 + movq 8(%edx),%mm1 + movq 72(%edx),%mm5 + pmaddwd 8(%esi),%mm1 + pmaddwd -24(%esi),%mm5 + movq 16(%edx),%mm2 + movq 80(%edx),%mm6 + pmaddwd 16(%esi),%mm2 + pmaddwd -16(%esi),%mm6 + movq 24(%edx),%mm3 + movq 88(%edx),%mm7 + pmaddwd 24(%esi),%mm3 + pmaddwd -8(%esi),%mm7 + paddd %mm1,%mm0 + paddd %mm5,%mm4 + paddd %mm2,%mm0 + paddd %mm6,%mm4 + paddd %mm3,%mm0 + paddd %mm7,%mm4 + movq %mm0,%mm1 + movq %mm4,%mm5 + psrlq $32,%mm1 + psrlq $32,%mm5 + paddd %mm0,%mm1 + paddd %mm4,%mm5 + psrad $13,%mm1 + psrad $13,%mm5 + packssdw %mm1,%mm1 + packssdw %mm5,%mm5 + psubd %mm0,%mm0 + psubd %mm4,%mm4 + psubsw %mm1,%mm0 + psubsw %mm5,%mm4 + movq (%edi), %mm1 + punpckldq %mm4, %mm0 + pand one_null, %mm1 + pand null_one, %mm0 + por %mm0, %mm1 + movq %mm1,(%edi) + subl $64,%esi + addl $128,%edx + leal 8(%edi),%edi + decl %ecx + jnz .L04 + movq (%edx),%mm0 + pmaddwd (%esi),%mm0 + movq 8(%edx),%mm1 + pmaddwd 8(%esi),%mm1 + movq 16(%edx),%mm2 + pmaddwd 16(%esi),%mm2 + movq 24(%edx),%mm3 + pmaddwd 24(%esi),%mm3 + paddd %mm1,%mm0 + paddd %mm2,%mm0 + paddd %mm3,%mm0 + movq %mm0,%mm1 + psrlq $32,%mm1 + paddd %mm0,%mm1 + psrad $13,%mm1 + packssdw %mm1,%mm1 + psubd %mm0,%mm0 + psubsw %mm1,%mm0 + movd %mm0,%eax + movw %ax,(%edi) + emms + +/* NO_APP */ + popl %ebx + popl %esi + popl %edi + addl $4,%esp + popl %ebp + ret diff --git a/include/reactos/libs/libmpg123/synths.h b/include/reactos/libs/libmpg123/synths.h new file mode 100644 index 00000000000..41134450cb2 --- /dev/null +++ b/include/reactos/libs/libmpg123/synths.h @@ -0,0 +1,52 @@ +#ifndef MPG123_SYNTH_H +#define MPG123_SYNTH_H + +/* This is included inside frame.h, which is included in mpg123lib_intern.h, + at the appropriate place. + Explicit header inclusions here would cause circular dependencies. */ + +/* The handle needs these types for selecting the decoding routine at runtime. + Not just for optimization, mainly for XtoY, mono/stereo. */ +typedef int (*func_synth)(real *,int, mpg123_handle *,int ); +typedef int (*func_synth_mono)(real *, mpg123_handle *); +typedef int (*func_synth_stereo)(real *, real *, mpg123_handle *); +enum synth_channel { c_plain=0, c_stereo, c_mono2stereo, c_mono, c_limit }; +enum synth_resample +{ + r_none=-1 + ,r_1to1=0 +# ifndef NO_DOWNSAMPLE + ,r_2to1 + ,r_4to1 +# endif +# ifndef NO_NTOM + ,r_ntom +# endif + ,r_limit +}; +enum synth_format +{ + f_none=-1 +# ifndef NO_16BIT + ,f_16 +# endif +# ifndef NO_8BIT + ,f_8 +# endif +# ifndef NO_REAL + ,f_real +# endif +# ifndef NO_32BIT + ,f_32 +# endif + ,f_limit +}; +struct synth_s +{ + func_synth plain[r_limit][f_limit]; + func_synth_stereo stereo[r_limit][f_limit]; + func_synth_mono mono2stereo[r_limit][f_limit]; + func_synth_mono mono[r_limit][f_limit]; +}; + +#endif diff --git a/include/reactos/libs/libmpg123/true.h b/include/reactos/libs/libmpg123/true.h new file mode 100644 index 00000000000..f40452cee57 --- /dev/null +++ b/include/reactos/libs/libmpg123/true.h @@ -0,0 +1,14 @@ +/* + true: a trivial truth + + copyright ?-2007 by the mpg123 project - free software under the terms of the LGPL 2.1 + see COPYING and AUTHORS files in distribution or http:#mpg123.org +*/ + +#ifndef MPG123_H_TRUE +#define MPG123_H_TRUE + +#define FALSE 0 +#define TRUE 1 + +#endif diff --git a/include/reactos/mc/bugcodes.mc b/include/reactos/mc/bugcodes.mc index 7665d53bacd..3b4fbab50a8 100644 --- a/include/reactos/mc/bugcodes.mc +++ b/include/reactos/mc/bugcodes.mc @@ -1299,6 +1299,16 @@ restart your computer, press F8 to select Advanced Startup Options, and then select Safe Mode. . +MessageId=0xC6 +Severity=Success +Facility=System +SymbolicName=DRIVER_CAUGHT_MODIFYING_FREED_POOL +Language=English +A device driver attempting to corrupt the system has been caught. +The faulty driver currently on the kernel stack must be replaced +with a working version. +. + MessageId=0xC8 Severity=Success Facility=System diff --git a/include/reactos/win32k/ntgdityp.h b/include/reactos/win32k/ntgdityp.h index 1aedf765dbc..667060b87d6 100644 --- a/include/reactos/win32k/ntgdityp.h +++ b/include/reactos/win32k/ntgdityp.h @@ -192,6 +192,9 @@ typedef DWORD LFTYPE; #define GCABCW_NOFLOAT 0x0001 #define GCABCW_INDICES 0x0002 +// NtGdiGetTextExtent* flags (reactos own) +#define GTEF_INDICES 0x1 + /* CAPS1 support */ #define CAPS1 94 //#define C1_TRANSPARENT 0x0001 diff --git a/include/reactos/wine/config.h b/include/reactos/wine/config.h index 7cc40103902..f24e05a0a0e 100644 --- a/include/reactos/wine/config.h +++ b/include/reactos/wine/config.h @@ -11,6 +11,9 @@ /* Specifies the compiler flag that forces a short wchar_t */ #define CC_FLAG_SHORT_WCHAR "-fshort-wchar" +/* Define to 1 if you have the header file. */ +#define HAVE_MPG123_H 1 + /* Define if you have ALSA 1.x including devel headers */ /* #undef HAVE_ALSA */ @@ -96,37 +99,43 @@ #define HAVE_FPCLASS 1 /* Define if FreeType 2 is installed */ -/* #undef HAVE_FREETYPE */ +#define HAVE_FREETYPE 1 /* Define to 1 if you have the header file. */ -/* #undef HAVE_FREETYPE_FREETYPE_H */ +#define HAVE_FREETYPE_FREETYPE_H 1 /* Define to 1 if you have the header file. */ -/* #undef HAVE_FREETYPE_FTGLYPH_H */ +#define HAVE_FREETYPE_FTGLYPH_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_FREETYPE_FTLCDFIL_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_FREETYPE_FTMODAPI_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_FREETYPE_FTNAMES_H */ /* Define to 1 if you have the header file. */ -/* #undef HAVE_FREETYPE_FTOUTLN_H */ +#define HAVE_FREETYPE_FTOUTLN_H 1 /* Define to 1 if you have the header file. */ -/* #undef HAVE_FREETYPE_FTSNAMES_H */ +#define HAVE_FREETYPE_FTSNAMES_H 1 /* Define if you have the header file. */ -/* #undef HAVE_FREETYPE_FTTRIGON_H */ +#define HAVE_FREETYPE_FTTRIGON_H 1 /* Define to 1 if you have the header file. */ -/* #undef HAVE_FREETYPE_FTWINFNT_H */ +#define HAVE_FREETYPE_FTWINFNT_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_FREETYPE_INTERNAL_SFNT_H */ /* Define to 1 if you have the header file. */ -/* #undef HAVE_FREETYPE_TTNAMEID_H */ +#define HAVE_FREETYPE_TTNAMEID_H 1 /* Define to 1 if you have the header file. */ -/* #undef HAVE_FREETYPE_TTTABLES_H */ +#define HAVE_FREETYPE_TTTABLES_H 1 /* Define to 1 if the system has the type `fsblkcnt_t'. */ /* #undef HAVE_FSBLKCNT_T */ @@ -141,7 +150,13 @@ /* #undef HAVE_FSTATVFS */ /* Define to 1 if you have the header file. */ -/* #undef HAVE_FT2BUILD_H */ +#define HAVE_FT2BUILD_H 1 + +/* Define to 1 if you have the `FT_Load_Sfnt_Table' function. */ +/* #undef HAVE_FT_LOAD_SFNT_TABLE */ + +/* Define to 1 if the system has the type `FT_TrueTypeEngineType'. */ +#define HAVE_FT_TRUETYPEENGINETYPE 1 /* Define to 1 if you have the `ftruncate' function. */ #define HAVE_FTRUNCATE 1 diff --git a/include/reactos/wine/ddk/imm.h b/include/reactos/wine/ddk/imm.h new file mode 100644 index 00000000000..29242f38279 --- /dev/null +++ b/include/reactos/wine/ddk/imm.h @@ -0,0 +1,52 @@ + +#ifndef _WINE_IMM_H_ +#define _WINE_IMM_H_ + +#include + +#ifdef WINE_NO_UNICODE_MACROS +# define WINELIB_NAME_AW(func) \ + func##_must_be_suffixed_with_W_or_A_in_this_context \ + func##_must_be_suffixed_with_W_or_A_in_this_context +#else /* WINE_NO_UNICODE_MACROS */ +# ifdef UNICODE +# define WINELIB_NAME_AW(func) func##W +# else +# define WINELIB_NAME_AW(func) func##A +# endif +#endif /* WINE_NO_UNICODE_MACROS */ + +#ifdef WINE_NO_UNICODE_MACROS +# define DECL_WINELIB_TYPE_AW(type) /* nothing */ +#else +# define DECL_WINELIB_TYPE_AW(type) typedef WINELIB_NAME_AW(type) type; +#endif + +#include + +typedef struct _tagINPUTCONTEXT { + HWND hWnd; + BOOL fOpen; + POINT ptStatusWndPos; + POINT ptSoftKbdPos; + DWORD fdwConversion; + DWORD fdwSentence; + union { + LOGFONTA A; + LOGFONTW W; + } lfFont; + COMPOSITIONFORM cfCompForm; + CANDIDATEFORM cfCandForm[4]; + HIMCC hCompStr; + HIMCC hCandInfo; + HIMCC hGuideLine; + HIMCC hPrivate; + DWORD dwNumMsgBuf; + HIMCC hMsgBuf; + DWORD fdwInit; + DWORD dwReserve[3]; +} INPUTCONTEXT, *LPINPUTCONTEXT; + +LPINPUTCONTEXT WINAPI ImmLockIMC(HIMC); + +#endif /* _WINE_IMM_H_ */ diff --git a/include/reactos/wine/imm.h b/include/reactos/wine/imm.h new file mode 100644 index 00000000000..a41831db33f --- /dev/null +++ b/include/reactos/wine/imm.h @@ -0,0 +1,2 @@ + +#include "ddk/imm.h" diff --git a/include/reactos/wine/test.h b/include/reactos/wine/test.h index 8c07c7d84d8..fdf3c886ec5 100644 --- a/include/reactos/wine/test.h +++ b/include/reactos/wine/test.h @@ -237,8 +237,7 @@ static tls_data* get_tls_data(void) data=TlsGetValue(tls_index); if (!data) { - data=HeapAlloc(GetProcessHeap(), 0, sizeof(tls_data)); - data->todo_level = 0; + data=HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(tls_data)); data->str_pos = data->strings; TlsSetValue(tls_index,data); } @@ -593,6 +592,8 @@ int main( int argc, char **argv ) if (GetEnvironmentVariableA( "WINETEST_INTERACTIVE", p, sizeof(p) )) winetest_interactive = atoi(p); if (GetEnvironmentVariableA( "WINETEST_REPORT_SUCCESS", p, sizeof(p) )) report_success = atoi(p); + if (!winetest_interactive) SetErrorMode( SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX ); + if (!argv[1]) { if (winetest_testlist[0].name && !winetest_testlist[1].name) /* only one test */ diff --git a/include/reactos/wine/windef16.h b/include/reactos/wine/windef16.h index 002eeaa7e5d..07f13fc5463 100644 --- a/include/reactos/wine/windef16.h +++ b/include/reactos/wine/windef16.h @@ -28,7 +28,9 @@ #endif #include #include -#include +#ifndef _NTNDK_ +#include // ROS Hack +#endif /* Standard data types */ typedef unsigned short BOOL16; diff --git a/include/reactos/wine/wingdi16.h b/include/reactos/wine/wingdi16.h index abd6ccd41fe..95b1e286ad5 100644 --- a/include/reactos/wine/wingdi16.h +++ b/include/reactos/wine/wingdi16.h @@ -27,6 +27,24 @@ #include +typedef struct +{ + INT16 lfHeight; + INT16 lfWidth; + INT16 lfEscapement; + INT16 lfOrientation; + INT16 lfWeight; + BYTE lfItalic; + BYTE lfUnderline; + BYTE lfStrikeOut; + BYTE lfCharSet; + BYTE lfOutPrecision; + BYTE lfClipPrecision; + BYTE lfQuality; + BYTE lfPitchAndFamily; + CHAR lfFaceName[LF_FACESIZE]; +} LOGFONT16, *LPLOGFONT16; + typedef struct { INT16 mm; diff --git a/include/xdk/exfuncs.h b/include/xdk/exfuncs.h index a12f35406e3..433909c0af2 100644 --- a/include/xdk/exfuncs.h +++ b/include/xdk/exfuncs.h @@ -114,7 +114,11 @@ ExpInterlockedPushEntrySList( #else /* !defined(_WIN64) */ +#ifdef NONAMELESSUNION +#define ExQueryDepthSList(listhead) (listhead)->s.Depth +#else #define ExQueryDepthSList(listhead) (listhead)->Depth +#endif NTKERNELAPI PSINGLE_LIST_ENTRY @@ -171,6 +175,15 @@ ExAllocateFromPagedLookasideList( PVOID Entry; Lookaside->L.TotalAllocates++; +#ifdef NONAMELESSUNION + Entry = InterlockedPopEntrySList(&Lookaside->L.u.ListHead); + if (Entry == NULL) { + Lookaside->L.u2.AllocateMisses++; + Entry = (Lookaside->L.u4.Allocate)(Lookaside->L.Type, + Lookaside->L.Size, + Lookaside->L.Tag); + } +#else /* NONAMELESSUNION */ Entry = InterlockedPopEntrySList(&Lookaside->L.ListHead); if (Entry == NULL) { Lookaside->L.AllocateMisses++; @@ -178,6 +191,7 @@ ExAllocateFromPagedLookasideList( Lookaside->L.Size, Lookaside->L.Tag); } +#endif /* NONAMELESSUNION */ return Entry; } @@ -188,12 +202,21 @@ ExFreeToPagedLookasideList( IN PVOID Entry) { Lookaside->L.TotalFrees++; +#ifdef NONAMELESSUNION + if (ExQueryDepthSList(&Lookaside->L.u.ListHead) >= Lookaside->L.Depth) { + Lookaside->L.u3.FreeMisses++; + (Lookaside->L.u5.Free)(Entry); + } else { + InterlockedPushEntrySList(&Lookaside->L.u.ListHead, (PSLIST_ENTRY)Entry); + } +#else /* NONAMELESSUNION */ if (ExQueryDepthSList(&Lookaside->L.ListHead) >= Lookaside->L.Depth) { Lookaside->L.FreeMisses++; (Lookaside->L.Free)(Entry); } else { InterlockedPushEntrySList(&Lookaside->L.ListHead, (PSLIST_ENTRY)Entry); } +#endif /* NONAMELESSUNION */ } #endif /* _WIN2K_COMPAT_SLIST_USAGE */ @@ -1002,6 +1025,16 @@ ExAllocateFromLookasideListEx( PVOID Entry; Lookaside->L.TotalAllocates += 1; +#ifdef NONAMELESSUNION + Entry = InterlockedPopEntrySList(&Lookaside->L.u.ListHead); + if (Entry == NULL) { + Lookaside->L.u2.AllocateMisses += 1; + Entry = (Lookaside->L.u4.AllocateEx)(Lookaside->L.Type, + Lookaside->L.Size, + Lookaside->L.Tag, + Lookaside); + } +#else /* NONAMELESSUNION */ Entry = InterlockedPopEntrySList(&Lookaside->L.ListHead); if (Entry == NULL) { Lookaside->L.AllocateMisses += 1; @@ -1010,6 +1043,7 @@ ExAllocateFromLookasideListEx( Lookaside->L.Tag, Lookaside); } +#endif /* NONAMELESSUNION */ return Entry; } @@ -1052,6 +1086,20 @@ ExAllocateFromNPagedLookasideList( PVOID Entry; Lookaside->L.TotalAllocates++; +#ifdef NONAMELESSUNION +#if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_) + Entry = ExInterlockedPopEntrySList(&Lookaside->L.u.ListHead, + &Lookaside->Lock__ObsoleteButDoNotDelete); +#else + Entry = InterlockedPopEntrySList(&Lookaside->L.u.ListHead); +#endif + if (Entry == NULL) { + Lookaside->L.u2.AllocateMisses++; + Entry = (Lookaside->L.u4.Allocate)(Lookaside->L.Type, + Lookaside->L.Size, + Lookaside->L.Tag); + } +#else /* NONAMELESSUNION */ #if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_) Entry = ExInterlockedPopEntrySList(&Lookaside->L.ListHead, &Lookaside->Lock__ObsoleteButDoNotDelete); @@ -1064,6 +1112,7 @@ ExAllocateFromNPagedLookasideList( Lookaside->L.Size, Lookaside->L.Tag); } +#endif /* NONAMELESSUNION */ return Entry; } @@ -1073,6 +1122,20 @@ ExFreeToNPagedLookasideList( IN PVOID Entry) { Lookaside->L.TotalFrees++; +#ifdef NONAMELESSUNION + if (ExQueryDepthSList(&Lookaside->L.u.ListHead) >= Lookaside->L.Depth) { + Lookaside->L.u3.FreeMisses++; + (Lookaside->L.u5.Free)(Entry); + } else { +#if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_) + ExInterlockedPushEntrySList(&Lookaside->L.u.ListHead, + (PSLIST_ENTRY)Entry, + &Lookaside->Lock__ObsoleteButDoNotDelete); +#else + InterlockedPushEntrySList(&Lookaside->L.u.ListHead, (PSLIST_ENTRY)Entry); +#endif + } +#else /* NONAMELESSUNION */ if (ExQueryDepthSList(&Lookaside->L.ListHead) >= Lookaside->L.Depth) { Lookaside->L.FreeMisses++; (Lookaside->L.Free)(Entry); @@ -1085,6 +1148,7 @@ ExFreeToNPagedLookasideList( InterlockedPushEntrySList(&Lookaside->L.ListHead, (PSLIST_ENTRY)Entry); #endif } +#endif /* NONAMELESSUNION */ } -$endif (_WDMDDK_) +$endif (_WDMDDK_) diff --git a/include/xdk/iofuncs.h b/include/xdk/iofuncs.h index 32b473e6e72..5116cd685e0 100644 --- a/include/xdk/iofuncs.h +++ b/include/xdk/iofuncs.h @@ -2435,7 +2435,11 @@ IoSkipCurrentIrpStackLocation( { ASSERT(Irp->CurrentLocation <= Irp->StackCount); Irp->CurrentLocation++; +#ifdef NONAMELESSUNION + Irp->Tail.Overlay.s.u.CurrentStackLocation++; +#else Irp->Tail.Overlay.CurrentStackLocation++; +#endif } FORCEINLINE @@ -2445,7 +2449,11 @@ IoSetNextIrpStackLocation( { ASSERT(Irp->CurrentLocation > 0); Irp->CurrentLocation--; +#ifdef NONAMELESSUNION + Irp->Tail.Overlay.s.u.CurrentStackLocation--; +#else Irp->Tail.Overlay.CurrentStackLocation--; +#endif } FORCEINLINE @@ -2454,7 +2462,11 @@ IoGetNextIrpStackLocation( IN PIRP Irp) { ASSERT(Irp->CurrentLocation > 0); +#ifdef NONAMELESSUNION + return ((Irp)->Tail.Overlay.s.u.CurrentStackLocation - 1 ); +#else return ((Irp)->Tail.Overlay.CurrentStackLocation - 1 ); +#endif } FORCEINLINE @@ -2545,7 +2557,11 @@ IoGetCurrentIrpStackLocation( IN PIRP Irp) { ASSERT(Irp->CurrentLocation <= Irp->StackCount + 1); +#ifdef NONAMELESSUNION + return Irp->Tail.Overlay.s.u.CurrentStackLocation; +#else return Irp->Tail.Overlay.CurrentStackLocation; +#endif } FORCEINLINE diff --git a/include/xdk/iotypes.h b/include/xdk/iotypes.h index e519bb9d837..9e1446c2245 100644 --- a/include/xdk/iotypes.h +++ b/include/xdk/iotypes.h @@ -1793,6 +1793,9 @@ $if (_WDMDDK_) #define IRP_DEFER_IO_COMPLETION 0x00000800 #define IRP_OB_QUERY_NAME 0x00001000 #define IRP_HOLD_DEVICE_QUEUE 0x00002000 +/* The following 2 are missing in latest WDK */ +#define IRP_RETRY_IO_COMPLETION 0x00004000 +#define IRP_CLASS_CACHE_OPERATION 0x00008000 #define IRP_QUOTA_CHARGED 0x01 #define IRP_ALLOCATED_MUST_SUCCEED 0x02 @@ -2029,30 +2032,35 @@ typedef struct _SCATTER_GATHER_ELEMENT { ULONG_PTR Reserved; } SCATTER_GATHER_ELEMENT, *PSCATTER_GATHER_ELEMENT; -#if defined(_MSC_EXTENSIONS) +#if defined(_MSC_EXTENSIONS) || defined(__GNUC__) +#if defined(_MSC_VER) #if _MSC_VER >= 1200 #pragma warning(push) #endif #pragma warning(disable:4200) +#endif /* _MSC_VER */ + typedef struct _SCATTER_GATHER_LIST { ULONG NumberOfElements; ULONG_PTR Reserved; SCATTER_GATHER_ELEMENT Elements[1]; } SCATTER_GATHER_LIST, *PSCATTER_GATHER_LIST; +#if defined(_MSC_VER) #if _MSC_VER >= 1200 #pragma warning(pop) #else #pragma warning(default:4200) #endif +#endif /* _MSC_VER */ -#else +#else /* defined(_MSC_EXTENSIONS) || defined(__GNUC__) */ struct _SCATTER_GATHER_LIST; typedef struct _SCATTER_GATHER_LIST SCATTER_GATHER_LIST, *PSCATTER_GATHER_LIST; -#endif +#endif /* defined(_MSC_EXTENSIONS) || defined(__GNUC__) */ typedef NTSTATUS (NTAPI DRIVER_ADD_DEVICE)( diff --git a/include/xdk/ketypes.h b/include/xdk/ketypes.h index ff80f3204e5..86046749953 100644 --- a/include/xdk/ketypes.h +++ b/include/xdk/ketypes.h @@ -678,7 +678,7 @@ typedef struct _KDEVICE_QUEUE { CSHORT Size; LIST_ENTRY DeviceListHead; KSPIN_LOCK Lock; - #if defined(_AMD64_) +# if defined(_AMD64_) _ANONYMOUS_UNION union { BOOLEAN Busy; _ANONYMOUS_STRUCT struct { @@ -686,9 +686,9 @@ typedef struct _KDEVICE_QUEUE { LONG64 Hint:56; } DUMMYSTRUCTNAME; } DUMMYUNIONNAME; - #else +# else BOOLEAN Busy; - #endif +# endif } KDEVICE_QUEUE, *PKDEVICE_QUEUE, *RESTRICTED_POINTER PRKDEVICE_QUEUE; #define TIMER_EXPIRED_INDEX_BITS 6 @@ -810,9 +810,9 @@ typedef struct _KTIMER { ULARGE_INTEGER DueTime; LIST_ENTRY TimerListEntry; struct _KDPC *Dpc; - #if !defined(_X86_) +# if !defined(_X86_) ULONG Processor; - #endif +# endif ULONG Period; } KTIMER, *PKTIMER, *RESTRICTED_POINTER PRKTIMER; diff --git a/include/xdk/wmifuncs.h b/include/xdk/wmifuncs.h index 6279a55ff90..2c841043d5e 100644 --- a/include/xdk/wmifuncs.h +++ b/include/xdk/wmifuncs.h @@ -16,7 +16,7 @@ WmiTraceMessage( #endif #endif /* RUN_WPP */ - #if (NTDDI_VERSION >= NTDDI_WINXP) +#if (NTDDI_VERSION >= NTDDI_WINXP) NTKERNELAPI NTSTATUS @@ -32,7 +32,7 @@ WmiQueryTraceInformation( /* FIXME: Get va_list from where? */ NTKERNELAPI NTSTATUS -__cdecl +NTAPI WmiTraceMessageVa( IN TRACEHANDLE LoggerHandle, IN ULONG MessageFlags, diff --git a/include/xdk/x86/ke.h b/include/xdk/x86/ke.h index 19d42740ee4..96743803284 100644 --- a/include/xdk/x86/ke.h +++ b/include/xdk/x86/ke.h @@ -151,9 +151,15 @@ _KeQueryTickCount( OUT PLARGE_INTEGER CurrentCount) { for (;;) { +#ifdef NONAMELESSUNION + CurrentCount->s.HighPart = KeTickCount.High1Time; + CurrentCount->s.LowPart = KeTickCount.LowPart; + if (CurrentCount->s.HighPart == KeTickCount.High2Time) break; +#else CurrentCount->HighPart = KeTickCount.High1Time; CurrentCount->LowPart = KeTickCount.LowPart; if (CurrentCount->HighPart == KeTickCount.High2Time) break; +#endif YieldProcessor(); } } diff --git a/lib/3rdparty/freetype/freetype.def b/lib/3rdparty/freetype/freetype.def index 1f5895f9b92..9a3a89bfb57 100644 --- a/lib/3rdparty/freetype/freetype.def +++ b/lib/3rdparty/freetype/freetype.def @@ -49,7 +49,7 @@ EXPORTS FT_Get_Char_Index FT_Get_Charmap_Index FT_Get_CID_From_Glyph_Index - FT_Get_CID_Is_Internally_CID_keyed + FT_Get_CID_Is_Internally_CID_Keyed FT_Get_CID_Registry_Ordering_Supplement FT_Get_First_Char FT_Get_FSType_Flags diff --git a/lib/3rdparty/libmpg123/compat.c b/lib/3rdparty/libmpg123/compat.c new file mode 100644 index 00000000000..d32a35db48e --- /dev/null +++ b/lib/3rdparty/libmpg123/compat.c @@ -0,0 +1,150 @@ +/* + compat: Some compatibility functions. + + The mpg123 code is determined to keep it's legacy. A legacy of old, old UNIX. + So anything possibly somewhat advanced should be considered to be put here, with proper #ifdef;-) + + copyright 2007-8 by the mpg123 project - free software under the terms of the LGPL 2.1 + see COPYING and AUTHORS files in distribution or http://mpg123.org + initially written by Thomas Orgis, Windows Unicode stuff by JonY. +*/ + +#include "config.h" +#include "compat.h" + +#ifdef _MSC_VER +#include +#else +#include +#endif + +#ifdef WANT_WIN32_UNICODE +#include +#include +#include +#endif + +#include "debug.h" + +/* A safe realloc also for very old systems where realloc(NULL, size) returns NULL. */ +void *safe_realloc(void *ptr, size_t size) +{ + if(ptr == NULL) return malloc(size); + else return realloc(ptr, size); +} + +#ifndef HAVE_STRERROR +const char *strerror(int errnum) +{ + extern int sys_nerr; + extern char *sys_errlist[]; + + return (errnum < sys_nerr) ? sys_errlist[errnum] : ""; +} +#endif + +#ifndef HAVE_STRDUP +char *strdup(const char *src) +{ + char *dest; + + if (!(dest = (char *) malloc(strlen(src)+1))) + return NULL; + else + return strcpy(dest, src); +} +#endif + +int compat_open(const char *filename, int mode) +{ + int ret; +#if defined (WANT_WIN32_UNICODE) + const wchar_t *frag = NULL; + + ret = win32_utf8_wide(filename, &frag, NULL); + if ((frag == NULL) || (ret == 0)) goto fallback; /* Fallback to plain open when ucs-2 conversion fails */ + + ret = _wopen(frag, mode); /*Try _wopen */ + if (ret != -1 ) goto open_ok; /* msdn says -1 means failure */ + +fallback: +#endif + +#ifdef __MSVCRT__ /* MSDN says POSIX function is deprecated beginning in Visual C++ 2005 */ + ret = _open (filename, mode); /* Try plain old _open(), if it fails, do nothing */ +#else + ret = open (filename, mode); +#endif + +#if defined (WANT_WIN32_UNICODE) +open_ok: + free ((void *)frag); /* Freeing a NULL should be OK */ +#endif + + return ret; +} + +int compat_close(int infd) +{ +#ifdef __MSVCRT__ /* MSDN says POSIX function is deprecated beginning in Visual C++ 2005 */ + return _close(infd); +#else + return close(infd); +#endif +} + +/* Windows Unicode stuff */ + +#ifdef WANT_WIN32_UNICODE +int win32_wide_utf8(const wchar_t * const wptr, const char **const mbptr, size_t * const buflen) +{ + size_t len; + char *buf; + int ret; + + len = WideCharToMultiByte(CP_UTF8, 0, wptr, -1, NULL, 0, NULL, NULL); /* Get utf-8 string length */ + buf = calloc(len, sizeof (char)); /* Can we assume sizeof char always = 1? */ + debug2("win32_wide_utf8 allocated %u bytes at %p", len, buf); + + if(buf != NULL) + { + ret = WideCharToMultiByte(CP_UTF8, 0, wptr, -1, buf, len, NULL, NULL); /*Do actual conversion*/ + *mbptr = buf; /* Set string pointer to allocated buffer */ + if(buflen != NULL) *buflen = len * sizeof (char); /* Give length of allocated memory if needed. */ + + return ret; + } + else + { + if(buflen != NULL) *buflen = 0; + + return 0; + } +} + +int win32_utf8_wide(const char *const mbptr, const wchar_t ** const wptr, size_t * const buflen) +{ + size_t len; + wchar_t *buf; + int ret; + + len = MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, mbptr, -1, NULL, 0); /* Get converted size */ + buf = calloc(len, sizeof (wchar_t)); /* Allocate memory accordingly */ + debug2("win32_utf8_wide allocated %u bytes at %p", len, buf); + + if(buf != NULL) + { + ret = MultiByteToWideChar (CP_UTF8, MB_ERR_INVALID_CHARS, mbptr, -1, buf, len); /* Do conversion */ + *wptr = buf; /* Set string pointer to allocated buffer */ + if (buflen != NULL) *buflen = len * sizeof (wchar_t); /* Give length of allocated memory if needed. */ + + return ret; + } + else + { + if (buflen != NULL) *buflen = 0; + + return 0; + } +} +#endif diff --git a/lib/3rdparty/libmpg123/dct36_3dnow.S b/lib/3rdparty/libmpg123/dct36_3dnow.S new file mode 100644 index 00000000000..644204f5f15 --- /dev/null +++ b/lib/3rdparty/libmpg123/dct36_3dnow.S @@ -0,0 +1,505 @@ +/* + dct64_3dnow.s: Replacement of dct36() with AMD's 3DNow! SIMD operations support + + copyright ?-2006 by the mpg123 project - free software under the terms of the LGPL 2.1 + see COPYING and AUTHORS files in distribution or http://mpg123.org + initially written by Syuuhei Kashiyama + + This code based 'dct36_3dnow.s' by Syuuhei Kashiyama + ,only two types of changes have been made: + + - remove PREFETCH instruction for speedup + - change function name for support 3DNow! automatic detect + + You can find Kashiyama's original 3dnow! support patch + (for mpg123-0.59o) at + http://user.ecc.u-tokyo.ac.jp/~g810370/linux-simd/ (Japanese). + + by KIMURA Takuhiro - until 31.Mar.1999 + - after 1.Apr.1999 + + Replacement of dct36() with AMD's 3DNow! SIMD operations support + + Syuuhei Kashiyama + + The author of this program disclaim whole expressed or implied + warranties with regard to this program, and in no event shall the + author of this program liable to whatever resulted from the use of + this program. Use it at your own risk. +*/ + +#include "mangle.h" + + .globl ASM_NAME(dct36_3dnow) +/* .type ASM_NAME(dct36_3dnow),@function */ +ASM_NAME(dct36_3dnow): + pushl %ebp + movl %esp,%ebp + subl $120,%esp + pushl %esi + pushl %ebx + movl 8(%ebp),%eax + movl 12(%ebp),%esi + movl 16(%ebp),%ecx + movl 20(%ebp),%edx + movl 24(%ebp),%ebx + leal -128(%ebp),%esp + + femms + movq (%eax),%mm0 + movq 4(%eax),%mm1 + pfadd %mm1,%mm0 + movq %mm0,4(%eax) + psrlq $32,%mm1 + movq 12(%eax),%mm2 + punpckldq %mm2,%mm1 + pfadd %mm2,%mm1 + movq %mm1,12(%eax) + psrlq $32,%mm2 + movq 20(%eax),%mm3 + punpckldq %mm3,%mm2 + pfadd %mm3,%mm2 + movq %mm2,20(%eax) + psrlq $32,%mm3 + movq 28(%eax),%mm4 + punpckldq %mm4,%mm3 + pfadd %mm4,%mm3 + movq %mm3,28(%eax) + psrlq $32,%mm4 + movq 36(%eax),%mm5 + punpckldq %mm5,%mm4 + pfadd %mm5,%mm4 + movq %mm4,36(%eax) + psrlq $32,%mm5 + movq 44(%eax),%mm6 + punpckldq %mm6,%mm5 + pfadd %mm6,%mm5 + movq %mm5,44(%eax) + psrlq $32,%mm6 + movq 52(%eax),%mm7 + punpckldq %mm7,%mm6 + pfadd %mm7,%mm6 + movq %mm6,52(%eax) + psrlq $32,%mm7 + movq 60(%eax),%mm0 + punpckldq %mm0,%mm7 + pfadd %mm0,%mm7 + movq %mm7,60(%eax) + psrlq $32,%mm0 + movd 68(%eax),%mm1 + pfadd %mm1,%mm0 + movd %mm0,68(%eax) + movd 4(%eax),%mm0 + movd 12(%eax),%mm1 + punpckldq %mm1,%mm0 + punpckldq 20(%eax),%mm1 + pfadd %mm1,%mm0 + movd %mm0,12(%eax) + psrlq $32,%mm0 + movd %mm0,20(%eax) + psrlq $32,%mm1 + movd 28(%eax),%mm2 + punpckldq %mm2,%mm1 + punpckldq 36(%eax),%mm2 + pfadd %mm2,%mm1 + movd %mm1,28(%eax) + psrlq $32,%mm1 + movd %mm1,36(%eax) + psrlq $32,%mm2 + movd 44(%eax),%mm3 + punpckldq %mm3,%mm2 + punpckldq 52(%eax),%mm3 + pfadd %mm3,%mm2 + movd %mm2,44(%eax) + psrlq $32,%mm2 + movd %mm2,52(%eax) + psrlq $32,%mm3 + movd 60(%eax),%mm4 + punpckldq %mm4,%mm3 + punpckldq 68(%eax),%mm4 + pfadd %mm4,%mm3 + movd %mm3,60(%eax) + psrlq $32,%mm3 + movd %mm3,68(%eax) + + movq 24(%eax),%mm0 + movq 48(%eax),%mm1 + movd ASM_NAME(COS9)+12,%mm2 + punpckldq %mm2,%mm2 + movd ASM_NAME(COS9)+24,%mm3 + punpckldq %mm3,%mm3 + pfmul %mm2,%mm0 + pfmul %mm3,%mm1 + pushl %eax + movl $1,%eax + movd %eax,%mm7 + pi2fd %mm7,%mm7 + popl %eax + movq 8(%eax),%mm2 + movd ASM_NAME(COS9)+4,%mm3 + punpckldq %mm3,%mm3 + pfmul %mm3,%mm2 + pfadd %mm0,%mm2 + movq 40(%eax),%mm3 + movd ASM_NAME(COS9)+20,%mm4 + punpckldq %mm4,%mm4 + pfmul %mm4,%mm3 + pfadd %mm3,%mm2 + movq 56(%eax),%mm3 + movd ASM_NAME(COS9)+28,%mm4 + punpckldq %mm4,%mm4 + pfmul %mm4,%mm3 + pfadd %mm3,%mm2 + movq (%eax),%mm3 + movq 16(%eax),%mm4 + movd ASM_NAME(COS9)+8,%mm5 + punpckldq %mm5,%mm5 + pfmul %mm5,%mm4 + pfadd %mm4,%mm3 + movq 32(%eax),%mm4 + movd ASM_NAME(COS9)+16,%mm5 + punpckldq %mm5,%mm5 + pfmul %mm5,%mm4 + pfadd %mm4,%mm3 + pfadd %mm1,%mm3 + movq 64(%eax),%mm4 + movd ASM_NAME(COS9)+32,%mm5 + punpckldq %mm5,%mm5 + pfmul %mm5,%mm4 + pfadd %mm4,%mm3 + movq %mm2,%mm4 + pfadd %mm3,%mm4 + movq %mm7,%mm5 + punpckldq ASM_NAME(tfcos36)+0,%mm5 + pfmul %mm5,%mm4 + movq %mm4,%mm5 + pfacc %mm5,%mm5 + movd 108(%edx),%mm6 + punpckldq 104(%edx),%mm6 + pfmul %mm6,%mm5 + movd %mm5,36(%ecx) + psrlq $32,%mm5 + movd %mm5,32(%ecx) + movq %mm4,%mm6 + punpckldq %mm6,%mm5 + pfsub %mm6,%mm5 + punpckhdq %mm5,%mm5 + movd 32(%edx),%mm6 + punpckldq 36(%edx),%mm6 + pfmul %mm6,%mm5 + movd 32(%esi),%mm6 + punpckldq 36(%esi),%mm6 + pfadd %mm6,%mm5 + movd %mm5,1024(%ebx) + psrlq $32,%mm5 + movd %mm5,1152(%ebx) + movq %mm3,%mm4 + pfsub %mm2,%mm4 + movq %mm7,%mm5 + punpckldq ASM_NAME(tfcos36)+32,%mm5 + pfmul %mm5,%mm4 + movq %mm4,%mm5 + pfacc %mm5,%mm5 + movd 140(%edx),%mm6 + punpckldq 72(%edx),%mm6 + pfmul %mm6,%mm5 + movd %mm5,68(%ecx) + psrlq $32,%mm5 + movd %mm5,0(%ecx) + movq %mm4,%mm6 + punpckldq %mm6,%mm5 + pfsub %mm6,%mm5 + punpckhdq %mm5,%mm5 + movd 0(%edx),%mm6 + punpckldq 68(%edx),%mm6 + pfmul %mm6,%mm5 + movd 0(%esi),%mm6 + punpckldq 68(%esi),%mm6 + pfadd %mm6,%mm5 + movd %mm5,0(%ebx) + psrlq $32,%mm5 + movd %mm5,2176(%ebx) + movq 8(%eax),%mm2 + movq 40(%eax),%mm3 + pfsub %mm3,%mm2 + movq 56(%eax),%mm3 + pfsub %mm3,%mm2 + movd ASM_NAME(COS9)+12,%mm3 + punpckldq %mm3,%mm3 + pfmul %mm3,%mm2 + movq 16(%eax),%mm3 + movq 32(%eax),%mm4 + pfsub %mm4,%mm3 + movq 64(%eax),%mm4 + pfsub %mm4,%mm3 + movd ASM_NAME(COS9)+24,%mm4 + punpckldq %mm4,%mm4 + pfmul %mm4,%mm3 + movq 48(%eax),%mm4 + pfsub %mm4,%mm3 + movq (%eax),%mm4 + pfadd %mm4,%mm3 + movq %mm2,%mm4 + pfadd %mm3,%mm4 + movq %mm7,%mm5 + punpckldq ASM_NAME(tfcos36)+4,%mm5 + pfmul %mm5,%mm4 + movq %mm4,%mm5 + pfacc %mm5,%mm5 + movd 112(%edx),%mm6 + punpckldq 100(%edx),%mm6 + pfmul %mm6,%mm5 + movd %mm5,40(%ecx) + psrlq $32,%mm5 + movd %mm5,28(%ecx) + movq %mm4,%mm6 + punpckldq %mm6,%mm5 + pfsub %mm6,%mm5 + punpckhdq %mm5,%mm5 + movd 28(%edx),%mm6 + punpckldq 40(%edx),%mm6 + pfmul %mm6,%mm5 + movd 28(%esi),%mm6 + punpckldq 40(%esi),%mm6 + pfadd %mm6,%mm5 + movd %mm5,896(%ebx) + psrlq $32,%mm5 + movd %mm5,1280(%ebx) + movq %mm3,%mm4 + pfsub %mm2,%mm4 + movq %mm7,%mm5 + punpckldq ASM_NAME(tfcos36)+28,%mm5 + pfmul %mm5,%mm4 + movq %mm4,%mm5 + pfacc %mm5,%mm5 + movd 136(%edx),%mm6 + punpckldq 76(%edx),%mm6 + pfmul %mm6,%mm5 + movd %mm5,64(%ecx) + psrlq $32,%mm5 + movd %mm5,4(%ecx) + movq %mm4,%mm6 + punpckldq %mm6,%mm5 + pfsub %mm6,%mm5 + punpckhdq %mm5,%mm5 + movd 4(%edx),%mm6 + punpckldq 64(%edx),%mm6 + pfmul %mm6,%mm5 + movd 4(%esi),%mm6 + punpckldq 64(%esi),%mm6 + pfadd %mm6,%mm5 + movd %mm5,128(%ebx) + psrlq $32,%mm5 + movd %mm5,2048(%ebx) + + movq 8(%eax),%mm2 + movd ASM_NAME(COS9)+20,%mm3 + punpckldq %mm3,%mm3 + pfmul %mm3,%mm2 + pfsub %mm0,%mm2 + movq 40(%eax),%mm3 + movd ASM_NAME(COS9)+28,%mm4 + punpckldq %mm4,%mm4 + pfmul %mm4,%mm3 + pfsub %mm3,%mm2 + movq 56(%eax),%mm3 + movd ASM_NAME(COS9)+4,%mm4 + punpckldq %mm4,%mm4 + pfmul %mm4,%mm3 + pfadd %mm3,%mm2 + movq (%eax),%mm3 + movq 16(%eax),%mm4 + movd ASM_NAME(COS9)+32,%mm5 + punpckldq %mm5,%mm5 + pfmul %mm5,%mm4 + pfsub %mm4,%mm3 + movq 32(%eax),%mm4 + movd ASM_NAME(COS9)+8,%mm5 + punpckldq %mm5,%mm5 + pfmul %mm5,%mm4 + pfsub %mm4,%mm3 + pfadd %mm1,%mm3 + movq 64(%eax),%mm4 + movd ASM_NAME(COS9)+16,%mm5 + punpckldq %mm5,%mm5 + pfmul %mm5,%mm4 + pfadd %mm4,%mm3 + movq %mm2,%mm4 + pfadd %mm3,%mm4 + movq %mm7,%mm5 + punpckldq ASM_NAME(tfcos36)+8,%mm5 + pfmul %mm5,%mm4 + movq %mm4,%mm5 + pfacc %mm5,%mm5 + movd 116(%edx),%mm6 + punpckldq 96(%edx),%mm6 + pfmul %mm6,%mm5 + movd %mm5,44(%ecx) + psrlq $32,%mm5 + movd %mm5,24(%ecx) + movq %mm4,%mm6 + punpckldq %mm6,%mm5 + pfsub %mm6,%mm5 + punpckhdq %mm5,%mm5 + movd 24(%edx),%mm6 + punpckldq 44(%edx),%mm6 + pfmul %mm6,%mm5 + movd 24(%esi),%mm6 + punpckldq 44(%esi),%mm6 + pfadd %mm6,%mm5 + movd %mm5,768(%ebx) + psrlq $32,%mm5 + movd %mm5,1408(%ebx) + movq %mm3,%mm4 + pfsub %mm2,%mm4 + movq %mm7,%mm5 + punpckldq ASM_NAME(tfcos36)+24,%mm5 + pfmul %mm5,%mm4 + movq %mm4,%mm5 + pfacc %mm5,%mm5 + movd 132(%edx),%mm6 + punpckldq 80(%edx),%mm6 + pfmul %mm6,%mm5 + movd %mm5,60(%ecx) + psrlq $32,%mm5 + movd %mm5,8(%ecx) + movq %mm4,%mm6 + punpckldq %mm6,%mm5 + pfsub %mm6,%mm5 + punpckhdq %mm5,%mm5 + movd 8(%edx),%mm6 + punpckldq 60(%edx),%mm6 + pfmul %mm6,%mm5 + movd 8(%esi),%mm6 + punpckldq 60(%esi),%mm6 + pfadd %mm6,%mm5 + movd %mm5,256(%ebx) + psrlq $32,%mm5 + movd %mm5,1920(%ebx) + movq 8(%eax),%mm2 + movd ASM_NAME(COS9)+28,%mm3 + punpckldq %mm3,%mm3 + pfmul %mm3,%mm2 + pfsub %mm0,%mm2 + movq 40(%eax),%mm3 + movd ASM_NAME(COS9)+4,%mm4 + punpckldq %mm4,%mm4 + pfmul %mm4,%mm3 + pfadd %mm3,%mm2 + movq 56(%eax),%mm3 + movd ASM_NAME(COS9)+20,%mm4 + punpckldq %mm4,%mm4 + pfmul %mm4,%mm3 + pfsub %mm3,%mm2 + movq (%eax),%mm3 + movq 16(%eax),%mm4 + movd ASM_NAME(COS9)+16,%mm5 + punpckldq %mm5,%mm5 + pfmul %mm5,%mm4 + pfsub %mm4,%mm3 + movq 32(%eax),%mm4 + movd ASM_NAME(COS9)+32,%mm5 + punpckldq %mm5,%mm5 + pfmul %mm5,%mm4 + pfadd %mm4,%mm3 + pfadd %mm1,%mm3 + movq 64(%eax),%mm4 + movd ASM_NAME(COS9)+8,%mm5 + punpckldq %mm5,%mm5 + pfmul %mm5,%mm4 + pfsub %mm4,%mm3 + movq %mm2,%mm4 + pfadd %mm3,%mm4 + movq %mm7,%mm5 + punpckldq ASM_NAME(tfcos36)+12,%mm5 + pfmul %mm5,%mm4 + movq %mm4,%mm5 + pfacc %mm5,%mm5 + movd 120(%edx),%mm6 + punpckldq 92(%edx),%mm6 + pfmul %mm6,%mm5 + movd %mm5,48(%ecx) + psrlq $32,%mm5 + movd %mm5,20(%ecx) + movq %mm4,%mm6 + punpckldq %mm6,%mm5 + pfsub %mm6,%mm5 + punpckhdq %mm5,%mm5 + movd 20(%edx),%mm6 + punpckldq 48(%edx),%mm6 + pfmul %mm6,%mm5 + movd 20(%esi),%mm6 + punpckldq 48(%esi),%mm6 + pfadd %mm6,%mm5 + movd %mm5,640(%ebx) + psrlq $32,%mm5 + movd %mm5,1536(%ebx) + movq %mm3,%mm4 + pfsub %mm2,%mm4 + movq %mm7,%mm5 + punpckldq ASM_NAME(tfcos36)+20,%mm5 + pfmul %mm5,%mm4 + movq %mm4,%mm5 + pfacc %mm5,%mm5 + movd 128(%edx),%mm6 + punpckldq 84(%edx),%mm6 + pfmul %mm6,%mm5 + movd %mm5,56(%ecx) + psrlq $32,%mm5 + movd %mm5,12(%ecx) + movq %mm4,%mm6 + punpckldq %mm6,%mm5 + pfsub %mm6,%mm5 + punpckhdq %mm5,%mm5 + movd 12(%edx),%mm6 + punpckldq 56(%edx),%mm6 + pfmul %mm6,%mm5 + movd 12(%esi),%mm6 + punpckldq 56(%esi),%mm6 + pfadd %mm6,%mm5 + movd %mm5,384(%ebx) + psrlq $32,%mm5 + movd %mm5,1792(%ebx) + + movq (%eax),%mm4 + movq 16(%eax),%mm3 + pfsub %mm3,%mm4 + movq 32(%eax),%mm3 + pfadd %mm3,%mm4 + movq 48(%eax),%mm3 + pfsub %mm3,%mm4 + movq 64(%eax),%mm3 + pfadd %mm3,%mm4 + movq %mm7,%mm5 + punpckldq ASM_NAME(tfcos36)+16,%mm5 + pfmul %mm5,%mm4 + movq %mm4,%mm5 + pfacc %mm5,%mm5 + movd 124(%edx),%mm6 + punpckldq 88(%edx),%mm6 + pfmul %mm6,%mm5 + movd %mm5,52(%ecx) + psrlq $32,%mm5 + movd %mm5,16(%ecx) + movq %mm4,%mm6 + punpckldq %mm6,%mm5 + pfsub %mm6,%mm5 + punpckhdq %mm5,%mm5 + movd 16(%edx),%mm6 + punpckldq 52(%edx),%mm6 + pfmul %mm6,%mm5 + movd 16(%esi),%mm6 + punpckldq 52(%esi),%mm6 + pfadd %mm6,%mm5 + movd %mm5,512(%ebx) + psrlq $32,%mm5 + movd %mm5,1664(%ebx) + + femms + popl %ebx + popl %esi + movl %ebp,%esp + popl %ebp + ret + +NONEXEC_STACK diff --git a/lib/3rdparty/libmpg123/dct36_3dnowext.S b/lib/3rdparty/libmpg123/dct36_3dnowext.S new file mode 100644 index 00000000000..6bfacc2fb01 --- /dev/null +++ b/lib/3rdparty/libmpg123/dct36_3dnowext.S @@ -0,0 +1,512 @@ +/* + dct36_3dnowext: extended 3DNow optimized DCT36 + + copyright ?-2007 by the mpg123 project - free software under the terms of the LGPL 2.1 + see COPYING and AUTHORS files in distribution or http://mpg123.org + + Transformed back into standalone asm, with help of + gcc -S -DHAVE_CONFIG_H -I. -march=k6-3 -O3 -Wall -pedantic -fno-strict-aliasing -DREAL_IS_FLOAT -c -o dct36_3dnowext.{S,c} + + MPlayer comment follows. +*/ + +/* + * dct36_3dnow.c - 3DNow! optimized dct36() + * + * This code based 'dct36_3dnow.s' by Syuuhei Kashiyama + * , only two types of changes have been made: + * + * - removed PREFETCH instruction for speedup + * - changed function name for support 3DNow! automatic detection + * + * You can find Kashiyama's original 3dnow! support patch + * (for mpg123-0.59o) at + * http://user.ecc.u-tokyo.ac.jp/~g810370/linux-simd/ (Japanese). + * + * by KIMURA Takuhiro - until 31.Mar.1999 + * - after 1.Apr.1999 + * + * Modified for use with MPlayer, for details see the changelog at + * http://svn.mplayerhq.hu/mplayer/trunk/ + * $Id: dct36_3dnow.c 18786 2006-06-22 13:34:00Z diego $ + * + * Original disclaimer: + * The author of this program disclaim whole expressed or implied + * warranties with regard to this program, and in no event shall the + * author of this program liable to whatever resulted from the use of + * this program. Use it at your own risk. + * + * 2003/06/21: Moved to GCC inline assembly - Alex Beregszaszi + */ + +#include "mangle.h" + + .text + ALIGN32 +.globl ASM_NAME(dct36_3dnowext) + /* .type ASM_NAME(dct36_3dnowext), @function */ +ASM_NAME(dct36_3dnowext): + pushl %ebp + movl %esp, %ebp + pushl %esi + pushl %ebx + movl 8(%ebp), %eax + movl 12(%ebp), %esi + movl 16(%ebp), %ecx + movl 20(%ebp), %edx + movl 24(%ebp), %ebx +/* APP */ + movq (%eax),%mm0 + movq 4(%eax),%mm1 + pfadd %mm1,%mm0 + movq %mm0,4(%eax) + psrlq $32,%mm1 + movq 12(%eax),%mm2 + punpckldq %mm2,%mm1 + pfadd %mm2,%mm1 + movq %mm1,12(%eax) + psrlq $32,%mm2 + movq 20(%eax),%mm3 + punpckldq %mm3,%mm2 + pfadd %mm3,%mm2 + movq %mm2,20(%eax) + psrlq $32,%mm3 + movq 28(%eax),%mm4 + punpckldq %mm4,%mm3 + pfadd %mm4,%mm3 + movq %mm3,28(%eax) + psrlq $32,%mm4 + movq 36(%eax),%mm5 + punpckldq %mm5,%mm4 + pfadd %mm5,%mm4 + movq %mm4,36(%eax) + psrlq $32,%mm5 + movq 44(%eax),%mm6 + punpckldq %mm6,%mm5 + pfadd %mm6,%mm5 + movq %mm5,44(%eax) + psrlq $32,%mm6 + movq 52(%eax),%mm7 + punpckldq %mm7,%mm6 + pfadd %mm7,%mm6 + movq %mm6,52(%eax) + psrlq $32,%mm7 + movq 60(%eax),%mm0 + punpckldq %mm0,%mm7 + pfadd %mm0,%mm7 + movq %mm7,60(%eax) + psrlq $32,%mm0 + movd 68(%eax),%mm1 + pfadd %mm1,%mm0 + movd %mm0,68(%eax) + movd 4(%eax),%mm0 + movd 12(%eax),%mm1 + punpckldq %mm1,%mm0 + punpckldq 20(%eax),%mm1 + pfadd %mm1,%mm0 + movd %mm0,12(%eax) + psrlq $32,%mm0 + movd %mm0,20(%eax) + psrlq $32,%mm1 + movd 28(%eax),%mm2 + punpckldq %mm2,%mm1 + punpckldq 36(%eax),%mm2 + pfadd %mm2,%mm1 + movd %mm1,28(%eax) + psrlq $32,%mm1 + movd %mm1,36(%eax) + psrlq $32,%mm2 + movd 44(%eax),%mm3 + punpckldq %mm3,%mm2 + punpckldq 52(%eax),%mm3 + pfadd %mm3,%mm2 + movd %mm2,44(%eax) + psrlq $32,%mm2 + movd %mm2,52(%eax) + psrlq $32,%mm3 + movd 60(%eax),%mm4 + punpckldq %mm4,%mm3 + punpckldq 68(%eax),%mm4 + pfadd %mm4,%mm3 + movd %mm3,60(%eax) + psrlq $32,%mm3 + movd %mm3,68(%eax) + movq 24(%eax),%mm0 + movq 48(%eax),%mm1 + movd ASM_NAME(COS9)+12,%mm2 + punpckldq %mm2,%mm2 + movd ASM_NAME(COS9)+24,%mm3 + punpckldq %mm3,%mm3 + pfmul %mm2,%mm0 + pfmul %mm3,%mm1 + pushl %eax + movl $1,%eax + movd %eax,%mm7 + pi2fd %mm7,%mm7 + popl %eax + movq 8(%eax),%mm2 + movd ASM_NAME(COS9)+4,%mm3 + punpckldq %mm3,%mm3 + pfmul %mm3,%mm2 + pfadd %mm0,%mm2 + movq 40(%eax),%mm3 + movd ASM_NAME(COS9)+20,%mm4 + punpckldq %mm4,%mm4 + pfmul %mm4,%mm3 + pfadd %mm3,%mm2 + movq 56(%eax),%mm3 + movd ASM_NAME(COS9)+28,%mm4 + punpckldq %mm4,%mm4 + pfmul %mm4,%mm3 + pfadd %mm3,%mm2 + movq (%eax),%mm3 + movq 16(%eax),%mm4 + movd ASM_NAME(COS9)+8,%mm5 + punpckldq %mm5,%mm5 + pfmul %mm5,%mm4 + pfadd %mm4,%mm3 + movq 32(%eax),%mm4 + movd ASM_NAME(COS9)+16,%mm5 + punpckldq %mm5,%mm5 + pfmul %mm5,%mm4 + pfadd %mm4,%mm3 + pfadd %mm1,%mm3 + movq 64(%eax),%mm4 + movd ASM_NAME(COS9)+32,%mm5 + punpckldq %mm5,%mm5 + pfmul %mm5,%mm4 + pfadd %mm4,%mm3 + movq %mm2,%mm4 + pfadd %mm3,%mm4 + movq %mm7,%mm5 + punpckldq ASM_NAME(tfcos36)+0,%mm5 + pfmul %mm5,%mm4 + movq %mm4,%mm5 + pfacc %mm5,%mm5 + movd 108(%edx),%mm6 + punpckldq 104(%edx),%mm6 + pfmul %mm6,%mm5 + pswapd %mm5,%mm5 + movq %mm5,32(%ecx) + movq %mm4,%mm6 + punpckldq %mm6,%mm5 + pfsub %mm6,%mm5 + punpckhdq %mm5,%mm5 + movd 32(%edx),%mm6 + punpckldq 36(%edx),%mm6 + pfmul %mm6,%mm5 + movd 32(%esi),%mm6 + punpckldq 36(%esi),%mm6 + pfadd %mm6,%mm5 + movd %mm5,1024(%ebx) + psrlq $32,%mm5 + movd %mm5,1152(%ebx) + movq %mm3,%mm4 + pfsub %mm2,%mm4 + movq %mm7,%mm5 + punpckldq ASM_NAME(tfcos36)+32,%mm5 + pfmul %mm5,%mm4 + movq %mm4,%mm5 + pfacc %mm5,%mm5 + movd 140(%edx),%mm6 + punpckldq 72(%edx),%mm6 + pfmul %mm6,%mm5 + movd %mm5,68(%ecx) + psrlq $32,%mm5 + movd %mm5,0(%ecx) + movq %mm4,%mm6 + punpckldq %mm6,%mm5 + pfsub %mm6,%mm5 + punpckhdq %mm5,%mm5 + movd 0(%edx),%mm6 + punpckldq 68(%edx),%mm6 + pfmul %mm6,%mm5 + movd 0(%esi),%mm6 + punpckldq 68(%esi),%mm6 + pfadd %mm6,%mm5 + movd %mm5,0(%ebx) + psrlq $32,%mm5 + movd %mm5,2176(%ebx) + movq 8(%eax),%mm2 + movq 40(%eax),%mm3 + pfsub %mm3,%mm2 + movq 56(%eax),%mm3 + pfsub %mm3,%mm2 + movd ASM_NAME(COS9)+12,%mm3 + punpckldq %mm3,%mm3 + pfmul %mm3,%mm2 + movq 16(%eax),%mm3 + movq 32(%eax),%mm4 + pfsub %mm4,%mm3 + movq 64(%eax),%mm4 + pfsub %mm4,%mm3 + movd ASM_NAME(COS9)+24,%mm4 + punpckldq %mm4,%mm4 + pfmul %mm4,%mm3 + movq 48(%eax),%mm4 + pfsub %mm4,%mm3 + movq (%eax),%mm4 + pfadd %mm4,%mm3 + movq %mm2,%mm4 + pfadd %mm3,%mm4 + movq %mm7,%mm5 + punpckldq ASM_NAME(tfcos36)+4,%mm5 + pfmul %mm5,%mm4 + movq %mm4,%mm5 + pfacc %mm5,%mm5 + movd 112(%edx),%mm6 + punpckldq 100(%edx),%mm6 + pfmul %mm6,%mm5 + movd %mm5,40(%ecx) + psrlq $32,%mm5 + movd %mm5,28(%ecx) + movq %mm4,%mm6 + punpckldq %mm6,%mm5 + pfsub %mm6,%mm5 + punpckhdq %mm5,%mm5 + movd 28(%edx),%mm6 + punpckldq 40(%edx),%mm6 + pfmul %mm6,%mm5 + movd 28(%esi),%mm6 + punpckldq 40(%esi),%mm6 + pfadd %mm6,%mm5 + movd %mm5,896(%ebx) + psrlq $32,%mm5 + movd %mm5,1280(%ebx) + movq %mm3,%mm4 + pfsub %mm2,%mm4 + movq %mm7,%mm5 + punpckldq ASM_NAME(tfcos36)+28,%mm5 + pfmul %mm5,%mm4 + movq %mm4,%mm5 + pfacc %mm5,%mm5 + movd 136(%edx),%mm6 + punpckldq 76(%edx),%mm6 + pfmul %mm6,%mm5 + movd %mm5,64(%ecx) + psrlq $32,%mm5 + movd %mm5,4(%ecx) + movq %mm4,%mm6 + punpckldq %mm6,%mm5 + pfsub %mm6,%mm5 + punpckhdq %mm5,%mm5 + movd 4(%edx),%mm6 + punpckldq 64(%edx),%mm6 + pfmul %mm6,%mm5 + movd 4(%esi),%mm6 + punpckldq 64(%esi),%mm6 + pfadd %mm6,%mm5 + movd %mm5,128(%ebx) + psrlq $32,%mm5 + movd %mm5,2048(%ebx) + movq 8(%eax),%mm2 + movd ASM_NAME(COS9)+20,%mm3 + punpckldq %mm3,%mm3 + pfmul %mm3,%mm2 + pfsub %mm0,%mm2 + movq 40(%eax),%mm3 + movd ASM_NAME(COS9)+28,%mm4 + punpckldq %mm4,%mm4 + pfmul %mm4,%mm3 + pfsub %mm3,%mm2 + movq 56(%eax),%mm3 + movd ASM_NAME(COS9)+4,%mm4 + punpckldq %mm4,%mm4 + pfmul %mm4,%mm3 + pfadd %mm3,%mm2 + movq (%eax),%mm3 + movq 16(%eax),%mm4 + movd ASM_NAME(COS9)+32,%mm5 + punpckldq %mm5,%mm5 + pfmul %mm5,%mm4 + pfsub %mm4,%mm3 + movq 32(%eax),%mm4 + movd ASM_NAME(COS9)+8,%mm5 + punpckldq %mm5,%mm5 + pfmul %mm5,%mm4 + pfsub %mm4,%mm3 + pfadd %mm1,%mm3 + movq 64(%eax),%mm4 + movd ASM_NAME(COS9)+16,%mm5 + punpckldq %mm5,%mm5 + pfmul %mm5,%mm4 + pfadd %mm4,%mm3 + movq %mm2,%mm4 + pfadd %mm3,%mm4 + movq %mm7,%mm5 + punpckldq ASM_NAME(tfcos36)+8,%mm5 + pfmul %mm5,%mm4 + movq %mm4,%mm5 + pfacc %mm5,%mm5 + movd 116(%edx),%mm6 + punpckldq 96(%edx),%mm6 + pfmul %mm6,%mm5 + movd %mm5,44(%ecx) + psrlq $32,%mm5 + movd %mm5,24(%ecx) + movq %mm4,%mm6 + punpckldq %mm6,%mm5 + pfsub %mm6,%mm5 + punpckhdq %mm5,%mm5 + movd 24(%edx),%mm6 + punpckldq 44(%edx),%mm6 + pfmul %mm6,%mm5 + movd 24(%esi),%mm6 + punpckldq 44(%esi),%mm6 + pfadd %mm6,%mm5 + movd %mm5,768(%ebx) + psrlq $32,%mm5 + movd %mm5,1408(%ebx) + movq %mm3,%mm4 + pfsub %mm2,%mm4 + movq %mm7,%mm5 + punpckldq ASM_NAME(tfcos36)+24,%mm5 + pfmul %mm5,%mm4 + movq %mm4,%mm5 + pfacc %mm5,%mm5 + movd 132(%edx),%mm6 + punpckldq 80(%edx),%mm6 + pfmul %mm6,%mm5 + movd %mm5,60(%ecx) + psrlq $32,%mm5 + movd %mm5,8(%ecx) + movq %mm4,%mm6 + punpckldq %mm6,%mm5 + pfsub %mm6,%mm5 + punpckhdq %mm5,%mm5 + movd 8(%edx),%mm6 + punpckldq 60(%edx),%mm6 + pfmul %mm6,%mm5 + movd 8(%esi),%mm6 + punpckldq 60(%esi),%mm6 + pfadd %mm6,%mm5 + movd %mm5,256(%ebx) + psrlq $32,%mm5 + movd %mm5,1920(%ebx) + movq 8(%eax),%mm2 + movd ASM_NAME(COS9)+28,%mm3 + punpckldq %mm3,%mm3 + pfmul %mm3,%mm2 + pfsub %mm0,%mm2 + movq 40(%eax),%mm3 + movd ASM_NAME(COS9)+4,%mm4 + punpckldq %mm4,%mm4 + pfmul %mm4,%mm3 + pfadd %mm3,%mm2 + movq 56(%eax),%mm3 + movd ASM_NAME(COS9)+20,%mm4 + punpckldq %mm4,%mm4 + pfmul %mm4,%mm3 + pfsub %mm3,%mm2 + movq (%eax),%mm3 + movq 16(%eax),%mm4 + movd ASM_NAME(COS9)+16,%mm5 + punpckldq %mm5,%mm5 + pfmul %mm5,%mm4 + pfsub %mm4,%mm3 + movq 32(%eax),%mm4 + movd ASM_NAME(COS9)+32,%mm5 + punpckldq %mm5,%mm5 + pfmul %mm5,%mm4 + pfadd %mm4,%mm3 + pfadd %mm1,%mm3 + movq 64(%eax),%mm4 + movd ASM_NAME(COS9)+8,%mm5 + punpckldq %mm5,%mm5 + pfmul %mm5,%mm4 + pfsub %mm4,%mm3 + movq %mm2,%mm4 + pfadd %mm3,%mm4 + movq %mm7,%mm5 + punpckldq ASM_NAME(tfcos36)+12,%mm5 + pfmul %mm5,%mm4 + movq %mm4,%mm5 + pfacc %mm5,%mm5 + movd 120(%edx),%mm6 + punpckldq 92(%edx),%mm6 + pfmul %mm6,%mm5 + movd %mm5,48(%ecx) + psrlq $32,%mm5 + movd %mm5,20(%ecx) + movq %mm4,%mm6 + punpckldq %mm6,%mm5 + pfsub %mm6,%mm5 + punpckhdq %mm5,%mm5 + movd 20(%edx),%mm6 + punpckldq 48(%edx),%mm6 + pfmul %mm6,%mm5 + movd 20(%esi),%mm6 + punpckldq 48(%esi),%mm6 + pfadd %mm6,%mm5 + movd %mm5,640(%ebx) + psrlq $32,%mm5 + movd %mm5,1536(%ebx) + movq %mm3,%mm4 + pfsub %mm2,%mm4 + movq %mm7,%mm5 + punpckldq ASM_NAME(tfcos36)+20,%mm5 + pfmul %mm5,%mm4 + movq %mm4,%mm5 + pfacc %mm5,%mm5 + movd 128(%edx),%mm6 + punpckldq 84(%edx),%mm6 + pfmul %mm6,%mm5 + movd %mm5,56(%ecx) + psrlq $32,%mm5 + movd %mm5,12(%ecx) + movq %mm4,%mm6 + punpckldq %mm6,%mm5 + pfsub %mm6,%mm5 + punpckhdq %mm5,%mm5 + movd 12(%edx),%mm6 + punpckldq 56(%edx),%mm6 + pfmul %mm6,%mm5 + movd 12(%esi),%mm6 + punpckldq 56(%esi),%mm6 + pfadd %mm6,%mm5 + movd %mm5,384(%ebx) + psrlq $32,%mm5 + movd %mm5,1792(%ebx) + movq (%eax),%mm4 + movq 16(%eax),%mm3 + pfsub %mm3,%mm4 + movq 32(%eax),%mm3 + pfadd %mm3,%mm4 + movq 48(%eax),%mm3 + pfsub %mm3,%mm4 + movq 64(%eax),%mm3 + pfadd %mm3,%mm4 + movq %mm7,%mm5 + punpckldq ASM_NAME(tfcos36)+16,%mm5 + pfmul %mm5,%mm4 + movq %mm4,%mm5 + pfacc %mm5,%mm5 + movd 124(%edx),%mm6 + punpckldq 88(%edx),%mm6 + pfmul %mm6,%mm5 + movd %mm5,52(%ecx) + psrlq $32,%mm5 + movd %mm5,16(%ecx) + movq %mm4,%mm6 + punpckldq %mm6,%mm5 + pfsub %mm6,%mm5 + punpckhdq %mm5,%mm5 + movd 16(%edx),%mm6 + punpckldq 52(%edx),%mm6 + pfmul %mm6,%mm5 + movd 16(%esi),%mm6 + punpckldq 52(%esi),%mm6 + pfadd %mm6,%mm5 + movd %mm5,512(%ebx) + psrlq $32,%mm5 + movd %mm5,1664(%ebx) + femms + +/* NO_APP */ + popl %ebx + popl %esi + leave + ret + /* .size ASM_NAME(dct36_3dnowext), .-ASM_NAME(dct36_3dnowext) */ + +NONEXEC_STACK diff --git a/lib/3rdparty/libmpg123/dct64.c b/lib/3rdparty/libmpg123/dct64.c new file mode 100644 index 00000000000..a25047a3cce --- /dev/null +++ b/lib/3rdparty/libmpg123/dct64.c @@ -0,0 +1,174 @@ +/* + dct64.c: DCT64, the plain C version + + copyright ?-2006 by the mpg123 project - free software under the terms of the LGPL 2.1 + see COPYING and AUTHORS files in distribution or http://mpg123.org + initially written by Michael Hipp +*/ + +/* + * Discrete Cosine Tansform (DCT) for subband synthesis + * + * -funroll-loops (for gcc) will remove the loops for better performance + * using loops in the source-code enhances readabillity + * + * + * TODO: write an optimized version for the down-sampling modes + * (in these modes the bands 16-31 (2:1) or 8-31 (4:1) are zero + */ + +#include "mpg123lib_intern.h" + +void dct64(real *out0,real *out1,real *samples) +{ + real bufs[64]; + + { + register int i,j; + register real *b1,*b2,*bs,*costab; + + b1 = samples; + bs = bufs; + costab = pnts[0]+16; + b2 = b1 + 32; + + for(i=15;i>=0;i--) + *bs++ = (*b1++ + *--b2); + for(i=15;i>=0;i--) + *bs++ = REAL_MUL((*--b2 - *b1++), *--costab); + + b1 = bufs; + costab = pnts[1]+8; + b2 = b1 + 16; + + { + for(i=7;i>=0;i--) + *bs++ = (*b1++ + *--b2); + for(i=7;i>=0;i--) + *bs++ = REAL_MUL((*--b2 - *b1++), *--costab); + b2 += 32; + costab += 8; + for(i=7;i>=0;i--) + *bs++ = (*b1++ + *--b2); + for(i=7;i>=0;i--) + *bs++ = REAL_MUL((*b1++ - *--b2), *--costab); + b2 += 32; + } + + bs = bufs; + costab = pnts[2]; + b2 = b1 + 8; + + for(j=2;j;j--) + { + for(i=3;i>=0;i--) + *bs++ = (*b1++ + *--b2); + for(i=3;i>=0;i--) + *bs++ = REAL_MUL((*--b2 - *b1++), costab[i]); + b2 += 16; + for(i=3;i>=0;i--) + *bs++ = (*b1++ + *--b2); + for(i=3;i>=0;i--) + *bs++ = REAL_MUL((*b1++ - *--b2), costab[i]); + b2 += 16; + } + + b1 = bufs; + costab = pnts[3]; + b2 = b1 + 4; + + for(j=4;j;j--) + { + *bs++ = (*b1++ + *--b2); + *bs++ = (*b1++ + *--b2); + *bs++ = REAL_MUL((*--b2 - *b1++), costab[1]); + *bs++ = REAL_MUL((*--b2 - *b1++), costab[0]); + b2 += 8; + *bs++ = (*b1++ + *--b2); + *bs++ = (*b1++ + *--b2); + *bs++ = REAL_MUL((*b1++ - *--b2), costab[1]); + *bs++ = REAL_MUL((*b1++ - *--b2), costab[0]); + b2 += 8; + } + bs = bufs; + costab = pnts[4]; + + for(j=8;j;j--) + { + real v0,v1; + v0=*b1++; v1 = *b1++; + *bs++ = (v0 + v1); + *bs++ = REAL_MUL((v0 - v1), (*costab)); + v0=*b1++; v1 = *b1++; + *bs++ = (v0 + v1); + *bs++ = REAL_MUL((v1 - v0), (*costab)); + } + + } + + + { + register real *b1; + register int i; + + for(b1=bufs,i=8;i;i--,b1+=4) + b1[2] += b1[3]; + + for(b1=bufs,i=4;i;i--,b1+=8) + { + b1[4] += b1[6]; + b1[6] += b1[5]; + b1[5] += b1[7]; + } + + for(b1=bufs,i=2;i;i--,b1+=16) + { + b1[8] += b1[12]; + b1[12] += b1[10]; + b1[10] += b1[14]; + b1[14] += b1[9]; + b1[9] += b1[13]; + b1[13] += b1[11]; + b1[11] += b1[15]; + } + } + + + out0[0x10*16] = REAL_SCALE_DCT64(bufs[0]); + out0[0x10*15] = REAL_SCALE_DCT64(bufs[16+0] + bufs[16+8]); + out0[0x10*14] = REAL_SCALE_DCT64(bufs[8]); + out0[0x10*13] = REAL_SCALE_DCT64(bufs[16+8] + bufs[16+4]); + out0[0x10*12] = REAL_SCALE_DCT64(bufs[4]); + out0[0x10*11] = REAL_SCALE_DCT64(bufs[16+4] + bufs[16+12]); + out0[0x10*10] = REAL_SCALE_DCT64(bufs[12]); + out0[0x10* 9] = REAL_SCALE_DCT64(bufs[16+12] + bufs[16+2]); + out0[0x10* 8] = REAL_SCALE_DCT64(bufs[2]); + out0[0x10* 7] = REAL_SCALE_DCT64(bufs[16+2] + bufs[16+10]); + out0[0x10* 6] = REAL_SCALE_DCT64(bufs[10]); + out0[0x10* 5] = REAL_SCALE_DCT64(bufs[16+10] + bufs[16+6]); + out0[0x10* 4] = REAL_SCALE_DCT64(bufs[6]); + out0[0x10* 3] = REAL_SCALE_DCT64(bufs[16+6] + bufs[16+14]); + out0[0x10* 2] = REAL_SCALE_DCT64(bufs[14]); + out0[0x10* 1] = REAL_SCALE_DCT64(bufs[16+14] + bufs[16+1]); + out0[0x10* 0] = REAL_SCALE_DCT64(bufs[1]); + + out1[0x10* 0] = REAL_SCALE_DCT64(bufs[1]); + out1[0x10* 1] = REAL_SCALE_DCT64(bufs[16+1] + bufs[16+9]); + out1[0x10* 2] = REAL_SCALE_DCT64(bufs[9]); + out1[0x10* 3] = REAL_SCALE_DCT64(bufs[16+9] + bufs[16+5]); + out1[0x10* 4] = REAL_SCALE_DCT64(bufs[5]); + out1[0x10* 5] = REAL_SCALE_DCT64(bufs[16+5] + bufs[16+13]); + out1[0x10* 6] = REAL_SCALE_DCT64(bufs[13]); + out1[0x10* 7] = REAL_SCALE_DCT64(bufs[16+13] + bufs[16+3]); + out1[0x10* 8] = REAL_SCALE_DCT64(bufs[3]); + out1[0x10* 9] = REAL_SCALE_DCT64(bufs[16+3] + bufs[16+11]); + out1[0x10*10] = REAL_SCALE_DCT64(bufs[11]); + out1[0x10*11] = REAL_SCALE_DCT64(bufs[16+11] + bufs[16+7]); + out1[0x10*12] = REAL_SCALE_DCT64(bufs[7]); + out1[0x10*13] = REAL_SCALE_DCT64(bufs[16+7] + bufs[16+15]); + out1[0x10*14] = REAL_SCALE_DCT64(bufs[15]); + out1[0x10*15] = REAL_SCALE_DCT64(bufs[16+15]); + +} + + diff --git a/lib/3rdparty/libmpg123/dct64_3dnow.S b/lib/3rdparty/libmpg123/dct64_3dnow.S new file mode 100644 index 00000000000..cd6060ba5db --- /dev/null +++ b/lib/3rdparty/libmpg123/dct64_3dnow.S @@ -0,0 +1,712 @@ +/* + dct64_3dnow.s: Replacement of dct64() with AMD's 3DNow! SIMD operations support + + copyright ?-2006 by the mpg123 project - free software under the terms of the LGPL 2.1 + see COPYING and AUTHORS files in distribution or http://mpg123.org + initially written by Syuuhei Kashiyama + + Original "license" statement: + The author of this program disclaim whole expressed or implied + warranties with regard to this program, and in no event shall the + author of this program liable to whatever resulted from the use of + this program. Use it at your own risk. +*/ + +#include "mangle.h" + + .globl ASM_NAME(dct64_3dnow) +/* .type ASM_NAME(dct64_3dnow),@function */ +ASM_NAME(dct64_3dnow): + subl $256,%esp + pushl %ebp + pushl %edi + pushl %esi + pushl %ebx + leal 16(%esp),%ebx + movl 284(%esp),%edi + movl 276(%esp),%ebp + movl 280(%esp),%edx + leal 128(%ebx),%esi + + /* femms */ + + /* 1 */ + movl ASM_NAME(pnts),%eax + movq 0(%edi),%mm0 + movq %mm0,%mm1 + movd 124(%edi),%mm2 + punpckldq 120(%edi),%mm2 + movq 0(%eax),%mm3 + pfadd %mm2,%mm0 + movq %mm0,0(%ebx) + pfsub %mm2,%mm1 + pfmul %mm3,%mm1 + movd %mm1,124(%ebx) + psrlq $32,%mm1 + movd %mm1,120(%ebx) + movq 8(%edi),%mm4 + movq %mm4,%mm5 + movd 116(%edi),%mm6 + punpckldq 112(%edi),%mm6 + movq 8(%eax),%mm7 + pfadd %mm6,%mm4 + movq %mm4,8(%ebx) + pfsub %mm6,%mm5 + pfmul %mm7,%mm5 + movd %mm5,116(%ebx) + psrlq $32,%mm5 + movd %mm5,112(%ebx) + movq 16(%edi),%mm0 + movq %mm0,%mm1 + movd 108(%edi),%mm2 + punpckldq 104(%edi),%mm2 + movq 16(%eax),%mm3 + pfadd %mm2,%mm0 + movq %mm0,16(%ebx) + pfsub %mm2,%mm1 + pfmul %mm3,%mm1 + movd %mm1,108(%ebx) + psrlq $32,%mm1 + movd %mm1,104(%ebx) + movq 24(%edi),%mm4 + movq %mm4,%mm5 + movd 100(%edi),%mm6 + punpckldq 96(%edi),%mm6 + movq 24(%eax),%mm7 + pfadd %mm6,%mm4 + movq %mm4,24(%ebx) + pfsub %mm6,%mm5 + pfmul %mm7,%mm5 + movd %mm5,100(%ebx) + psrlq $32,%mm5 + movd %mm5,96(%ebx) + movq 32(%edi),%mm0 + movq %mm0,%mm1 + movd 92(%edi),%mm2 + punpckldq 88(%edi),%mm2 + movq 32(%eax),%mm3 + pfadd %mm2,%mm0 + movq %mm0,32(%ebx) + pfsub %mm2,%mm1 + pfmul %mm3,%mm1 + movd %mm1,92(%ebx) + psrlq $32,%mm1 + movd %mm1,88(%ebx) + movq 40(%edi),%mm4 + movq %mm4,%mm5 + movd 84(%edi),%mm6 + punpckldq 80(%edi),%mm6 + movq 40(%eax),%mm7 + pfadd %mm6,%mm4 + movq %mm4,40(%ebx) + pfsub %mm6,%mm5 + pfmul %mm7,%mm5 + movd %mm5,84(%ebx) + psrlq $32,%mm5 + movd %mm5,80(%ebx) + movq 48(%edi),%mm0 + movq %mm0,%mm1 + movd 76(%edi),%mm2 + punpckldq 72(%edi),%mm2 + movq 48(%eax),%mm3 + pfadd %mm2,%mm0 + movq %mm0,48(%ebx) + pfsub %mm2,%mm1 + pfmul %mm3,%mm1 + movd %mm1,76(%ebx) + psrlq $32,%mm1 + movd %mm1,72(%ebx) + movq 56(%edi),%mm4 + movq %mm4,%mm5 + movd 68(%edi),%mm6 + punpckldq 64(%edi),%mm6 + movq 56(%eax),%mm7 + pfadd %mm6,%mm4 + movq %mm4,56(%ebx) + pfsub %mm6,%mm5 + pfmul %mm7,%mm5 + movd %mm5,68(%ebx) + psrlq $32,%mm5 + movd %mm5,64(%ebx) + + /* 2 */ + movl ASM_NAME(pnts)+4,%eax + /* 0,14 */ + movq 0(%ebx),%mm0 + movq %mm0,%mm1 + movd 60(%ebx),%mm2 + punpckldq 56(%ebx),%mm2 + movq 0(%eax),%mm3 + pfadd %mm2,%mm0 + movq %mm0,0(%esi) + pfsub %mm2,%mm1 + pfmul %mm3,%mm1 + movd %mm1,60(%esi) + psrlq $32,%mm1 + movd %mm1,56(%esi) + /* 16,30 */ + movq 64(%ebx),%mm0 + movq %mm0,%mm1 + movd 124(%ebx),%mm2 + punpckldq 120(%ebx),%mm2 + pfadd %mm2,%mm0 + movq %mm0,64(%esi) + pfsubr %mm2,%mm1 + pfmul %mm3,%mm1 + movd %mm1,124(%esi) + psrlq $32,%mm1 + movd %mm1,120(%esi) + /* 2,12 */ + movq 8(%ebx),%mm4 + movq %mm4,%mm5 + movd 52(%ebx),%mm6 + punpckldq 48(%ebx),%mm6 + movq 8(%eax),%mm7 + pfadd %mm6,%mm4 + movq %mm4,8(%esi) + pfsub %mm6,%mm5 + pfmul %mm7,%mm5 + movd %mm5,52(%esi) + psrlq $32,%mm5 + movd %mm5,48(%esi) + /* 18,28 */ + movq 72(%ebx),%mm4 + movq %mm4,%mm5 + movd 116(%ebx),%mm6 + punpckldq 112(%ebx),%mm6 + pfadd %mm6,%mm4 + movq %mm4,72(%esi) + pfsubr %mm6,%mm5 + pfmul %mm7,%mm5 + movd %mm5,116(%esi) + psrlq $32,%mm5 + movd %mm5,112(%esi) + /* 4,10 */ + movq 16(%ebx),%mm0 + movq %mm0,%mm1 + movd 44(%ebx),%mm2 + punpckldq 40(%ebx),%mm2 + movq 16(%eax),%mm3 + pfadd %mm2,%mm0 + movq %mm0,16(%esi) + pfsub %mm2,%mm1 + pfmul %mm3,%mm1 + movd %mm1,44(%esi) + psrlq $32,%mm1 + movd %mm1,40(%esi) + /* 20,26 */ + movq 80(%ebx),%mm0 + movq %mm0,%mm1 + movd 108(%ebx),%mm2 + punpckldq 104(%ebx),%mm2 + pfadd %mm2,%mm0 + movq %mm0,80(%esi) + pfsubr %mm2,%mm1 + pfmul %mm3,%mm1 + movd %mm1,108(%esi) + psrlq $32,%mm1 + movd %mm1,104(%esi) + /* 6,8 */ + movq 24(%ebx),%mm4 + movq %mm4,%mm5 + movd 36(%ebx),%mm6 + punpckldq 32(%ebx),%mm6 + movq 24(%eax),%mm7 + pfadd %mm6,%mm4 + movq %mm4,24(%esi) + pfsub %mm6,%mm5 + pfmul %mm7,%mm5 + movd %mm5,36(%esi) + psrlq $32,%mm5 + movd %mm5,32(%esi) + /* 22,24 */ + movq 88(%ebx),%mm4 + movq %mm4,%mm5 + movd 100(%ebx),%mm6 + punpckldq 96(%ebx),%mm6 + pfadd %mm6,%mm4 + movq %mm4,88(%esi) + pfsubr %mm6,%mm5 + pfmul %mm7,%mm5 + movd %mm5,100(%esi) + psrlq $32,%mm5 + movd %mm5,96(%esi) + + /* 3 */ + movl ASM_NAME(pnts)+8,%eax + movq 0(%eax),%mm0 + movq 8(%eax),%mm1 + /* 0,6 */ + movq 0(%esi),%mm2 + movq %mm2,%mm3 + movd 28(%esi),%mm4 + punpckldq 24(%esi),%mm4 + pfadd %mm4,%mm2 + pfsub %mm4,%mm3 + pfmul %mm0,%mm3 + movq %mm2,0(%ebx) + movd %mm3,28(%ebx) + psrlq $32,%mm3 + movd %mm3,24(%ebx) + /* 2,4 */ + movq 8(%esi),%mm5 + movq %mm5,%mm6 + movd 20(%esi),%mm7 + punpckldq 16(%esi),%mm7 + pfadd %mm7,%mm5 + pfsub %mm7,%mm6 + pfmul %mm1,%mm6 + movq %mm5,8(%ebx) + movd %mm6,20(%ebx) + psrlq $32,%mm6 + movd %mm6,16(%ebx) + /* 8,14 */ + movq 32(%esi),%mm2 + movq %mm2,%mm3 + movd 60(%esi),%mm4 + punpckldq 56(%esi),%mm4 + pfadd %mm4,%mm2 + pfsubr %mm4,%mm3 + pfmul %mm0,%mm3 + movq %mm2,32(%ebx) + movd %mm3,60(%ebx) + psrlq $32,%mm3 + movd %mm3,56(%ebx) + /* 10,12 */ + movq 40(%esi),%mm5 + movq %mm5,%mm6 + movd 52(%esi),%mm7 + punpckldq 48(%esi),%mm7 + pfadd %mm7,%mm5 + pfsubr %mm7,%mm6 + pfmul %mm1,%mm6 + movq %mm5,40(%ebx) + movd %mm6,52(%ebx) + psrlq $32,%mm6 + movd %mm6,48(%ebx) + /* 16,22 */ + movq 64(%esi),%mm2 + movq %mm2,%mm3 + movd 92(%esi),%mm4 + punpckldq 88(%esi),%mm4 + pfadd %mm4,%mm2 + pfsub %mm4,%mm3 + pfmul %mm0,%mm3 + movq %mm2,64(%ebx) + movd %mm3,92(%ebx) + psrlq $32,%mm3 + movd %mm3,88(%ebx) + /* 18,20 */ + movq 72(%esi),%mm5 + movq %mm5,%mm6 + movd 84(%esi),%mm7 + punpckldq 80(%esi),%mm7 + pfadd %mm7,%mm5 + pfsub %mm7,%mm6 + pfmul %mm1,%mm6 + movq %mm5,72(%ebx) + movd %mm6,84(%ebx) + psrlq $32,%mm6 + movd %mm6,80(%ebx) + /* 24,30 */ + movq 96(%esi),%mm2 + movq %mm2,%mm3 + movd 124(%esi),%mm4 + punpckldq 120(%esi),%mm4 + pfadd %mm4,%mm2 + pfsubr %mm4,%mm3 + pfmul %mm0,%mm3 + movq %mm2,96(%ebx) + movd %mm3,124(%ebx) + psrlq $32,%mm3 + movd %mm3,120(%ebx) + /* 26,28 */ + movq 104(%esi),%mm5 + movq %mm5,%mm6 + movd 116(%esi),%mm7 + punpckldq 112(%esi),%mm7 + pfadd %mm7,%mm5 + pfsubr %mm7,%mm6 + pfmul %mm1,%mm6 + movq %mm5,104(%ebx) + movd %mm6,116(%ebx) + psrlq $32,%mm6 + movd %mm6,112(%ebx) + + /* 4 */ + movl ASM_NAME(pnts)+12,%eax + movq 0(%eax),%mm0 + /* 0 */ + movq 0(%ebx),%mm1 + movq %mm1,%mm2 + movd 12(%ebx),%mm3 + punpckldq 8(%ebx),%mm3 + pfadd %mm3,%mm1 + pfsub %mm3,%mm2 + pfmul %mm0,%mm2 + movq %mm1,0(%esi) + movd %mm2,12(%esi) + psrlq $32,%mm2 + movd %mm2,8(%esi) + /* 4 */ + movq 16(%ebx),%mm4 + movq %mm4,%mm5 + movd 28(%ebx),%mm6 + punpckldq 24(%ebx),%mm6 + pfadd %mm6,%mm4 + pfsubr %mm6,%mm5 + pfmul %mm0,%mm5 + movq %mm4,16(%esi) + movd %mm5,28(%esi) + psrlq $32,%mm5 + movd %mm5,24(%esi) + /* 8 */ + movq 32(%ebx),%mm1 + movq %mm1,%mm2 + movd 44(%ebx),%mm3 + punpckldq 40(%ebx),%mm3 + pfadd %mm3,%mm1 + pfsub %mm3,%mm2 + pfmul %mm0,%mm2 + movq %mm1,32(%esi) + movd %mm2,44(%esi) + psrlq $32,%mm2 + movd %mm2,40(%esi) + /* 12 */ + movq 48(%ebx),%mm4 + movq %mm4,%mm5 + movd 60(%ebx),%mm6 + punpckldq 56(%ebx),%mm6 + pfadd %mm6,%mm4 + pfsubr %mm6,%mm5 + pfmul %mm0,%mm5 + movq %mm4,48(%esi) + movd %mm5,60(%esi) + psrlq $32,%mm5 + movd %mm5,56(%esi) + /* 16 */ + movq 64(%ebx),%mm1 + movq %mm1,%mm2 + movd 76(%ebx),%mm3 + punpckldq 72(%ebx),%mm3 + pfadd %mm3,%mm1 + pfsub %mm3,%mm2 + pfmul %mm0,%mm2 + movq %mm1,64(%esi) + movd %mm2,76(%esi) + psrlq $32,%mm2 + movd %mm2,72(%esi) + /* 20 */ + movq 80(%ebx),%mm4 + movq %mm4,%mm5 + movd 92(%ebx),%mm6 + punpckldq 88(%ebx),%mm6 + pfadd %mm6,%mm4 + pfsubr %mm6,%mm5 + pfmul %mm0,%mm5 + movq %mm4,80(%esi) + movd %mm5,92(%esi) + psrlq $32,%mm5 + movd %mm5,88(%esi) + /* 24 */ + movq 96(%ebx),%mm1 + movq %mm1,%mm2 + movd 108(%ebx),%mm3 + punpckldq 104(%ebx),%mm3 + pfadd %mm3,%mm1 + pfsub %mm3,%mm2 + pfmul %mm0,%mm2 + movq %mm1,96(%esi) + movd %mm2,108(%esi) + psrlq $32,%mm2 + movd %mm2,104(%esi) + /* 28 */ + movq 112(%ebx),%mm4 + movq %mm4,%mm5 + movd 124(%ebx),%mm6 + punpckldq 120(%ebx),%mm6 + pfadd %mm6,%mm4 + pfsubr %mm6,%mm5 + pfmul %mm0,%mm5 + movq %mm4,112(%esi) + movd %mm5,124(%esi) + psrlq $32,%mm5 + movd %mm5,120(%esi) + + /* 5 */ + movl $-1,%eax + movd %eax,%mm1 + movl $1,%eax + /* L | H */ + movd %eax,%mm0 + punpckldq %mm1,%mm0 + /* 1.0 | -1.0 */ + pi2fd %mm0,%mm0 + movd %eax,%mm1 + pi2fd %mm1,%mm1 + movl ASM_NAME(pnts)+16,%eax + movd 0(%eax),%mm2 + /* 1.0 | cos0 */ + punpckldq %mm2,%mm1 + /* 0 */ + movq 0(%esi),%mm2 + movq %mm2,%mm3 + pfmul %mm0,%mm3 + pfacc %mm3,%mm2 + pfmul %mm1,%mm2 + movq %mm2,0(%ebx) + movq 8(%esi),%mm4 + movq %mm4,%mm5 + pfmul %mm0,%mm5 + pfacc %mm5,%mm4 + pfmul %mm0,%mm4 + pfmul %mm1,%mm4 + movq %mm4,%mm5 + psrlq $32,%mm5 + pfacc %mm5,%mm4 + movq %mm4,8(%ebx) + /* 4 */ + movq 16(%esi),%mm2 + movq %mm2,%mm3 + pfmul %mm0,%mm3 + pfacc %mm3,%mm2 + pfmul %mm1,%mm2 + movq 24(%esi),%mm4 + movq %mm4,%mm5 + pfmul %mm0,%mm5 + pfacc %mm5,%mm4 + pfmul %mm0,%mm4 + pfmul %mm1,%mm4 + movq %mm4,%mm5 + psrlq $32,%mm5 + pfacc %mm5,%mm4 + movq %mm2,%mm3 + psrlq $32,%mm3 + pfadd %mm4,%mm2 + pfadd %mm3,%mm4 + movq %mm2,16(%ebx) + movq %mm4,24(%ebx) + /* 8 */ + movq 32(%esi),%mm2 + movq %mm2,%mm3 + pfmul %mm0,%mm3 + pfacc %mm3,%mm2 + pfmul %mm1,%mm2 + movq %mm2,32(%ebx) + movq 40(%esi),%mm4 + movq %mm4,%mm5 + pfmul %mm0,%mm5 + pfacc %mm5,%mm4 + pfmul %mm0,%mm4 + pfmul %mm1,%mm4 + movq %mm4,%mm5 + psrlq $32,%mm5 + pfacc %mm5,%mm4 + movq %mm4,40(%ebx) + /* 12 */ + movq 48(%esi),%mm2 + movq %mm2,%mm3 + pfmul %mm0,%mm3 + pfacc %mm3,%mm2 + pfmul %mm1,%mm2 + movq 56(%esi),%mm4 + movq %mm4,%mm5 + pfmul %mm0,%mm5 + pfacc %mm5,%mm4 + pfmul %mm0,%mm4 + pfmul %mm1,%mm4 + movq %mm4,%mm5 + psrlq $32,%mm5 + pfacc %mm5,%mm4 + movq %mm2,%mm3 + psrlq $32,%mm3 + pfadd %mm4,%mm2 + pfadd %mm3,%mm4 + movq %mm2,48(%ebx) + movq %mm4,56(%ebx) + /* 16 */ + movq 64(%esi),%mm2 + movq %mm2,%mm3 + pfmul %mm0,%mm3 + pfacc %mm3,%mm2 + pfmul %mm1,%mm2 + movq %mm2,64(%ebx) + movq 72(%esi),%mm4 + movq %mm4,%mm5 + pfmul %mm0,%mm5 + pfacc %mm5,%mm4 + pfmul %mm0,%mm4 + pfmul %mm1,%mm4 + movq %mm4,%mm5 + psrlq $32,%mm5 + pfacc %mm5,%mm4 + movq %mm4,72(%ebx) + /* 20 */ + movq 80(%esi),%mm2 + movq %mm2,%mm3 + pfmul %mm0,%mm3 + pfacc %mm3,%mm2 + pfmul %mm1,%mm2 + movq 88(%esi),%mm4 + movq %mm4,%mm5 + pfmul %mm0,%mm5 + pfacc %mm5,%mm4 + pfmul %mm0,%mm4 + pfmul %mm1,%mm4 + movq %mm4,%mm5 + psrlq $32,%mm5 + pfacc %mm5,%mm4 + movq %mm2,%mm3 + psrlq $32,%mm3 + pfadd %mm4,%mm2 + pfadd %mm3,%mm4 + movq %mm2,80(%ebx) + movq %mm4,88(%ebx) + /* 24 */ + movq 96(%esi),%mm2 + movq %mm2,%mm3 + pfmul %mm0,%mm3 + pfacc %mm3,%mm2 + pfmul %mm1,%mm2 + movq %mm2,96(%ebx) + movq 104(%esi),%mm4 + movq %mm4,%mm5 + pfmul %mm0,%mm5 + pfacc %mm5,%mm4 + pfmul %mm0,%mm4 + pfmul %mm1,%mm4 + movq %mm4,%mm5 + psrlq $32,%mm5 + pfacc %mm5,%mm4 + movq %mm4,104(%ebx) + /* 28 */ + movq 112(%esi),%mm2 + movq %mm2,%mm3 + pfmul %mm0,%mm3 + pfacc %mm3,%mm2 + pfmul %mm1,%mm2 + movq 120(%esi),%mm4 + movq %mm4,%mm5 + pfmul %mm0,%mm5 + pfacc %mm5,%mm4 + pfmul %mm0,%mm4 + pfmul %mm1,%mm4 + movq %mm4,%mm5 + psrlq $32,%mm5 + pfacc %mm5,%mm4 + movq %mm2,%mm3 + psrlq $32,%mm3 + pfadd %mm4,%mm2 + pfadd %mm3,%mm4 + movq %mm2,112(%ebx) + movq %mm4,120(%ebx) + + /* Phase6 */ + movl 0(%ebx),%eax + movl %eax,1024(%ebp) + movl 4(%ebx),%eax + movl %eax,0(%ebp) + movl %eax,0(%edx) + movl 8(%ebx),%eax + movl %eax,512(%ebp) + movl 12(%ebx),%eax + movl %eax,512(%edx) + + movl 16(%ebx),%eax + movl %eax,768(%ebp) + movl 20(%ebx),%eax + movl %eax,256(%edx) + + movl 24(%ebx),%eax + movl %eax,256(%ebp) + movl 28(%ebx),%eax + movl %eax,768(%edx) + + movq 32(%ebx),%mm0 + movq 48(%ebx),%mm1 + pfadd %mm1,%mm0 + movd %mm0,896(%ebp) + psrlq $32,%mm0 + movd %mm0,128(%edx) + movq 40(%ebx),%mm2 + pfadd %mm2,%mm1 + movd %mm1,640(%ebp) + psrlq $32,%mm1 + movd %mm1,384(%edx) + + movq 56(%ebx),%mm3 + pfadd %mm3,%mm2 + movd %mm2,384(%ebp) + psrlq $32,%mm2 + movd %mm2,640(%edx) + + movd 36(%ebx),%mm4 + pfadd %mm4,%mm3 + movd %mm3,128(%ebp) + psrlq $32,%mm3 + movd %mm3,896(%edx) + movq 96(%ebx),%mm0 + movq 64(%ebx),%mm1 + + movq 112(%ebx),%mm2 + pfadd %mm2,%mm0 + movq %mm0,%mm3 + pfadd %mm1,%mm3 + movd %mm3,960(%ebp) + psrlq $32,%mm3 + movd %mm3,64(%edx) + movq 80(%ebx),%mm1 + pfadd %mm1,%mm0 + movd %mm0,832(%ebp) + psrlq $32,%mm0 + movd %mm0,192(%edx) + movq 104(%ebx),%mm3 + pfadd %mm3,%mm2 + movq %mm2,%mm4 + pfadd %mm1,%mm4 + movd %mm4,704(%ebp) + psrlq $32,%mm4 + movd %mm4,320(%edx) + movq 72(%ebx),%mm1 + pfadd %mm1,%mm2 + movd %mm2,576(%ebp) + psrlq $32,%mm2 + movd %mm2,448(%edx) + + movq 120(%ebx),%mm4 + pfadd %mm4,%mm3 + movq %mm3,%mm5 + pfadd %mm1,%mm5 + movd %mm5,448(%ebp) + psrlq $32,%mm5 + movd %mm5,576(%edx) + movq 88(%ebx),%mm1 + pfadd %mm1,%mm3 + movd %mm3,320(%ebp) + psrlq $32,%mm3 + movd %mm3,704(%edx) + + movd 100(%ebx),%mm5 + pfadd %mm5,%mm4 + movq %mm4,%mm6 + pfadd %mm1,%mm6 + movd %mm6,192(%ebp) + psrlq $32,%mm6 + movd %mm6,832(%edx) + movd 68(%ebx),%mm1 + pfadd %mm1,%mm4 + movd %mm4,64(%ebp) + psrlq $32,%mm4 + movd %mm4,960(%edx) + + /* femms */ + + popl %ebx + popl %esi + popl %edi + popl %ebp + addl $256,%esp + + ret + +NONEXEC_STACK diff --git a/lib/3rdparty/libmpg123/dct64_3dnowext.S b/lib/3rdparty/libmpg123/dct64_3dnowext.S new file mode 100644 index 00000000000..1b4c583127a --- /dev/null +++ b/lib/3rdparty/libmpg123/dct64_3dnowext.S @@ -0,0 +1,714 @@ +/* + dct64_3dnowext: extended 3DNow optimized DCT64 + + copyright ?-2007 by the mpg123 project - free software under the terms of the LGPL 2.1 + see COPYING and AUTHORS files in distribution or http://mpg123.org + + Transformed back into standalone asm, with help of + gcc -S -DHAVE_CONFIG_H -I. -march=k6-3 -O3 -Wall -pedantic -fno-strict-aliasing -DREAL_IS_FLOAT -c -o dct64_3dnowext.{S,c} + + MPlayer comment follows. +*/ + +/* +* This code was taken from http://www.mpg123.org +* See ChangeLog of mpg123-0.59s-pre.1 for detail +* Applied to mplayer by Nick Kurshev +* Partial 3dnowex-DSP! optimization by Nick Kurshev +* +* TODO: optimize scalar 3dnow! code +* Warning: Phases 7 & 8 are not tested +*/ + +#include "mangle.h" + + .data + ALIGN4 + /* .type plus_1f, @object + .size plus_1f, 4 */ +plus_1f: + .long 1065353216 + ALIGN8 + /* .type x_plus_minus_3dnow, @object + .size x_plus_minus_3dnow, 8 */ +x_plus_minus_3dnow: + .long 0 + .long -2147483648 + + .text + ALIGN32 +.globl ASM_NAME(dct64_3dnowext) + /* .type ASM_NAME(dct64_3dnowext), @function */ +ASM_NAME(dct64_3dnowext): + pushl %ebp + movl %esp, %ebp + pushl %edi + pushl %esi + pushl %ebx + subl $256, %esp +/* APP */ + movl 16(%ebp),%eax + leal 128+-268(%ebp),%edx + movl 8(%ebp),%esi + movl 12(%ebp),%edi + movl ASM_VALUE(costab_mmxsse),%ebx + leal -268(%ebp),%ecx + movq (%eax), %mm0 + movq 8(%eax), %mm4 + movq %mm0, %mm3 + movq %mm4, %mm7 + pswapd 120(%eax), %mm1 + pswapd 112(%eax), %mm5 + pfadd %mm1, %mm0 + pfadd %mm5, %mm4 + movq %mm0, (%edx) + movq %mm4, 8(%edx) + pfsub %mm1, %mm3 + pfsub %mm5, %mm7 + pfmul (%ebx), %mm3 + pfmul 8(%ebx), %mm7 + pswapd %mm3, %mm3 + pswapd %mm7, %mm7 + movq %mm3, 120(%edx) + movq %mm7, 112(%edx) + movq 16(%eax), %mm0 + movq 24(%eax), %mm4 + movq %mm0, %mm3 + movq %mm4, %mm7 + pswapd 104(%eax), %mm1 + pswapd 96(%eax), %mm5 + pfadd %mm1, %mm0 + pfadd %mm5, %mm4 + movq %mm0, 16(%edx) + movq %mm4, 24(%edx) + pfsub %mm1, %mm3 + pfsub %mm5, %mm7 + pfmul 16(%ebx), %mm3 + pfmul 24(%ebx), %mm7 + pswapd %mm3, %mm3 + pswapd %mm7, %mm7 + movq %mm3, 104(%edx) + movq %mm7, 96(%edx) + movq 32(%eax), %mm0 + movq 40(%eax), %mm4 + movq %mm0, %mm3 + movq %mm4, %mm7 + pswapd 88(%eax), %mm1 + pswapd 80(%eax), %mm5 + pfadd %mm1, %mm0 + pfadd %mm5, %mm4 + movq %mm0, 32(%edx) + movq %mm4, 40(%edx) + pfsub %mm1, %mm3 + pfsub %mm5, %mm7 + pfmul 32(%ebx), %mm3 + pfmul 40(%ebx), %mm7 + pswapd %mm3, %mm3 + pswapd %mm7, %mm7 + movq %mm3, 88(%edx) + movq %mm7, 80(%edx) + movq 48(%eax), %mm0 + movq 56(%eax), %mm4 + movq %mm0, %mm3 + movq %mm4, %mm7 + pswapd 72(%eax), %mm1 + pswapd 64(%eax), %mm5 + pfadd %mm1, %mm0 + pfadd %mm5, %mm4 + movq %mm0, 48(%edx) + movq %mm4, 56(%edx) + pfsub %mm1, %mm3 + pfsub %mm5, %mm7 + pfmul 48(%ebx), %mm3 + pfmul 56(%ebx), %mm7 + pswapd %mm3, %mm3 + pswapd %mm7, %mm7 + movq %mm3, 72(%edx) + movq %mm7, 64(%edx) + movq (%edx), %mm0 + movq 8(%edx), %mm4 + movq %mm0, %mm3 + movq %mm4, %mm7 + pswapd 56(%edx), %mm1 + pswapd 48(%edx), %mm5 + pfadd %mm1, %mm0 + pfadd %mm5, %mm4 + movq %mm0, (%ecx) + movq %mm4, 8(%ecx) + pfsub %mm1, %mm3 + pfsub %mm5, %mm7 + pfmul 64(%ebx), %mm3 + pfmul 72(%ebx), %mm7 + pswapd %mm3, %mm3 + pswapd %mm7, %mm7 + movq %mm3, 56(%ecx) + movq %mm7, 48(%ecx) + movq 16(%edx), %mm0 + movq 24(%edx), %mm4 + movq %mm0, %mm3 + movq %mm4, %mm7 + pswapd 40(%edx), %mm1 + pswapd 32(%edx), %mm5 + pfadd %mm1, %mm0 + pfadd %mm5, %mm4 + movq %mm0, 16(%ecx) + movq %mm4, 24(%ecx) + pfsub %mm1, %mm3 + pfsub %mm5, %mm7 + pfmul 80(%ebx), %mm3 + pfmul 88(%ebx), %mm7 + pswapd %mm3, %mm3 + pswapd %mm7, %mm7 + movq %mm3, 40(%ecx) + movq %mm7, 32(%ecx) + movq 64(%edx), %mm0 + movq 72(%edx), %mm4 + movq %mm0, %mm3 + movq %mm4, %mm7 + pswapd 120(%edx), %mm1 + pswapd 112(%edx), %mm5 + pfadd %mm1, %mm0 + pfadd %mm5, %mm4 + movq %mm0, 64(%ecx) + movq %mm4, 72(%ecx) + pfsubr %mm1, %mm3 + pfsubr %mm5, %mm7 + pfmul 64(%ebx), %mm3 + pfmul 72(%ebx), %mm7 + pswapd %mm3, %mm3 + pswapd %mm7, %mm7 + movq %mm3, 120(%ecx) + movq %mm7, 112(%ecx) + movq 80(%edx), %mm0 + movq 88(%edx), %mm4 + movq %mm0, %mm3 + movq %mm4, %mm7 + pswapd 104(%edx), %mm1 + pswapd 96(%edx), %mm5 + pfadd %mm1, %mm0 + pfadd %mm5, %mm4 + movq %mm0, 80(%ecx) + movq %mm4, 88(%ecx) + pfsubr %mm1, %mm3 + pfsubr %mm5, %mm7 + pfmul 80(%ebx), %mm3 + pfmul 88(%ebx), %mm7 + pswapd %mm3, %mm3 + pswapd %mm7, %mm7 + movq %mm3, 104(%ecx) + movq %mm7, 96(%ecx) + movq 96(%ebx), %mm2 + movq 104(%ebx), %mm6 + movq (%ecx), %mm0 + movq 8(%ecx), %mm4 + movq %mm0, %mm3 + movq %mm4, %mm7 + pswapd 24(%ecx), %mm1 + pswapd 16(%ecx), %mm5 + pfadd %mm1, %mm0 + pfadd %mm5, %mm4 + movq %mm0, (%edx) + movq %mm4, 8(%edx) + pfsub %mm1, %mm3 + pfsub %mm5, %mm7 + pfmul %mm2, %mm3 + pfmul %mm6, %mm7 + pswapd %mm3, %mm3 + pswapd %mm7, %mm7 + movq %mm3, 24(%edx) + movq %mm7, 16(%edx) + movq 32(%ecx), %mm0 + movq 40(%ecx), %mm4 + movq %mm0, %mm3 + movq %mm4, %mm7 + pswapd 56(%ecx), %mm1 + pswapd 48(%ecx), %mm5 + pfadd %mm1, %mm0 + pfadd %mm5, %mm4 + movq %mm0, 32(%edx) + movq %mm4, 40(%edx) + pfsubr %mm1, %mm3 + pfsubr %mm5, %mm7 + pfmul %mm2, %mm3 + pfmul %mm6, %mm7 + pswapd %mm3, %mm3 + pswapd %mm7, %mm7 + movq %mm3, 56(%edx) + movq %mm7, 48(%edx) + movq 64(%ecx), %mm0 + movq 72(%ecx), %mm4 + movq %mm0, %mm3 + movq %mm4, %mm7 + pswapd 88(%ecx), %mm1 + pswapd 80(%ecx), %mm5 + pfadd %mm1, %mm0 + pfadd %mm5, %mm4 + movq %mm0, 64(%edx) + movq %mm4, 72(%edx) + pfsub %mm1, %mm3 + pfsub %mm5, %mm7 + pfmul %mm2, %mm3 + pfmul %mm6, %mm7 + pswapd %mm3, %mm3 + pswapd %mm7, %mm7 + movq %mm3, 88(%edx) + movq %mm7, 80(%edx) + movq 96(%ecx), %mm0 + movq 104(%ecx), %mm4 + movq %mm0, %mm3 + movq %mm4, %mm7 + pswapd 120(%ecx), %mm1 + pswapd 112(%ecx), %mm5 + pfadd %mm1, %mm0 + pfadd %mm5, %mm4 + movq %mm0, 96(%edx) + movq %mm4, 104(%edx) + pfsubr %mm1, %mm3 + pfsubr %mm5, %mm7 + pfmul %mm2, %mm3 + pfmul %mm6, %mm7 + pswapd %mm3, %mm3 + pswapd %mm7, %mm7 + movq %mm3, 120(%edx) + movq %mm7, 112(%edx) + movq 112(%ebx), %mm2 + movq (%edx), %mm0 + movq 16(%edx), %mm4 + movq %mm0, %mm3 + movq %mm4, %mm7 + pswapd 8(%edx), %mm1 + pswapd 24(%edx), %mm5 + pfadd %mm1, %mm0 + pfadd %mm5, %mm4 + movq %mm0, (%ecx) + movq %mm4, 16(%ecx) + pfsub %mm1, %mm3 + pfsubr %mm5, %mm7 + pfmul %mm2, %mm3 + pfmul %mm2, %mm7 + pswapd %mm3, %mm3 + pswapd %mm7, %mm7 + movq %mm3, 8(%ecx) + movq %mm7, 24(%ecx) + movq 32(%edx), %mm0 + movq 48(%edx), %mm4 + movq %mm0, %mm3 + movq %mm4, %mm7 + pswapd 40(%edx), %mm1 + pswapd 56(%edx), %mm5 + pfadd %mm1, %mm0 + pfadd %mm5, %mm4 + movq %mm0, 32(%ecx) + movq %mm4, 48(%ecx) + pfsub %mm1, %mm3 + pfsubr %mm5, %mm7 + pfmul %mm2, %mm3 + pfmul %mm2, %mm7 + pswapd %mm3, %mm3 + pswapd %mm7, %mm7 + movq %mm3, 40(%ecx) + movq %mm7, 56(%ecx) + movq 64(%edx), %mm0 + movq 80(%edx), %mm4 + movq %mm0, %mm3 + movq %mm4, %mm7 + pswapd 72(%edx), %mm1 + pswapd 88(%edx), %mm5 + pfadd %mm1, %mm0 + pfadd %mm5, %mm4 + movq %mm0, 64(%ecx) + movq %mm4, 80(%ecx) + pfsub %mm1, %mm3 + pfsubr %mm5, %mm7 + pfmul %mm2, %mm3 + pfmul %mm2, %mm7 + pswapd %mm3, %mm3 + pswapd %mm7, %mm7 + movq %mm3, 72(%ecx) + movq %mm7, 88(%ecx) + movq 96(%edx), %mm0 + movq 112(%edx), %mm4 + movq %mm0, %mm3 + movq %mm4, %mm7 + pswapd 104(%edx), %mm1 + pswapd 120(%edx), %mm5 + pfadd %mm1, %mm0 + pfadd %mm5, %mm4 + movq %mm0, 96(%ecx) + movq %mm4, 112(%ecx) + pfsub %mm1, %mm3 + pfsubr %mm5, %mm7 + pfmul %mm2, %mm3 + pfmul %mm2, %mm7 + pswapd %mm3, %mm3 + pswapd %mm7, %mm7 + movq %mm3, 104(%ecx) + movq %mm7, 120(%ecx) + movd plus_1f, %mm6 + punpckldq 120(%ebx), %mm6 + movq x_plus_minus_3dnow, %mm7 + movq 32(%ecx), %mm0 + movq 64(%ecx), %mm2 + movq %mm0, %mm1 + movq %mm2, %mm3 + pxor %mm7, %mm1 + pxor %mm7, %mm3 + pfacc %mm1, %mm0 + pfacc %mm3, %mm2 + pfmul %mm6, %mm0 + pfmul %mm6, %mm2 + movq %mm0, 32(%edx) + movq %mm2, 64(%edx) + movd 44(%ecx), %mm0 + movd 40(%ecx), %mm2 + movd 120(%ebx), %mm3 + punpckldq 76(%ecx), %mm0 + punpckldq 72(%ecx), %mm2 + punpckldq %mm3, %mm3 + movq %mm0, %mm4 + movq %mm2, %mm5 + pfsub %mm2, %mm0 + pfmul %mm3, %mm0 + movq %mm0, %mm1 + pfadd %mm5, %mm0 + pfadd %mm4, %mm0 + movq %mm0, %mm2 + punpckldq %mm1, %mm0 + punpckhdq %mm1, %mm2 + movq %mm0, 40(%edx) + movq %mm2, 72(%edx) + movd 48(%ecx), %mm3 + movd 60(%ecx), %mm2 + pfsub 52(%ecx), %mm3 + pfsub 56(%ecx), %mm2 + pfmul 120(%ebx), %mm3 + pfmul 120(%ebx), %mm2 + movq %mm2, %mm1 + pfadd 56(%ecx), %mm1 + pfadd 60(%ecx), %mm1 + movq %mm1, %mm0 + pfadd 48(%ecx), %mm0 + pfadd 52(%ecx), %mm0 + pfadd %mm3, %mm1 + punpckldq %mm2, %mm1 + pfadd %mm3, %mm2 + punpckldq %mm2, %mm0 + movq %mm1, 56(%edx) + movq %mm0, 48(%edx) + movd 92(%ecx), %mm1 + pfsub 88(%ecx), %mm1 + pfmul 120(%ebx), %mm1 + movd %mm1, 92(%edx) + pfadd 92(%ecx), %mm1 + pfadd 88(%ecx), %mm1 + movq %mm1, %mm0 + pfadd 80(%ecx), %mm0 + pfadd 84(%ecx), %mm0 + movd %mm0, 80(%edx) + movd 80(%ecx), %mm0 + pfsub 84(%ecx), %mm0 + pfmul 120(%ebx), %mm0 + pfadd %mm0, %mm1 + pfadd 92(%edx), %mm0 + punpckldq %mm1, %mm0 + movq %mm0, 84(%edx) + movq 96(%ecx), %mm0 + movq %mm0, %mm1 + pxor %mm7, %mm1 + pfacc %mm1, %mm0 + pfmul %mm6, %mm0 + movq %mm0, 96(%edx) + movd 108(%ecx), %mm0 + pfsub 104(%ecx), %mm0 + pfmul 120(%ebx), %mm0 + movd %mm0, 108(%edx) + pfadd 104(%ecx), %mm0 + pfadd 108(%ecx), %mm0 + movd %mm0, 104(%edx) + movd 124(%ecx), %mm1 + pfsub 120(%ecx), %mm1 + pfmul 120(%ebx), %mm1 + movd %mm1, 124(%edx) + pfadd 120(%ecx), %mm1 + pfadd 124(%ecx), %mm1 + movq %mm1, %mm0 + pfadd 112(%ecx), %mm0 + pfadd 116(%ecx), %mm0 + movd %mm0, 112(%edx) + movd 112(%ecx), %mm0 + pfsub 116(%ecx), %mm0 + pfmul 120(%ebx), %mm0 + pfadd %mm0,%mm1 + pfadd 124(%edx), %mm0 + punpckldq %mm1, %mm0 + movq %mm0, 116(%edx) + jnz .L01 + movd (%ecx), %mm0 + pfadd 4(%ecx), %mm0 + movd %mm0, 1024(%esi) + movd (%ecx), %mm0 + pfsub 4(%ecx), %mm0 + pfmul 120(%ebx), %mm0 + movd %mm0, (%esi) + movd %mm0, (%edi) + movd 12(%ecx), %mm0 + pfsub 8(%ecx), %mm0 + pfmul 120(%ebx), %mm0 + movd %mm0, 512(%edi) + pfadd 12(%ecx), %mm0 + pfadd 8(%ecx), %mm0 + movd %mm0, 512(%esi) + movd 16(%ecx), %mm0 + pfsub 20(%ecx), %mm0 + pfmul 120(%ebx), %mm0 + movq %mm0, %mm3 + movd 28(%ecx), %mm0 + pfsub 24(%ecx), %mm0 + pfmul 120(%ebx), %mm0 + movd %mm0, 768(%edi) + movq %mm0, %mm2 + pfadd 24(%ecx), %mm0 + pfadd 28(%ecx), %mm0 + movq %mm0, %mm1 + pfadd 16(%ecx), %mm0 + pfadd 20(%ecx), %mm0 + movd %mm0, 768(%esi) + pfadd %mm3, %mm1 + movd %mm1, 256(%esi) + pfadd %mm3, %mm2 + movd %mm2, 256(%edi) + movq 32(%edx), %mm0 + movq 48(%edx), %mm1 + pfadd 48(%edx), %mm0 + pfadd 40(%edx), %mm1 + movd %mm0, 896(%esi) + movd %mm1, 640(%esi) + psrlq $32, %mm0 + psrlq $32, %mm1 + movd %mm0, 128(%edi) + movd %mm1, 384(%edi) + movd 40(%edx), %mm0 + pfadd 56(%edx), %mm0 + movd %mm0, 384(%esi) + movd 56(%edx), %mm0 + pfadd 36(%edx), %mm0 + movd %mm0, 128(%esi) + movd 60(%edx), %mm0 + movd %mm0, 896(%edi) + pfadd 44(%edx), %mm0 + movd %mm0, 640(%edi) + movq 96(%edx), %mm0 + movq 112(%edx), %mm2 + movq 104(%edx), %mm4 + pfadd 112(%edx), %mm0 + pfadd 104(%edx), %mm2 + pfadd 120(%edx), %mm4 + movq %mm0, %mm1 + movq %mm2, %mm3 + movq %mm4, %mm5 + pfadd 64(%edx), %mm0 + pfadd 80(%edx), %mm2 + pfadd 72(%edx), %mm4 + movd %mm0, 960(%esi) + movd %mm2, 704(%esi) + movd %mm4, 448(%esi) + psrlq $32, %mm0 + psrlq $32, %mm2 + psrlq $32, %mm4 + movd %mm0, 64(%edi) + movd %mm2, 320(%edi) + movd %mm4, 576(%edi) + pfadd 80(%edx), %mm1 + pfadd 72(%edx), %mm3 + pfadd 88(%edx), %mm5 + movd %mm1, 832(%esi) + movd %mm3, 576(%esi) + movd %mm5, 320(%esi) + psrlq $32, %mm1 + psrlq $32, %mm3 + psrlq $32, %mm5 + movd %mm1, 192(%edi) + movd %mm3, 448(%edi) + movd %mm5, 704(%edi) + movd 120(%edx), %mm0 + pfadd 100(%edx), %mm0 + movq %mm0, %mm1 + pfadd 88(%edx), %mm0 + movd %mm0, 192(%esi) + pfadd 68(%edx), %mm1 + movd %mm1, 64(%esi) + movd 124(%edx), %mm0 + movd %mm0, 960(%edi) + pfadd 92(%edx), %mm0 + movd %mm0, 832(%edi) + jmp .L_bye +.L01: + movq (%ecx), %mm0 + movq %mm0, %mm1 + pxor %mm7, %mm1 + pfacc %mm1, %mm0 + pfmul %mm6, %mm0 + pf2iw %mm0, %mm0 + movd %mm0, %eax + movw %ax, 512(%esi) + psrlq $32, %mm0 + movd %mm0, %eax + movw %ax, (%esi) + movd 12(%ecx), %mm0 + pfsub 8(%ecx), %mm0 + pfmul 120(%ebx), %mm0 + pf2iw %mm0, %mm7 + movd %mm7, %eax + movw %ax, 256(%edi) + pfadd 12(%ecx), %mm0 + pfadd 8(%ecx), %mm0 + pf2iw %mm0, %mm0 + movd %mm0, %eax + movw %ax, 256(%esi) + movd 16(%ecx), %mm3 + pfsub 20(%ecx), %mm3 + pfmul 120(%ebx), %mm3 + movq %mm3, %mm2 + movd 28(%ecx), %mm2 + pfsub 24(%ecx), %mm2 + pfmul 120(%ebx), %mm2 + movq %mm2, %mm1 + pf2iw %mm2, %mm7 + movd %mm7, %eax + movw %ax, 384(%edi) + pfadd 24(%ecx), %mm1 + pfadd 28(%ecx), %mm1 + movq %mm1, %mm0 + pfadd 16(%ecx), %mm0 + pfadd 20(%ecx), %mm0 + pf2iw %mm0, %mm0 + movd %mm0, %eax + movw %ax, 384(%esi) + pfadd %mm3, %mm1 + pf2iw %mm1, %mm1 + movd %mm1, %eax + movw %ax, 128(%esi) + pfadd %mm3, %mm2 + pf2iw %mm2, %mm2 + movd %mm2, %eax + movw %ax, 128(%edi) + movq 32(%edx), %mm0 + movq 48(%edx), %mm1 + pfadd 48(%edx), %mm0 + pfadd 40(%edx), %mm1 + pf2iw %mm0, %mm0 + pf2iw %mm1, %mm1 + movd %mm0, %eax + movd %mm1, %ecx + movw %ax, 448(%esi) + movw %cx, 320(%esi) + psrlq $32, %mm0 + psrlq $32, %mm1 + movd %mm0, %eax + movd %mm1, %ecx + movw %ax, 64(%edi) + movw %cx, 192(%edi) + movd 40(%edx), %mm3 + movd 56(%edx), %mm4 + movd 60(%edx), %mm0 + movd 44(%edx), %mm2 + movd 120(%edx), %mm5 + punpckldq %mm4, %mm3 + punpckldq 124(%edx), %mm0 + pfadd 100(%edx), %mm5 + punpckldq 36(%edx), %mm4 + punpckldq 92(%edx), %mm2 + movq %mm5, %mm6 + pfadd %mm4, %mm3 + pf2iw %mm0, %mm1 + pf2iw %mm3, %mm3 + pfadd 88(%edx), %mm5 + movd %mm1, %eax + movd %mm3, %ecx + movw %ax, 448(%edi) + movw %cx, 192(%esi) + pf2iw %mm5, %mm5 + psrlq $32, %mm1 + psrlq $32, %mm3 + movd %mm5, %ebx + movd %mm1, %eax + movd %mm3, %ecx + movw %bx, 96(%esi) + movw %ax, 480(%edi) + movw %cx, 64(%esi) + pfadd %mm2, %mm0 + pf2iw %mm0, %mm0 + movd %mm0, %eax + pfadd 68(%edx), %mm6 + movw %ax, 320(%edi) + psrlq $32, %mm0 + pf2iw %mm6, %mm6 + movd %mm0, %eax + movd %mm6, %ebx + movw %ax, 416(%edi) + movw %bx, 32(%esi) + movq 96(%edx), %mm0 + movq 112(%edx), %mm2 + movq 104(%edx), %mm4 + pfadd %mm2, %mm0 + pfadd %mm4, %mm2 + pfadd 120(%edx), %mm4 + movq %mm0, %mm1 + movq %mm2, %mm3 + movq %mm4, %mm5 + pfadd 64(%edx), %mm0 + pfadd 80(%edx), %mm2 + pfadd 72(%edx), %mm4 + pf2iw %mm0, %mm0 + pf2iw %mm2, %mm2 + pf2iw %mm4, %mm4 + movd %mm0, %eax + movd %mm2, %ecx + movd %mm4, %ebx + movw %ax, 480(%esi) + movw %cx, 352(%esi) + movw %bx, 224(%esi) + psrlq $32, %mm0 + psrlq $32, %mm2 + psrlq $32, %mm4 + movd %mm0, %eax + movd %mm2, %ecx + movd %mm4, %ebx + movw %ax, 32(%edi) + movw %cx, 160(%edi) + movw %bx, 288(%edi) + pfadd 80(%edx), %mm1 + pfadd 72(%edx), %mm3 + pfadd 88(%edx), %mm5 + pf2iw %mm1, %mm1 + pf2iw %mm3, %mm3 + pf2iw %mm5, %mm5 + movd %mm1, %eax + movd %mm3, %ecx + movd %mm5, %ebx + movw %ax, 416(%esi) + movw %cx, 288(%esi) + movw %bx, 160(%esi) + psrlq $32, %mm1 + psrlq $32, %mm3 + psrlq $32, %mm5 + movd %mm1, %eax + movd %mm3, %ecx + movd %mm5, %ebx + movw %ax, 96(%edi) + movw %cx, 224(%edi) + movw %bx, 352(%edi) + movsw +.L_bye: + femms + +/* NO_APP */ + addl $256, %esp + popl %ebx + popl %esi + popl %edi + leave + ret + /* .size ASM_NAME(dct64_3dnowext), .-ASM_NAME(dct64_3dnowext) */ + +NONEXEC_STACK diff --git a/lib/3rdparty/libmpg123/dct64_altivec.c b/lib/3rdparty/libmpg123/dct64_altivec.c new file mode 100644 index 00000000000..3d6c7e1d1fd --- /dev/null +++ b/lib/3rdparty/libmpg123/dct64_altivec.c @@ -0,0 +1,315 @@ +/* + dct64_altivec.c: Discrete Cosine Tansform (DCT) for Altivec + + copyright ?-2006 by the mpg123 project - free software under the terms of the LGPL 2.1 + see COPYING and AUTHORS files in distribution or http://mpg123.org + initially written by Michael Hipp + altivec optimization by tmkk +*/ + +/* + * Discrete Cosine Tansform (DCT) for subband synthesis + * + * -funroll-loops (for gcc) will remove the loops for better performance + * using loops in the source-code enhances readabillity + * + * + * TODO: write an optimized version for the down-sampling modes + * (in these modes the bands 16-31 (2:1) or 8-31 (4:1) are zero + */ + +#include "mpg123lib_intern.h" + +#ifndef __APPLE__ +#include +#endif + +void dct64_altivec(real *out0,real *out1,real *samples) +{ + ALIGNED(16) real bufs[32]; + + { + register real *b1,*costab; + + vector unsigned char vinvert,vperm1,vperm2,vperm3,vperm4; + vector float v1,v2,v3,v4,v5,v6,v7,v8; + vector float vbs1,vbs2,vbs3,vbs4,vbs5,vbs6,vbs7,vbs8; + vector float vbs9,vbs10,vbs11,vbs12,vbs13,vbs14,vbs15,vbs16; + vector float vzero; + b1 = samples; + costab = pnts[0]; + + vzero = vec_xor(vzero,vzero); +#ifdef __APPLE__ + vinvert = (vector unsigned char)(12,13,14,15,8,9,10,11,4,5,6,7,0,1,2,3); +#else + vinvert = (vector unsigned char){12,13,14,15,8,9,10,11,4,5,6,7,0,1,2,3}; +#endif + vperm1 = vec_lvsl(0,b1); + vperm2 = vec_perm(vperm1,vperm1,vinvert); + + v1 = vec_ld(0,b1); + v2 = vec_ld(16,b1); + v3 = vec_ld(112,b1); + v4 = vec_ld(127,b1); + v5 = vec_perm(v1,v2,vperm1); /* b1[0,1,2,3] */ + v6 = vec_perm(v3,v4,vperm2); /* b1[31,30,29,28] */ + + vbs1 = vec_add(v5,v6); + vbs8 = vec_sub(v5,v6); + + v1 = vec_ld(32,b1); + v4 = vec_ld(96,b1); + v5 = vec_perm(v2,v1,vperm1); /* b1[4,5,6,7] */ + v6 = vec_perm(v4,v3,vperm2); /* b1[27,26,25,24] */ + + vbs2 = vec_add(v5,v6); + vbs7 = vec_sub(v5,v6); + + v2 = vec_ld(48,b1); + v3 = vec_ld(80,b1); + v5 = vec_perm(v1,v2,vperm1); /* b1[8,9,10,11] */ + v6 = vec_perm(v3,v4,vperm2); /* b1[23,22,21,20] */ + + vbs3 = vec_add(v5,v6); + vbs6 = vec_sub(v5,v6); + + v1 = vec_ld(64,b1); + v5 = vec_perm(v2,v1,vperm1); /* b1[12,13,14,15] */ + v6 = vec_perm(v1,v3,vperm2); /* b1[19,18,17,16] */ + + vbs4 = vec_add(v5,v6); + vbs5 = vec_sub(v5,v6); + + v1 = vec_ld(0,costab); + vbs8 = vec_madd(vbs8,v1,vzero); + v2 = vec_ld(16,costab); + vbs7 = vec_madd(vbs7,v2,vzero); + v3 = vec_ld(32,costab); + vbs6 = vec_madd(vbs6,v3,vzero); + v4 = vec_ld(48,costab); + vbs5 = vec_madd(vbs5,v4,vzero); + vbs6 = vec_perm(vbs6,vbs6,vinvert); + vbs5 = vec_perm(vbs5,vbs5,vinvert); + + + costab = pnts[1]; + + v1 = vec_perm(vbs4,vbs4,vinvert); + vbs9 = vec_add(vbs1,v1); + v3 = vec_sub(vbs1,v1); + v5 = vec_ld(0,costab); + v2 = vec_perm(vbs3,vbs3,vinvert); + vbs10 = vec_add(vbs2,v2); + v4 = vec_sub(vbs2,v2); + v6 = vec_ld(16,costab); + vbs12 = vec_madd(v3,v5,vzero); + vbs11 = vec_madd(v4,v6,vzero); + + v7 = vec_sub(vbs7,vbs6); + v8 = vec_sub(vbs8,vbs5); + vbs13 = vec_add(vbs5,vbs8); + vbs14 = vec_add(vbs6,vbs7); + vbs15 = vec_madd(v7,v6,vzero); + vbs16 = vec_madd(v8,v5,vzero); + + + costab = pnts[2]; + + v1 = vec_perm(vbs10,vbs10,vinvert); + v5 = vec_perm(vbs14,vbs14,vinvert); + vbs1 = vec_add(v1,vbs9); + vbs5 = vec_add(v5,vbs13); + v2 = vec_sub(vbs9,v1); + v6 = vec_sub(vbs13,v5); + v3 = vec_ld(0,costab); + vbs11 = vec_perm(vbs11,vbs11,vinvert); + vbs15 = vec_perm(vbs15,vbs15,vinvert); + vbs3 = vec_add(vbs11,vbs12); + vbs7 = vec_add(vbs15,vbs16); + v4 = vec_sub(vbs12,vbs11); + v7 = vec_sub(vbs16,vbs15); + vbs2 = vec_madd(v2,v3,vzero); + vbs4 = vec_madd(v4,v3,vzero); + vbs6 = vec_madd(v6,v3,vzero); + vbs8 = vec_madd(v7,v3,vzero); + + vbs2 = vec_perm(vbs2,vbs2,vinvert); + vbs4 = vec_perm(vbs4,vbs4,vinvert); + vbs6 = vec_perm(vbs6,vbs6,vinvert); + vbs8 = vec_perm(vbs8,vbs8,vinvert); + + + costab = pnts[3]; + +#ifdef __APPLE__ + vperm1 = (vector unsigned char)(0,1,2,3,4,5,6,7,16,17,18,19,20,21,22,23); + vperm2 = (vector unsigned char)(12,13,14,15,8,9,10,11,28,29,30,31,24,25,26,27); + vperm3 = (vector unsigned char)(0,1,2,3,4,5,6,7,20,21,22,23,16,17,18,19); +#else + vperm1 = (vector unsigned char){0,1,2,3,4,5,6,7,16,17,18,19,20,21,22,23}; + vperm2 = (vector unsigned char){12,13,14,15,8,9,10,11,28,29,30,31,24,25,26,27}; + vperm3 = (vector unsigned char){0,1,2,3,4,5,6,7,20,21,22,23,16,17,18,19}; +#endif + vperm4 = vec_add(vperm3,vec_splat_u8(8)); + + v1 = vec_ld(0,costab); + v2 = vec_splat(v1,0); + v3 = vec_splat(v1,1); + v1 = vec_mergeh(v2,v3); + + v2 = vec_perm(vbs1,vbs3,vperm1); + v3 = vec_perm(vbs2,vbs4,vperm1); + v4 = vec_perm(vbs1,vbs3,vperm2); + v5 = vec_perm(vbs2,vbs4,vperm2); + v6 = vec_sub(v2,v4); + v7 = vec_sub(v3,v5); + v2 = vec_add(v2,v4); + v3 = vec_add(v3,v5); + v4 = vec_madd(v6,v1,vzero); + v5 = vec_nmsub(v7,v1,vzero); + vbs9 = vec_perm(v2,v4,vperm3); + vbs11 = vec_perm(v2,v4,vperm4); + vbs10 = vec_perm(v3,v5,vperm3); + vbs12 = vec_perm(v3,v5,vperm4); + + v2 = vec_perm(vbs5,vbs7,vperm1); + v3 = vec_perm(vbs6,vbs8,vperm1); + v4 = vec_perm(vbs5,vbs7,vperm2); + v5 = vec_perm(vbs6,vbs8,vperm2); + v6 = vec_sub(v2,v4); + v7 = vec_sub(v3,v5); + v2 = vec_add(v2,v4); + v3 = vec_add(v3,v5); + v4 = vec_madd(v6,v1,vzero); + v5 = vec_nmsub(v7,v1,vzero); + vbs13 = vec_perm(v2,v4,vperm3); + vbs15 = vec_perm(v2,v4,vperm4); + vbs14 = vec_perm(v3,v5,vperm3); + vbs16 = vec_perm(v3,v5,vperm4); + + + costab = pnts[4]; + + v1 = vec_lde(0,costab); +#ifdef __APPLE__ + v2 = (vector float)(1.0f,-1.0f,1.0f,-1.0f); +#else + v2 = (vector float){1.0f,-1.0f,1.0f,-1.0f}; +#endif + v3 = vec_splat(v1,0); + v1 = vec_madd(v2,v3,vzero); + + v2 = vec_mergeh(vbs9,vbs10); + v3 = vec_mergel(vbs9,vbs10); + v4 = vec_mergeh(vbs11,vbs12); + v5 = vec_mergel(vbs11,vbs12); + v6 = vec_mergeh(v2,v3); + v7 = vec_mergel(v2,v3); + v2 = vec_mergeh(v4,v5); + v3 = vec_mergel(v4,v5); + v4 = vec_sub(v6,v7); + v5 = vec_sub(v2,v3); + v6 = vec_add(v6,v7); + v7 = vec_add(v2,v3); + v2 = vec_madd(v4,v1,vzero); + v3 = vec_madd(v5,v1,vzero); + vbs1 = vec_mergeh(v6,v2); + vbs2 = vec_mergel(v6,v2); + vbs3 = vec_mergeh(v7,v3); + vbs4 = vec_mergel(v7,v3); + + v2 = vec_mergeh(vbs13,vbs14); + v3 = vec_mergel(vbs13,vbs14); + v4 = vec_mergeh(vbs15,vbs16); + v5 = vec_mergel(vbs15,vbs16); + v6 = vec_mergeh(v2,v3); + v7 = vec_mergel(v2,v3); + v2 = vec_mergeh(v4,v5); + v3 = vec_mergel(v4,v5); + v4 = vec_sub(v6,v7); + v5 = vec_sub(v2,v3); + v6 = vec_add(v6,v7); + v7 = vec_add(v2,v3); + v2 = vec_madd(v4,v1,vzero); + v3 = vec_madd(v5,v1,vzero); + vbs5 = vec_mergeh(v6,v2); + vbs6 = vec_mergel(v6,v2); + vbs7 = vec_mergeh(v7,v3); + vbs8 = vec_mergel(v7,v3); + + vec_st(vbs1,0,bufs); + vec_st(vbs2,16,bufs); + vec_st(vbs3,32,bufs); + vec_st(vbs4,48,bufs); + vec_st(vbs5,64,bufs); + vec_st(vbs6,80,bufs); + vec_st(vbs7,96,bufs); + vec_st(vbs8,112,bufs); + } + + { + register real *b1; + register int i; + + for(b1=bufs,i=8;i;i--,b1+=4) + b1[2] += b1[3]; + + for(b1=bufs,i=4;i;i--,b1+=8) + { + b1[4] += b1[6]; + b1[6] += b1[5]; + b1[5] += b1[7]; + } + + for(b1=bufs,i=2;i;i--,b1+=16) + { + b1[8] += b1[12]; + b1[12] += b1[10]; + b1[10] += b1[14]; + b1[14] += b1[9]; + b1[9] += b1[13]; + b1[13] += b1[11]; + b1[11] += b1[15]; + } + } + + + out0[0x10*16] = bufs[0]; + out0[0x10*15] = bufs[16+0] + bufs[16+8]; + out0[0x10*14] = bufs[8]; + out0[0x10*13] = bufs[16+8] + bufs[16+4]; + out0[0x10*12] = bufs[4]; + out0[0x10*11] = bufs[16+4] + bufs[16+12]; + out0[0x10*10] = bufs[12]; + out0[0x10* 9] = bufs[16+12] + bufs[16+2]; + out0[0x10* 8] = bufs[2]; + out0[0x10* 7] = bufs[16+2] + bufs[16+10]; + out0[0x10* 6] = bufs[10]; + out0[0x10* 5] = bufs[16+10] + bufs[16+6]; + out0[0x10* 4] = bufs[6]; + out0[0x10* 3] = bufs[16+6] + bufs[16+14]; + out0[0x10* 2] = bufs[14]; + out0[0x10* 1] = bufs[16+14] + bufs[16+1]; + out0[0x10* 0] = bufs[1]; + + out1[0x10* 0] = bufs[1]; + out1[0x10* 1] = bufs[16+1] + bufs[16+9]; + out1[0x10* 2] = bufs[9]; + out1[0x10* 3] = bufs[16+9] + bufs[16+5]; + out1[0x10* 4] = bufs[5]; + out1[0x10* 5] = bufs[16+5] + bufs[16+13]; + out1[0x10* 6] = bufs[13]; + out1[0x10* 7] = bufs[16+13] + bufs[16+3]; + out1[0x10* 8] = bufs[3]; + out1[0x10* 9] = bufs[16+3] + bufs[16+11]; + out1[0x10*10] = bufs[11]; + out1[0x10*11] = bufs[16+11] + bufs[16+7]; + out1[0x10*12] = bufs[7]; + out1[0x10*13] = bufs[16+7] + bufs[16+15]; + out1[0x10*14] = bufs[15]; + out1[0x10*15] = bufs[16+15]; + +} + + diff --git a/lib/3rdparty/libmpg123/dct64_i386.c b/lib/3rdparty/libmpg123/dct64_i386.c new file mode 100644 index 00000000000..abc05b97379 --- /dev/null +++ b/lib/3rdparty/libmpg123/dct64_i386.c @@ -0,0 +1,336 @@ +/* + dct64_i386.c: DCT64, a C variant for i386 + + copyright ?-2006 by the mpg123 project - free software under the terms of the LGPL 2.1 + see COPYING and AUTHORS files in distribution or http://mpg123.org + initially written by Michael Hipp +*/ + +/* + * Discrete Cosine Tansform (DCT) for subband synthesis + * optimized for machines with no auto-increment. + * The performance is highly compiler dependend. Maybe + * the dct64.c version for 'normal' processor may be faster + * even for Intel processors. + */ + +#include "mpg123lib_intern.h" + +static void dct64_1(real *out0,real *out1,real *b1,real *b2,real *samples) +{ + { + register real *costab = pnts[0]; + + b1[0x00] = samples[0x00] + samples[0x1F]; + b1[0x01] = samples[0x01] + samples[0x1E]; + b1[0x1F] = REAL_MUL(samples[0x00] - samples[0x1F], costab[0x0]); + b1[0x1E] = REAL_MUL(samples[0x01] - samples[0x1E], costab[0x1]); + + b1[0x02] = samples[0x02] + samples[0x1D]; + b1[0x03] = samples[0x03] + samples[0x1C]; + b1[0x1D] = REAL_MUL(samples[0x02] - samples[0x1D], costab[0x2]); + b1[0x1C] = REAL_MUL(samples[0x03] - samples[0x1C], costab[0x3]); + + b1[0x04] = samples[0x04] + samples[0x1B]; + b1[0x05] = samples[0x05] + samples[0x1A]; + b1[0x1B] = REAL_MUL(samples[0x04] - samples[0x1B], costab[0x4]); + b1[0x1A] = REAL_MUL(samples[0x05] - samples[0x1A], costab[0x5]); + + b1[0x06] = samples[0x06] + samples[0x19]; + b1[0x07] = samples[0x07] + samples[0x18]; + b1[0x19] = REAL_MUL(samples[0x06] - samples[0x19], costab[0x6]); + b1[0x18] = REAL_MUL(samples[0x07] - samples[0x18], costab[0x7]); + + b1[0x08] = samples[0x08] + samples[0x17]; + b1[0x09] = samples[0x09] + samples[0x16]; + b1[0x17] = REAL_MUL(samples[0x08] - samples[0x17], costab[0x8]); + b1[0x16] = REAL_MUL(samples[0x09] - samples[0x16], costab[0x9]); + + b1[0x0A] = samples[0x0A] + samples[0x15]; + b1[0x0B] = samples[0x0B] + samples[0x14]; + b1[0x15] = REAL_MUL(samples[0x0A] - samples[0x15], costab[0xA]); + b1[0x14] = REAL_MUL(samples[0x0B] - samples[0x14], costab[0xB]); + + b1[0x0C] = samples[0x0C] + samples[0x13]; + b1[0x0D] = samples[0x0D] + samples[0x12]; + b1[0x13] = REAL_MUL(samples[0x0C] - samples[0x13], costab[0xC]); + b1[0x12] = REAL_MUL(samples[0x0D] - samples[0x12], costab[0xD]); + + b1[0x0E] = samples[0x0E] + samples[0x11]; + b1[0x0F] = samples[0x0F] + samples[0x10]; + b1[0x11] = REAL_MUL(samples[0x0E] - samples[0x11], costab[0xE]); + b1[0x10] = REAL_MUL(samples[0x0F] - samples[0x10], costab[0xF]); + + } + + + { + register real *costab = pnts[1]; + + b2[0x00] = b1[0x00] + b1[0x0F]; + b2[0x01] = b1[0x01] + b1[0x0E]; + b2[0x0F] = REAL_MUL(b1[0x00] - b1[0x0F], costab[0]); + b2[0x0E] = REAL_MUL(b1[0x01] - b1[0x0E], costab[1]); + + b2[0x02] = b1[0x02] + b1[0x0D]; + b2[0x03] = b1[0x03] + b1[0x0C]; + b2[0x0D] = REAL_MUL(b1[0x02] - b1[0x0D], costab[2]); + b2[0x0C] = REAL_MUL(b1[0x03] - b1[0x0C], costab[3]); + + b2[0x04] = b1[0x04] + b1[0x0B]; + b2[0x05] = b1[0x05] + b1[0x0A]; + b2[0x0B] = REAL_MUL(b1[0x04] - b1[0x0B], costab[4]); + b2[0x0A] = REAL_MUL(b1[0x05] - b1[0x0A], costab[5]); + + b2[0x06] = b1[0x06] + b1[0x09]; + b2[0x07] = b1[0x07] + b1[0x08]; + b2[0x09] = REAL_MUL(b1[0x06] - b1[0x09], costab[6]); + b2[0x08] = REAL_MUL(b1[0x07] - b1[0x08], costab[7]); + + /* */ + + b2[0x10] = b1[0x10] + b1[0x1F]; + b2[0x11] = b1[0x11] + b1[0x1E]; + b2[0x1F] = REAL_MUL(b1[0x1F] - b1[0x10], costab[0]); + b2[0x1E] = REAL_MUL(b1[0x1E] - b1[0x11], costab[1]); + + b2[0x12] = b1[0x12] + b1[0x1D]; + b2[0x13] = b1[0x13] + b1[0x1C]; + b2[0x1D] = REAL_MUL(b1[0x1D] - b1[0x12], costab[2]); + b2[0x1C] = REAL_MUL(b1[0x1C] - b1[0x13], costab[3]); + + b2[0x14] = b1[0x14] + b1[0x1B]; + b2[0x15] = b1[0x15] + b1[0x1A]; + b2[0x1B] = REAL_MUL(b1[0x1B] - b1[0x14], costab[4]); + b2[0x1A] = REAL_MUL(b1[0x1A] - b1[0x15], costab[5]); + + b2[0x16] = b1[0x16] + b1[0x19]; + b2[0x17] = b1[0x17] + b1[0x18]; + b2[0x19] = REAL_MUL(b1[0x19] - b1[0x16], costab[6]); + b2[0x18] = REAL_MUL(b1[0x18] - b1[0x17], costab[7]); + } + + { + register real *costab = pnts[2]; + + b1[0x00] = b2[0x00] + b2[0x07]; + b1[0x07] = REAL_MUL(b2[0x00] - b2[0x07], costab[0]); + b1[0x01] = b2[0x01] + b2[0x06]; + b1[0x06] = REAL_MUL(b2[0x01] - b2[0x06], costab[1]); + b1[0x02] = b2[0x02] + b2[0x05]; + b1[0x05] = REAL_MUL(b2[0x02] - b2[0x05], costab[2]); + b1[0x03] = b2[0x03] + b2[0x04]; + b1[0x04] = REAL_MUL(b2[0x03] - b2[0x04], costab[3]); + + b1[0x08] = b2[0x08] + b2[0x0F]; + b1[0x0F] = REAL_MUL(b2[0x0F] - b2[0x08], costab[0]); + b1[0x09] = b2[0x09] + b2[0x0E]; + b1[0x0E] = REAL_MUL(b2[0x0E] - b2[0x09], costab[1]); + b1[0x0A] = b2[0x0A] + b2[0x0D]; + b1[0x0D] = REAL_MUL(b2[0x0D] - b2[0x0A], costab[2]); + b1[0x0B] = b2[0x0B] + b2[0x0C]; + b1[0x0C] = REAL_MUL(b2[0x0C] - b2[0x0B], costab[3]); + + b1[0x10] = b2[0x10] + b2[0x17]; + b1[0x17] = REAL_MUL(b2[0x10] - b2[0x17], costab[0]); + b1[0x11] = b2[0x11] + b2[0x16]; + b1[0x16] = REAL_MUL(b2[0x11] - b2[0x16], costab[1]); + b1[0x12] = b2[0x12] + b2[0x15]; + b1[0x15] = REAL_MUL(b2[0x12] - b2[0x15], costab[2]); + b1[0x13] = b2[0x13] + b2[0x14]; + b1[0x14] = REAL_MUL(b2[0x13] - b2[0x14], costab[3]); + + b1[0x18] = b2[0x18] + b2[0x1F]; + b1[0x1F] = REAL_MUL(b2[0x1F] - b2[0x18], costab[0]); + b1[0x19] = b2[0x19] + b2[0x1E]; + b1[0x1E] = REAL_MUL(b2[0x1E] - b2[0x19], costab[1]); + b1[0x1A] = b2[0x1A] + b2[0x1D]; + b1[0x1D] = REAL_MUL(b2[0x1D] - b2[0x1A], costab[2]); + b1[0x1B] = b2[0x1B] + b2[0x1C]; + b1[0x1C] = REAL_MUL(b2[0x1C] - b2[0x1B], costab[3]); + } + + { + register real const cos0 = pnts[3][0]; + register real const cos1 = pnts[3][1]; + + b2[0x00] = b1[0x00] + b1[0x03]; + b2[0x03] = REAL_MUL(b1[0x00] - b1[0x03], cos0); + b2[0x01] = b1[0x01] + b1[0x02]; + b2[0x02] = REAL_MUL(b1[0x01] - b1[0x02], cos1); + + b2[0x04] = b1[0x04] + b1[0x07]; + b2[0x07] = REAL_MUL(b1[0x07] - b1[0x04], cos0); + b2[0x05] = b1[0x05] + b1[0x06]; + b2[0x06] = REAL_MUL(b1[0x06] - b1[0x05], cos1); + + b2[0x08] = b1[0x08] + b1[0x0B]; + b2[0x0B] = REAL_MUL(b1[0x08] - b1[0x0B], cos0); + b2[0x09] = b1[0x09] + b1[0x0A]; + b2[0x0A] = REAL_MUL(b1[0x09] - b1[0x0A], cos1); + + b2[0x0C] = b1[0x0C] + b1[0x0F]; + b2[0x0F] = REAL_MUL(b1[0x0F] - b1[0x0C], cos0); + b2[0x0D] = b1[0x0D] + b1[0x0E]; + b2[0x0E] = REAL_MUL(b1[0x0E] - b1[0x0D], cos1); + + b2[0x10] = b1[0x10] + b1[0x13]; + b2[0x13] = REAL_MUL(b1[0x10] - b1[0x13], cos0); + b2[0x11] = b1[0x11] + b1[0x12]; + b2[0x12] = REAL_MUL(b1[0x11] - b1[0x12], cos1); + + b2[0x14] = b1[0x14] + b1[0x17]; + b2[0x17] = REAL_MUL(b1[0x17] - b1[0x14], cos0); + b2[0x15] = b1[0x15] + b1[0x16]; + b2[0x16] = REAL_MUL(b1[0x16] - b1[0x15], cos1); + + b2[0x18] = b1[0x18] + b1[0x1B]; + b2[0x1B] = REAL_MUL(b1[0x18] - b1[0x1B], cos0); + b2[0x19] = b1[0x19] + b1[0x1A]; + b2[0x1A] = REAL_MUL(b1[0x19] - b1[0x1A], cos1); + + b2[0x1C] = b1[0x1C] + b1[0x1F]; + b2[0x1F] = REAL_MUL(b1[0x1F] - b1[0x1C], cos0); + b2[0x1D] = b1[0x1D] + b1[0x1E]; + b2[0x1E] = REAL_MUL(b1[0x1E] - b1[0x1D], cos1); + } + + { + register real const cos0 = pnts[4][0]; + + b1[0x00] = b2[0x00] + b2[0x01]; + b1[0x01] = REAL_MUL(b2[0x00] - b2[0x01], cos0); + b1[0x02] = b2[0x02] + b2[0x03]; + b1[0x03] = REAL_MUL(b2[0x03] - b2[0x02], cos0); + b1[0x02] += b1[0x03]; + + b1[0x04] = b2[0x04] + b2[0x05]; + b1[0x05] = REAL_MUL(b2[0x04] - b2[0x05], cos0); + b1[0x06] = b2[0x06] + b2[0x07]; + b1[0x07] = REAL_MUL(b2[0x07] - b2[0x06], cos0); + b1[0x06] += b1[0x07]; + b1[0x04] += b1[0x06]; + b1[0x06] += b1[0x05]; + b1[0x05] += b1[0x07]; + + b1[0x08] = b2[0x08] + b2[0x09]; + b1[0x09] = REAL_MUL(b2[0x08] - b2[0x09], cos0); + b1[0x0A] = b2[0x0A] + b2[0x0B]; + b1[0x0B] = REAL_MUL(b2[0x0B] - b2[0x0A], cos0); + b1[0x0A] += b1[0x0B]; + + b1[0x0C] = b2[0x0C] + b2[0x0D]; + b1[0x0D] = REAL_MUL(b2[0x0C] - b2[0x0D], cos0); + b1[0x0E] = b2[0x0E] + b2[0x0F]; + b1[0x0F] = REAL_MUL(b2[0x0F] - b2[0x0E], cos0); + b1[0x0E] += b1[0x0F]; + b1[0x0C] += b1[0x0E]; + b1[0x0E] += b1[0x0D]; + b1[0x0D] += b1[0x0F]; + + b1[0x10] = b2[0x10] + b2[0x11]; + b1[0x11] = REAL_MUL(b2[0x10] - b2[0x11], cos0); + b1[0x12] = b2[0x12] + b2[0x13]; + b1[0x13] = REAL_MUL(b2[0x13] - b2[0x12], cos0); + b1[0x12] += b1[0x13]; + + b1[0x14] = b2[0x14] + b2[0x15]; + b1[0x15] = REAL_MUL(b2[0x14] - b2[0x15], cos0); + b1[0x16] = b2[0x16] + b2[0x17]; + b1[0x17] = REAL_MUL(b2[0x17] - b2[0x16], cos0); + b1[0x16] += b1[0x17]; + b1[0x14] += b1[0x16]; + b1[0x16] += b1[0x15]; + b1[0x15] += b1[0x17]; + + b1[0x18] = b2[0x18] + b2[0x19]; + b1[0x19] = REAL_MUL(b2[0x18] - b2[0x19], cos0); + b1[0x1A] = b2[0x1A] + b2[0x1B]; + b1[0x1B] = REAL_MUL(b2[0x1B] - b2[0x1A], cos0); + b1[0x1A] += b1[0x1B]; + + b1[0x1C] = b2[0x1C] + b2[0x1D]; + b1[0x1D] = REAL_MUL(b2[0x1C] - b2[0x1D], cos0); + b1[0x1E] = b2[0x1E] + b2[0x1F]; + b1[0x1F] = REAL_MUL(b2[0x1F] - b2[0x1E], cos0); + b1[0x1E] += b1[0x1F]; + b1[0x1C] += b1[0x1E]; + b1[0x1E] += b1[0x1D]; + b1[0x1D] += b1[0x1F]; + } + + out0[0x10*16] = REAL_SCALE_DCT64(b1[0x00]); + out0[0x10*12] = REAL_SCALE_DCT64(b1[0x04]); + out0[0x10* 8] = REAL_SCALE_DCT64(b1[0x02]); + out0[0x10* 4] = REAL_SCALE_DCT64(b1[0x06]); + out0[0x10* 0] = REAL_SCALE_DCT64(b1[0x01]); + out1[0x10* 0] = REAL_SCALE_DCT64(b1[0x01]); + out1[0x10* 4] = REAL_SCALE_DCT64(b1[0x05]); + out1[0x10* 8] = REAL_SCALE_DCT64(b1[0x03]); + out1[0x10*12] = REAL_SCALE_DCT64(b1[0x07]); + +#if 1 + out0[0x10*14] = REAL_SCALE_DCT64(b1[0x08] + b1[0x0C]); + out0[0x10*10] = REAL_SCALE_DCT64(b1[0x0C] + b1[0x0a]); + out0[0x10* 6] = REAL_SCALE_DCT64(b1[0x0A] + b1[0x0E]); + out0[0x10* 2] = REAL_SCALE_DCT64(b1[0x0E] + b1[0x09]); + out1[0x10* 2] = REAL_SCALE_DCT64(b1[0x09] + b1[0x0D]); + out1[0x10* 6] = REAL_SCALE_DCT64(b1[0x0D] + b1[0x0B]); + out1[0x10*10] = REAL_SCALE_DCT64(b1[0x0B] + b1[0x0F]); + out1[0x10*14] = REAL_SCALE_DCT64(b1[0x0F]); +#else + b1[0x08] += b1[0x0C]; + out0[0x10*14] = REAL_SCALE_DCT64(b1[0x08]); + b1[0x0C] += b1[0x0a]; + out0[0x10*10] = REAL_SCALE_DCT64(b1[0x0C]); + b1[0x0A] += b1[0x0E]; + out0[0x10* 6] = REAL_SCALE_DCT64(b1[0x0A]); + b1[0x0E] += b1[0x09]; + out0[0x10* 2] = REAL_SCALE_DCT64(b1[0x0E]); + b1[0x09] += b1[0x0D]; + out1[0x10* 2] = REAL_SCALE_DCT64(b1[0x09]); + b1[0x0D] += b1[0x0B]; + out1[0x10* 6] = REAL_SCALE_DCT64(b1[0x0D]); + b1[0x0B] += b1[0x0F]; + out1[0x10*10] = REAL_SCALE_DCT64(b1[0x0B]); + out1[0x10*14] = REAL_SCALE_DCT64(b1[0x0F]); +#endif + + { + real tmp; + tmp = b1[0x18] + b1[0x1C]; + out0[0x10*15] = REAL_SCALE_DCT64(tmp + b1[0x10]); + out0[0x10*13] = REAL_SCALE_DCT64(tmp + b1[0x14]); + tmp = b1[0x1C] + b1[0x1A]; + out0[0x10*11] = REAL_SCALE_DCT64(tmp + b1[0x14]); + out0[0x10* 9] = REAL_SCALE_DCT64(tmp + b1[0x12]); + tmp = b1[0x1A] + b1[0x1E]; + out0[0x10* 7] = REAL_SCALE_DCT64(tmp + b1[0x12]); + out0[0x10* 5] = REAL_SCALE_DCT64(tmp + b1[0x16]); + tmp = b1[0x1E] + b1[0x19]; + out0[0x10* 3] = REAL_SCALE_DCT64(tmp + b1[0x16]); + out0[0x10* 1] = REAL_SCALE_DCT64(tmp + b1[0x11]); + tmp = b1[0x19] + b1[0x1D]; + out1[0x10* 1] = REAL_SCALE_DCT64(tmp + b1[0x11]); + out1[0x10* 3] = REAL_SCALE_DCT64(tmp + b1[0x15]); + tmp = b1[0x1D] + b1[0x1B]; + out1[0x10* 5] = REAL_SCALE_DCT64(tmp + b1[0x15]); + out1[0x10* 7] = REAL_SCALE_DCT64(tmp + b1[0x13]); + tmp = b1[0x1B] + b1[0x1F]; + out1[0x10* 9] = REAL_SCALE_DCT64(tmp + b1[0x13]); + out1[0x10*11] = REAL_SCALE_DCT64(tmp + b1[0x17]); + out1[0x10*13] = REAL_SCALE_DCT64(b1[0x17] + b1[0x1F]); + out1[0x10*15] = REAL_SCALE_DCT64(b1[0x1F]); + } +} + +/* + * the call via dct64 is a trick to force GCC to use + * (new) registers for the b1,b2 pointer to the bufs[xx] field + */ +void dct64_i386(real *a,real *b,real *c) +{ + real bufs[0x40]; + dct64_1(a,b,bufs,bufs+0x20,c); +} + diff --git a/lib/3rdparty/libmpg123/dct64_i486.c b/lib/3rdparty/libmpg123/dct64_i486.c new file mode 100644 index 00000000000..b81d0607326 --- /dev/null +++ b/lib/3rdparty/libmpg123/dct64_i486.c @@ -0,0 +1,342 @@ +/* + dct64_i486.c: DCT64, a plain C variant for i486 + + copyright 1998-2006 by the mpg123 project - free software under the terms of the LGPL 2.1 + see COPYING and AUTHORS files in distribution or http://mpg123.org + initially written by Fabrice Bellard +*/ + +/* Discrete Cosine Tansform (DCT) for subband synthesis. + * + * This code is optimized for 80486. It should be compiled with gcc + * 2.7.2 or higher. + * + * Note: This code does not give the necessary accuracy. Moreover, no + * overflow test are done. + * + * (c) 1998 Fabrice Bellard. + */ + +#include "mpg123lib_intern.h" + +#define COS_0_0 16403 +#define COS_0_1 16563 +#define COS_0_2 16890 +#define COS_0_3 17401 +#define COS_0_4 18124 +#define COS_0_5 19101 +#define COS_0_6 20398 +#define COS_0_7 22112 +#define COS_0_8 24396 +#define COS_0_9 27503 +#define COS_0_10 31869 +#define COS_0_11 38320 +#define COS_0_12 48633 +#define COS_0_13 67429 +#define COS_0_14 111660 +#define COS_0_15 333906 +#define COS_1_0 16463 +#define COS_1_1 17121 +#define COS_1_2 18577 +#define COS_1_3 21195 +#define COS_1_4 25826 +#define COS_1_5 34756 +#define COS_1_6 56441 +#define COS_1_7 167154 +#define COS_2_0 16704 +#define COS_2_1 19704 +#define COS_2_2 29490 +#define COS_2_3 83981 +#define COS_3_0 17733 +#define COS_3_1 42813 +#define COS_4_0 23170 + +#define SETOUT(out,n,expr) out[FIR_BUFFER_SIZE*(n)]=(expr) +#define MULL(a,b) (((long long)(a)*(long long)(b)) >> 15) +#define MUL(a,b) \ +(\ + ((!(b & 0x3F)) ? (((a)*(b >> 6)) >> 9) :\ + ((!(b & 0x1F)) ? (((a)*(b >> 5)) >> 10) :\ + ((!(b & 0x0F)) ? (((a)*(b >> 4)) >> 11) :\ + ((!(b & 0x07)) ? (((a)*(b >> 3)) >> 12) :\ + ((!(b & 0x03)) ? (((a)*(b >> 2)) >> 13) :\ + ((!(b & 0x01)) ? (((a)*(b >> 1)) >> 14) :\ + (((a)*(b )) >> 15)))))))) + + +void dct64_1_486(int *out0,int *out1,int *b1,int *b2) +{ + b1[0x00] = b2[0x00] + b2[0x1F]; + b1[0x1F] = MUL((b2[0x00] - b2[0x1F]),COS_0_0); + + b1[0x01] = b2[0x01] + b2[0x1E]; + b1[0x1E] = MUL((b2[0x01] - b2[0x1E]),COS_0_1); + + b1[0x02] = b2[0x02] + b2[0x1D]; + b1[0x1D] = MUL((b2[0x02] - b2[0x1D]),COS_0_2); + + b1[0x03] = b2[0x03] + b2[0x1C]; + b1[0x1C] = MUL((b2[0x03] - b2[0x1C]),COS_0_3); + + b1[0x04] = b2[0x04] + b2[0x1B]; + b1[0x1B] = MUL((b2[0x04] - b2[0x1B]),COS_0_4); + + b1[0x05] = b2[0x05] + b2[0x1A]; + b1[0x1A] = MUL((b2[0x05] - b2[0x1A]),COS_0_5); + + b1[0x06] = b2[0x06] + b2[0x19]; + b1[0x19] = MUL((b2[0x06] - b2[0x19]),COS_0_6); + + b1[0x07] = b2[0x07] + b2[0x18]; + b1[0x18] = MUL((b2[0x07] - b2[0x18]),COS_0_7); + + b1[0x08] = b2[0x08] + b2[0x17]; + b1[0x17] = MUL((b2[0x08] - b2[0x17]),COS_0_8); + + b1[0x09] = b2[0x09] + b2[0x16]; + b1[0x16] = MUL((b2[0x09] - b2[0x16]),COS_0_9); + + b1[0x0A] = b2[0x0A] + b2[0x15]; + b1[0x15] = MUL((b2[0x0A] - b2[0x15]),COS_0_10); + + b1[0x0B] = b2[0x0B] + b2[0x14]; + b1[0x14] = MUL((b2[0x0B] - b2[0x14]),COS_0_11); + + b1[0x0C] = b2[0x0C] + b2[0x13]; + b1[0x13] = MUL((b2[0x0C] - b2[0x13]),COS_0_12); + + b1[0x0D] = b2[0x0D] + b2[0x12]; + b1[0x12] = MULL((b2[0x0D] - b2[0x12]),COS_0_13); + + b1[0x0E] = b2[0x0E] + b2[0x11]; + b1[0x11] = MULL((b2[0x0E] - b2[0x11]),COS_0_14); + + b1[0x0F] = b2[0x0F] + b2[0x10]; + b1[0x10] = MULL((b2[0x0F] - b2[0x10]),COS_0_15); + + + b2[0x00] = b1[0x00] + b1[0x0F]; + b2[0x0F] = MUL((b1[0x00] - b1[0x0F]),COS_1_0); + b2[0x01] = b1[0x01] + b1[0x0E]; + b2[0x0E] = MUL((b1[0x01] - b1[0x0E]),COS_1_1); + b2[0x02] = b1[0x02] + b1[0x0D]; + b2[0x0D] = MUL((b1[0x02] - b1[0x0D]),COS_1_2); + b2[0x03] = b1[0x03] + b1[0x0C]; + b2[0x0C] = MUL((b1[0x03] - b1[0x0C]),COS_1_3); + b2[0x04] = b1[0x04] + b1[0x0B]; + b2[0x0B] = MUL((b1[0x04] - b1[0x0B]),COS_1_4); + b2[0x05] = b1[0x05] + b1[0x0A]; + b2[0x0A] = MUL((b1[0x05] - b1[0x0A]),COS_1_5); + b2[0x06] = b1[0x06] + b1[0x09]; + b2[0x09] = MUL((b1[0x06] - b1[0x09]),COS_1_6); + b2[0x07] = b1[0x07] + b1[0x08]; + b2[0x08] = MULL((b1[0x07] - b1[0x08]),COS_1_7); + + b2[0x10] = b1[0x10] + b1[0x1F]; + b2[0x1F] = MUL((b1[0x1F] - b1[0x10]),COS_1_0); + b2[0x11] = b1[0x11] + b1[0x1E]; + b2[0x1E] = MUL((b1[0x1E] - b1[0x11]),COS_1_1); + b2[0x12] = b1[0x12] + b1[0x1D]; + b2[0x1D] = MUL((b1[0x1D] - b1[0x12]),COS_1_2); + b2[0x13] = b1[0x13] + b1[0x1C]; + b2[0x1C] = MUL((b1[0x1C] - b1[0x13]),COS_1_3); + b2[0x14] = b1[0x14] + b1[0x1B]; + b2[0x1B] = MUL((b1[0x1B] - b1[0x14]),COS_1_4); + b2[0x15] = b1[0x15] + b1[0x1A]; + b2[0x1A] = MUL((b1[0x1A] - b1[0x15]),COS_1_5); + b2[0x16] = b1[0x16] + b1[0x19]; + b2[0x19] = MUL((b1[0x19] - b1[0x16]),COS_1_6); + b2[0x17] = b1[0x17] + b1[0x18]; + b2[0x18] = MULL((b1[0x18] - b1[0x17]),COS_1_7); + + + b1[0x00] = b2[0x00] + b2[0x07]; + b1[0x07] = MUL((b2[0x00] - b2[0x07]),COS_2_0); + b1[0x01] = b2[0x01] + b2[0x06]; + b1[0x06] = MUL((b2[0x01] - b2[0x06]),COS_2_1); + b1[0x02] = b2[0x02] + b2[0x05]; + b1[0x05] = MUL((b2[0x02] - b2[0x05]),COS_2_2); + b1[0x03] = b2[0x03] + b2[0x04]; + b1[0x04] = MULL((b2[0x03] - b2[0x04]),COS_2_3); + + b1[0x08] = b2[0x08] + b2[0x0F]; + b1[0x0F] = MUL((b2[0x0F] - b2[0x08]),COS_2_0); + b1[0x09] = b2[0x09] + b2[0x0E]; + b1[0x0E] = MUL((b2[0x0E] - b2[0x09]),COS_2_1); + b1[0x0A] = b2[0x0A] + b2[0x0D]; + b1[0x0D] = MUL((b2[0x0D] - b2[0x0A]),COS_2_2); + b1[0x0B] = b2[0x0B] + b2[0x0C]; + b1[0x0C] = MULL((b2[0x0C] - b2[0x0B]),COS_2_3); + + b1[0x10] = b2[0x10] + b2[0x17]; + b1[0x17] = MUL((b2[0x10] - b2[0x17]),COS_2_0); + b1[0x11] = b2[0x11] + b2[0x16]; + b1[0x16] = MUL((b2[0x11] - b2[0x16]),COS_2_1); + b1[0x12] = b2[0x12] + b2[0x15]; + b1[0x15] = MUL((b2[0x12] - b2[0x15]),COS_2_2); + b1[0x13] = b2[0x13] + b2[0x14]; + b1[0x14] = MULL((b2[0x13] - b2[0x14]),COS_2_3); + + b1[0x18] = b2[0x18] + b2[0x1F]; + b1[0x1F] = MUL((b2[0x1F] - b2[0x18]),COS_2_0); + b1[0x19] = b2[0x19] + b2[0x1E]; + b1[0x1E] = MUL((b2[0x1E] - b2[0x19]),COS_2_1); + b1[0x1A] = b2[0x1A] + b2[0x1D]; + b1[0x1D] = MUL((b2[0x1D] - b2[0x1A]),COS_2_2); + b1[0x1B] = b2[0x1B] + b2[0x1C]; + b1[0x1C] = MULL((b2[0x1C] - b2[0x1B]),COS_2_3); + + + b2[0x00] = b1[0x00] + b1[0x03]; + b2[0x03] = MUL((b1[0x00] - b1[0x03]),COS_3_0); + b2[0x01] = b1[0x01] + b1[0x02]; + b2[0x02] = MUL((b1[0x01] - b1[0x02]),COS_3_1); + + b2[0x04] = b1[0x04] + b1[0x07]; + b2[0x07] = MUL((b1[0x07] - b1[0x04]),COS_3_0); + b2[0x05] = b1[0x05] + b1[0x06]; + b2[0x06] = MUL((b1[0x06] - b1[0x05]),COS_3_1); + + b2[0x08] = b1[0x08] + b1[0x0B]; + b2[0x0B] = MUL((b1[0x08] - b1[0x0B]),COS_3_0); + b2[0x09] = b1[0x09] + b1[0x0A]; + b2[0x0A] = MUL((b1[0x09] - b1[0x0A]),COS_3_1); + + b2[0x0C] = b1[0x0C] + b1[0x0F]; + b2[0x0F] = MUL((b1[0x0F] - b1[0x0C]),COS_3_0); + b2[0x0D] = b1[0x0D] + b1[0x0E]; + b2[0x0E] = MUL((b1[0x0E] - b1[0x0D]),COS_3_1); + + b2[0x10] = b1[0x10] + b1[0x13]; + b2[0x13] = MUL((b1[0x10] - b1[0x13]),COS_3_0); + b2[0x11] = b1[0x11] + b1[0x12]; + b2[0x12] = MUL((b1[0x11] - b1[0x12]),COS_3_1); + + b2[0x14] = b1[0x14] + b1[0x17]; + b2[0x17] = MUL((b1[0x17] - b1[0x14]),COS_3_0); + b2[0x15] = b1[0x15] + b1[0x16]; + b2[0x16] = MUL((b1[0x16] - b1[0x15]),COS_3_1); + + b2[0x18] = b1[0x18] + b1[0x1B]; + b2[0x1B] = MUL((b1[0x18] - b1[0x1B]),COS_3_0); + b2[0x19] = b1[0x19] + b1[0x1A]; + b2[0x1A] = MUL((b1[0x19] - b1[0x1A]),COS_3_1); + + b2[0x1C] = b1[0x1C] + b1[0x1F]; + b2[0x1F] = MUL((b1[0x1F] - b1[0x1C]),COS_3_0); + b2[0x1D] = b1[0x1D] + b1[0x1E]; + b2[0x1E] = MUL((b1[0x1E] - b1[0x1D]),COS_3_1); + + { + int i; + for(i=0;i<32;i+=4) { + b1[i+0x00] = b2[i+0x00] + b2[i+0x01]; + b1[i+0x01] = MUL((b2[i+0x00] - b2[i+0x01]),COS_4_0); + b1[i+0x02] = b2[i+0x02] + b2[i+0x03]; + b1[i+0x03] = MUL((b2[i+0x03] - b2[i+0x02]),COS_4_0); + } + } + + b1[0x02] += b1[0x03]; + b1[0x06] += b1[0x07]; + b1[0x04] += b1[0x06]; + b1[0x06] += b1[0x05]; + b1[0x05] += b1[0x07]; + + b1[0x0A] += b1[0x0B]; + b1[0x0E] += b1[0x0F]; + b1[0x0C] += b1[0x0E]; + b1[0x0E] += b1[0x0D]; + b1[0x0D] += b1[0x0F]; + + b1[0x12] += b1[0x13]; + b1[0x16] += b1[0x17]; + b1[0x14] += b1[0x16]; + b1[0x16] += b1[0x15]; + b1[0x15] += b1[0x17]; + + b1[0x1A] += b1[0x1B]; + b1[0x1E] += b1[0x1F]; + b1[0x1C] += b1[0x1E]; + b1[0x1E] += b1[0x1D]; + b1[0x1D] += b1[0x1F]; + + SETOUT(out0,16,b1[0x00]); + SETOUT(out0,12,b1[0x04]); + SETOUT(out0, 8,b1[0x02]); + SETOUT(out0, 4,b1[0x06]); + SETOUT(out0, 0,b1[0x01]); + SETOUT(out1, 0,b1[0x01]); + SETOUT(out1, 4,b1[0x05]); + SETOUT(out1, 8,b1[0x03]); + SETOUT(out1,12,b1[0x07]); + + b1[0x08] += b1[0x0C]; + SETOUT(out0,14,b1[0x08]); + b1[0x0C] += b1[0x0a]; + SETOUT(out0,10,b1[0x0C]); + b1[0x0A] += b1[0x0E]; + SETOUT(out0, 6,b1[0x0A]); + b1[0x0E] += b1[0x09]; + SETOUT(out0, 2,b1[0x0E]); + b1[0x09] += b1[0x0D]; + SETOUT(out1, 2,b1[0x09]); + b1[0x0D] += b1[0x0B]; + SETOUT(out1, 6,b1[0x0D]); + b1[0x0B] += b1[0x0F]; + SETOUT(out1,10,b1[0x0B]); + SETOUT(out1,14,b1[0x0F]); + + b1[0x18] += b1[0x1C]; + SETOUT(out0,15,b1[0x10] + b1[0x18]); + SETOUT(out0,13,b1[0x18] + b1[0x14]); + b1[0x1C] += b1[0x1a]; + SETOUT(out0,11,b1[0x14] + b1[0x1C]); + SETOUT(out0, 9,b1[0x1C] + b1[0x12]); + b1[0x1A] += b1[0x1E]; + SETOUT(out0, 7,b1[0x12] + b1[0x1A]); + SETOUT(out0, 5,b1[0x1A] + b1[0x16]); + b1[0x1E] += b1[0x19]; + SETOUT(out0, 3,b1[0x16] + b1[0x1E]); + SETOUT(out0, 1,b1[0x1E] + b1[0x11]); + b1[0x19] += b1[0x1D]; + SETOUT(out1, 1,b1[0x11] + b1[0x19]); + SETOUT(out1, 3,b1[0x19] + b1[0x15]); + b1[0x1D] += b1[0x1B]; + SETOUT(out1, 5,b1[0x15] + b1[0x1D]); + SETOUT(out1, 7,b1[0x1D] + b1[0x13]); + b1[0x1B] += b1[0x1F]; + SETOUT(out1, 9,b1[0x13] + b1[0x1B]); + SETOUT(out1,11,b1[0x1B] + b1[0x17]); + SETOUT(out1,13,b1[0x17] + b1[0x1F]); + SETOUT(out1,15,b1[0x1F]); +} + + +/* + * the call via dct64 is a trick to force GCC to use + * (new) registers for the b1,b2 pointer to the bufs[xx] field + */ +void dct64_i486(int *a,int *b,real *samples) +{ + int bufs[64]; + int i; + +#ifdef REAL_IS_FIXED +#define TOINT(a) ((a) * 32768 / (int)REAL_FACTOR) + + for(i=0;i<32;i++) { + bufs[i]=TOINT(samples[i]); + } +#else + int *p = bufs; + register double const scale = ((65536.0 * 32) + 1) * 65536.0; + + for(i=0;i<32;i++) { + *((double *) (p++)) = scale + *samples++; /* beware on bufs overrun: 8B store from x87 */ + } +#endif + + dct64_1_486(a,b,bufs+32,bufs); +} + diff --git a/lib/3rdparty/libmpg123/dct64_mmx.S b/lib/3rdparty/libmpg123/dct64_mmx.S new file mode 100644 index 00000000000..b700732f1b0 --- /dev/null +++ b/lib/3rdparty/libmpg123/dct64_mmx.S @@ -0,0 +1,811 @@ +/* + dct64_mmx.s: MMX optimized DCT64 + + copyright ?-2006 by the mpg123 project - free software under the terms of the LGPL 2.1 + see COPYING and AUTHORS files in distribution or http://mpg123.org + initially written by the mysterious higway (apparently) +*/ + +#include "mangle.h" + +.text + + ALIGN32 +.globl ASM_NAME(dct64_mmx) +ASM_NAME(dct64_mmx): + + xorl %ecx,%ecx +.globl ASM_NAME(dct64_MMX) +ASM_NAME(dct64_MMX): + pushl %ebx + pushl %esi + pushl %edi + subl $256,%esp + movl 280(%esp),%eax + flds (%eax) + leal 128(%esp),%edx + fadds 124(%eax) + movl 272(%esp),%esi + fstps (%edx) + movl 276(%esp),%edi + flds 4(%eax) + movl ASM_VALUE(costab_mmxsse),%ebx + fadds 120(%eax) + orl %ecx,%ecx + fstps 4(%edx) + flds (%eax) + movl %esp,%ecx + fsubs 124(%eax) + fmuls (%ebx) + fstps 124(%edx) + flds 4(%eax) + fsubs 120(%eax) + fmuls 4(%ebx) + fstps 120(%edx) + flds 8(%eax) + fadds 116(%eax) + fstps 8(%edx) + flds 12(%eax) + fadds 112(%eax) + fstps 12(%edx) + flds 8(%eax) + fsubs 116(%eax) + fmuls 8(%ebx) + fstps 116(%edx) + flds 12(%eax) + fsubs 112(%eax) + fmuls 12(%ebx) + fstps 112(%edx) + flds 16(%eax) + fadds 108(%eax) + fstps 16(%edx) + flds 20(%eax) + fadds 104(%eax) + fstps 20(%edx) + flds 16(%eax) + fsubs 108(%eax) + fmuls 16(%ebx) + fstps 108(%edx) + flds 20(%eax) + fsubs 104(%eax) + fmuls 20(%ebx) + fstps 104(%edx) + flds 24(%eax) + fadds 100(%eax) + fstps 24(%edx) + flds 28(%eax) + fadds 96(%eax) + fstps 28(%edx) + flds 24(%eax) + fsubs 100(%eax) + fmuls 24(%ebx) + fstps 100(%edx) + flds 28(%eax) + fsubs 96(%eax) + fmuls 28(%ebx) + fstps 96(%edx) + flds 32(%eax) + fadds 92(%eax) + fstps 32(%edx) + flds 36(%eax) + fadds 88(%eax) + fstps 36(%edx) + flds 32(%eax) + fsubs 92(%eax) + fmuls 32(%ebx) + fstps 92(%edx) + flds 36(%eax) + fsubs 88(%eax) + fmuls 36(%ebx) + fstps 88(%edx) + flds 40(%eax) + fadds 84(%eax) + fstps 40(%edx) + flds 44(%eax) + fadds 80(%eax) + fstps 44(%edx) + flds 40(%eax) + fsubs 84(%eax) + fmuls 40(%ebx) + fstps 84(%edx) + flds 44(%eax) + fsubs 80(%eax) + fmuls 44(%ebx) + fstps 80(%edx) + flds 48(%eax) + fadds 76(%eax) + fstps 48(%edx) + flds 52(%eax) + fadds 72(%eax) + fstps 52(%edx) + flds 48(%eax) + fsubs 76(%eax) + fmuls 48(%ebx) + fstps 76(%edx) + flds 52(%eax) + fsubs 72(%eax) + fmuls 52(%ebx) + fstps 72(%edx) + flds 56(%eax) + fadds 68(%eax) + fstps 56(%edx) + flds 60(%eax) + fadds 64(%eax) + fstps 60(%edx) + flds 56(%eax) + fsubs 68(%eax) + fmuls 56(%ebx) + fstps 68(%edx) + flds 60(%eax) + fsubs 64(%eax) + fmuls 60(%ebx) + fstps 64(%edx) + + flds (%edx) + fadds 60(%edx) + fstps (%ecx) + flds 4(%edx) + fadds 56(%edx) + fstps 4(%ecx) + flds (%edx) + fsubs 60(%edx) + fmuls 64(%ebx) + fstps 60(%ecx) + flds 4(%edx) + fsubs 56(%edx) + fmuls 68(%ebx) + fstps 56(%ecx) + flds 8(%edx) + fadds 52(%edx) + fstps 8(%ecx) + flds 12(%edx) + fadds 48(%edx) + fstps 12(%ecx) + flds 8(%edx) + fsubs 52(%edx) + fmuls 72(%ebx) + fstps 52(%ecx) + flds 12(%edx) + fsubs 48(%edx) + fmuls 76(%ebx) + fstps 48(%ecx) + flds 16(%edx) + fadds 44(%edx) + fstps 16(%ecx) + flds 20(%edx) + fadds 40(%edx) + fstps 20(%ecx) + flds 16(%edx) + fsubs 44(%edx) + fmuls 80(%ebx) + fstps 44(%ecx) + flds 20(%edx) + fsubs 40(%edx) + fmuls 84(%ebx) + fstps 40(%ecx) + flds 24(%edx) + fadds 36(%edx) + fstps 24(%ecx) + flds 28(%edx) + fadds 32(%edx) + fstps 28(%ecx) + flds 24(%edx) + fsubs 36(%edx) + fmuls 88(%ebx) + fstps 36(%ecx) + flds 28(%edx) + fsubs 32(%edx) + fmuls 92(%ebx) + fstps 32(%ecx) + + flds 64(%edx) + fadds 124(%edx) + fstps 64(%ecx) + flds 68(%edx) + fadds 120(%edx) + fstps 68(%ecx) + flds 124(%edx) + fsubs 64(%edx) + fmuls 64(%ebx) + fstps 124(%ecx) + flds 120(%edx) + fsubs 68(%edx) + fmuls 68(%ebx) + fstps 120(%ecx) + flds 72(%edx) + fadds 116(%edx) + fstps 72(%ecx) + flds 76(%edx) + fadds 112(%edx) + fstps 76(%ecx) + flds 116(%edx) + fsubs 72(%edx) + fmuls 72(%ebx) + fstps 116(%ecx) + flds 112(%edx) + fsubs 76(%edx) + fmuls 76(%ebx) + fstps 112(%ecx) + flds 80(%edx) + fadds 108(%edx) + fstps 80(%ecx) + flds 84(%edx) + fadds 104(%edx) + fstps 84(%ecx) + flds 108(%edx) + fsubs 80(%edx) + fmuls 80(%ebx) + fstps 108(%ecx) + flds 104(%edx) + fsubs 84(%edx) + fmuls 84(%ebx) + fstps 104(%ecx) + flds 88(%edx) + fadds 100(%edx) + fstps 88(%ecx) + flds 92(%edx) + fadds 96(%edx) + fstps 92(%ecx) + flds 100(%edx) + fsubs 88(%edx) + fmuls 88(%ebx) + fstps 100(%ecx) + flds 96(%edx) + fsubs 92(%edx) + fmuls 92(%ebx) + fstps 96(%ecx) + + flds (%ecx) + fadds 28(%ecx) + fstps (%edx) + flds (%ecx) + fsubs 28(%ecx) + fmuls 96(%ebx) + fstps 28(%edx) + flds 4(%ecx) + fadds 24(%ecx) + fstps 4(%edx) + flds 4(%ecx) + fsubs 24(%ecx) + fmuls 100(%ebx) + fstps 24(%edx) + flds 8(%ecx) + fadds 20(%ecx) + fstps 8(%edx) + flds 8(%ecx) + fsubs 20(%ecx) + fmuls 104(%ebx) + fstps 20(%edx) + flds 12(%ecx) + fadds 16(%ecx) + fstps 12(%edx) + flds 12(%ecx) + fsubs 16(%ecx) + fmuls 108(%ebx) + fstps 16(%edx) + flds 32(%ecx) + fadds 60(%ecx) + fstps 32(%edx) + flds 60(%ecx) + fsubs 32(%ecx) + fmuls 96(%ebx) + fstps 60(%edx) + flds 36(%ecx) + fadds 56(%ecx) + fstps 36(%edx) + flds 56(%ecx) + fsubs 36(%ecx) + fmuls 100(%ebx) + fstps 56(%edx) + flds 40(%ecx) + fadds 52(%ecx) + fstps 40(%edx) + flds 52(%ecx) + fsubs 40(%ecx) + fmuls 104(%ebx) + fstps 52(%edx) + flds 44(%ecx) + fadds 48(%ecx) + fstps 44(%edx) + flds 48(%ecx) + fsubs 44(%ecx) + fmuls 108(%ebx) + fstps 48(%edx) + flds 64(%ecx) + fadds 92(%ecx) + fstps 64(%edx) + flds 64(%ecx) + fsubs 92(%ecx) + fmuls 96(%ebx) + fstps 92(%edx) + flds 68(%ecx) + fadds 88(%ecx) + fstps 68(%edx) + flds 68(%ecx) + fsubs 88(%ecx) + fmuls 100(%ebx) + fstps 88(%edx) + flds 72(%ecx) + fadds 84(%ecx) + fstps 72(%edx) + flds 72(%ecx) + fsubs 84(%ecx) + fmuls 104(%ebx) + fstps 84(%edx) + flds 76(%ecx) + fadds 80(%ecx) + fstps 76(%edx) + flds 76(%ecx) + fsubs 80(%ecx) + fmuls 108(%ebx) + fstps 80(%edx) + flds 96(%ecx) + fadds 124(%ecx) + fstps 96(%edx) + flds 124(%ecx) + fsubs 96(%ecx) + fmuls 96(%ebx) + fstps 124(%edx) + flds 100(%ecx) + fadds 120(%ecx) + fstps 100(%edx) + flds 120(%ecx) + fsubs 100(%ecx) + fmuls 100(%ebx) + fstps 120(%edx) + flds 104(%ecx) + fadds 116(%ecx) + fstps 104(%edx) + flds 116(%ecx) + fsubs 104(%ecx) + fmuls 104(%ebx) + fstps 116(%edx) + flds 108(%ecx) + fadds 112(%ecx) + fstps 108(%edx) + flds 112(%ecx) + fsubs 108(%ecx) + fmuls 108(%ebx) + fstps 112(%edx) + flds (%edx) + fadds 12(%edx) + fstps (%ecx) + flds (%edx) + fsubs 12(%edx) + fmuls 112(%ebx) + fstps 12(%ecx) + flds 4(%edx) + fadds 8(%edx) + fstps 4(%ecx) + flds 4(%edx) + fsubs 8(%edx) + fmuls 116(%ebx) + fstps 8(%ecx) + flds 16(%edx) + fadds 28(%edx) + fstps 16(%ecx) + flds 28(%edx) + fsubs 16(%edx) + fmuls 112(%ebx) + fstps 28(%ecx) + flds 20(%edx) + fadds 24(%edx) + fstps 20(%ecx) + flds 24(%edx) + fsubs 20(%edx) + fmuls 116(%ebx) + fstps 24(%ecx) + flds 32(%edx) + fadds 44(%edx) + fstps 32(%ecx) + flds 32(%edx) + fsubs 44(%edx) + fmuls 112(%ebx) + fstps 44(%ecx) + flds 36(%edx) + fadds 40(%edx) + fstps 36(%ecx) + flds 36(%edx) + fsubs 40(%edx) + fmuls 116(%ebx) + fstps 40(%ecx) + flds 48(%edx) + fadds 60(%edx) + fstps 48(%ecx) + flds 60(%edx) + fsubs 48(%edx) + fmuls 112(%ebx) + fstps 60(%ecx) + flds 52(%edx) + fadds 56(%edx) + fstps 52(%ecx) + flds 56(%edx) + fsubs 52(%edx) + fmuls 116(%ebx) + fstps 56(%ecx) + flds 64(%edx) + fadds 76(%edx) + fstps 64(%ecx) + flds 64(%edx) + fsubs 76(%edx) + fmuls 112(%ebx) + fstps 76(%ecx) + flds 68(%edx) + fadds 72(%edx) + fstps 68(%ecx) + flds 68(%edx) + fsubs 72(%edx) + fmuls 116(%ebx) + fstps 72(%ecx) + flds 80(%edx) + fadds 92(%edx) + fstps 80(%ecx) + flds 92(%edx) + fsubs 80(%edx) + fmuls 112(%ebx) + fstps 92(%ecx) + flds 84(%edx) + fadds 88(%edx) + fstps 84(%ecx) + flds 88(%edx) + fsubs 84(%edx) + fmuls 116(%ebx) + fstps 88(%ecx) + flds 96(%edx) + fadds 108(%edx) + fstps 96(%ecx) + flds 96(%edx) + fsubs 108(%edx) + fmuls 112(%ebx) + fstps 108(%ecx) + flds 100(%edx) + fadds 104(%edx) + fstps 100(%ecx) + flds 100(%edx) + fsubs 104(%edx) + fmuls 116(%ebx) + fstps 104(%ecx) + flds 112(%edx) + fadds 124(%edx) + fstps 112(%ecx) + flds 124(%edx) + fsubs 112(%edx) + fmuls 112(%ebx) + fstps 124(%ecx) + flds 116(%edx) + fadds 120(%edx) + fstps 116(%ecx) + flds 120(%edx) + fsubs 116(%edx) + fmuls 116(%ebx) + fstps 120(%ecx) + + flds 32(%ecx) + fadds 36(%ecx) + fstps 32(%edx) + flds 32(%ecx) + fsubs 36(%ecx) + fmuls 120(%ebx) + fstps 36(%edx) + flds 44(%ecx) + fsubs 40(%ecx) + fmuls 120(%ebx) + fsts 44(%edx) + fadds 40(%ecx) + fadds 44(%ecx) + fstps 40(%edx) + flds 48(%ecx) + fsubs 52(%ecx) + fmuls 120(%ebx) + flds 60(%ecx) + fsubs 56(%ecx) + fmuls 120(%ebx) + fld %st(0) + fadds 56(%ecx) + fadds 60(%ecx) + fld %st(0) + fadds 48(%ecx) + fadds 52(%ecx) + fstps 48(%edx) + fadd %st(2) + fstps 56(%edx) + fsts 60(%edx) + faddp %st(1) + fstps 52(%edx) + flds 64(%ecx) + fadds 68(%ecx) + fstps 64(%edx) + flds 64(%ecx) + fsubs 68(%ecx) + fmuls 120(%ebx) + fstps 68(%edx) + flds 76(%ecx) + fsubs 72(%ecx) + fmuls 120(%ebx) + fsts 76(%edx) + fadds 72(%ecx) + fadds 76(%ecx) + fstps 72(%edx) + flds 92(%ecx) + fsubs 88(%ecx) + fmuls 120(%ebx) + fsts 92(%edx) + fadds 92(%ecx) + fadds 88(%ecx) + fld %st(0) + fadds 80(%ecx) + fadds 84(%ecx) + fstps 80(%edx) + flds 80(%ecx) + fsubs 84(%ecx) + fmuls 120(%ebx) + fadd %st(0), %st(1) + fadds 92(%edx) + fstps 84(%edx) + fstps 88(%edx) + flds 96(%ecx) + fadds 100(%ecx) + fstps 96(%edx) + flds 96(%ecx) + fsubs 100(%ecx) + fmuls 120(%ebx) + fstps 100(%edx) + flds 108(%ecx) + fsubs 104(%ecx) + fmuls 120(%ebx) + fsts 108(%edx) + fadds 104(%ecx) + fadds 108(%ecx) + fstps 104(%edx) + flds 124(%ecx) + fsubs 120(%ecx) + fmuls 120(%ebx) + fsts 124(%edx) + fadds 120(%ecx) + fadds 124(%ecx) + fld %st(0) + fadds 112(%ecx) + fadds 116(%ecx) + fstps 112(%edx) + flds 112(%ecx) + fsubs 116(%ecx) + fmuls 120(%ebx) + fadd %st(0),%st(1) + fadds 124(%edx) + fstps 116(%edx) + fstps 120(%edx) + jnz .L01 + + flds (%ecx) + fadds 4(%ecx) + fstps 1024(%esi) + flds (%ecx) + fsubs 4(%ecx) + fmuls 120(%ebx) + fsts (%esi) + fstps (%edi) + flds 12(%ecx) + fsubs 8(%ecx) + fmuls 120(%ebx) + fsts 512(%edi) + fadds 12(%ecx) + fadds 8(%ecx) + fstps 512(%esi) + flds 16(%ecx) + fsubs 20(%ecx) + fmuls 120(%ebx) + flds 28(%ecx) + fsubs 24(%ecx) + fmuls 120(%ebx) + fsts 768(%edi) + fld %st(0) + fadds 24(%ecx) + fadds 28(%ecx) + fld %st(0) + fadds 16(%ecx) + fadds 20(%ecx) + fstps 768(%esi) + fadd %st(2) + fstps 256(%esi) + faddp %st(1) + fstps 256(%edi) + + flds 32(%edx) + fadds 48(%edx) + fstps 896(%esi) + flds 48(%edx) + fadds 40(%edx) + fstps 640(%esi) + flds 40(%edx) + fadds 56(%edx) + fstps 384(%esi) + flds 56(%edx) + fadds 36(%edx) + fstps 128(%esi) + flds 36(%edx) + fadds 52(%edx) + fstps 128(%edi) + flds 52(%edx) + fadds 44(%edx) + fstps 384(%edi) + flds 60(%edx) + fsts 896(%edi) + fadds 44(%edx) + fstps 640(%edi) + flds 96(%edx) + fadds 112(%edx) + fld %st(0) + fadds 64(%edx) + fstps 960(%esi) + fadds 80(%edx) + fstps 832(%esi) + flds 112(%edx) + fadds 104(%edx) + fld %st(0) + fadds 80(%edx) + fstps 704(%esi) + fadds 72(%edx) + fstps 576(%esi) + flds 104(%edx) + fadds 120(%edx) + fld %st(0) + fadds 72(%edx) + fstps 448(%esi) + fadds 88(%edx) + fstps 320(%esi) + flds 120(%edx) + fadds 100(%edx) + fld %st(0) + fadds 88(%edx) + fstps 192(%esi) + fadds 68(%edx) + fstps 64(%esi) + flds 100(%edx) + fadds 116(%edx) + fld %st(0) + fadds 68(%edx) + fstps 64(%edi) + fadds 84(%edx) + fstps 192(%edi) + flds 116(%edx) + fadds 108(%edx) + fld %st(0) + fadds 84(%edx) + fstps 320(%edi) + fadds 76(%edx) + fstps 448(%edi) + flds 108(%edx) + fadds 124(%edx) + fld %st(0) + fadds 76(%edx) + fstps 576(%edi) + fadds 92(%edx) + fstps 704(%edi) + flds 124(%edx) + fsts 960(%edi) + fadds 92(%edx) + fstps 832(%edi) + addl $256,%esp + popl %edi + popl %esi + popl %ebx + ret +.L01: + flds (%ecx) + fadds 4(%ecx) + fistps 512(%esi) + flds (%ecx) + fsubs 4(%ecx) + fmuls 120(%ebx) + + fistps (%esi) + + flds 12(%ecx) + fsubs 8(%ecx) + fmuls 120(%ebx) + fists 256(%edi) + fadds 12(%ecx) + fadds 8(%ecx) + fistps 256(%esi) + flds 16(%ecx) + fsubs 20(%ecx) + fmuls 120(%ebx) + flds 28(%ecx) + fsubs 24(%ecx) + fmuls 120(%ebx) + fists 384(%edi) + fld %st(0) + fadds 24(%ecx) + fadds 28(%ecx) + fld %st(0) + fadds 16(%ecx) + fadds 20(%ecx) + fistps 384(%esi) + fadd %st(2) + fistps 128(%esi) + faddp %st(1) + fistps 128(%edi) + + flds 32(%edx) + fadds 48(%edx) + fistps 448(%esi) + flds 48(%edx) + fadds 40(%edx) + fistps 320(%esi) + flds 40(%edx) + fadds 56(%edx) + fistps 192(%esi) + flds 56(%edx) + fadds 36(%edx) + fistps 64(%esi) + flds 36(%edx) + fadds 52(%edx) + fistps 64(%edi) + flds 52(%edx) + fadds 44(%edx) + fistps 192(%edi) + flds 60(%edx) + fists 448(%edi) + fadds 44(%edx) + fistps 320(%edi) + flds 96(%edx) + fadds 112(%edx) + fld %st(0) + fadds 64(%edx) + fistps 480(%esi) + fadds 80(%edx) + fistps 416(%esi) + flds 112(%edx) + fadds 104(%edx) + fld %st(0) + fadds 80(%edx) + fistps 352(%esi) + fadds 72(%edx) + fistps 288(%esi) + flds 104(%edx) + fadds 120(%edx) + fld %st(0) + fadds 72(%edx) + fistps 224(%esi) + fadds 88(%edx) + fistps 160(%esi) + flds 120(%edx) + fadds 100(%edx) + fld %st(0) + fadds 88(%edx) + fistps 96(%esi) + fadds 68(%edx) + fistps 32(%esi) + flds 100(%edx) + fadds 116(%edx) + fld %st(0) + fadds 68(%edx) + fistps 32(%edi) + fadds 84(%edx) + fistps 96(%edi) + flds 116(%edx) + fadds 108(%edx) + fld %st(0) + fadds 84(%edx) + fistps 160(%edi) + fadds 76(%edx) + fistps 224(%edi) + flds 108(%edx) + fadds 124(%edx) + fld %st(0) + fadds 76(%edx) + fistps 288(%edi) + fadds 92(%edx) + fistps 352(%edi) + flds 124(%edx) + fists 480(%edi) + fadds 92(%edx) + fistps 416(%edi) + movsw + addl $256,%esp + popl %edi + popl %esi + popl %ebx + ret + +NONEXEC_STACK diff --git a/lib/3rdparty/libmpg123/dct64_sse.S b/lib/3rdparty/libmpg123/dct64_sse.S new file mode 100644 index 00000000000..d9abbcdcc06 --- /dev/null +++ b/lib/3rdparty/libmpg123/dct64_sse.S @@ -0,0 +1,454 @@ +/* + dct64_sse: MMX/SSE optimized dct64 + + copyright 1995-2009 by the mpg123 project - free software under the terms of the LGPL 2.1 + see COPYING and AUTHORS files in distribution or http://mpg123.org + initially written by Taihei Monma +*/ + +#include "mangle.h" + +#define ARG(n) (8+n*4)(%ebp) +#define TEMP(n) (4+n*16)(%esp) +#define TEMP_BYTE(n) (4+n)(%esp) + +/* + void dct64_sse(short *out0, short *out1, real *samples); +*/ + +#ifndef __APPLE__ + .section .rodata +#else + .data +#endif + ALIGN16 +pnpn: + .long 0 + .long -2147483648 + .long 0 + .long -2147483648 + ALIGN16 +mask: + .long -1 + .long -1 + .long -1 + .long 0 + + .text + ALIGN16 +.globl ASM_NAME(dct64_sse) +ASM_NAME(dct64_sse): + pushl %ebp + movl %esp, %ebp + + andl $-16, %esp /* align the stack at 16 bytes */ + subl $128, %esp /* reserve space for temporal store */ + pushl %ebx + + movl ARG(0), %ecx + movl ARG(1), %ebx + movl ARG(2), %eax + + MOVUAPS (%eax), %xmm7 + MOVUAPS 16(%eax), %xmm6 + MOVUAPS 112(%eax), %xmm0 + MOVUAPS 96(%eax), %xmm1 + shufps $0x1b, %xmm0, %xmm0 + shufps $0x1b, %xmm1, %xmm1 + movaps %xmm7, %xmm4 + movaps %xmm6, %xmm5 + addps %xmm0, %xmm4 + addps %xmm1, %xmm5 + subps %xmm0, %xmm7 + subps %xmm1, %xmm6 + movaps %xmm4, TEMP(0) + movaps %xmm5, TEMP(1) + + MOVUAPS 32(%eax), %xmm2 + MOVUAPS 48(%eax), %xmm3 + MOVUAPS 80(%eax), %xmm0 + MOVUAPS 64(%eax), %xmm1 + shufps $0x1b, %xmm0, %xmm0 + shufps $0x1b, %xmm1, %xmm1 + movaps %xmm2, %xmm5 + movaps %xmm3, %xmm4 + addps %xmm0, %xmm2 + addps %xmm1, %xmm3 + subps %xmm0, %xmm5 + subps %xmm1, %xmm4 + + mulps ASM_NAME(costab_mmxsse), %xmm7 + mulps ASM_NAME(costab_mmxsse)+16, %xmm6 + mulps ASM_NAME(costab_mmxsse)+32, %xmm5 + mulps ASM_NAME(costab_mmxsse)+48, %xmm4 + + shufps $0x1b, %xmm2, %xmm2 + shufps $0x1b, %xmm3, %xmm3 + shufps $0x1b, %xmm4, %xmm4 + shufps $0x1b, %xmm5, %xmm5 + movaps TEMP(0), %xmm0 + movaps TEMP(1), %xmm1 + subps %xmm3, %xmm0 + subps %xmm2, %xmm1 + addps TEMP(0), %xmm3 + addps TEMP(1), %xmm2 + movaps %xmm3, TEMP(0) + movaps %xmm2, TEMP(1) + movaps %xmm6, %xmm2 + movaps %xmm7, %xmm3 + subps %xmm5, %xmm6 + subps %xmm4, %xmm7 + addps %xmm3, %xmm4 + addps %xmm2, %xmm5 + mulps ASM_NAME(costab_mmxsse)+64, %xmm0 + mulps ASM_NAME(costab_mmxsse)+80, %xmm1 + mulps ASM_NAME(costab_mmxsse)+80, %xmm6 + mulps ASM_NAME(costab_mmxsse)+64, %xmm7 + + movaps TEMP(0), %xmm2 + movaps TEMP(1), %xmm3 + shufps $0x1b, %xmm3, %xmm3 + shufps $0x1b, %xmm5, %xmm5 + shufps $0x1b, %xmm1, %xmm1 + shufps $0x1b, %xmm6, %xmm6 + movaps %xmm0, TEMP(1) + subps %xmm3, %xmm2 + subps %xmm1, %xmm0 + addps TEMP(0), %xmm3 + addps TEMP(1), %xmm1 + movaps %xmm3, TEMP(0) + movaps %xmm1, TEMP(2) + movaps %xmm5, %xmm1 + movaps %xmm4, %xmm5 + movaps %xmm7, %xmm3 + subps %xmm1, %xmm5 + subps %xmm6, %xmm7 + addps %xmm1, %xmm4 + addps %xmm3, %xmm6 + mulps ASM_NAME(costab_mmxsse)+96, %xmm2 + mulps ASM_NAME(costab_mmxsse)+96, %xmm0 + mulps ASM_NAME(costab_mmxsse)+96, %xmm5 + mulps ASM_NAME(costab_mmxsse)+96, %xmm7 + movaps %xmm2, TEMP(1) + movaps %xmm0, TEMP(3) + + movaps %xmm4, %xmm2 + movaps %xmm5, %xmm3 + shufps $0x44, %xmm6, %xmm2 + shufps $0xbb, %xmm7, %xmm5 + shufps $0xbb, %xmm6, %xmm4 + shufps $0x44, %xmm7, %xmm3 + movaps %xmm2, %xmm6 + movaps %xmm3, %xmm7 + subps %xmm4, %xmm2 + subps %xmm5, %xmm3 + addps %xmm6, %xmm4 + addps %xmm7, %xmm5 + movaps ASM_NAME(costab_mmxsse)+112, %xmm0 + movlhps %xmm0, %xmm0 + mulps %xmm0, %xmm2 + mulps %xmm0, %xmm3 + movaps %xmm0, TEMP(4) + movaps %xmm4, %xmm6 + movaps %xmm5, %xmm7 + shufps $0x14, %xmm2, %xmm4 + shufps $0xbe, %xmm2, %xmm6 + shufps $0x14, %xmm3, %xmm5 + shufps $0xbe, %xmm3, %xmm7 + movaps %xmm5, TEMP(5) + movaps %xmm7, TEMP(7) + + movaps TEMP(0), %xmm0 + movaps TEMP(1), %xmm1 + movaps %xmm0, %xmm2 + movaps %xmm1, %xmm3 + shufps $0x44, TEMP(2), %xmm2 + shufps $0xbb, TEMP(3), %xmm1 + shufps $0xbb, TEMP(2), %xmm0 + shufps $0x44, TEMP(3), %xmm3 + movaps %xmm2, %xmm5 + movaps %xmm3, %xmm7 + subps %xmm0, %xmm2 + subps %xmm1, %xmm3 + addps %xmm5, %xmm0 + addps %xmm7, %xmm1 + mulps TEMP(4), %xmm2 + mulps TEMP(4), %xmm3 + movaps %xmm0, %xmm5 + movaps %xmm1, %xmm7 + shufps $0x14, %xmm2, %xmm0 + shufps $0xbe, %xmm2, %xmm5 + shufps $0x14, %xmm3, %xmm1 + shufps $0xbe, %xmm3, %xmm7 + + movaps %xmm0, TEMP(0) + movaps %xmm1, TEMP(1) + movaps %xmm5, TEMP(2) + movaps %xmm7, TEMP(3) + + movss ASM_NAME(costab_mmxsse)+120, %xmm5 + shufps $0x00, %xmm5, %xmm5 + xorps pnpn, %xmm5 + + movaps %xmm4, %xmm0 + movaps %xmm6, %xmm1 + unpcklps TEMP(5), %xmm4 + unpckhps TEMP(5), %xmm0 + unpcklps TEMP(7), %xmm6 + unpckhps TEMP(7), %xmm1 + movaps %xmm4, %xmm2 + movaps %xmm6, %xmm3 + unpcklps %xmm0, %xmm4 + unpckhps %xmm0, %xmm2 + unpcklps %xmm1, %xmm6 + unpckhps %xmm1, %xmm3 + movaps %xmm4, %xmm0 + movaps %xmm6, %xmm1 + subps %xmm2, %xmm0 + subps %xmm3, %xmm1 + addps %xmm2, %xmm4 + addps %xmm3, %xmm6 + mulps %xmm5, %xmm0 + mulps %xmm5, %xmm1 + movaps %xmm5, TEMP(5) + movaps %xmm4, %xmm5 + movaps %xmm6, %xmm7 + unpcklps %xmm0, %xmm4 + unpckhps %xmm0, %xmm5 + unpcklps %xmm1, %xmm6 + unpckhps %xmm1, %xmm7 + + movaps TEMP(0), %xmm0 + movaps TEMP(2), %xmm2 + movaps %xmm4, TEMP(4) + movaps %xmm6, TEMP(6) + + movaps %xmm0, %xmm4 + movaps %xmm2, %xmm6 + unpcklps TEMP(1), %xmm0 + unpckhps TEMP(1), %xmm4 + unpcklps TEMP(3), %xmm2 + unpckhps TEMP(3), %xmm6 + movaps %xmm0, %xmm1 + movaps %xmm2, %xmm3 + unpcklps %xmm4, %xmm0 + unpckhps %xmm4, %xmm1 + unpcklps %xmm6, %xmm2 + unpckhps %xmm6, %xmm3 + movaps %xmm0, %xmm4 + movaps %xmm2, %xmm6 + subps %xmm1, %xmm4 + subps %xmm3, %xmm6 + addps %xmm1, %xmm0 + addps %xmm3, %xmm2 + mulps TEMP(5), %xmm4 + mulps TEMP(5), %xmm6 + movaps %xmm0, %xmm1 + movaps %xmm2, %xmm3 + unpcklps %xmm4, %xmm0 + unpckhps %xmm4, %xmm1 + unpcklps %xmm6, %xmm2 + unpckhps %xmm6, %xmm3 + + movaps %xmm0, TEMP(0) + movaps %xmm1, TEMP(1) + movaps %xmm2, TEMP(2) + movaps %xmm3, TEMP(3) + movaps %xmm5, TEMP(5) + movaps %xmm7, TEMP(7) + + movss TEMP_BYTE(12), %xmm0 + movss TEMP_BYTE(28), %xmm1 + movss TEMP_BYTE(44), %xmm2 + movss TEMP_BYTE(60), %xmm3 + addss TEMP_BYTE(8), %xmm0 + addss TEMP_BYTE(24), %xmm1 + addss TEMP_BYTE(40), %xmm2 + addss TEMP_BYTE(56), %xmm3 + movss %xmm0, TEMP_BYTE(8) + movss %xmm1, TEMP_BYTE(24) + movss %xmm2, TEMP_BYTE(40) + movss %xmm3, TEMP_BYTE(56) + movss TEMP_BYTE(76), %xmm0 + movss TEMP_BYTE(92), %xmm1 + movss TEMP_BYTE(108), %xmm2 + movss TEMP_BYTE(124), %xmm3 + addss TEMP_BYTE(72), %xmm0 + addss TEMP_BYTE(88), %xmm1 + addss TEMP_BYTE(104), %xmm2 + addss TEMP_BYTE(120), %xmm3 + movss %xmm0, TEMP_BYTE(72) + movss %xmm1, TEMP_BYTE(88) + movss %xmm2, TEMP_BYTE(104) + movss %xmm3, TEMP_BYTE(120) + + movaps TEMP_BYTE(16), %xmm1 + movaps TEMP_BYTE(48), %xmm3 + movaps TEMP_BYTE(80), %xmm5 + movaps TEMP_BYTE(112), %xmm7 + movaps %xmm1, %xmm0 + movaps %xmm3, %xmm2 + movaps %xmm5, %xmm4 + movaps %xmm7, %xmm6 + shufps $0x1e, %xmm0, %xmm0 + shufps $0x1e, %xmm2, %xmm2 + shufps $0x1e, %xmm4, %xmm4 + shufps $0x1e, %xmm6, %xmm6 + andps mask, %xmm0 + andps mask, %xmm2 + andps mask, %xmm4 + andps mask, %xmm6 + addps %xmm0, %xmm1 + addps %xmm2, %xmm3 + addps %xmm4, %xmm5 + addps %xmm6, %xmm7 + + movaps TEMP_BYTE(32), %xmm2 + movaps TEMP_BYTE(96), %xmm6 + movaps %xmm2, %xmm0 + movaps %xmm6, %xmm4 + shufps $0x1e, %xmm0, %xmm0 + shufps $0x1e, %xmm4, %xmm4 + andps mask, %xmm0 + andps mask, %xmm4 + addps %xmm3, %xmm2 + addps %xmm0, %xmm3 + addps %xmm7, %xmm6 + addps %xmm4, %xmm7 + + movaps TEMP_BYTE(0), %xmm0 + movaps TEMP_BYTE(64), %xmm4 + + cvtps2pi %xmm0, %mm0 + cvtps2pi %xmm1, %mm1 + movhlps %xmm0, %xmm0 + movhlps %xmm1, %xmm1 + cvtps2pi %xmm0, %mm2 + cvtps2pi %xmm1, %mm3 + packssdw %mm2, %mm0 + packssdw %mm3, %mm1 + + cvtps2pi %xmm2, %mm2 + cvtps2pi %xmm3, %mm3 + movhlps %xmm2, %xmm2 + movhlps %xmm3, %xmm3 + cvtps2pi %xmm2, %mm4 + cvtps2pi %xmm3, %mm5 + packssdw %mm4, %mm2 + packssdw %mm5, %mm3 + + movd %mm0, %eax + movd %mm1, %edx + movw %ax, 512(%ecx) + movw %dx, 384(%ecx) + shrl $16, %eax + shrl $16, %edx + movw %ax, (%ecx) + movw %ax, (%ebx) + movw %dx, 128(%ebx) + + movd %mm2, %eax + movd %mm3, %edx + movw %ax, 448(%ecx) + movw %dx, 320(%ecx) + shrl $16, %eax + shrl $16, %edx + movw %ax, 64(%ebx) + movw %dx, 192(%ebx) + + psrlq $32, %mm0 + psrlq $32, %mm1 + movd %mm0, %eax + movd %mm1, %edx + movw %ax, 256(%ecx) + movw %dx, 128(%ecx) + shrl $16, %eax + shrl $16, %edx + movw %ax, 256(%ebx) + movw %dx, 384(%ebx) + + psrlq $32, %mm2 + psrlq $32, %mm3 + movd %mm2, %eax + movd %mm3, %edx + movw %ax, 192(%ecx) + movw %dx, 64(%ecx) + shrl $16, %eax + shrl $16, %edx + movw %ax, 320(%ebx) + movw %dx, 448(%ebx) + + movaps %xmm4, %xmm0 + shufps $0x1e, %xmm0, %xmm0 + movaps %xmm5, %xmm1 + andps mask, %xmm0 + + addps %xmm6, %xmm4 + addps %xmm7, %xmm5 + addps %xmm1, %xmm6 + addps %xmm0, %xmm7 + + cvtps2pi %xmm4, %mm0 + cvtps2pi %xmm5, %mm1 + movhlps %xmm4, %xmm4 + movhlps %xmm5, %xmm5 + cvtps2pi %xmm4, %mm2 + cvtps2pi %xmm5, %mm3 + packssdw %mm2, %mm0 + packssdw %mm3, %mm1 + + cvtps2pi %xmm6, %mm2 + cvtps2pi %xmm7, %mm3 + movhlps %xmm6, %xmm6 + movhlps %xmm7, %xmm7 + cvtps2pi %xmm6, %mm4 + cvtps2pi %xmm7, %mm5 + packssdw %mm4, %mm2 + packssdw %mm5, %mm3 + + movd %mm0, %eax + movd %mm2, %edx + movw %ax, 480(%ecx) + movw %dx, 416(%ecx) + shrl $16, %eax + shrl $16, %edx + movw %ax, 32(%ebx) + movw %dx, 96(%ebx) + + psrlq $32, %mm0 + psrlq $32, %mm2 + movd %mm0, %eax + movd %mm2, %edx + movw %ax, 224(%ecx) + movw %dx, 160(%ecx) + shrl $16, %eax + shrl $16, %edx + movw %ax, 288(%ebx) + movw %dx, 352(%ebx) + + movd %mm1, %eax + movd %mm3, %edx + movw %ax, 352(%ecx) + movw %dx, 288(%ecx) + shrl $16, %eax + shrl $16, %edx + movw %ax, 160(%ebx) + movw %dx, 224(%ebx) + + psrlq $32, %mm1 + psrlq $32, %mm3 + movd %mm1, %eax + movd %mm3, %edx + movw %ax, 96(%ecx) + movw %dx, 32(%ecx) + shrl $16, %eax + shrl $16, %edx + movw %ax, 416(%ebx) + movw %dx, 480(%ebx) + + popl %ebx + movl %ebp, %esp + popl %ebp + ret + +NONEXEC_STACK diff --git a/lib/3rdparty/libmpg123/dct64_sse_float.S b/lib/3rdparty/libmpg123/dct64_sse_float.S new file mode 100644 index 00000000000..40a06bffcc6 --- /dev/null +++ b/lib/3rdparty/libmpg123/dct64_sse_float.S @@ -0,0 +1,401 @@ +/* + dct64_sse_float: SSE optimized dct64 (float output version) + + copyright 1995-2009 by the mpg123 project - free software under the terms of the LGPL 2.1 + see COPYING and AUTHORS files in distribution or http://mpg123.org + initially written by Taihei Monma +*/ + +#include "mangle.h" + +#define ARG(n) (8+n*4)(%ebp) +#define TEMP(n) (4+n*16)(%esp) +#define TEMP_BYTE(n) (4+n)(%esp) + +/* + void dct64_real_sse(real *out0, real *out1, real *samples); +*/ + +#ifndef __APPLE__ + .section .rodata +#else + .data +#endif + ALIGN16 +pnpn: + .long 0 + .long -2147483648 + .long 0 + .long -2147483648 + ALIGN16 +mask: + .long -1 + .long -1 + .long -1 + .long 0 + + .text + ALIGN16 +.globl ASM_NAME(dct64_real_sse) +ASM_NAME(dct64_real_sse): + pushl %ebp + movl %esp, %ebp + + andl $-16, %esp /* align the stack at 16 bytes */ + subl $128, %esp /* reserve space for temporal store */ + pushl %ebx + + movl ARG(0), %ecx + movl ARG(1), %ebx + movl ARG(2), %eax + + MOVUAPS (%eax), %xmm7 + MOVUAPS 16(%eax), %xmm6 + MOVUAPS 112(%eax), %xmm0 + MOVUAPS 96(%eax), %xmm1 + shufps $0x1b, %xmm0, %xmm0 + shufps $0x1b, %xmm1, %xmm1 + movaps %xmm7, %xmm4 + movaps %xmm6, %xmm5 + addps %xmm0, %xmm4 + addps %xmm1, %xmm5 + subps %xmm0, %xmm7 + subps %xmm1, %xmm6 + movaps %xmm4, TEMP(0) + movaps %xmm5, TEMP(1) + + MOVUAPS 32(%eax), %xmm2 + MOVUAPS 48(%eax), %xmm3 + MOVUAPS 80(%eax), %xmm0 + MOVUAPS 64(%eax), %xmm1 + shufps $0x1b, %xmm0, %xmm0 + shufps $0x1b, %xmm1, %xmm1 + movaps %xmm2, %xmm5 + movaps %xmm3, %xmm4 + addps %xmm0, %xmm2 + addps %xmm1, %xmm3 + subps %xmm0, %xmm5 + subps %xmm1, %xmm4 + + mulps ASM_NAME(costab_mmxsse), %xmm7 + mulps ASM_NAME(costab_mmxsse)+16, %xmm6 + mulps ASM_NAME(costab_mmxsse)+32, %xmm5 + mulps ASM_NAME(costab_mmxsse)+48, %xmm4 + + shufps $0x1b, %xmm2, %xmm2 + shufps $0x1b, %xmm3, %xmm3 + shufps $0x1b, %xmm4, %xmm4 + shufps $0x1b, %xmm5, %xmm5 + movaps TEMP(0), %xmm0 + movaps TEMP(1), %xmm1 + subps %xmm3, %xmm0 + subps %xmm2, %xmm1 + addps TEMP(0), %xmm3 + addps TEMP(1), %xmm2 + movaps %xmm3, TEMP(0) + movaps %xmm2, TEMP(1) + movaps %xmm6, %xmm2 + movaps %xmm7, %xmm3 + subps %xmm5, %xmm6 + subps %xmm4, %xmm7 + addps %xmm3, %xmm4 + addps %xmm2, %xmm5 + mulps ASM_NAME(costab_mmxsse)+64, %xmm0 + mulps ASM_NAME(costab_mmxsse)+80, %xmm1 + mulps ASM_NAME(costab_mmxsse)+80, %xmm6 + mulps ASM_NAME(costab_mmxsse)+64, %xmm7 + + movaps TEMP(0), %xmm2 + movaps TEMP(1), %xmm3 + shufps $0x1b, %xmm3, %xmm3 + shufps $0x1b, %xmm5, %xmm5 + shufps $0x1b, %xmm1, %xmm1 + shufps $0x1b, %xmm6, %xmm6 + movaps %xmm0, TEMP(1) + subps %xmm3, %xmm2 + subps %xmm1, %xmm0 + addps TEMP(0), %xmm3 + addps TEMP(1), %xmm1 + movaps %xmm3, TEMP(0) + movaps %xmm1, TEMP(2) + movaps %xmm5, %xmm1 + movaps %xmm4, %xmm5 + movaps %xmm7, %xmm3 + subps %xmm1, %xmm5 + subps %xmm6, %xmm7 + addps %xmm1, %xmm4 + addps %xmm3, %xmm6 + mulps ASM_NAME(costab_mmxsse)+96, %xmm2 + mulps ASM_NAME(costab_mmxsse)+96, %xmm0 + mulps ASM_NAME(costab_mmxsse)+96, %xmm5 + mulps ASM_NAME(costab_mmxsse)+96, %xmm7 + movaps %xmm2, TEMP(1) + movaps %xmm0, TEMP(3) + + movaps %xmm4, %xmm2 + movaps %xmm5, %xmm3 + shufps $0x44, %xmm6, %xmm2 + shufps $0xbb, %xmm7, %xmm5 + shufps $0xbb, %xmm6, %xmm4 + shufps $0x44, %xmm7, %xmm3 + movaps %xmm2, %xmm6 + movaps %xmm3, %xmm7 + subps %xmm4, %xmm2 + subps %xmm5, %xmm3 + addps %xmm6, %xmm4 + addps %xmm7, %xmm5 + movaps ASM_NAME(costab_mmxsse)+112, %xmm0 + movlhps %xmm0, %xmm0 + mulps %xmm0, %xmm2 + mulps %xmm0, %xmm3 + movaps %xmm0, TEMP(4) + movaps %xmm4, %xmm6 + movaps %xmm5, %xmm7 + shufps $0x14, %xmm2, %xmm4 + shufps $0xbe, %xmm2, %xmm6 + shufps $0x14, %xmm3, %xmm5 + shufps $0xbe, %xmm3, %xmm7 + movaps %xmm5, TEMP(5) + movaps %xmm7, TEMP(7) + + movaps TEMP(0), %xmm0 + movaps TEMP(1), %xmm1 + movaps %xmm0, %xmm2 + movaps %xmm1, %xmm3 + shufps $0x44, TEMP(2), %xmm2 + shufps $0xbb, TEMP(3), %xmm1 + shufps $0xbb, TEMP(2), %xmm0 + shufps $0x44, TEMP(3), %xmm3 + movaps %xmm2, %xmm5 + movaps %xmm3, %xmm7 + subps %xmm0, %xmm2 + subps %xmm1, %xmm3 + addps %xmm5, %xmm0 + addps %xmm7, %xmm1 + mulps TEMP(4), %xmm2 + mulps TEMP(4), %xmm3 + movaps %xmm0, %xmm5 + movaps %xmm1, %xmm7 + shufps $0x14, %xmm2, %xmm0 + shufps $0xbe, %xmm2, %xmm5 + shufps $0x14, %xmm3, %xmm1 + shufps $0xbe, %xmm3, %xmm7 + + movaps %xmm0, TEMP(0) + movaps %xmm1, TEMP(1) + movaps %xmm5, TEMP(2) + movaps %xmm7, TEMP(3) + + movss ASM_NAME(costab_mmxsse)+120, %xmm5 + shufps $0x00, %xmm5, %xmm5 + xorps pnpn, %xmm5 + + movaps %xmm4, %xmm0 + movaps %xmm6, %xmm1 + unpcklps TEMP(5), %xmm4 + unpckhps TEMP(5), %xmm0 + unpcklps TEMP(7), %xmm6 + unpckhps TEMP(7), %xmm1 + movaps %xmm4, %xmm2 + movaps %xmm6, %xmm3 + unpcklps %xmm0, %xmm4 + unpckhps %xmm0, %xmm2 + unpcklps %xmm1, %xmm6 + unpckhps %xmm1, %xmm3 + movaps %xmm4, %xmm0 + movaps %xmm6, %xmm1 + subps %xmm2, %xmm0 + subps %xmm3, %xmm1 + addps %xmm2, %xmm4 + addps %xmm3, %xmm6 + mulps %xmm5, %xmm0 + mulps %xmm5, %xmm1 + movaps %xmm5, TEMP(5) + movaps %xmm4, %xmm5 + movaps %xmm6, %xmm7 + unpcklps %xmm0, %xmm4 + unpckhps %xmm0, %xmm5 + unpcklps %xmm1, %xmm6 + unpckhps %xmm1, %xmm7 + + movaps TEMP(0), %xmm0 + movaps TEMP(2), %xmm2 + movaps %xmm4, TEMP(4) + movaps %xmm6, TEMP(6) + + movaps %xmm0, %xmm4 + movaps %xmm2, %xmm6 + unpcklps TEMP(1), %xmm0 + unpckhps TEMP(1), %xmm4 + unpcklps TEMP(3), %xmm2 + unpckhps TEMP(3), %xmm6 + movaps %xmm0, %xmm1 + movaps %xmm2, %xmm3 + unpcklps %xmm4, %xmm0 + unpckhps %xmm4, %xmm1 + unpcklps %xmm6, %xmm2 + unpckhps %xmm6, %xmm3 + movaps %xmm0, %xmm4 + movaps %xmm2, %xmm6 + subps %xmm1, %xmm4 + subps %xmm3, %xmm6 + addps %xmm1, %xmm0 + addps %xmm3, %xmm2 + mulps TEMP(5), %xmm4 + mulps TEMP(5), %xmm6 + movaps %xmm0, %xmm1 + movaps %xmm2, %xmm3 + unpcklps %xmm4, %xmm0 + unpckhps %xmm4, %xmm1 + unpcklps %xmm6, %xmm2 + unpckhps %xmm6, %xmm3 + + movaps %xmm0, TEMP(0) + movaps %xmm1, TEMP(1) + movaps %xmm2, TEMP(2) + movaps %xmm3, TEMP(3) + movaps %xmm5, TEMP(5) + movaps %xmm7, TEMP(7) + + movss TEMP_BYTE(12), %xmm0 + movss TEMP_BYTE(28), %xmm1 + movss TEMP_BYTE(44), %xmm2 + movss TEMP_BYTE(60), %xmm3 + addss TEMP_BYTE(8), %xmm0 + addss TEMP_BYTE(24), %xmm1 + addss TEMP_BYTE(40), %xmm2 + addss TEMP_BYTE(56), %xmm3 + movss %xmm0, TEMP_BYTE(8) + movss %xmm1, TEMP_BYTE(24) + movss %xmm2, TEMP_BYTE(40) + movss %xmm3, TEMP_BYTE(56) + movss TEMP_BYTE(76), %xmm0 + movss TEMP_BYTE(92), %xmm1 + movss TEMP_BYTE(108), %xmm2 + movss TEMP_BYTE(124), %xmm3 + addss TEMP_BYTE(72), %xmm0 + addss TEMP_BYTE(88), %xmm1 + addss TEMP_BYTE(104), %xmm2 + addss TEMP_BYTE(120), %xmm3 + movss %xmm0, TEMP_BYTE(72) + movss %xmm1, TEMP_BYTE(88) + movss %xmm2, TEMP_BYTE(104) + movss %xmm3, TEMP_BYTE(120) + + movaps TEMP_BYTE(16), %xmm1 + movaps TEMP_BYTE(48), %xmm3 + movaps TEMP_BYTE(80), %xmm5 + movaps TEMP_BYTE(112), %xmm7 + movaps %xmm1, %xmm0 + movaps %xmm3, %xmm2 + movaps %xmm5, %xmm4 + movaps %xmm7, %xmm6 + shufps $0x1e, %xmm0, %xmm0 + shufps $0x1e, %xmm2, %xmm2 + shufps $0x1e, %xmm4, %xmm4 + shufps $0x1e, %xmm6, %xmm6 + andps mask, %xmm0 + andps mask, %xmm2 + andps mask, %xmm4 + andps mask, %xmm6 + addps %xmm0, %xmm1 + addps %xmm2, %xmm3 + addps %xmm4, %xmm5 + addps %xmm6, %xmm7 + + movaps TEMP_BYTE(32), %xmm2 + movaps TEMP_BYTE(96), %xmm6 + movaps %xmm2, %xmm0 + movaps %xmm6, %xmm4 + shufps $0x1e, %xmm0, %xmm0 + shufps $0x1e, %xmm4, %xmm4 + andps mask, %xmm0 + andps mask, %xmm4 + addps %xmm3, %xmm2 + addps %xmm0, %xmm3 + addps %xmm7, %xmm6 + addps %xmm4, %xmm7 + + movaps TEMP_BYTE(0), %xmm0 + movaps TEMP_BYTE(64), %xmm4 + + movss %xmm0, 1024(%ecx) + movss %xmm2, 896(%ecx) + movss %xmm1, 768(%ecx) + movss %xmm3, 640(%ecx) + + shufps $0xe1, %xmm0, %xmm0 + shufps $0xe1, %xmm2, %xmm2 + shufps $0xe1, %xmm1, %xmm1 + shufps $0xe1, %xmm3, %xmm3 + movss %xmm0, (%ecx) + movss %xmm0, (%ebx) + movss %xmm2, 128(%ebx) + movss %xmm1, 256(%ebx) + movss %xmm3, 384(%ebx) + + movhlps %xmm0, %xmm0 + movhlps %xmm2, %xmm2 + movhlps %xmm1, %xmm1 + movhlps %xmm3, %xmm3 + movss %xmm0, 512(%ecx) + movss %xmm2, 384(%ecx) + movss %xmm1, 256(%ecx) + movss %xmm3, 128(%ecx) + + shufps $0xe1, %xmm0, %xmm0 + shufps $0xe1, %xmm2, %xmm2 + shufps $0xe1, %xmm1, %xmm1 + shufps $0xe1, %xmm3, %xmm3 + movss %xmm0, 512(%ebx) + movss %xmm2, 640(%ebx) + movss %xmm1, 768(%ebx) + movss %xmm3, 896(%ebx) + + movaps %xmm4, %xmm0 + shufps $0x1e, %xmm0, %xmm0 + movaps %xmm5, %xmm1 + andps mask, %xmm0 + + addps %xmm6, %xmm4 + addps %xmm7, %xmm5 + addps %xmm1, %xmm6 + addps %xmm0, %xmm7 + + movss %xmm4, 960(%ecx) + movss %xmm6, 832(%ecx) + movss %xmm5, 704(%ecx) + movss %xmm7, 576(%ecx) + movhlps %xmm4, %xmm0 + movhlps %xmm6, %xmm1 + movhlps %xmm5, %xmm2 + movhlps %xmm7, %xmm3 + movss %xmm0, 448(%ecx) + movss %xmm1, 320(%ecx) + movss %xmm2, 192(%ecx) + movss %xmm3, 64(%ecx) + + shufps $0xe1, %xmm4, %xmm4 + shufps $0xe1, %xmm6, %xmm6 + shufps $0xe1, %xmm5, %xmm5 + shufps $0xe1, %xmm7, %xmm7 + movss %xmm4, 64(%ebx) + movss %xmm6, 192(%ebx) + movss %xmm5, 320(%ebx) + movss %xmm7, 448(%ebx) + + shufps $0xe1, %xmm0, %xmm0 + shufps $0xe1, %xmm1, %xmm1 + shufps $0xe1, %xmm2, %xmm2 + shufps $0xe1, %xmm3, %xmm3 + movss %xmm0, 576(%ebx) + movss %xmm1, 704(%ebx) + movss %xmm2, 832(%ebx) + movss %xmm3, 960(%ebx) + + popl %ebx + movl %ebp, %esp + popl %ebp + ret + +NONEXEC_STACK diff --git a/lib/3rdparty/libmpg123/dct64_x86_64.S b/lib/3rdparty/libmpg123/dct64_x86_64.S new file mode 100644 index 00000000000..01440391e5e --- /dev/null +++ b/lib/3rdparty/libmpg123/dct64_x86_64.S @@ -0,0 +1,464 @@ +/* + dct64_x86_64: SSE optimized dct64 for x86-64 + + copyright 1995-2009 by the mpg123 project - free software under the terms of the LGPL 2.1 + see COPYING and AUTHORS files in distribution or http://mpg123.org + initially written by Taihei Monma +*/ + +#include "mangle.h" + +#ifdef _WIN64 +/* short *out0 */ +#define ARG0 %r9 +/* short *out1 */ +#define ARG1 %rdx +/* real *samples */ +#define ARG2 %r8 +#else +/* short *out0 */ +#define ARG0 %rdi +/* short *out1 */ +#define ARG1 %rsi +/* real *samples */ +#define ARG2 %rdx +#endif + +/* + void dct64_x86_64(short *out0, short *out1, real *samples); +*/ + +#ifndef __APPLE__ + .section .rodata +#else + .data +#endif + ALIGN32 +ASM_NAME(costab_x86_64): + .long 1056974725 + .long 1057056395 + .long 1057223771 + .long 1057485416 + .long 1057855544 + .long 1058356026 + .long 1059019886 + .long 1059897405 + .long 1061067246 + .long 1062657950 + .long 1064892987 + .long 1066774581 + .long 1069414683 + .long 1073984175 + .long 1079645762 + .long 1092815430 + .long 1057005197 + .long 1057342072 + .long 1058087743 + .long 1059427869 + .long 1061799040 + .long 1065862217 + .long 1071413542 + .long 1084439708 + .long 1057128951 + .long 1058664893 + .long 1063675095 + .long 1076102863 + .long 1057655764 + .long 1067924853 + .long 1060439283 + .long 0 + .text + ALIGN16 +.globl ASM_NAME(dct64_x86_64) +ASM_NAME(dct64_x86_64): +#ifdef _WIN64 /* should save xmm6-15 */ + movq %rcx, ARG0 + subq $168, %rsp /* stack alignment + 10 xmm registers */ + movaps %xmm6, (%rsp) + movaps %xmm7, 16(%rsp) + movaps %xmm8, 32(%rsp) + movaps %xmm9, 48(%rsp) + movaps %xmm10, 64(%rsp) + movaps %xmm11, 80(%rsp) + movaps %xmm12, 96(%rsp) + movaps %xmm13, 112(%rsp) + movaps %xmm14, 128(%rsp) + movaps %xmm15, 144(%rsp) +#endif + + leaq ASM_NAME(costab_x86_64)(%rip), %rcx + + MOVUAPS (ARG2), %xmm15 + MOVUAPS 16(ARG2), %xmm14 + MOVUAPS 112(ARG2), %xmm0 + MOVUAPS 96(ARG2), %xmm1 + shufps $0x1b, %xmm0, %xmm0 + shufps $0x1b, %xmm1, %xmm1 + movaps %xmm15, %xmm8 + movaps %xmm14, %xmm9 + addps %xmm0, %xmm8 + addps %xmm1, %xmm9 + subps %xmm0, %xmm15 + subps %xmm1, %xmm14 + + MOVUAPS 32(ARG2), %xmm13 + MOVUAPS 48(ARG2), %xmm12 + MOVUAPS 80(ARG2), %xmm0 + MOVUAPS 64(ARG2), %xmm1 + shufps $0x1b, %xmm0, %xmm0 + shufps $0x1b, %xmm1, %xmm1 + movaps %xmm13, %xmm10 + movaps %xmm12, %xmm11 + addps %xmm0, %xmm10 + addps %xmm1, %xmm11 + subps %xmm0, %xmm13 + subps %xmm1, %xmm12 + + movaps (%rcx), %xmm0 + movaps 16(%rcx), %xmm1 + movaps 32(%rcx), %xmm2 + movaps 48(%rcx), %xmm3 + mulps %xmm0, %xmm15 + mulps %xmm1, %xmm14 + mulps %xmm2, %xmm13 + mulps %xmm3, %xmm12 + + movaps 64(%rcx), %xmm0 + movaps 80(%rcx), %xmm1 + + pshufd $0x1b, %xmm11, %xmm2 + pshufd $0x1b, %xmm10, %xmm3 + shufps $0x1b, %xmm13, %xmm13 + shufps $0x1b, %xmm12, %xmm12 + movaps %xmm8, %xmm11 + movaps %xmm9, %xmm10 + movaps %xmm14, %xmm4 + movaps %xmm15, %xmm5 + subps %xmm2, %xmm11 + subps %xmm3, %xmm10 + subps %xmm13, %xmm14 + subps %xmm12, %xmm15 + addps %xmm2, %xmm8 + addps %xmm3, %xmm9 + addps %xmm5, %xmm12 + addps %xmm4, %xmm13 + mulps %xmm0, %xmm11 + mulps %xmm1, %xmm10 + mulps %xmm1, %xmm14 + mulps %xmm0, %xmm15 + + movaps 96(%rcx), %xmm0 + + pshufd $0x1b, %xmm9, %xmm1 + pshufd $0x1b, %xmm13, %xmm2 + shufps $0x1b, %xmm10, %xmm10 + shufps $0x1b, %xmm14, %xmm14 + movaps %xmm8, %xmm9 + movaps %xmm12, %xmm13 + movaps %xmm11, %xmm3 + movaps %xmm15, %xmm4 + subps %xmm1, %xmm9 + subps %xmm2, %xmm13 + subps %xmm10, %xmm11 + subps %xmm14, %xmm15 + addps %xmm1, %xmm8 + addps %xmm2, %xmm12 + addps %xmm3, %xmm10 + addps %xmm4, %xmm14 + mulps %xmm0, %xmm9 + mulps %xmm0, %xmm13 + mulps %xmm0, %xmm11 + mulps %xmm0, %xmm15 + + movaps 112(%rcx), %xmm0 + movaps %xmm0, %xmm1 + movlhps %xmm1, %xmm1 + + movaps %xmm8, %xmm2 + movaps %xmm9, %xmm3 + shufps $0x44, %xmm10, %xmm2 + shufps $0xbb, %xmm11, %xmm9 + shufps $0xbb, %xmm10, %xmm8 + shufps $0x44, %xmm11, %xmm3 + movaps %xmm2, %xmm4 + movaps %xmm3, %xmm5 + subps %xmm8, %xmm2 + subps %xmm9, %xmm3 + addps %xmm4, %xmm8 + addps %xmm5, %xmm9 + mulps %xmm1, %xmm2 + mulps %xmm1, %xmm3 + movaps %xmm8, %xmm10 + movaps %xmm9, %xmm11 + shufps $0x14, %xmm2, %xmm8 + shufps $0xbe, %xmm2, %xmm10 + shufps $0x14, %xmm3, %xmm9 + shufps $0xbe, %xmm3, %xmm11 + + movaps %xmm12, %xmm2 + movaps %xmm13, %xmm3 + shufps $0x44, %xmm14, %xmm2 + shufps $0xbb, %xmm15, %xmm13 + shufps $0xbb, %xmm14, %xmm12 + shufps $0x44, %xmm15, %xmm3 + movaps %xmm2, %xmm4 + movaps %xmm3, %xmm5 + subps %xmm12, %xmm2 + subps %xmm13, %xmm3 + addps %xmm4, %xmm12 + addps %xmm5, %xmm13 + mulps %xmm1, %xmm2 + mulps %xmm1, %xmm3 + movaps %xmm12, %xmm14 + movaps %xmm13, %xmm15 + shufps $0x14, %xmm2, %xmm12 + shufps $0xbe, %xmm2, %xmm14 + shufps $0x14, %xmm3, %xmm13 + shufps $0xbe, %xmm3, %xmm15 + + shufps $0xaa, %xmm0, %xmm0 + pcmpeqd %xmm1, %xmm1 + pslld $31, %xmm1 + psllq $32, %xmm1 + xorps %xmm1, %xmm0 + + movaps %xmm8, %xmm1 + movaps %xmm10, %xmm2 + unpcklps %xmm9, %xmm8 + unpckhps %xmm9, %xmm1 + unpcklps %xmm11, %xmm10 + unpckhps %xmm11, %xmm2 + movaps %xmm8, %xmm3 + movaps %xmm10, %xmm4 + unpcklps %xmm1, %xmm8 + unpckhps %xmm1, %xmm3 + unpcklps %xmm2, %xmm10 + unpckhps %xmm2, %xmm4 + movaps %xmm8, %xmm1 + movaps %xmm10, %xmm2 + subps %xmm3, %xmm1 + subps %xmm4, %xmm2 + addps %xmm3, %xmm8 + addps %xmm4, %xmm10 + mulps %xmm0, %xmm1 + mulps %xmm0, %xmm2 + movaps %xmm8, %xmm9 + movaps %xmm10, %xmm11 + unpcklps %xmm1, %xmm8 + unpckhps %xmm1, %xmm9 + unpcklps %xmm2, %xmm10 + unpckhps %xmm2, %xmm11 + + movaps %xmm12, %xmm1 + movaps %xmm14, %xmm2 + unpcklps %xmm13, %xmm12 + unpckhps %xmm13, %xmm1 + unpcklps %xmm15, %xmm14 + unpckhps %xmm15, %xmm2 + movaps %xmm12, %xmm3 + movaps %xmm14, %xmm4 + unpcklps %xmm1, %xmm12 + unpckhps %xmm1, %xmm3 + unpcklps %xmm2, %xmm14 + unpckhps %xmm2, %xmm4 + movaps %xmm12, %xmm1 + movaps %xmm14, %xmm2 + subps %xmm3, %xmm1 + subps %xmm4, %xmm2 + addps %xmm3, %xmm12 + addps %xmm4, %xmm14 + mulps %xmm0, %xmm1 + mulps %xmm0, %xmm2 + movaps %xmm12, %xmm13 + movaps %xmm14, %xmm15 + unpcklps %xmm1, %xmm12 + unpckhps %xmm1, %xmm13 + unpcklps %xmm2, %xmm14 + unpckhps %xmm2, %xmm15 + + + xorps %xmm0, %xmm0 + xorps %xmm1, %xmm1 + shufpd $0x2, %xmm8, %xmm0 + shufpd $0x2, %xmm9, %xmm1 + psrlq $32, %xmm0 + psrlq $32, %xmm1 + addps %xmm0, %xmm8 + addps %xmm1, %xmm9 + + xorps %xmm0, %xmm0 + xorps %xmm1, %xmm1 + shufpd $0x2, %xmm10, %xmm0 + shufpd $0x2, %xmm11, %xmm1 + psrlq $32, %xmm0 + psrlq $32, %xmm1 + addps %xmm0, %xmm10 + addps %xmm1, %xmm11 + + xorps %xmm0, %xmm0 + xorps %xmm1, %xmm1 + shufpd $0x2, %xmm12, %xmm0 + shufpd $0x2, %xmm13, %xmm1 + psrlq $32, %xmm0 + psrlq $32, %xmm1 + addps %xmm0, %xmm12 + addps %xmm1, %xmm13 + + xorps %xmm0, %xmm0 + xorps %xmm1, %xmm1 + shufpd $0x2, %xmm14, %xmm0 + shufpd $0x2, %xmm15, %xmm1 + psrlq $32, %xmm0 + psrlq $32, %xmm1 + addps %xmm0, %xmm14 + addps %xmm1, %xmm15 + + pshufd $0x78, %xmm9, %xmm0 + pshufd $0x78, %xmm11, %xmm1 + pshufd $0x78, %xmm13, %xmm2 + pshufd $0x78, %xmm15, %xmm3 + psrldq $4, %xmm0 + psrldq $4, %xmm1 + psrldq $4, %xmm2 + psrldq $4, %xmm3 + addps %xmm0, %xmm9 + addps %xmm1, %xmm11 + addps %xmm2, %xmm13 + addps %xmm3, %xmm15 + + pshufd $0x78, %xmm10, %xmm0 + pshufd $0x78, %xmm14, %xmm1 + psrldq $4, %xmm0 + psrldq $4, %xmm1 + addps %xmm11, %xmm10 + addps %xmm15, %xmm14 + addps %xmm0, %xmm11 + addps %xmm1, %xmm15 + + cvtps2dq %xmm8, %xmm8 + cvtps2dq %xmm9, %xmm9 + cvtps2dq %xmm10, %xmm10 + cvtps2dq %xmm11, %xmm11 + packssdw %xmm10, %xmm8 + packssdw %xmm11, %xmm9 + + movd %xmm8, %eax + movd %xmm9, %ecx + movw %ax, 512(ARG0) + movw %cx, 384(ARG0) + shrl $16, %eax + shrl $16, %ecx + movw %ax, (ARG0) + movw %ax, (ARG1) + movw %cx, 128(ARG1) + + movhlps %xmm8, %xmm0 + movhlps %xmm9, %xmm1 + movd %xmm0, %eax + movd %xmm1, %ecx + movw %ax, 448(ARG0) + movw %cx, 320(ARG0) + shrl $16, %eax + shrl $16, %ecx + movw %ax, 64(ARG1) + movw %cx, 192(ARG1) + + pshuflw $0xee, %xmm8, %xmm2 + pshuflw $0xee, %xmm9, %xmm3 + movd %xmm2, %eax + movd %xmm3, %ecx + movw %ax, 256(ARG0) + movw %cx, 128(ARG0) + shrl $16, %eax + shrl $16, %ecx + movw %ax, 256(ARG1) + movw %cx, 384(ARG1) + + pshuflw $0xee, %xmm0, %xmm0 + pshuflw $0xee, %xmm1, %xmm1 + movd %xmm0, %eax + movd %xmm1, %ecx + movw %ax, 192(ARG0) + movw %cx, 64(ARG0) + shrl $16, %eax + shrl $16, %ecx + movw %ax, 320(ARG1) + movw %cx, 448(ARG1) + + movaps %xmm12, %xmm0 + movaps %xmm13, %xmm1 + movaps %xmm14, %xmm2 + movaps %xmm15, %xmm3 + shufps $0x1e, %xmm0, %xmm0 + pslldq $4, %xmm0 + psrldq $4, %xmm0 + addps %xmm2, %xmm12 + addps %xmm3, %xmm13 + addps %xmm1, %xmm14 + addps %xmm0, %xmm15 + + cvtps2dq %xmm12, %xmm12 + cvtps2dq %xmm13, %xmm13 + cvtps2dq %xmm14, %xmm14 + cvtps2dq %xmm15, %xmm15 + packssdw %xmm13, %xmm12 + packssdw %xmm15, %xmm14 + + movd %xmm12, %eax + movd %xmm14, %ecx + movw %ax, 480(ARG0) + movw %cx, 416(ARG0) + shrl $16, %eax + shrl $16, %ecx + movw %ax, 32(ARG1) + movw %cx, 96(ARG1) + + pshuflw $0xee, %xmm12, %xmm0 + pshuflw $0xee, %xmm14, %xmm1 + movd %xmm0, %eax + movd %xmm1, %ecx + movw %ax, 224(ARG0) + movw %cx, 160(ARG0) + shrl $16, %eax + shrl $16, %ecx + movw %ax, 288(ARG1) + movw %cx, 352(ARG1) + + movhlps %xmm12, %xmm0 + movhlps %xmm14, %xmm1 + movd %xmm0, %eax + movd %xmm1, %ecx + movw %ax, 352(ARG0) + movw %cx, 288(ARG0) + shrl $16, %eax + shrl $16, %ecx + movw %ax, 160(ARG1) + movw %cx, 224(ARG1) + + pshuflw $0xee, %xmm0, %xmm0 + pshuflw $0xee, %xmm1, %xmm1 + movd %xmm0, %eax + movd %xmm1, %ecx + movw %ax, 96(ARG0) + movw %cx, 32(ARG0) + shrl $16, %eax + shrl $16, %ecx + movw %ax, 416(ARG1) + movw %cx, 480(ARG1) + +#ifdef _WIN64 + movaps (%rsp), %xmm6 + movaps 16(%rsp), %xmm7 + movaps 32(%rsp), %xmm8 + movaps 48(%rsp), %xmm9 + movaps 64(%rsp), %xmm10 + movaps 80(%rsp), %xmm11 + movaps 96(%rsp), %xmm12 + movaps 112(%rsp), %xmm13 + movaps 128(%rsp), %xmm14 + movaps 144(%rsp), %xmm15 + addq $168, %rsp +#endif + ret + +NONEXEC_STACK diff --git a/lib/3rdparty/libmpg123/dct64_x86_64_float.S b/lib/3rdparty/libmpg123/dct64_x86_64_float.S new file mode 100644 index 00000000000..168a3210e03 --- /dev/null +++ b/lib/3rdparty/libmpg123/dct64_x86_64_float.S @@ -0,0 +1,426 @@ +/* + dct64_x86_64_float: SSE optimized dct64 for x86-64 (float output version) + + copyright 1995-2009 by the mpg123 project - free software under the terms of the LGPL 2.1 + see COPYING and AUTHORS files in distribution or http://mpg123.org + initially written by Taihei Monma +*/ + +#include "mangle.h" + +#ifdef _WIN64 +/* short *out0 */ +#define ARG0 %r9 +/* short *out1 */ +#define ARG1 %rdx +/* real *samples */ +#define ARG2 %r8 +#else +/* real *out0 */ +#define ARG0 %rdi +/* real *out1 */ +#define ARG1 %rsi +/* real *samples */ +#define ARG2 %rdx +#endif + +/* + void dct64_real_x86_64(real *out0, real *out1, real *samples); +*/ + +#ifndef __APPLE__ + .section .rodata +#else + .data +#endif + ALIGN32 +ASM_NAME(costab_x86_64): + .long 1056974725 + .long 1057056395 + .long 1057223771 + .long 1057485416 + .long 1057855544 + .long 1058356026 + .long 1059019886 + .long 1059897405 + .long 1061067246 + .long 1062657950 + .long 1064892987 + .long 1066774581 + .long 1069414683 + .long 1073984175 + .long 1079645762 + .long 1092815430 + .long 1057005197 + .long 1057342072 + .long 1058087743 + .long 1059427869 + .long 1061799040 + .long 1065862217 + .long 1071413542 + .long 1084439708 + .long 1057128951 + .long 1058664893 + .long 1063675095 + .long 1076102863 + .long 1057655764 + .long 1067924853 + .long 1060439283 + .long 0 + .text + ALIGN16 +.globl ASM_NAME(dct64_real_x86_64) +ASM_NAME(dct64_real_x86_64): +#ifdef _WIN64 /* should save xmm6-15 */ + movq %rcx, ARG0 + subq $168, %rsp /* stack alignment + 10 xmm registers */ + movaps %xmm6, (%rsp) + movaps %xmm7, 16(%rsp) + movaps %xmm8, 32(%rsp) + movaps %xmm9, 48(%rsp) + movaps %xmm10, 64(%rsp) + movaps %xmm11, 80(%rsp) + movaps %xmm12, 96(%rsp) + movaps %xmm13, 112(%rsp) + movaps %xmm14, 128(%rsp) + movaps %xmm15, 144(%rsp) +#endif + + leaq ASM_NAME(costab_x86_64)(%rip), %rcx + + MOVUAPS (ARG2), %xmm15 + MOVUAPS 16(ARG2), %xmm14 + MOVUAPS 112(ARG2), %xmm0 + MOVUAPS 96(ARG2), %xmm1 + shufps $0x1b, %xmm0, %xmm0 + shufps $0x1b, %xmm1, %xmm1 + movaps %xmm15, %xmm8 + movaps %xmm14, %xmm9 + addps %xmm0, %xmm8 + addps %xmm1, %xmm9 + subps %xmm0, %xmm15 + subps %xmm1, %xmm14 + + MOVUAPS 32(ARG2), %xmm13 + MOVUAPS 48(ARG2), %xmm12 + MOVUAPS 80(ARG2), %xmm0 + MOVUAPS 64(ARG2), %xmm1 + shufps $0x1b, %xmm0, %xmm0 + shufps $0x1b, %xmm1, %xmm1 + movaps %xmm13, %xmm10 + movaps %xmm12, %xmm11 + addps %xmm0, %xmm10 + addps %xmm1, %xmm11 + subps %xmm0, %xmm13 + subps %xmm1, %xmm12 + + movaps (%rcx), %xmm0 + movaps 16(%rcx), %xmm1 + movaps 32(%rcx), %xmm2 + movaps 48(%rcx), %xmm3 + mulps %xmm0, %xmm15 + mulps %xmm1, %xmm14 + mulps %xmm2, %xmm13 + mulps %xmm3, %xmm12 + + movaps 64(%rcx), %xmm0 + movaps 80(%rcx), %xmm1 + + pshufd $0x1b, %xmm11, %xmm2 + pshufd $0x1b, %xmm10, %xmm3 + shufps $0x1b, %xmm13, %xmm13 + shufps $0x1b, %xmm12, %xmm12 + movaps %xmm8, %xmm11 + movaps %xmm9, %xmm10 + movaps %xmm14, %xmm4 + movaps %xmm15, %xmm5 + subps %xmm2, %xmm11 + subps %xmm3, %xmm10 + subps %xmm13, %xmm14 + subps %xmm12, %xmm15 + addps %xmm2, %xmm8 + addps %xmm3, %xmm9 + addps %xmm5, %xmm12 + addps %xmm4, %xmm13 + mulps %xmm0, %xmm11 + mulps %xmm1, %xmm10 + mulps %xmm1, %xmm14 + mulps %xmm0, %xmm15 + + movaps 96(%rcx), %xmm0 + + pshufd $0x1b, %xmm9, %xmm1 + pshufd $0x1b, %xmm13, %xmm2 + shufps $0x1b, %xmm10, %xmm10 + shufps $0x1b, %xmm14, %xmm14 + movaps %xmm8, %xmm9 + movaps %xmm12, %xmm13 + movaps %xmm11, %xmm3 + movaps %xmm15, %xmm4 + subps %xmm1, %xmm9 + subps %xmm2, %xmm13 + subps %xmm10, %xmm11 + subps %xmm14, %xmm15 + addps %xmm1, %xmm8 + addps %xmm2, %xmm12 + addps %xmm3, %xmm10 + addps %xmm4, %xmm14 + mulps %xmm0, %xmm9 + mulps %xmm0, %xmm13 + mulps %xmm0, %xmm11 + mulps %xmm0, %xmm15 + + movaps 112(%rcx), %xmm0 + movaps %xmm0, %xmm1 + movlhps %xmm1, %xmm1 + + movaps %xmm8, %xmm2 + movaps %xmm9, %xmm3 + shufps $0x44, %xmm10, %xmm2 + shufps $0xbb, %xmm11, %xmm9 + shufps $0xbb, %xmm10, %xmm8 + shufps $0x44, %xmm11, %xmm3 + movaps %xmm2, %xmm4 + movaps %xmm3, %xmm5 + subps %xmm8, %xmm2 + subps %xmm9, %xmm3 + addps %xmm4, %xmm8 + addps %xmm5, %xmm9 + mulps %xmm1, %xmm2 + mulps %xmm1, %xmm3 + movaps %xmm8, %xmm10 + movaps %xmm9, %xmm11 + shufps $0x14, %xmm2, %xmm8 + shufps $0xbe, %xmm2, %xmm10 + shufps $0x14, %xmm3, %xmm9 + shufps $0xbe, %xmm3, %xmm11 + + movaps %xmm12, %xmm2 + movaps %xmm13, %xmm3 + shufps $0x44, %xmm14, %xmm2 + shufps $0xbb, %xmm15, %xmm13 + shufps $0xbb, %xmm14, %xmm12 + shufps $0x44, %xmm15, %xmm3 + movaps %xmm2, %xmm4 + movaps %xmm3, %xmm5 + subps %xmm12, %xmm2 + subps %xmm13, %xmm3 + addps %xmm4, %xmm12 + addps %xmm5, %xmm13 + mulps %xmm1, %xmm2 + mulps %xmm1, %xmm3 + movaps %xmm12, %xmm14 + movaps %xmm13, %xmm15 + shufps $0x14, %xmm2, %xmm12 + shufps $0xbe, %xmm2, %xmm14 + shufps $0x14, %xmm3, %xmm13 + shufps $0xbe, %xmm3, %xmm15 + + shufps $0xaa, %xmm0, %xmm0 + pcmpeqd %xmm1, %xmm1 + pslld $31, %xmm1 + psllq $32, %xmm1 + xorps %xmm1, %xmm0 + + movaps %xmm8, %xmm1 + movaps %xmm10, %xmm2 + unpcklps %xmm9, %xmm8 + unpckhps %xmm9, %xmm1 + unpcklps %xmm11, %xmm10 + unpckhps %xmm11, %xmm2 + movaps %xmm8, %xmm3 + movaps %xmm10, %xmm4 + unpcklps %xmm1, %xmm8 + unpckhps %xmm1, %xmm3 + unpcklps %xmm2, %xmm10 + unpckhps %xmm2, %xmm4 + movaps %xmm8, %xmm1 + movaps %xmm10, %xmm2 + subps %xmm3, %xmm1 + subps %xmm4, %xmm2 + addps %xmm3, %xmm8 + addps %xmm4, %xmm10 + mulps %xmm0, %xmm1 + mulps %xmm0, %xmm2 + movaps %xmm8, %xmm9 + movaps %xmm10, %xmm11 + unpcklps %xmm1, %xmm8 + unpckhps %xmm1, %xmm9 + unpcklps %xmm2, %xmm10 + unpckhps %xmm2, %xmm11 + + movaps %xmm12, %xmm1 + movaps %xmm14, %xmm2 + unpcklps %xmm13, %xmm12 + unpckhps %xmm13, %xmm1 + unpcklps %xmm15, %xmm14 + unpckhps %xmm15, %xmm2 + movaps %xmm12, %xmm3 + movaps %xmm14, %xmm4 + unpcklps %xmm1, %xmm12 + unpckhps %xmm1, %xmm3 + unpcklps %xmm2, %xmm14 + unpckhps %xmm2, %xmm4 + movaps %xmm12, %xmm1 + movaps %xmm14, %xmm2 + subps %xmm3, %xmm1 + subps %xmm4, %xmm2 + addps %xmm3, %xmm12 + addps %xmm4, %xmm14 + mulps %xmm0, %xmm1 + mulps %xmm0, %xmm2 + movaps %xmm12, %xmm13 + movaps %xmm14, %xmm15 + unpcklps %xmm1, %xmm12 + unpckhps %xmm1, %xmm13 + unpcklps %xmm2, %xmm14 + unpckhps %xmm2, %xmm15 + + + xorps %xmm0, %xmm0 + xorps %xmm1, %xmm1 + shufpd $0x2, %xmm8, %xmm0 + shufpd $0x2, %xmm9, %xmm1 + psrlq $32, %xmm0 + psrlq $32, %xmm1 + addps %xmm0, %xmm8 + addps %xmm1, %xmm9 + + xorps %xmm0, %xmm0 + xorps %xmm1, %xmm1 + shufpd $0x2, %xmm10, %xmm0 + shufpd $0x2, %xmm11, %xmm1 + psrlq $32, %xmm0 + psrlq $32, %xmm1 + addps %xmm0, %xmm10 + addps %xmm1, %xmm11 + + xorps %xmm0, %xmm0 + xorps %xmm1, %xmm1 + shufpd $0x2, %xmm12, %xmm0 + shufpd $0x2, %xmm13, %xmm1 + psrlq $32, %xmm0 + psrlq $32, %xmm1 + addps %xmm0, %xmm12 + addps %xmm1, %xmm13 + + xorps %xmm0, %xmm0 + xorps %xmm1, %xmm1 + shufpd $0x2, %xmm14, %xmm0 + shufpd $0x2, %xmm15, %xmm1 + psrlq $32, %xmm0 + psrlq $32, %xmm1 + addps %xmm0, %xmm14 + addps %xmm1, %xmm15 + + pshufd $0x78, %xmm9, %xmm0 + pshufd $0x78, %xmm11, %xmm1 + pshufd $0x78, %xmm13, %xmm2 + pshufd $0x78, %xmm15, %xmm3 + psrldq $4, %xmm0 + psrldq $4, %xmm1 + psrldq $4, %xmm2 + psrldq $4, %xmm3 + addps %xmm0, %xmm9 + addps %xmm1, %xmm11 + addps %xmm2, %xmm13 + addps %xmm3, %xmm15 + + pshufd $0x78, %xmm10, %xmm0 + pshufd $0x78, %xmm14, %xmm1 + psrldq $4, %xmm0 + psrldq $4, %xmm1 + addps %xmm11, %xmm10 + addps %xmm15, %xmm14 + addps %xmm0, %xmm11 + addps %xmm1, %xmm15 + + + movss %xmm8, 1024(ARG0) + movss %xmm10, 896(ARG0) + movss %xmm9, 768(ARG0) + movss %xmm11, 640(ARG0) + movhlps %xmm8, %xmm0 + movhlps %xmm10, %xmm1 + movhlps %xmm9, %xmm2 + movhlps %xmm11, %xmm3 + movss %xmm0, 512(ARG0) + movss %xmm1, 384(ARG0) + movss %xmm2, 256(ARG0) + movss %xmm3, 128(ARG0) + + pshuflw $0xee, %xmm8, %xmm4 + pshuflw $0xee, %xmm10, %xmm5 + pshuflw $0xee, %xmm9, %xmm6 + pshuflw $0xee, %xmm11, %xmm7 + movss %xmm4, (ARG0) + movss %xmm4, (ARG1) + movss %xmm5, 128(ARG1) + movss %xmm6, 256(ARG1) + movss %xmm7, 384(ARG1) + + pshuflw $0xee, %xmm0, %xmm0 + pshuflw $0xee, %xmm1, %xmm1 + pshuflw $0xee, %xmm2, %xmm2 + pshuflw $0xee, %xmm3, %xmm3 + movss %xmm0, 512(ARG1) + movss %xmm1, 640(ARG1) + movss %xmm2, 768(ARG1) + movss %xmm3, 896(ARG1) + + pshufd $0x78, %xmm12, %xmm0 + movaps %xmm13, %xmm1 + psrldq $4, %xmm0 + + addps %xmm14, %xmm12 + addps %xmm15, %xmm13 + addps %xmm1, %xmm14 + addps %xmm0, %xmm15 + + movss %xmm12, 960(ARG0) + movss %xmm14, 832(ARG0) + movss %xmm13, 704(ARG0) + movss %xmm15, 576(ARG0) + movhlps %xmm12, %xmm0 + movhlps %xmm14, %xmm1 + movhlps %xmm13, %xmm2 + movhlps %xmm15, %xmm3 + movss %xmm0, 448(ARG0) + movss %xmm1, 320(ARG0) + movss %xmm2, 192(ARG0) + movss %xmm3, 64(ARG0) + + pshuflw $0xee, %xmm12, %xmm4 + pshuflw $0xee, %xmm14, %xmm5 + pshuflw $0xee, %xmm13, %xmm6 + pshuflw $0xee, %xmm15, %xmm7 + movss %xmm4, 64(ARG1) + movss %xmm5, 192(ARG1) + movss %xmm6, 320(ARG1) + movss %xmm7, 448(ARG1) + + pshuflw $0xee, %xmm0, %xmm0 + pshuflw $0xee, %xmm1, %xmm1 + pshuflw $0xee, %xmm2, %xmm2 + pshuflw $0xee, %xmm3, %xmm3 + movss %xmm0, 576(ARG1) + movss %xmm1, 704(ARG1) + movss %xmm2, 832(ARG1) + movss %xmm3, 960(ARG1) + +#ifdef _WIN64 + movaps (%rsp), %xmm6 + movaps 16(%rsp), %xmm7 + movaps 32(%rsp), %xmm8 + movaps 48(%rsp), %xmm9 + movaps 64(%rsp), %xmm10 + movaps 80(%rsp), %xmm11 + movaps 96(%rsp), %xmm12 + movaps 112(%rsp), %xmm13 + movaps 128(%rsp), %xmm14 + movaps 144(%rsp), %xmm15 + addq $168, %rsp +#endif + ret + +NONEXEC_STACK diff --git a/lib/3rdparty/libmpg123/dither.c b/lib/3rdparty/libmpg123/dither.c new file mode 100644 index 00000000000..678bca1c9b5 --- /dev/null +++ b/lib/3rdparty/libmpg123/dither.c @@ -0,0 +1,119 @@ +/* + dither: Generate shaped noise for dithering + + copyright 2009 by the mpg123 project - free software under the terms of the LGPL 2.1 + see COPYING and AUTHORS files in distribution or http://mpg123.org + initially written by Taihei Monma +*/ + +#include "config.h" +#include "compat.h" +#include "dither.h" + +const uint32_t init_seed = 2463534242UL; + +#define LAP 100 + +/* + xorshift random number generator, with output scaling to [-0.5, 0.5] + This is the white noise... + See http://www.jstatsoft.org/v08/i14/paper on XOR shift random number generators. +*/ +static float rand_xorshift32(uint32_t *seed) +{ + union + { + uint32_t i; + float f; + } fi; + + fi.i = *seed; + fi.i ^= (fi.i<<13); + fi.i ^= (fi.i>>17); + fi.i ^= (fi.i<<5); + *seed = fi.i; + + /* scale the number to [-0.5, 0.5] */ +#ifdef IEEE_FLOAT + fi.i = (fi.i>>9)|0x3f800000; + fi.f -= 1.5f; +#else + fi.f = (double)fi.i / 4294967295.0; + fi.f -= 0.5f; +#endif + return fi.f; +} + +static void white_noise(float *table, size_t count) +{ + size_t i; + uint32_t seed = init_seed; + + for(i=0; i 2*LAP ? LAP : count/2; + + float input_noise; + float xv[9], yv[9]; + + for(i=0;i<9;i++) + { + xv[i] = yv[i] = 0.0f; + } + + for(i=0;i=lap) table[i-lap] = yv[8] * 3.0f; + } +} + +void mpg123_noise(float* table, size_t count, enum mpg123_noise_type noisetype) +{ + switch(noisetype) + { + case mpg123_white_noise: white_noise(table, count); break; + case mpg123_tpdf_noise: tpdf_noise(table, count); break; + case mpg123_highpass_tpdf_noise: + highpass_tpdf_noise(table, count); + break; + } +} + +/* Generate white noise and shape it with a high pass filter. */ +void dither_table_init(float *dithertable) +{ + highpass_tpdf_noise(dithertable, DITHERSIZE); +} diff --git a/lib/3rdparty/libmpg123/equalizer.c b/lib/3rdparty/libmpg123/equalizer.c new file mode 100644 index 00000000000..bc5d5d93538 --- /dev/null +++ b/lib/3rdparty/libmpg123/equalizer.c @@ -0,0 +1,17 @@ +/* + equalizer.c: equalizer settings + + copyright ?-2006 by the mpg123 project - free software under the terms of the LGPL 2.1 + see COPYING and AUTHORS files in distribution or http://mpg123.org + initially written by Michael Hipp +*/ + + +#include "mpg123lib_intern.h" + +void do_equalizer(real *bandPtr,int channel, real equalizer[2][32]) +{ + int i; + for(i=0;i<32;i++) + bandPtr[i] = REAL_MUL(bandPtr[i], equalizer[channel][i]); +} diff --git a/lib/3rdparty/libmpg123/equalizer_3dnow.S b/lib/3rdparty/libmpg123/equalizer_3dnow.S new file mode 100644 index 00000000000..471a0ed02d2 --- /dev/null +++ b/lib/3rdparty/libmpg123/equalizer_3dnow.S @@ -0,0 +1,70 @@ +/* + equalizer_3dnow: 3DNow! optimized do_equalizer() + + copyright ?-2006 by the mpg123 project - free software under the terms of the LGPL 2.1 + see COPYING and AUTHORS files in distribution or http://mpg123.org + initially written by KIMURA Takuhiro +*/ + +#include "mangle.h" + +.text + ALIGN4 +.globl ASM_NAME(do_equalizer_3dnow) +/* .type ASM_NAME(do_equalizer_3dnow),@function */ +/* void do_equalizer(real *bandPtr,int channel, real equalizer[2][32]); */ +ASM_NAME(do_equalizer_3dnow): + pushl %esi + pushl %ebx + /* bandPtr */ + movl 12(%esp),%ebx + /* channel */ + movl 16(%esp),%ecx + xorl %edx,%edx + /* equalizer */ + movl 20(%esp),%esi + sall $7,%ecx + ALIGN4 +.L9: + movq (%ebx,%edx),%mm0 + pfmul (%esi,%ecx),%mm0 + + movq 8(%ebx,%edx),%mm1 + pfmul 8(%esi,%ecx),%mm1 + movq %mm0,(%ebx,%edx) + + movq 16(%ebx,%edx),%mm0 + pfmul 16(%esi,%ecx),%mm0 + movq %mm1,8(%ebx,%edx) + + movq 24(%ebx,%edx),%mm1 + pfmul 24(%esi,%ecx),%mm1 + movq %mm0,16(%ebx,%edx) + + movq 32(%ebx,%edx),%mm0 + pfmul 32(%esi,%ecx),%mm0 + movq %mm1,24(%ebx,%edx) + + movq 40(%ebx,%edx),%mm1 + pfmul 40(%esi,%ecx),%mm1 + movq %mm0,32(%ebx,%edx) + + movq 48(%ebx,%edx),%mm0 + pfmul 48(%esi,%ecx),%mm0 + movq %mm1,40(%ebx,%edx) + + movq 56(%ebx,%edx),%mm1 + pfmul 56(%esi,%ecx),%mm1 + movq %mm0,48(%ebx,%edx) + movq %mm1,56(%ebx,%edx) + + addl $64,%edx + addl $32,%ecx + cmpl $124,%edx + jle .L9 + ALIGN4 + popl %ebx + popl %esi + ret + +NONEXEC_STACK diff --git a/lib/3rdparty/libmpg123/feature.c b/lib/3rdparty/libmpg123/feature.c new file mode 100644 index 00000000000..19723884f99 --- /dev/null +++ b/lib/3rdparty/libmpg123/feature.c @@ -0,0 +1,106 @@ +#include "mpg123lib_intern.h" + +int mpg123_feature(const enum mpg123_feature_set key) +{ + switch(key) + { + case MPG123_FEATURE_ABI_UTF8OPEN: +#ifdef WANT_WIN32_UNICODE + return 1; +#else + return 0; +#endif /* WANT_WIN32_UNICODE */ + + case MPG123_FEATURE_OUTPUT_8BIT: +#ifdef NO_8BIT + return 0; +#else + return 1; +#endif /* mpg123_output_8bit */ + + case MPG123_FEATURE_OUTPUT_16BIT: +#ifdef NO_16BIT + return 0; +#else + return 1; +#endif /* mpg123_output_16bit */ + + case MPG123_FEATURE_OUTPUT_32BIT: +#ifdef NO_32BIT + return 0; +#else + return 1; +#endif /* mpg123_output_32bit */ + + case MPG123_FEATURE_PARSE_ID3V2: +#ifdef NO_ID3V2 + return 0; +#else + return 1; +#endif /* NO_ID3V2 */ + + case MPG123_FEATURE_DECODE_LAYER1: +#ifdef NO_LAYER1 + return 0; +#else + return 1; +#endif /* NO_LAYER1 */ + + case MPG123_FEATURE_DECODE_LAYER2: +#ifdef NO_LAYER2 + return 0; +#else + return 1; +#endif /* NO_LAYER2 */ + + case MPG123_FEATURE_DECODE_LAYER3: +#ifdef NO_LAYER3 + return 0; +#else + return 1; +#endif /* NO_LAYER3 */ + + case MPG123_FEATURE_DECODE_ACCURATE: +#ifdef ACCURATE_ROUNDING + return 1; +#else + return 0; +#endif /* ACCURATE_ROUNDING */ + + case MPG123_FEATURE_DECODE_DOWNSAMPLE: +#ifdef NO_DOWNSAMPLE + return 0; +#else + return 1; +#endif /* NO_DOWNSAMPLE */ + + case MPG123_FEATURE_DECODE_NTOM: +#ifdef NO_NTOM + return 0; +#else + return 1; +#endif /* NO_NTOM */ + + case MPG123_FEATURE_PARSE_ICY: +#ifdef NO_ICY + return 0; +#else + return 1; +#endif /* NO_ICY */ + + case MPG123_FEATURE_INDEX: +#ifdef FRAME_INDEX + return 1; +#else + return 0; +#endif /* FRAME_INDEX */ + case MPG123_FEATURE_TIMEOUT_READ: +#ifdef TIMEOUT_READ + return 1; +#else + return 0; +#endif + + default: return 0; + } +} diff --git a/lib/3rdparty/libmpg123/format.c b/lib/3rdparty/libmpg123/format.c new file mode 100644 index 00000000000..0b37bfaed27 --- /dev/null +++ b/lib/3rdparty/libmpg123/format.c @@ -0,0 +1,395 @@ +/* + format:routines to deal with audio (output) format + + copyright 2008-9 by the mpg123 project - free software under the terms of the LGPL 2.1 + see COPYING and AUTHORS files in distribution or http://mpg123.org + initially written by Thomas Orgis, starting with parts of the old audio.c, with only faintly manage to show now +*/ + +#include "mpg123lib_intern.h" +#include "debug.h" + +/* static int chans[NUM_CHANNELS] = { 1 , 2 }; */ +static const long my_rates[MPG123_RATES] = /* only the standard rates */ +{ + 8000, 11025, 12000, + 16000, 22050, 24000, + 32000, 44100, 48000, +}; + +static const int my_encodings[MPG123_ENCODINGS] = +{ + MPG123_ENC_SIGNED_16, + MPG123_ENC_UNSIGNED_16, + MPG123_ENC_SIGNED_32, + MPG123_ENC_UNSIGNED_32, + MPG123_ENC_FLOAT_32, + MPG123_ENC_FLOAT_64, + MPG123_ENC_SIGNED_8, + MPG123_ENC_UNSIGNED_8, + MPG123_ENC_ULAW_8, + MPG123_ENC_ALAW_8 +}; + +/* Only one type of float is supported. */ +# ifdef REAL_IS_FLOAT +# define MPG123_FLOAT_ENC MPG123_ENC_FLOAT_32 +# else +# define MPG123_FLOAT_ENC MPG123_ENC_FLOAT_64 +# endif + +/* The list of actually possible encodings. */ +static const int good_encodings[] = +{ +#ifndef NO_16BIT + MPG123_ENC_SIGNED_16, + MPG123_ENC_UNSIGNED_16, +#endif +#ifndef NO_32BIT + MPG123_ENC_SIGNED_32, + MPG123_ENC_UNSIGNED_32, +#endif +#ifndef NO_REAL + MPG123_FLOAT_ENC, +#endif +#ifndef NO_8BIT + MPG123_ENC_SIGNED_8, + MPG123_ENC_UNSIGNED_8, + MPG123_ENC_ULAW_8, + MPG123_ENC_ALAW_8 +#endif +}; + +/* Check if encoding is a valid one in this build. + ...lazy programming: linear search. */ +static int good_enc(const int enc) +{ + size_t i; + for(i=0; iforce_rate != 0 && mp->force_rate == r) return MPG123_RATES; +#endif + + return -1; +} + +static int enc2num(int encoding) +{ + int i; + for(i=0;ichannels-1; + int rn = rate2num(&fr->p, nf->rate); + if(rn >= 0) for(i=f0;ip.audio_caps[c][rn][i]) + { + nf->encoding = my_encodings[i]; + return 1; + } + } + return 0; +} + +static int freq_fit(mpg123_handle *fr, struct audioformat *nf, int f0, int f2) +{ + nf->rate = frame_freq(fr)>>fr->p.down_sample; + if(cap_fit(fr,nf,f0,f2)) return 1; + nf->rate>>=1; + if(cap_fit(fr,nf,f0,f2)) return 1; + nf->rate>>=1; + if(cap_fit(fr,nf,f0,f2)) return 1; +#ifndef NO_NTOM + /* If nothing worked, try the other rates, only without constrains from user. + In case you didn't guess: We enable flexible resampling if we find a working rate. */ + if(!fr->p.force_rate && fr->p.down_sample == 0) + { + int i; + int c = nf->channels-1; + int rn = rate2num(&fr->p, frame_freq(fr)); + int rrn; + if(rn < 0) return 0; + /* Try higher rates first. */ + for(i=f0;ip.audio_caps[c][rrn][i]) + { + nf->rate = my_rates[rrn]; + nf->encoding = my_encodings[i]; + return 1; + } + /* Then lower rates. */ + for(i=f0;i=0; --rrn) + if(fr->p.audio_caps[c][rrn][i]) + { + nf->rate = my_rates[rrn]; + nf->encoding = my_encodings[i]; + return 1; + } + } +#endif + + return 0; +} + +/* match constraints against supported audio formats, store possible setup in frame + return: -1: error; 0: no format change; 1: format change */ +int frame_output_format(mpg123_handle *fr) +{ + struct audioformat nf; + int f0=0; + int f2=MPG123_ENCODINGS; /* Omit the 32bit and float encodings. */ + mpg123_pars *p = &fr->p; + /* initialize new format, encoding comes later */ + nf.channels = fr->stereo; + + /* All this forcing should be removed in favour of the capabilities table... */ + if(p->flags & MPG123_FORCE_8BIT) + { + f0 = 6; + f2 = 10; + } + if(p->flags & MPG123_FORCE_FLOAT) + { + f0 = 4; + f2 = 6; + } + + /* force stereo is stronger */ + if(p->flags & MPG123_FORCE_MONO) nf.channels = 1; + if(p->flags & MPG123_FORCE_STEREO) nf.channels = 2; + +#ifndef NO_NTOM + if(p->force_rate) + { + nf.rate = p->force_rate; + if(cap_fit(fr,&nf,f0,2)) goto end; /* 16bit encodings */ + if(cap_fit(fr,&nf,f0<=2 ? 2 : f0,f2)) goto end; /* 8bit encodings */ + + /* try again with different stereoness */ + if(nf.channels == 2 && !(p->flags & MPG123_FORCE_STEREO)) nf.channels = 1; + else if(nf.channels == 1 && !(p->flags & MPG123_FORCE_MONO)) nf.channels = 2; + + if(cap_fit(fr,&nf,f0,2)) goto end; /* 16bit encodings */ + if(cap_fit(fr,&nf,f0<=2 ? 2 : f0,f2)) goto end; /* 8bit encodings */ + + if(NOQUIET) + error3( "Unable to set up output format! Constraints: %s%s%liHz.", + ( p->flags & MPG123_FORCE_STEREO ? "stereo, " : + (p->flags & MPG123_FORCE_MONO ? "mono, " : "") ), + (p->flags & MPG123_FORCE_8BIT ? "8bit, " : ""), + p->force_rate ); +/* if(NOQUIET && p->verbose <= 1) print_capabilities(fr); */ + + fr->err = MPG123_BAD_OUTFORMAT; + return -1; + } +#endif + + if(freq_fit(fr, &nf, f0, 2)) goto end; /* try rates with 16bit */ + if(freq_fit(fr, &nf, f0<=2 ? 2 : f0, f2)) goto end; /* ... 8bit */ + + /* try again with different stereoness */ + if(nf.channels == 2 && !(p->flags & MPG123_FORCE_STEREO)) nf.channels = 1; + else if(nf.channels == 1 && !(p->flags & MPG123_FORCE_MONO)) nf.channels = 2; + + if(freq_fit(fr, &nf, f0, 2)) goto end; /* try rates with 16bit */ + if(freq_fit(fr, &nf, f0<=2 ? 2 : f0, f2)) goto end; /* ... 8bit */ + + /* Here is the _bad_ end. */ + if(NOQUIET) + { + error5( "Unable to set up output format! Constraints: %s%s%li, %li or %liHz.", + ( p->flags & MPG123_FORCE_STEREO ? "stereo, " : + (p->flags & MPG123_FORCE_MONO ? "mono, " : "") ), + (p->flags & MPG123_FORCE_8BIT ? "8bit, " : ""), + frame_freq(fr), frame_freq(fr)>>1, frame_freq(fr)>>2 ); + } +/* if(NOQUIET && p->verbose <= 1) print_capabilities(fr); */ + + fr->err = MPG123_BAD_OUTFORMAT; + return -1; + +end: /* Here is the _good_ end. */ + /* we had a successful match, now see if there's a change */ + if(nf.rate == fr->af.rate && nf.channels == fr->af.channels && nf.encoding == fr->af.encoding) + { + debug2("Old format with %i channels, and FORCE_MONO=%li", nf.channels, p->flags & MPG123_FORCE_MONO); + return 0; /* the same format as before */ + } + else /* a new format */ + { + debug1("New format with %i channels!", nf.channels); + fr->af.rate = nf.rate; + fr->af.channels = nf.channels; + fr->af.encoding = nf.encoding; + /* Cache the size of one sample in bytes, for ease of use. */ + if(fr->af.encoding & MPG123_ENC_8) + fr->af.encsize = 1; + else if(fr->af.encoding & MPG123_ENC_16) + fr->af.encsize = 2; + else if(fr->af.encoding & MPG123_ENC_32 || fr->af.encoding == MPG123_ENC_FLOAT_32) + fr->af.encsize = 4; + else if(fr->af.encoding == MPG123_ENC_FLOAT_64) + fr->af.encsize = 8; + else + { + if(NOQUIET) error1("Some unknown encoding??? (%i)", fr->af.encoding); + + fr->err = MPG123_BAD_OUTFORMAT; + return -1; + } + return 1; + } +} + +int attribute_align_arg mpg123_format_none(mpg123_handle *mh) +{ + int r; + if(mh == NULL) return MPG123_ERR; + + r = mpg123_fmt_none(&mh->p); + if(r != MPG123_OK){ mh->err = r; r = MPG123_ERR; } + + return r; +} + +int attribute_align_arg mpg123_fmt_none(mpg123_pars *mp) +{ + if(mp == NULL) return MPG123_BAD_PARS; + + if(PVERB(mp,3)) fprintf(stderr, "Note: Disabling all formats.\n"); + + memset(mp->audio_caps,0,sizeof(mp->audio_caps)); + return MPG123_OK; +} + +int attribute_align_arg mpg123_format_all(mpg123_handle *mh) +{ + int r; + if(mh == NULL) return MPG123_ERR; + + r = mpg123_fmt_all(&mh->p); + if(r != MPG123_OK){ mh->err = r; r = MPG123_ERR; } + + return r; +} + +int attribute_align_arg mpg123_fmt_all(mpg123_pars *mp) +{ + size_t rate, ch, enc; + if(mp == NULL) return MPG123_BAD_PARS; + + if(PVERB(mp,3)) fprintf(stderr, "Note: Enabling all formats.\n"); + + for(ch=0; ch < NUM_CHANNELS; ++ch) + for(rate=0; rate < MPG123_RATES+1; ++rate) + for(enc=0; enc < MPG123_ENCODINGS; ++enc) + mp->audio_caps[ch][rate][enc] = good_enc(my_encodings[enc]) ? 1 : 0; + + return MPG123_OK; +} + +int attribute_align_arg mpg123_format(mpg123_handle *mh, long rate, int channels, int encodings) +{ + int r; + if(mh == NULL) return MPG123_ERR; + r = mpg123_fmt(&mh->p, rate, channels, encodings); + if(r != MPG123_OK){ mh->err = r; r = MPG123_ERR; } + + return r; +} + +int attribute_align_arg mpg123_fmt(mpg123_pars *mp, long rate, int channels, int encodings) +{ + int ie, ic, ratei; + int ch[2] = {0, 1}; + if(mp == NULL) return MPG123_BAD_PARS; + if(!(channels & (MPG123_MONO|MPG123_STEREO))) return MPG123_BAD_CHANNEL; + + if(PVERB(mp,3)) fprintf(stderr, "Note: Want to enable format %li/%i for encodings 0x%x.\n", rate, channels, encodings); + + if(!(channels & MPG123_STEREO)) ch[1] = 0; /* {0,0} */ + else if(!(channels & MPG123_MONO)) ch[0] = 1; /* {1,1} */ + ratei = rate2num(mp, rate); + if(ratei < 0) return MPG123_BAD_RATE; + + /* now match the encodings */ + for(ic = 0; ic < 2; ++ic) + { + for(ie = 0; ie < MPG123_ENCODINGS; ++ie) + if(good_enc(my_encodings[ie]) && ((my_encodings[ie] & encodings) == my_encodings[ie])) + mp->audio_caps[ch[ic]][ratei][ie] = 1; + + if(ch[0] == ch[1]) break; /* no need to do it again */ + } + + return MPG123_OK; +} + +int attribute_align_arg mpg123_format_support(mpg123_handle *mh, long rate, int encoding) +{ + if(mh == NULL) return 0; + else return mpg123_fmt_support(&mh->p, rate, encoding); +} + +int attribute_align_arg mpg123_fmt_support(mpg123_pars *mp, long rate, int encoding) +{ + int ch = 0; + int ratei, enci; + ratei = rate2num(mp, rate); + enci = enc2num(encoding); + if(mp == NULL || ratei < 0 || enci < 0) return 0; + if(mp->audio_caps[0][ratei][enci]) ch |= MPG123_MONO; + if(mp->audio_caps[1][ratei][enci]) ch |= MPG123_STEREO; + return ch; +} + +/* Call this one to ensure that any valid format will be something different than this. */ +void invalidate_format(struct audioformat *af) +{ + af->encoding = 0; + af->rate = 0; + af->channels = 0; +} + +/* take into account: channels, bytes per sample -- NOT resampling!*/ +off_t samples_to_bytes(mpg123_handle *fr , off_t s) +{ + return s * fr->af.encsize * fr->af.channels; +} + +off_t bytes_to_samples(mpg123_handle *fr , off_t b) +{ + return b / fr->af.encsize / fr->af.channels; +} diff --git a/lib/3rdparty/libmpg123/frame.c b/lib/3rdparty/libmpg123/frame.c new file mode 100644 index 00000000000..b4ed7508e34 --- /dev/null +++ b/lib/3rdparty/libmpg123/frame.c @@ -0,0 +1,988 @@ +/* + frame: Heap of routines dealing with the core mpg123 data structure. + + copyright 2008-2010 by the mpg123 project - free software under the terms of the LGPL 2.1 + see COPYING and AUTHORS files in distribution or http://mpg123.org + initially written by Thomas Orgis +*/ + +#include "mpg123lib_intern.h" +#include "getcpuflags.h" +#include "debug.h" + +static void frame_fixed_reset(mpg123_handle *fr); + +/* that's doubled in decode_ntom.c */ +#define NTOM_MUL (32768) + +#define aligned_pointer(p, type, alignment) align_the_pointer(p, alignment) +static void *align_the_pointer(void *base, unsigned int alignment) +{ + /* + Work in unsigned integer realm, explicitly. + Tricking the compiler into integer operations like % by invoking base-NULL is dangerous: It results into ptrdiff_t, which gets negative on big addresses. Big screw up, that. + I try to do it "properly" here: Casting only to uintptr_t and no artihmethic with void*. + */ + uintptr_t baseval = (uintptr_t)(char*)base; + uintptr_t aoff = baseval % alignment; + + debug3("align_the_pointer: pointer %p is off by %u from %u", + base, (unsigned int)aoff, alignment); + + if(aoff) return (char*)base+alignment-aoff; + else return base; +} + +void frame_default_pars(mpg123_pars *mp) +{ + mp->outscale = 1.0; +#ifdef GAPLESS + mp->flags = MPG123_GAPLESS; +#else + mp->flags = 0; +#endif +#ifndef NO_NTOM + mp->force_rate = 0; +#endif + mp->down_sample = 0; + mp->rva = 0; + mp->halfspeed = 0; + mp->doublespeed = 0; + mp->verbose = 0; +#ifndef NO_ICY + mp->icy_interval = 0; +#endif + mp->timeout = 0; + mp->resync_limit = 1024; +#ifdef FRAME_INDEX + mp->index_size = INDEX_SIZE; +#endif + mp->preframes = 4; /* That's good for layer 3 ISO compliance bitstream. */ + mpg123_fmt_all(mp); +} + +void frame_init(mpg123_handle *fr) +{ + frame_init_par(fr, NULL); +} + +void frame_init_par(mpg123_handle *fr, mpg123_pars *mp) +{ + fr->own_buffer = FALSE; + fr->buffer.data = NULL; + fr->rawbuffs = NULL; + fr->rawbuffss = 0; + fr->rawdecwin = NULL; + fr->rawdecwins = 0; +#ifndef NO_8BIT + fr->conv16to8_buf = NULL; +#endif +#ifdef OPT_DITHER + fr->dithernoise = NULL; +#endif + fr->layerscratch = NULL; + fr->xing_toc = NULL; + fr->cpu_opts.type = defdec(); + fr->cpu_opts.class = decclass(fr->cpu_opts.type); +#ifndef NO_NTOM + /* these two look unnecessary, check guarantee for synth_ntom_set_step (in control_generic, even)! */ + fr->ntom_val[0] = NTOM_MUL>>1; + fr->ntom_val[1] = NTOM_MUL>>1; + fr->ntom_step = NTOM_MUL; +#endif + /* unnecessary: fr->buffer.size = fr->buffer.fill = 0; */ + mpg123_reset_eq(fr); + init_icy(&fr->icy); + init_id3(fr); + /* frame_outbuffer is missing... */ + /* frame_buffers is missing... that one needs cpu opt setting! */ + /* after these... frame_reset is needed before starting full decode */ + invalidate_format(&fr->af); + fr->rdat.r_read = NULL; + fr->rdat.r_lseek = NULL; + fr->rdat.iohandle = NULL; + fr->rdat.r_read_handle = NULL; + fr->rdat.r_lseek_handle = NULL; + fr->rdat.cleanup_handle = NULL; + fr->wrapperdata = NULL; + fr->wrapperclean = NULL; + fr->decoder_change = 1; + fr->err = MPG123_OK; + if(mp == NULL) frame_default_pars(&fr->p); + else memcpy(&fr->p, mp, sizeof(struct mpg123_pars_struct)); + + fr->down_sample = 0; /* Initialize to silence harmless errors when debugging. */ + frame_fixed_reset(fr); /* Reset only the fixed data, dynamic buffers are not there yet! */ + fr->synth = NULL; + fr->synth_mono = NULL; + fr->make_decode_tables = NULL; +#ifdef FRAME_INDEX + fi_init(&fr->index); + frame_index_setup(fr); /* Apply the size setting. */ +#endif +} + +#ifdef OPT_DITHER +/* Also, only allocate the memory for the table on demand. + In future, one could create special noise for different sampling frequencies(?). */ +int frame_dither_init(mpg123_handle *fr) +{ + /* run-time dither noise table generation */ + if(fr->dithernoise == NULL) + { + fr->dithernoise = malloc(sizeof(float)*DITHERSIZE); + if(fr->dithernoise == NULL) return 0; + + dither_table_init(fr->dithernoise); + } + return 1; +} +#endif + +mpg123_pars attribute_align_arg *mpg123_new_pars(int *error) +{ + mpg123_pars *mp = malloc(sizeof(struct mpg123_pars_struct)); + if(mp != NULL){ frame_default_pars(mp); if(error != NULL) *error = MPG123_OK; } + else if(error != NULL) *error = MPG123_OUT_OF_MEM; + return mp; +} + +void attribute_align_arg mpg123_delete_pars(mpg123_pars* mp) +{ + if(mp != NULL) free(mp); +} + +int attribute_align_arg mpg123_reset_eq(mpg123_handle *mh) +{ + int i; + mh->have_eq_settings = 0; + for(i=0; i < 32; ++i) mh->equalizer[0][i] = mh->equalizer[1][i] = DOUBLE_TO_REAL(1.0); + + return MPG123_OK; +} + +int frame_outbuffer(mpg123_handle *fr) +{ + size_t size = mpg123_safe_buffer()*AUDIOBUFSIZE; + if(!fr->own_buffer) fr->buffer.data = NULL; + if(fr->buffer.data != NULL && fr->buffer.size != size) + { + free(fr->buffer.data); + fr->buffer.data = NULL; + } + fr->buffer.size = size; + if(fr->buffer.data == NULL) fr->buffer.data = (unsigned char*) malloc(fr->buffer.size); + if(fr->buffer.data == NULL) + { + fr->err = MPG123_OUT_OF_MEM; + return -1; + } + fr->own_buffer = TRUE; + fr->buffer.fill = 0; + return 0; +} + +int attribute_align_arg mpg123_replace_buffer(mpg123_handle *mh, unsigned char *data, size_t size) +{ + if(data == NULL || size < mpg123_safe_buffer()) + { + mh->err = MPG123_BAD_BUFFER; + return MPG123_ERR; + } + if(mh->own_buffer && mh->buffer.data != NULL) free(mh->buffer.data); + mh->own_buffer = FALSE; + mh->buffer.data = data; + mh->buffer.size = size; + mh->buffer.fill = 0; + return MPG123_OK; +} + +#ifdef FRAME_INDEX +int frame_index_setup(mpg123_handle *fr) +{ + int ret = MPG123_ERR; + if(fr->p.index_size >= 0) + { /* Simple fixed index. */ + fr->index.grow_size = 0; + debug1("resizing index to %li", fr->p.index_size); + ret = fi_resize(&fr->index, (size_t)fr->p.index_size); + debug2("index resized... %lu at %p", (unsigned long)fr->index.size, (void*)fr->index.data); + } + else + { /* A growing index. We give it a start, though. */ + fr->index.grow_size = (size_t)(- fr->p.index_size); + if(fr->index.size < fr->index.grow_size) + ret = fi_resize(&fr->index, fr->index.grow_size); + else + ret = MPG123_OK; /* We have minimal size already... and since growing is OK... */ + } + debug2("set up frame index of size %lu (ret=%i)", (unsigned long)fr->index.size, ret); + + return ret; +} +#endif + +static void frame_decode_buffers_reset(mpg123_handle *fr) +{ + memset(fr->rawbuffs, 0, fr->rawbuffss); +} + +int frame_buffers(mpg123_handle *fr) +{ + int buffssize = 0; + debug1("frame %p buffer", (void*)fr); +/* + the used-to-be-static buffer of the synth functions, has some subtly different types/sizes + + 2to1, 4to1, ntom, generic, i386: real[2][2][0x110] + mmx, sse: short[2][2][0x110] + i586(_dither): 4352 bytes; int/long[2][2][0x110] + i486: int[2][2][17*FIR_BUFFER_SIZE] + altivec: static real __attribute__ ((aligned (16))) buffs[4][4][0x110] + + Huh, altivec looks like fun. Well, let it be large... then, the 16 byte alignment seems to be implicit on MacOSX malloc anyway. + Let's make a reasonable attempt to allocate enough memory... + Keep in mind: biggest ones are i486 and altivec (mutually exclusive!), then follows i586 and normal real. + mmx/sse use short but also real for resampling. + Thus, minimum is 2*2*0x110*sizeof(real). +*/ + if(fr->cpu_opts.type == altivec) buffssize = 4*4*0x110*sizeof(real); +#ifdef OPT_I486 + else if(fr->cpu_opts.type == ivier) buffssize = 2*2*17*FIR_BUFFER_SIZE*sizeof(int); +#endif + else if(fr->cpu_opts.type == ifuenf || fr->cpu_opts.type == ifuenf_dither || fr->cpu_opts.type == dreidnow) + buffssize = 2*2*0x110*4; /* don't rely on type real, we need 4352 bytes */ + + if(2*2*0x110*sizeof(real) > buffssize) + buffssize = 2*2*0x110*sizeof(real); + buffssize += 15; /* For 16-byte alignment (SSE likes that). */ + + if(fr->rawbuffs != NULL && fr->rawbuffss != buffssize) + { + free(fr->rawbuffs); + fr->rawbuffs = NULL; + } + + if(fr->rawbuffs == NULL) fr->rawbuffs = (unsigned char*) malloc(buffssize); + if(fr->rawbuffs == NULL) return -1; + fr->rawbuffss = buffssize; + fr->short_buffs[0][0] = aligned_pointer(fr->rawbuffs,short,16); + fr->short_buffs[0][1] = fr->short_buffs[0][0] + 0x110; + fr->short_buffs[1][0] = fr->short_buffs[0][1] + 0x110; + fr->short_buffs[1][1] = fr->short_buffs[1][0] + 0x110; + fr->real_buffs[0][0] = aligned_pointer(fr->rawbuffs,real,16); + fr->real_buffs[0][1] = fr->real_buffs[0][0] + 0x110; + fr->real_buffs[1][0] = fr->real_buffs[0][1] + 0x110; + fr->real_buffs[1][1] = fr->real_buffs[1][0] + 0x110; +#ifdef OPT_I486 + if(fr->cpu_opts.type == ivier) + { + fr->int_buffs[0][0] = (int*) fr->rawbuffs; + fr->int_buffs[0][1] = fr->int_buffs[0][0] + 17*FIR_BUFFER_SIZE; + fr->int_buffs[1][0] = fr->int_buffs[0][1] + 17*FIR_BUFFER_SIZE; + fr->int_buffs[1][1] = fr->int_buffs[1][0] + 17*FIR_BUFFER_SIZE; + } +#endif +#ifdef OPT_ALTIVEC + if(fr->cpu_opts.type == altivec) + { + int i,j; + fr->areal_buffs[0][0] = (real*) fr->rawbuffs; + for(i=0; i<4; ++i) for(j=0; j<4; ++j) + fr->areal_buffs[i][j] = fr->areal_buffs[0][0] + (i*4+j)*0x110; + } +#endif + /* now the different decwins... all of the same size, actually */ + /* The MMX ones want 32byte alignment, which I'll try to ensure manually */ + { + int decwin_size = (512+32)*sizeof(real); +#ifdef OPT_MMXORSSE +#ifdef OPT_MULTI + if(fr->cpu_opts.class == mmxsse) + { +#endif + /* decwin_mmx will share, decwins will be appended ... sizeof(float)==4 */ + if(decwin_size < (512+32)*4) decwin_size = (512+32)*4; + + /* the second window + alignment zone -- we align for 32 bytes for SSE as + requirement, 64 byte for matching cache line size (that matters!) */ + decwin_size += (512+32)*4 + 63; + /* (512+32)*4/32 == 2176/32 == 68, so one decwin block retains alignment for 32 or 64 bytes */ +#ifdef OPT_MULTI + } +#endif +#endif +#if defined(OPT_ALTIVEC) || defined(OPT_ARM) + if(decwin_size < (512+32)*4) decwin_size = (512+32)*4; + decwin_size += 512*4; +#endif + /* Hm, that's basically realloc() ... */ + if(fr->rawdecwin != NULL && fr->rawdecwins != decwin_size) + { + free(fr->rawdecwin); + fr->rawdecwin = NULL; + } + + if(fr->rawdecwin == NULL) + fr->rawdecwin = (unsigned char*) malloc(decwin_size); + + if(fr->rawdecwin == NULL) return -1; + + fr->rawdecwins = decwin_size; + fr->decwin = (real*) fr->rawdecwin; +#ifdef OPT_MMXORSSE +#ifdef OPT_MULTI + if(fr->cpu_opts.class == mmxsse) + { +#endif + /* align decwin, assign that to decwin_mmx, append decwins */ + /* I need to add to decwin what is missing to the next full 64 byte -- also I want to make gcc -pedantic happy... */ + fr->decwin = aligned_pointer(fr->rawdecwin,real,64); + debug1("aligned decwin: %p", (void*)fr->decwin); + fr->decwin_mmx = (float*)fr->decwin; + fr->decwins = fr->decwin_mmx+512+32; +#ifdef OPT_MULTI + } + else debug("no decwins/decwin_mmx for that class"); +#endif +#endif + } + + /* Layer scratch buffers are of compile-time fixed size, so allocate only once. */ + if(fr->layerscratch == NULL) + { + /* Allocate specific layer1/2/3 buffers, so that we know they'll work for SSE. */ + size_t scratchsize = 0; + real *scratcher; +#ifndef NO_LAYER1 + scratchsize += sizeof(real) * 2 * SBLIMIT; +#endif +#ifndef NO_LAYER2 + scratchsize += sizeof(real) * 2 * 4 * SBLIMIT; +#endif +#ifndef NO_LAYER3 + scratchsize += sizeof(real) * 2 * SBLIMIT * SSLIMIT; /* hybrid_in */ + scratchsize += sizeof(real) * 2 * SSLIMIT * SBLIMIT; /* hybrid_out */ +#endif + /* + Now figure out correct alignment: + We need 16 byte minimum, smallest unit of the blocks is 2*SBLIMIT*sizeof(real), which is 64*4=256. Let's do 64bytes as heuristic for cache line (as proven useful in buffs above). + */ + fr->layerscratch = malloc(scratchsize+63); + if(fr->layerscratch == NULL) return -1; + + /* Get aligned part of the memory, then divide it up. */ + scratcher = aligned_pointer(fr->layerscratch,real,64); + /* Those funky pointer casts silence compilers... + One might change the code at hand to really just use 1D arrays, but in practice, that would not make a (positive) difference. */ +#ifndef NO_LAYER1 + fr->layer1.fraction = (real(*)[SBLIMIT])scratcher; + scratcher += 2 * SBLIMIT; +#endif +#ifndef NO_LAYER2 + fr->layer2.fraction = (real(*)[4][SBLIMIT])scratcher; + scratcher += 2 * 4 * SBLIMIT; +#endif +#ifndef NO_LAYER3 + fr->layer3.hybrid_in = (real(*)[SBLIMIT][SSLIMIT])scratcher; + scratcher += 2 * SBLIMIT * SSLIMIT; + fr->layer3.hybrid_out = (real(*)[SSLIMIT][SBLIMIT])scratcher; + scratcher += 2 * SSLIMIT * SBLIMIT; +#endif + /* Note: These buffers don't need resetting here. */ + } + + /* Only reset the buffers we created just now. */ + frame_decode_buffers_reset(fr); + + debug1("frame %p buffer done", (void*)fr); + return 0; +} + +int frame_buffers_reset(mpg123_handle *fr) +{ + fr->buffer.fill = 0; /* hm, reset buffer fill... did we do a flush? */ + fr->bsnum = 0; + /* Wondering: could it be actually _wanted_ to retain buffer contents over different files? (special gapless / cut stuff) */ + fr->bsbuf = fr->bsspace[1]; + fr->bsbufold = fr->bsbuf; + fr->bitreservoir = 0; /* Not entirely sure if this is the right place for that counter. */ + frame_decode_buffers_reset(fr); + memset(fr->bsspace, 0, 2*(MAXFRAMESIZE+512)); + memset(fr->ssave, 0, 34); + fr->hybrid_blc[0] = fr->hybrid_blc[1] = 0; + memset(fr->hybrid_block, 0, sizeof(real)*2*2*SBLIMIT*SSLIMIT); + return 0; +} + +void frame_icy_reset(mpg123_handle* fr) +{ +#ifndef NO_ICY + if(fr->icy.data != NULL) free(fr->icy.data); + fr->icy.data = NULL; + fr->icy.interval = 0; + fr->icy.next = 0; +#endif +} + +void frame_free_toc(mpg123_handle *fr) +{ + if(fr->xing_toc != NULL){ free(fr->xing_toc); fr->xing_toc = NULL; } +} + +/* Just copy the Xing TOC over... */ +int frame_fill_toc(mpg123_handle *fr, unsigned char* in) +{ + if(fr->xing_toc == NULL) fr->xing_toc = malloc(100); + if(fr->xing_toc != NULL) + { + memcpy(fr->xing_toc, in, 100); +#ifdef DEBUG + debug("Got a TOC! Showing the values..."); + { + int i; + for(i=0; i<100; ++i) + debug2("entry %i = %i", i, fr->xing_toc[i]); + } +#endif + return TRUE; + } + return FALSE; +} + +/* Prepare the handle for a new track. + Reset variables, buffers... */ +int frame_reset(mpg123_handle* fr) +{ + frame_buffers_reset(fr); + frame_fixed_reset(fr); + frame_free_toc(fr); +#ifdef FRAME_INDEX + fi_reset(&fr->index); +#endif + + return 0; +} + +/* Reset everythign except dynamic memory. */ +static void frame_fixed_reset(mpg123_handle *fr) +{ + frame_icy_reset(fr); + open_bad(fr); + fr->to_decode = FALSE; + fr->to_ignore = FALSE; + fr->metaflags = 0; + fr->outblock = mpg123_safe_buffer(); + fr->num = -1; + fr->playnum = -1; + fr->accurate = TRUE; + fr->silent_resync = 0; + fr->audio_start = 0; + fr->clip = 0; + fr->oldhead = 0; + fr->firsthead = 0; + fr->vbr = MPG123_CBR; + fr->abr_rate = 0; + fr->track_frames = 0; + fr->track_samples = -1; + fr->framesize=0; + fr->mean_frames = 0; + fr->mean_framesize = 0; + fr->freesize = 0; + fr->lastscale = -1; + fr->rva.level[0] = -1; + fr->rva.level[1] = -1; + fr->rva.gain[0] = 0; + fr->rva.gain[1] = 0; + fr->rva.peak[0] = 0; + fr->rva.peak[1] = 0; + fr->fsizeold = 0; + fr->firstframe = 0; + fr->ignoreframe = fr->firstframe-fr->p.preframes; + fr->lastframe = -1; + fr->fresh = 1; + fr->new_format = 0; +#ifdef GAPLESS + frame_gapless_init(fr,0,0); + fr->lastoff = 0; + fr->firstoff = 0; +#endif +#ifdef OPT_I486 + fr->i486bo[0] = fr->i486bo[1] = FIR_SIZE-1; +#endif + fr->bo = 1; /* the usual bo */ +#ifdef OPT_DITHER + fr->ditherindex = 0; +#endif + reset_id3(fr); + reset_icy(&fr->icy); + /* ICY stuff should go into icy.c, eh? */ +#ifndef NO_ICY + fr->icy.interval = 0; + fr->icy.next = 0; +#endif + fr->halfphase = 0; /* here or indeed only on first-time init? */ + fr->error_protection = 0; + fr->freeformat_framesize = -1; +} + +void frame_free_buffers(mpg123_handle *fr) +{ + if(fr->rawbuffs != NULL) free(fr->rawbuffs); + fr->rawbuffs = NULL; + fr->rawbuffss = 0; + if(fr->rawdecwin != NULL) free(fr->rawdecwin); + fr->rawdecwin = NULL; + fr->rawdecwins = 0; +#ifndef NO_8BIT + if(fr->conv16to8_buf != NULL) free(fr->conv16to8_buf); + fr->conv16to8_buf = NULL; +#endif + if(fr->layerscratch != NULL) free(fr->layerscratch); +} + +void frame_exit(mpg123_handle *fr) +{ + if(fr->own_buffer && fr->buffer.data != NULL) + { + debug1("freeing buffer at %p", (void*)fr->buffer.data); + free(fr->buffer.data); + } + fr->buffer.data = NULL; + frame_free_buffers(fr); + frame_free_toc(fr); +#ifdef FRAME_INDEX + fi_exit(&fr->index); +#endif +#ifdef OPT_DITHER + if(fr->dithernoise != NULL) + { + free(fr->dithernoise); + fr->dithernoise = NULL; + } +#endif + exit_id3(fr); + clear_icy(&fr->icy); + /* Clean up possible mess from LFS wrapper. */ + if(fr->wrapperclean != NULL) + { + fr->wrapperclean(fr->wrapperdata); + fr->wrapperdata = NULL; + } +} + +int attribute_align_arg mpg123_info(mpg123_handle *mh, struct mpg123_frameinfo *mi) +{ + if(mh == NULL) return MPG123_ERR; + if(mi == NULL) + { + mh->err = MPG123_ERR_NULL; + return MPG123_ERR; + } + mi->version = mh->mpeg25 ? MPG123_2_5 : (mh->lsf ? MPG123_2_0 : MPG123_1_0); + mi->layer = mh->lay; + mi->rate = frame_freq(mh); + switch(mh->mode) + { + case 0: mi->mode = MPG123_M_STEREO; break; + case 1: mi->mode = MPG123_M_JOINT; break; + case 2: mi->mode = MPG123_M_DUAL; break; + case 3: mi->mode = MPG123_M_MONO; break; + default: error("That mode cannot be!"); + } + mi->mode_ext = mh->mode_ext; + mi->framesize = mh->framesize+4; /* Include header. */ + mi->flags = 0; + if(mh->error_protection) mi->flags |= MPG123_CRC; + if(mh->copyright) mi->flags |= MPG123_COPYRIGHT; + if(mh->extension) mi->flags |= MPG123_PRIVATE; + if(mh->original) mi->flags |= MPG123_ORIGINAL; + mi->emphasis = mh->emphasis; + mi->bitrate = frame_bitrate(mh); + mi->abr_rate = mh->abr_rate; + mi->vbr = mh->vbr; + return MPG123_OK; +} + + +/* + Fuzzy frame offset searching (guessing). + When we don't have an accurate position, we may use an inaccurate one. + Possibilities: + - use approximate positions from Xing TOC (not yet parsed) + - guess wildly from mean framesize and offset of first frame / beginning of file. +*/ + +off_t frame_fuzzy_find(mpg123_handle *fr, off_t want_frame, off_t* get_frame) +{ + /* Default is to go to the beginning. */ + off_t ret = fr->audio_start; + *get_frame = 0; + + /* But we try to find something better. */ + /* Xing VBR TOC works with relative positions, both in terms of audio frames and stream bytes. + Thus, it only works when whe know the length of things. + Oh... I assume the offsets are relative to the _total_ file length. */ + if(fr->xing_toc != NULL && fr->track_frames > 0 && fr->rdat.filelen > 0) + { + /* One could round... */ + int toc_entry = (int) ((double)want_frame*100./fr->track_frames); + /* It is an index in the 100-entry table. */ + if(toc_entry < 0) toc_entry = 0; + if(toc_entry > 99) toc_entry = 99; + + /* Now estimate back what frame we get. */ + *get_frame = (off_t) ((double)toc_entry/100. * fr->track_frames); + fr->accurate = FALSE; + fr->silent_resync = 1; + /* Question: Is the TOC for whole file size (with/without ID3) or the "real" audio data only? + ID3v1 info could also matter. */ + ret = (off_t) ((double)fr->xing_toc[toc_entry]/256.* fr->rdat.filelen); + } + else if(fr->mean_framesize > 0) + { /* Just guess with mean framesize (may be exact with CBR files). */ + /* Query filelen here or not? */ + fr->accurate = FALSE; /* Fuzzy! */ + fr->silent_resync = 1; + *get_frame = want_frame; + ret = (off_t) (fr->audio_start+fr->mean_framesize*want_frame); + } + debug5("fuzzy: want %li of %li, get %li at %li B of %li B", + (long)want_frame, (long)fr->track_frames, (long)*get_frame, (long)ret, (long)(fr->rdat.filelen-fr->audio_start)); + return ret; +} + +/* + find the best frame in index just before the wanted one, seek to there + then step to just before wanted one with read_frame + do not care tabout the stuff that was in buffer but not played back + everything that left the decoder is counted as played + + Decide if you want low latency reaction and accurate timing info or stable long-time playback with buffer! +*/ + +off_t frame_index_find(mpg123_handle *fr, off_t want_frame, off_t* get_frame) +{ + /* default is file start if no index position */ + off_t gopos = 0; + *get_frame = 0; +#ifdef FRAME_INDEX + /* Possibly use VBRI index, too? I'd need an example for this... */ + if(fr->index.fill) + { + /* find in index */ + size_t fi; + /* at index fi there is frame step*fi... */ + fi = want_frame/fr->index.step; + if(fi >= fr->index.fill) /* If we are beyond the end of frame index...*/ + { + /* When fuzzy seek is allowed, we have some limited tolerance for the frames we want to read rather then jump over. */ + if(fr->p.flags & MPG123_FUZZY && want_frame - (fr->index.fill-1)*fr->index.step > 10) + { + gopos = frame_fuzzy_find(fr, want_frame, get_frame); + if(gopos > fr->audio_start) return gopos; /* Only in that case, we have a useful guess. */ + /* Else... just continue, fuzzyness didn't help. */ + } + /* Use the last available position, slowly advancing from that one. */ + fi = fr->index.fill - 1; + } + /* We have index position, that yields frame and byte offsets. */ + *get_frame = fi*fr->index.step; + gopos = fr->index.data[fi]; + fr->accurate = TRUE; /* When using the frame index, we are accurate. */ + } + else + { +#endif + if(fr->p.flags & MPG123_FUZZY) + return frame_fuzzy_find(fr, want_frame, get_frame); + /* A bit hackish here... but we need to be fresh when looking for the first header again. */ + fr->firsthead = 0; + fr->oldhead = 0; +#ifdef FRAME_INDEX + } +#endif + debug2("index: 0x%lx for frame %li", (unsigned long)gopos, (long) *get_frame); + return gopos; +} + +off_t frame_ins2outs(mpg123_handle *fr, off_t ins) +{ + off_t outs = 0; + switch(fr->down_sample) + { + case 0: +# ifndef NO_DOWNSAMPLE + case 1: + case 2: +# endif + outs = ins>>fr->down_sample; + break; +# ifndef NO_NTOM + case 3: outs = ntom_ins2outs(fr, ins); break; +# endif + default: error1("Bad down_sample (%i) ... should not be possible!!", fr->down_sample); + } + return outs; +} + +off_t frame_outs(mpg123_handle *fr, off_t num) +{ + off_t outs = 0; + switch(fr->down_sample) + { + case 0: +# ifndef NO_DOWNSAMPLE + case 1: + case 2: +# endif + outs = (spf(fr)>>fr->down_sample)*num; + break; +#ifndef NO_NTOM + case 3: outs = ntom_frmouts(fr, num); break; +#endif + default: error1("Bad down_sample (%i) ... should not be possible!!", fr->down_sample); + } + return outs; +} + +/* Compute the number of output samples we expect from this frame. + This is either simple spf() or a tad more elaborate for ntom. */ +off_t frame_expect_outsamples(mpg123_handle *fr) +{ + off_t outs = 0; + switch(fr->down_sample) + { + case 0: +# ifndef NO_DOWNSAMPLE + case 1: + case 2: +# endif + outs = spf(fr)>>fr->down_sample; + break; +#ifndef NO_NTOM + case 3: outs = ntom_frame_outsamples(fr); break; +#endif + default: error1("Bad down_sample (%i) ... should not be possible!!", fr->down_sample); + } + return outs; +} + +off_t frame_offset(mpg123_handle *fr, off_t outs) +{ + off_t num = 0; + switch(fr->down_sample) + { + case 0: +# ifndef NO_DOWNSAMPLE + case 1: + case 2: +# endif + num = outs/(spf(fr)>>fr->down_sample); + break; +#ifndef NO_NTOM + case 3: num = ntom_frameoff(fr, outs); break; +#endif + default: error("Bad down_sample ... should not be possible!!"); + } + return num; +} + +#ifdef GAPLESS +/* input in _input_ samples */ +void frame_gapless_init(mpg123_handle *fr, off_t b, off_t e) +{ + fr->begin_s = b; + fr->end_s = e; + /* These will get proper values later, from above plus resampling info. */ + fr->begin_os = 0; + fr->end_os = 0; + debug2("frame_gapless_init: from %lu to %lu samples", (long unsigned)fr->begin_s, (long unsigned)fr->end_s); +} + +void frame_gapless_realinit(mpg123_handle *fr) +{ + fr->begin_os = frame_ins2outs(fr, fr->begin_s); + fr->end_os = frame_ins2outs(fr, fr->end_s); + debug2("frame_gapless_realinit: from %lu to %lu samples", (long unsigned)fr->begin_os, (long unsigned)fr->end_os); +} + +/* When we got a new sample count, update the gaplessness. */ +void frame_gapless_update(mpg123_handle *fr, off_t total_samples) +{ + if(fr->end_s < 1) + { + fr->end_s = total_samples; + frame_gapless_realinit(fr); + } + else if(fr->end_s > total_samples) + { + if(NOQUIET) error2("end sample count smaller than gapless end! (%"OFF_P" < %"OFF_P").", (off_p)total_samples, (off_p)fr->end_s); + /* Humbly disabling gapless stuff on track end. */ + fr->end_s = 0; + frame_gapless_realinit(fr); + fr->lastframe = -1; + fr->lastoff = 0; + } +} + +#endif + +/* Compute the needed frame to ignore from, for getting accurate/consistent output for intended firstframe. */ +static off_t ignoreframe(mpg123_handle *fr) +{ + off_t preshift = fr->p.preframes; + /* Layer 3 _really_ needs at least one frame before. */ + if(fr->lay==3 && preshift < 1) preshift = 1; + /* Layer 1 & 2 reall do not need more than 2. */ + if(fr->lay!=3 && preshift > 2) preshift = 2; + + return fr->firstframe - preshift; +} + +/* The frame seek... This is not simply the seek to fe*spf(fr) samples in output because we think of _input_ frames here. + Seek to frame offset 1 may be just seek to 200 samples offset in output since the beginning of first frame is delay/padding. + Hm, is that right? OK for the padding stuff, but actually, should the decoder delay be better totally hidden or not? + With gapless, even the whole frame position could be advanced further than requested (since Homey don't play dat). */ +void frame_set_frameseek(mpg123_handle *fr, off_t fe) +{ + fr->firstframe = fe; +#ifdef GAPLESS + if(fr->p.flags & MPG123_GAPLESS) + { + /* Take care of the beginning... */ + off_t beg_f = frame_offset(fr, fr->begin_os); + if(fe <= beg_f) + { + fr->firstframe = beg_f; + fr->firstoff = fr->begin_os - frame_outs(fr, beg_f); + } + else fr->firstoff = 0; + /* The end is set once for a track at least, on the frame_set_frameseek called in get_next_frame() */ + if(fr->end_os > 0) + { + fr->lastframe = frame_offset(fr,fr->end_os); + fr->lastoff = fr->end_os - frame_outs(fr, fr->lastframe); + } else fr->lastoff = 0; + } else { fr->firstoff = fr->lastoff = 0; fr->lastframe = -1; } +#endif + fr->ignoreframe = ignoreframe(fr); +#ifdef GAPLESS + debug5("frame_set_frameseek: begin at %li frames and %li samples, end at %li and %li; ignore from %li", + (long) fr->firstframe, (long) fr->firstoff, + (long) fr->lastframe, (long) fr->lastoff, (long) fr->ignoreframe); +#else + debug3("frame_set_frameseek: begin at %li frames, end at %li; ignore from %li", + (long) fr->firstframe, (long) fr->lastframe, (long) fr->ignoreframe); +#endif +} + +void frame_skip(mpg123_handle *fr) +{ +#ifndef NO_LAYER3 + if(fr->lay == 3) set_pointer(fr, 512); +#endif +} + +/* Sample accurate seek prepare for decoder. */ +/* This gets unadjusted output samples and takes resampling into account */ +void frame_set_seek(mpg123_handle *fr, off_t sp) +{ + fr->firstframe = frame_offset(fr, sp); +#ifndef NO_NTOM + if(fr->down_sample == 3) ntom_set_ntom(fr, fr->firstframe); +#endif + fr->ignoreframe = ignoreframe(fr); +#ifdef GAPLESS /* The sample offset is used for non-gapless mode, too! */ + fr->firstoff = sp - frame_outs(fr, fr->firstframe); + debug5("frame_set_seek: begin at %li frames and %li samples, end at %li and %li; ignore from %li", + (long) fr->firstframe, (long) fr->firstoff, + (long) fr->lastframe, (long) fr->lastoff, (long) fr->ignoreframe); +#else + debug3("frame_set_seek: begin at %li frames, end at %li; ignore from %li", + (long) fr->firstframe, (long) fr->lastframe, (long) fr->ignoreframe); +#endif + /* Old bit reservoir should be invalid, eh? */ + fr->bitreservoir = 0; +} + +int attribute_align_arg mpg123_volume_change(mpg123_handle *mh, double change) +{ + if(mh == NULL) return MPG123_ERR; + return mpg123_volume(mh, change + (double) mh->p.outscale); +} + +int attribute_align_arg mpg123_volume(mpg123_handle *mh, double vol) +{ + if(mh == NULL) return MPG123_ERR; + + if(vol >= 0) mh->p.outscale = vol; + else mh->p.outscale = 0.; + + do_rva(mh); + return MPG123_OK; +} + +static int get_rva(mpg123_handle *fr, double *peak, double *gain) +{ + double p = -1; + double g = 0; + int ret = 0; + if(fr->p.rva) + { + int rt = 0; + /* Should one assume a zero RVA as no RVA? */ + if(fr->p.rva == 2 && fr->rva.level[1] != -1) rt = 1; + if(fr->rva.level[rt] != -1) + { + p = fr->rva.peak[rt]; + g = fr->rva.gain[rt]; + ret = 1; /* Success. */ + } + } + if(peak != NULL) *peak = p; + if(gain != NULL) *gain = g; + return ret; +} + +/* adjust the volume, taking both fr->outscale and rva values into account */ +void do_rva(mpg123_handle *fr) +{ + double peak = 0; + double gain = 0; + double newscale; + double rvafact = 1; + if(get_rva(fr, &peak, &gain)) + { + if(NOQUIET && fr->p.verbose > 1) fprintf(stderr, "Note: doing RVA with gain %f\n", gain); + rvafact = pow(10,gain/20); + } + + newscale = fr->p.outscale*rvafact; + + /* if peak is unknown (== 0) this check won't hurt */ + if((peak*newscale) > 1.0) + { + newscale = 1.0/peak; + warning2("limiting scale value to %f to prevent clipping with indicated peak factor of %f", newscale, peak); + } + /* first rva setting is forced with fr->lastscale < 0 */ + if(newscale != fr->lastscale || fr->decoder_change) + { + debug3("changing scale value from %f to %f (peak estimated to %f)", fr->lastscale != -1 ? fr->lastscale : fr->p.outscale, newscale, (double) (newscale*peak)); + fr->lastscale = newscale; + /* It may be too early, actually. */ + if(fr->make_decode_tables != NULL) fr->make_decode_tables(fr); /* the actual work */ + } +} + + +int attribute_align_arg mpg123_getvolume(mpg123_handle *mh, double *base, double *really, double *rva_db) +{ + if(mh == NULL) return MPG123_ERR; + if(base) *base = mh->p.outscale; + if(really) *really = mh->lastscale; + get_rva(mh, NULL, rva_db); + return MPG123_OK; +} + diff --git a/lib/3rdparty/libmpg123/getcpuflags.S b/lib/3rdparty/libmpg123/getcpuflags.S new file mode 100644 index 00000000000..89c0f456ace --- /dev/null +++ b/lib/3rdparty/libmpg123/getcpuflags.S @@ -0,0 +1,91 @@ +/* + getcpucpuflags: get cpuflags for ia32 + + copyright ?-2006 by the mpg123 project - free software under the terms of the LGPL 2.1 + see COPYING and AUTHORS files in distribution or http:#mpg123.org + initially written by KIMURA Takuhiro (for 3DNow!) + extended for general use by Thomas Orgis + + extern int getcpuid(struct cpuflags*) + or just + extern int getcpuid(unsigned int*) + where there is memory for 4 ints + -> the first set of idflags (basic cpu family info) + and the idflags, stdflags, std2flags, extflags written to the parameter + -> 0x00000000 (CPUID instruction not supported) +*/ + +#include "mangle.h" + +.text + ALIGN4 + +.globl ASM_NAME(getcpuflags) +/* .type ASM_NAME(getcpuflags),@function */ +ASM_NAME(getcpuflags): + pushl %ebp + movl %esp,%ebp + pushl %edx + pushl %ecx + pushl %ebx + pushl %esi +/* get the int pointer for storing the flags */ + movl 8(%ebp), %esi +/* does that one make sense? */ + movl $0x80000000,%eax +/* now save the flags and do a check for cpuid availability */ + pushfl + pushfl + popl %eax + movl %eax,%ebx +/* set that bit... */ + xorl $0x00200000,%eax + pushl %eax + popfl +/* ...and read back the flags to see if it is understood */ + pushfl + popl %eax + popfl + cmpl %ebx,%eax + je .Lnocpuid +/* In principle, I would have to check the CPU's identify first to be sure how to interpret the extended flags. */ +/* now get the info, first extended */ + movl $0x0, 12(%esi) /* clear value */ +/* only if supported... */ + movl $0x80000000, %eax + cpuid +/* IDT CPUs should not change EAX, generally I hope that non-3DNow cpus do not set a bogus support level here. */ + cmpl $0x80000001, %eax + jb .Lnoextended /* Skip ext check without minimal support level. */ +/* is supported, get flags value */ + movl $0x80000001,%eax + cpuid + movl %edx,12(%esi) +.Lnoextended: +/* then the other ones, called last to get the id flags in %eax for ret */ + movl $0x00000001,%eax + cpuid + movl %eax, (%esi) + movl %ecx, 4(%esi) + movl %edx, 8(%esi) + jmp .Lend + ALIGN4 +.Lnocpuid: +/* error: set everything to zero */ + movl $0, %eax + movl $0, (%esi) + movl $0, 4(%esi) + movl $0, 8(%esi) + movl $0, 12(%esi) + ALIGN4 +.Lend: +/* return value are the id flags, still stored in %eax */ + popl %esi + popl %ebx + popl %ecx + popl %edx + movl %ebp,%esp + popl %ebp + ret + +NONEXEC_STACK diff --git a/lib/3rdparty/libmpg123/icy.c b/lib/3rdparty/libmpg123/icy.c new file mode 100644 index 00000000000..dca2c5dd637 --- /dev/null +++ b/lib/3rdparty/libmpg123/icy.c @@ -0,0 +1,32 @@ +/* + icy: Puny code to pretend for a serious ICY data structure. + + copyright 2007 by the mpg123 project - free software under the terms of the LGPL 2.1 + see COPYING and AUTHORS files in distribution or http://mpg123.org + initially written by Thomas Orgis +*/ + +#include "icy.h" + +void init_icy(struct icy_meta *icy) +{ + icy->data = NULL; +} + +void clear_icy(struct icy_meta *icy) +{ + if(icy->data != NULL) free(icy->data); + init_icy(icy); +} + +void reset_icy(struct icy_meta *icy) +{ + clear_icy(icy); + init_icy(icy); +} +/*void set_icy(struct icy_meta *icy, char* new_data) +{ + if(icy->data) free(icy->data); + icy->data = new_data; + icy->changed = 1; +}*/ diff --git a/lib/3rdparty/libmpg123/icy2utf8.c b/lib/3rdparty/libmpg123/icy2utf8.c new file mode 100644 index 00000000000..4e72162bbbe --- /dev/null +++ b/lib/3rdparty/libmpg123/icy2utf8.c @@ -0,0 +1,438 @@ +/* mpg123 note: This is BSD-licensed code that is no problem for mpg123 usage under LGPL. + It's Free, understood? ;-) */ + +/* Another note: This code is basically written by Thorsten Glaser, + Thomas Orgis did just some rearrangements and comments. */ + +/*- + * Copyright (c) 2008 + * Thorsten Glaser + * + * Provided that these terms and disclaimer and all copyright notices + * are retained or reproduced in an accompanying document, permission + * is granted to deal in this work without restriction, including un- + * limited rights to use, publicly perform, distribute, sell, modify, + * merge, give away, or sublicence. + * + * This work is provided "AS IS" and WITHOUT WARRANTY of any kind, to + * the utmost extent permitted by applicable law, neither express nor + * implied; without malicious intent or gross negligence. In no event + * may a licensor, author or contributor be held liable for indirect, + * direct, other damage, loss, or other issues arising in any way out + * of dealing in the work, even if advised of the possibility of such + * damage or existence of a defect, except proven that it results out + * of said person's immediate fault when using the work as intended. + *- + * Convert from ICY encoding (windows-1252 codepage) to UTF-8 + */ + +/* Includes string and stdlib headers... */ +#include "compat.h" + +/* ThOr: too lazy for this type check; also we use char/short all around anyway. + Of cource, it would be the proper way to use _these_ kind of types all around. */ +#define uint8_t unsigned char +#define uint16_t unsigned short + +static const uint8_t cp1252_utf8[] = { + /* 0x00 @ 0 */ 0x00, + /* 0x01 @ 1 */ 0x01, + /* 0x02 @ 2 */ 0x02, + /* 0x03 @ 3 */ 0x03, + /* 0x04 @ 4 */ 0x04, + /* 0x05 @ 5 */ 0x05, + /* 0x06 @ 6 */ 0x06, + /* 0x07 @ 7 */ 0x07, + /* 0x08 @ 8 */ 0x08, + /* 0x09 @ 9 */ 0x09, + /* 0x0A @ 10 */ 0x0A, + /* 0x0B @ 11 */ 0x0B, + /* 0x0C @ 12 */ 0x0C, + /* 0x0D @ 13 */ 0x0D, + /* 0x0E @ 14 */ 0x0E, + /* 0x0F @ 15 */ 0x0F, + /* 0x10 @ 16 */ 0x10, + /* 0x11 @ 17 */ 0x11, + /* 0x12 @ 18 */ 0x12, + /* 0x13 @ 19 */ 0x13, + /* 0x14 @ 20 */ 0x14, + /* 0x15 @ 21 */ 0x15, + /* 0x16 @ 22 */ 0x16, + /* 0x17 @ 23 */ 0x17, + /* 0x18 @ 24 */ 0x18, + /* 0x19 @ 25 */ 0x19, + /* 0x1A @ 26 */ 0x1A, + /* 0x1B @ 27 */ 0x1B, + /* 0x1C @ 28 */ 0x1C, + /* 0x1D @ 29 */ 0x1D, + /* 0x1E @ 30 */ 0x1E, + /* 0x1F @ 31 */ 0x1F, + /* 0x20 @ 32 */ 0x20, + /* 0x21 @ 33 */ 0x21, + /* 0x22 @ 34 */ 0x22, + /* 0x23 @ 35 */ 0x23, + /* 0x24 @ 36 */ 0x24, + /* 0x25 @ 37 */ 0x25, + /* 0x26 @ 38 */ 0x26, + /* 0x27 @ 39 */ 0x27, + /* 0x28 @ 40 */ 0x28, + /* 0x29 @ 41 */ 0x29, + /* 0x2A @ 42 */ 0x2A, + /* 0x2B @ 43 */ 0x2B, + /* 0x2C @ 44 */ 0x2C, + /* 0x2D @ 45 */ 0x2D, + /* 0x2E @ 46 */ 0x2E, + /* 0x2F @ 47 */ 0x2F, + /* 0x30 @ 48 */ 0x30, + /* 0x31 @ 49 */ 0x31, + /* 0x32 @ 50 */ 0x32, + /* 0x33 @ 51 */ 0x33, + /* 0x34 @ 52 */ 0x34, + /* 0x35 @ 53 */ 0x35, + /* 0x36 @ 54 */ 0x36, + /* 0x37 @ 55 */ 0x37, + /* 0x38 @ 56 */ 0x38, + /* 0x39 @ 57 */ 0x39, + /* 0x3A @ 58 */ 0x3A, + /* 0x3B @ 59 */ 0x3B, + /* 0x3C @ 60 */ 0x3C, + /* 0x3D @ 61 */ 0x3D, + /* 0x3E @ 62 */ 0x3E, + /* 0x3F @ 63 */ 0x3F, + /* 0x40 @ 64 */ 0x40, + /* 0x41 @ 65 */ 0x41, + /* 0x42 @ 66 */ 0x42, + /* 0x43 @ 67 */ 0x43, + /* 0x44 @ 68 */ 0x44, + /* 0x45 @ 69 */ 0x45, + /* 0x46 @ 70 */ 0x46, + /* 0x47 @ 71 */ 0x47, + /* 0x48 @ 72 */ 0x48, + /* 0x49 @ 73 */ 0x49, + /* 0x4A @ 74 */ 0x4A, + /* 0x4B @ 75 */ 0x4B, + /* 0x4C @ 76 */ 0x4C, + /* 0x4D @ 77 */ 0x4D, + /* 0x4E @ 78 */ 0x4E, + /* 0x4F @ 79 */ 0x4F, + /* 0x50 @ 80 */ 0x50, + /* 0x51 @ 81 */ 0x51, + /* 0x52 @ 82 */ 0x52, + /* 0x53 @ 83 */ 0x53, + /* 0x54 @ 84 */ 0x54, + /* 0x55 @ 85 */ 0x55, + /* 0x56 @ 86 */ 0x56, + /* 0x57 @ 87 */ 0x57, + /* 0x58 @ 88 */ 0x58, + /* 0x59 @ 89 */ 0x59, + /* 0x5A @ 90 */ 0x5A, + /* 0x5B @ 91 */ 0x5B, + /* 0x5C @ 92 */ 0x5C, + /* 0x5D @ 93 */ 0x5D, + /* 0x5E @ 94 */ 0x5E, + /* 0x5F @ 95 */ 0x5F, + /* 0x60 @ 96 */ 0x60, + /* 0x61 @ 97 */ 0x61, + /* 0x62 @ 98 */ 0x62, + /* 0x63 @ 99 */ 0x63, + /* 0x64 @ 100 */ 0x64, + /* 0x65 @ 101 */ 0x65, + /* 0x66 @ 102 */ 0x66, + /* 0x67 @ 103 */ 0x67, + /* 0x68 @ 104 */ 0x68, + /* 0x69 @ 105 */ 0x69, + /* 0x6A @ 106 */ 0x6A, + /* 0x6B @ 107 */ 0x6B, + /* 0x6C @ 108 */ 0x6C, + /* 0x6D @ 109 */ 0x6D, + /* 0x6E @ 110 */ 0x6E, + /* 0x6F @ 111 */ 0x6F, + /* 0x70 @ 112 */ 0x70, + /* 0x71 @ 113 */ 0x71, + /* 0x72 @ 114 */ 0x72, + /* 0x73 @ 115 */ 0x73, + /* 0x74 @ 116 */ 0x74, + /* 0x75 @ 117 */ 0x75, + /* 0x76 @ 118 */ 0x76, + /* 0x77 @ 119 */ 0x77, + /* 0x78 @ 120 */ 0x78, + /* 0x79 @ 121 */ 0x79, + /* 0x7A @ 122 */ 0x7A, + /* 0x7B @ 123 */ 0x7B, + /* 0x7C @ 124 */ 0x7C, + /* 0x7D @ 125 */ 0x7D, + /* 0x7E @ 126 */ 0x7E, + /* 0x7F @ 127 */ 0x7F, + /* 0x80 @ 128 */ 0xE2, 0x82, 0xAC, + /* 0x81 @ 131 */ 0xEF, 0xBF, 0xBD, + /* 0x82 @ 134 */ 0xE2, 0x80, 0x9A, + /* 0x83 @ 137 */ 0xC6, 0x92, + /* 0x84 @ 139 */ 0xE2, 0x80, 0x9E, + /* 0x85 @ 142 */ 0xE2, 0x80, 0xA6, + /* 0x86 @ 145 */ 0xE2, 0x80, 0xA0, + /* 0x87 @ 148 */ 0xE2, 0x80, 0xA1, + /* 0x88 @ 151 */ 0xCB, 0x86, + /* 0x89 @ 153 */ 0xE2, 0x80, 0xB0, + /* 0x8A @ 156 */ 0xC5, 0xA0, + /* 0x8B @ 158 */ 0xE2, 0x80, 0xB9, + /* 0x8C @ 161 */ 0xC5, 0x92, + /* 0x8D @ 163 */ 0xEF, 0xBF, 0xBD, + /* 0x8E @ 166 */ 0xC5, 0xBD, + /* 0x8F @ 168 */ 0xEF, 0xBF, 0xBD, + /* 0x90 @ 171 */ 0xEF, 0xBF, 0xBD, + /* 0x91 @ 174 */ 0xE2, 0x80, 0x98, + /* 0x92 @ 177 */ 0xE2, 0x80, 0x99, + /* 0x93 @ 180 */ 0xE2, 0x80, 0x9C, + /* 0x94 @ 183 */ 0xE2, 0x80, 0x9D, + /* 0x95 @ 186 */ 0xE2, 0x80, 0xA2, + /* 0x96 @ 189 */ 0xE2, 0x80, 0x93, + /* 0x97 @ 192 */ 0xE2, 0x80, 0x94, + /* 0x98 @ 195 */ 0xCB, 0x9C, + /* 0x99 @ 197 */ 0xE2, 0x84, 0xA2, + /* 0x9A @ 200 */ 0xC5, 0xA1, + /* 0x9B @ 202 */ 0xE2, 0x80, 0xBA, + /* 0x9C @ 205 */ 0xC5, 0x93, + /* 0x9D @ 207 */ 0xEF, 0xBF, 0xBD, + /* 0x9E @ 210 */ 0xC5, 0xBE, + /* 0x9F @ 212 */ 0xC5, 0xB8, + /* 0xA0 @ 214 */ 0xC2, 0xA0, + /* 0xA1 @ 216 */ 0xC2, 0xA1, + /* 0xA2 @ 218 */ 0xC2, 0xA2, + /* 0xA3 @ 220 */ 0xC2, 0xA3, + /* 0xA4 @ 222 */ 0xC2, 0xA4, + /* 0xA5 @ 224 */ 0xC2, 0xA5, + /* 0xA6 @ 226 */ 0xC2, 0xA6, + /* 0xA7 @ 228 */ 0xC2, 0xA7, + /* 0xA8 @ 230 */ 0xC2, 0xA8, + /* 0xA9 @ 232 */ 0xC2, 0xA9, + /* 0xAA @ 234 */ 0xC2, 0xAA, + /* 0xAB @ 236 */ 0xC2, 0xAB, + /* 0xAC @ 238 */ 0xC2, 0xAC, + /* 0xAD @ 240 */ 0xC2, 0xAD, + /* 0xAE @ 242 */ 0xC2, 0xAE, + /* 0xAF @ 244 */ 0xC2, 0xAF, + /* 0xB0 @ 246 */ 0xC2, 0xB0, + /* 0xB1 @ 248 */ 0xC2, 0xB1, + /* 0xB2 @ 250 */ 0xC2, 0xB2, + /* 0xB3 @ 252 */ 0xC2, 0xB3, + /* 0xB4 @ 254 */ 0xC2, 0xB4, + /* 0xB5 @ 256 */ 0xC2, 0xB5, + /* 0xB6 @ 258 */ 0xC2, 0xB6, + /* 0xB7 @ 260 */ 0xC2, 0xB7, + /* 0xB8 @ 262 */ 0xC2, 0xB8, + /* 0xB9 @ 264 */ 0xC2, 0xB9, + /* 0xBA @ 266 */ 0xC2, 0xBA, + /* 0xBB @ 268 */ 0xC2, 0xBB, + /* 0xBC @ 270 */ 0xC2, 0xBC, + /* 0xBD @ 272 */ 0xC2, 0xBD, + /* 0xBE @ 274 */ 0xC2, 0xBE, + /* 0xBF @ 276 */ 0xC2, 0xBF, + /* 0xC0 @ 278 */ 0xC3, 0x80, + /* 0xC1 @ 280 */ 0xC3, 0x81, + /* 0xC2 @ 282 */ 0xC3, 0x82, + /* 0xC3 @ 284 */ 0xC3, 0x83, + /* 0xC4 @ 286 */ 0xC3, 0x84, + /* 0xC5 @ 288 */ 0xC3, 0x85, + /* 0xC6 @ 290 */ 0xC3, 0x86, + /* 0xC7 @ 292 */ 0xC3, 0x87, + /* 0xC8 @ 294 */ 0xC3, 0x88, + /* 0xC9 @ 296 */ 0xC3, 0x89, + /* 0xCA @ 298 */ 0xC3, 0x8A, + /* 0xCB @ 300 */ 0xC3, 0x8B, + /* 0xCC @ 302 */ 0xC3, 0x8C, + /* 0xCD @ 304 */ 0xC3, 0x8D, + /* 0xCE @ 306 */ 0xC3, 0x8E, + /* 0xCF @ 308 */ 0xC3, 0x8F, + /* 0xD0 @ 310 */ 0xC3, 0x90, + /* 0xD1 @ 312 */ 0xC3, 0x91, + /* 0xD2 @ 314 */ 0xC3, 0x92, + /* 0xD3 @ 316 */ 0xC3, 0x93, + /* 0xD4 @ 318 */ 0xC3, 0x94, + /* 0xD5 @ 320 */ 0xC3, 0x95, + /* 0xD6 @ 322 */ 0xC3, 0x96, + /* 0xD7 @ 324 */ 0xC3, 0x97, + /* 0xD8 @ 326 */ 0xC3, 0x98, + /* 0xD9 @ 328 */ 0xC3, 0x99, + /* 0xDA @ 330 */ 0xC3, 0x9A, + /* 0xDB @ 332 */ 0xC3, 0x9B, + /* 0xDC @ 334 */ 0xC3, 0x9C, + /* 0xDD @ 336 */ 0xC3, 0x9D, + /* 0xDE @ 338 */ 0xC3, 0x9E, + /* 0xDF @ 340 */ 0xC3, 0x9F, + /* 0xE0 @ 342 */ 0xC3, 0xA0, + /* 0xE1 @ 344 */ 0xC3, 0xA1, + /* 0xE2 @ 346 */ 0xC3, 0xA2, + /* 0xE3 @ 348 */ 0xC3, 0xA3, + /* 0xE4 @ 350 */ 0xC3, 0xA4, + /* 0xE5 @ 352 */ 0xC3, 0xA5, + /* 0xE6 @ 354 */ 0xC3, 0xA6, + /* 0xE7 @ 356 */ 0xC3, 0xA7, + /* 0xE8 @ 358 */ 0xC3, 0xA8, + /* 0xE9 @ 360 */ 0xC3, 0xA9, + /* 0xEA @ 362 */ 0xC3, 0xAA, + /* 0xEB @ 364 */ 0xC3, 0xAB, + /* 0xEC @ 366 */ 0xC3, 0xAC, + /* 0xED @ 368 */ 0xC3, 0xAD, + /* 0xEE @ 370 */ 0xC3, 0xAE, + /* 0xEF @ 372 */ 0xC3, 0xAF, + /* 0xF0 @ 374 */ 0xC3, 0xB0, + /* 0xF1 @ 376 */ 0xC3, 0xB1, + /* 0xF2 @ 378 */ 0xC3, 0xB2, + /* 0xF3 @ 380 */ 0xC3, 0xB3, + /* 0xF4 @ 382 */ 0xC3, 0xB4, + /* 0xF5 @ 384 */ 0xC3, 0xB5, + /* 0xF6 @ 386 */ 0xC3, 0xB6, + /* 0xF7 @ 388 */ 0xC3, 0xB7, + /* 0xF8 @ 390 */ 0xC3, 0xB8, + /* 0xF9 @ 392 */ 0xC3, 0xB9, + /* 0xFA @ 394 */ 0xC3, 0xBA, + /* 0xFB @ 396 */ 0xC3, 0xBB, + /* 0xFC @ 398 */ 0xC3, 0xBC, + /* 0xFD @ 400 */ 0xC3, 0xBD, + /* 0xFE @ 402 */ 0xC3, 0xBE, + /* 0xFF @ 404 */ 0xC3, 0xBF, +}; + +static const uint16_t tblofs[257] = { + /* 0x00 */ 0, 1, 2, 3, 4, 5, 6, 7, + /* 0x08 */ 8, 9, 10, 11, 12, 13, 14, 15, + /* 0x10 */ 16, 17, 18, 19, 20, 21, 22, 23, + /* 0x18 */ 24, 25, 26, 27, 28, 29, 30, 31, + /* 0x20 */ 32, 33, 34, 35, 36, 37, 38, 39, + /* 0x28 */ 40, 41, 42, 43, 44, 45, 46, 47, + /* 0x30 */ 48, 49, 50, 51, 52, 53, 54, 55, + /* 0x38 */ 56, 57, 58, 59, 60, 61, 62, 63, + /* 0x40 */ 64, 65, 66, 67, 68, 69, 70, 71, + /* 0x48 */ 72, 73, 74, 75, 76, 77, 78, 79, + /* 0x50 */ 80, 81, 82, 83, 84, 85, 86, 87, + /* 0x58 */ 88, 89, 90, 91, 92, 93, 94, 95, + /* 0x60 */ 96, 97, 98, 99, 100, 101, 102, 103, + /* 0x68 */ 104, 105, 106, 107, 108, 109, 110, 111, + /* 0x70 */ 112, 113, 114, 115, 116, 117, 118, 119, + /* 0x78 */ 120, 121, 122, 123, 124, 125, 126, 127, + /* 0x80 */ 128, 131, 134, 137, 139, 142, 145, 148, + /* 0x88 */ 151, 153, 156, 158, 161, 163, 166, 168, + /* 0x90 */ 171, 174, 177, 180, 183, 186, 189, 192, + /* 0x98 */ 195, 197, 200, 202, 205, 207, 210, 212, + /* 0xA0 */ 214, 216, 218, 220, 222, 224, 226, 228, + /* 0xA8 */ 230, 232, 234, 236, 238, 240, 242, 244, + /* 0xB0 */ 246, 248, 250, 252, 254, 256, 258, 260, + /* 0xB8 */ 262, 264, 266, 268, 270, 272, 274, 276, + /* 0xC0 */ 278, 280, 282, 284, 286, 288, 290, 292, + /* 0xC8 */ 294, 296, 298, 300, 302, 304, 306, 308, + /* 0xD0 */ 310, 312, 314, 316, 318, 320, 322, 324, + /* 0xD8 */ 326, 328, 330, 332, 334, 336, 338, 340, + /* 0xE0 */ 342, 344, 346, 348, 350, 352, 354, 356, + /* 0xE8 */ 358, 360, 362, 364, 366, 368, 370, 372, + /* 0xF0 */ 374, 376, 378, 380, 382, 384, 386, 388, + /* 0xF8 */ 390, 392, 394, 396, 398, 400, 402, 404, + /* sizeof (cp1252_utf8) */ 406 +}; + +/* Check if a string qualifies as UTF-8. */ +static int +is_utf8(const char* src) +{ + uint8_t ch; + size_t i; + const uint8_t* s = (const uint8_t*) src; + + /* We make a loop over every character, until we find a null one. + Remember: The string is supposed to end with a NUL, so ahead checks are safe. */ + while ((ch = *s++)) { + /* Ye olde 7bit ASCII chars 'rr fine for anything */ + if(ch < 0x80) continue; + + /* Now, we watch out for non-UTF conform sequences. */ + else if ((ch < 0xC2) || (ch > 0xFD)) + return 0; + /* check for some misformed sequences */ + if (((ch == 0xC2) && (s[0] < 0xA0)) || + ((ch == 0xEF) && (s[0] == 0xBF) && (s[1] > 0xBD))) + /* XXX add more for outside the BMP */ + return 0; + + /* Check the continuation bytes. */ + if (ch < 0xE0) i = 1; + else if (ch < 0xF0) i = 2; + else if (ch < 0xF8) i = 3; + else if (ch < 0xFC) i = 4; + else + i = 5; + + while (i--) + if ((*s++ & 0xC0) != 0x80) + return 0; + } + + /* If no check failed, the string indeed looks like valid UTF-8. */ + return 1; +} + +/* The main conversion routine. + ICY in CP-1252 (or UTF-8 alreay) to UTF-8 encoded string. + If force is applied, it will always encode to UTF-8, without checking. */ +char * +icy2utf8(const char *src, int force) +{ + const uint8_t *s = (const uint8_t *)src; + size_t srclen, dstlen, i, k; + uint8_t ch, *d; + char *dst; + + /* Some funny streams from Apple/iTunes give ICY info in UTF-8 already. + So, be prepared and don't try to re-encode such. Unless forced. */ + if(!force && is_utf8(src)) return (strdup(src)); + + srclen = strlen(src) + 1; + /* allocate conservatively */ + if ((d = malloc(srclen * 3)) == NULL) + return (NULL); + + i = 0; + dstlen = 0; + while (i < srclen) { + ch = s[i++]; + k = tblofs[ch]; + while (k < tblofs[ch + 1]) + d[dstlen++] = cp1252_utf8[k++]; + } + + /* dstlen includes trailing NUL since srclen also does */ + if ((dst = realloc(d, dstlen)) == NULL) { + free(d); + return (NULL); + } + return (dst); +} + +/* This stuff is for testing only. */ +#ifdef TEST +static const char intext[] = "\225 Gr\374\337e kosten 0,55 \200\205"; + +#include + +int +main(void) +{ + char *t, *t2; + + if ((t = icy2utf8(intext, 0)) == NULL) { + fprintf(stderr, "out of memory\n"); + return (1); + } + + /* make sure it won't be converted twice */ + if ((t2 = icy2utf8(t), 0) == NULL) { + fprintf(stderr, "out of memory\n"); + return (1); + } + + printf("Result is:\t\343\200\214%s\343\200\215\n" + "\t\t\343\200\214%s\343\200\215\n", t, t2); + + free(t); + free(t2); + return (0); +} +#endif diff --git a/lib/3rdparty/libmpg123/id3.c b/lib/3rdparty/libmpg123/id3.c new file mode 100644 index 00000000000..6a622e365f4 --- /dev/null +++ b/lib/3rdparty/libmpg123/id3.c @@ -0,0 +1,991 @@ +/* + id3: ID3v2.3 and ID3v2.4 parsing (a relevant subset) + + copyright 2006-2008 by the mpg123 project - free software under the terms of the LGPL 2.1 + see COPYING and AUTHORS files in distribution or http://mpg123.org + initially written by Thomas Orgis +*/ + +#include "mpg123lib_intern.h" +#include "id3.h" +#include "debug.h" + +#ifndef NO_ID3V2 /* Only the main parsing routine will always be there. */ + +/* We know the usual text frames plus some specifics. */ +#define KNOWN_FRAMES 4 +static const char frame_type[KNOWN_FRAMES][5] = { "COMM", "TXXX", "RVA2", "USLT" }; +enum frame_types { unknown = -2, text = -1, comment, extra, rva2, uslt }; + +/* UTF support definitions */ + +typedef void (*text_converter)(mpg123_string *sb, const unsigned char* source, size_t len, const int noquiet); + +static void convert_latin1 (mpg123_string *sb, const unsigned char* source, size_t len, const int noquiet); +static void convert_utf16bom(mpg123_string *sb, const unsigned char* source, size_t len, const int noquiet); +static void convert_utf8 (mpg123_string *sb, const unsigned char* source, size_t len, const int noquiet); + +static const text_converter text_converters[4] = +{ + convert_latin1, + /* We always check for (multiple) BOM in 16bit unicode. Without BOM, UTF16 BE is the default. + Errors in encoding are detected anyway. */ + convert_utf16bom, + convert_utf16bom, + convert_utf8 +}; + +const unsigned int encoding_widths[4] = { 1, 2, 2, 1 }; + +/* the code starts here... */ + +static void null_id3_links(mpg123_handle *fr) +{ + fr->id3v2.title = NULL; + fr->id3v2.artist = NULL; + fr->id3v2.album = NULL; + fr->id3v2.year = NULL; + fr->id3v2.genre = NULL; + fr->id3v2.comment = NULL; +} + +void init_id3(mpg123_handle *fr) +{ + fr->id3v2.version = 0; /* nothing there */ + null_id3_links(fr); + fr->id3v2.comments = 0; + fr->id3v2.comment_list = NULL; + fr->id3v2.texts = 0; + fr->id3v2.text = NULL; + fr->id3v2.extras = 0; + fr->id3v2.extra = NULL; +} + +/* Managing of the text, comment and extra lists. */ + +/* Initialize one element. */ +static void init_mpg123_text(mpg123_text *txt) +{ + mpg123_init_string(&txt->text); + mpg123_init_string(&txt->description); + txt->id[0] = 0; + txt->id[1] = 0; + txt->id[2] = 0; + txt->id[3] = 0; + txt->lang[0] = 0; + txt->lang[1] = 0; + txt->lang[2] = 0; +} + +/* Free memory of one element. */ +static void free_mpg123_text(mpg123_text *txt) +{ + mpg123_free_string(&txt->text); + mpg123_free_string(&txt->description); +} + +/* Free memory of whole list. */ +#define free_comment(mh) free_id3_text(&((mh)->id3v2.comment_list), &((mh)->id3v2.comments)) +#define free_text(mh) free_id3_text(&((mh)->id3v2.text), &((mh)->id3v2.texts)) +#define free_extra(mh) free_id3_text(&((mh)->id3v2.extra), &((mh)->id3v2.extras)) +static void free_id3_text(mpg123_text **list, size_t *size) +{ + size_t i; + for(i=0; i<*size; ++i) free_mpg123_text(&((*list)[i])); + + free(*list); + *list = NULL; + *size = 0; +} + +/* Add items to the list. */ +#define add_comment(mh) add_id3_text(&((mh)->id3v2.comment_list), &((mh)->id3v2.comments)) +#define add_text(mh) add_id3_text(&((mh)->id3v2.text), &((mh)->id3v2.texts)) +#define add_extra(mh) add_id3_text(&((mh)->id3v2.extra), &((mh)->id3v2.extras)) +static mpg123_text *add_id3_text(mpg123_text **list, size_t *size) +{ + mpg123_text *x = safe_realloc(*list, sizeof(mpg123_text)*(*size+1)); + if(x == NULL) return NULL; /* bad */ + + *list = x; + *size += 1; + init_mpg123_text(&((*list)[*size-1])); + + return &((*list)[*size-1]); /* Return pointer to the added text. */ +} + +/* Remove the last item. */ +#define pop_comment(mh) pop_id3_text(&((mh)->id3v2.comment_list), &((mh)->id3v2.comments)) +#define pop_text(mh) pop_id3_text(&((mh)->id3v2.text), &((mh)->id3v2.texts)) +#define pop_extra(mh) pop_id3_text(&((mh)->id3v2.extra), &((mh)->id3v2.extras)) +static void pop_id3_text(mpg123_text **list, size_t *size) +{ + mpg123_text *x; + if(*size < 1) return; + + free_mpg123_text(&((*list)[*size-1])); + if(*size > 1) + { + x = safe_realloc(*list, sizeof(mpg123_text)*(*size-1)); + if(x != NULL){ *list = x; *size -= 1; } + } + else + { + free(*list); + *list = NULL; + *size = 0; + } +} + +/* OK, back t the higher level functions. */ + +void exit_id3(mpg123_handle *fr) +{ + free_comment(fr); + free_extra(fr); + free_text(fr); +} + +void reset_id3(mpg123_handle *fr) +{ + exit_id3(fr); + init_id3(fr); +} + +/* Set the id3v2.artist id3v2.title ... links to elements of the array. */ +void id3_link(mpg123_handle *fr) +{ + size_t i; + mpg123_id3v2 *v2 = &fr->id3v2; + debug("linking ID3v2"); + null_id3_links(fr); + for(i=0; itexts; ++i) + { + mpg123_text *entry = &v2->text[i]; + if (!strncmp("TIT2", entry->id, 4)) v2->title = &entry->text; + else if(!strncmp("TALB", entry->id, 4)) v2->album = &entry->text; + else if(!strncmp("TPE1", entry->id, 4)) v2->artist = &entry->text; + else if(!strncmp("TYER", entry->id, 4)) v2->year = &entry->text; + else if(!strncmp("TCON", entry->id, 4)) v2->genre = &entry->text; + } + for(i=0; icomments; ++i) + { + mpg123_text *entry = &v2->comment_list[i]; + if(entry->description.fill == 0 || entry->description.p[0] == 0) + v2->comment = &entry->text; + } + /* When no generic comment found, use the last non-generic one. */ + if(v2->comment == NULL && v2->comments > 0) + v2->comment = &v2->comment_list[v2->comments-1].text; +} + +/* + Store ID3 text data in an mpg123_string; either verbatim copy or everything translated to UTF-8 encoding. + Preserve the zero string separator (I don't need strlen for the total size). + + ID3v2 standard says that there should be one text frame of specific type per tag, and subsequent tags overwrite old values. + So, I always replace the text that may be stored already (perhaps with a list of zero-separated strings, though). +*/ +void store_id3_text(mpg123_string *sb, char *source, size_t source_size, const int noquiet, const int notranslate) +{ + if(!source_size) + { + debug("Empty id3 data!"); + return; + } + + /* We shall just copy the data. Client wants to decode itself. */ + if(notranslate) + { + /* Future: Add a path for ID3 errors. */ + if(!mpg123_resize_string(sb, source_size)) + { + if(noquiet) error("Cannot resize target string, out of memory?"); + return; + } + memcpy(sb->p, source, source_size); + sb->fill = source_size; + debug1("stored undecoded ID3 text of size %"SIZE_P, (size_p)source_size); + return; + } + + id3_to_utf8(sb, ((unsigned char *)source)[0], (unsigned char*)source+1, source_size-1, noquiet); + + if(sb->fill) debug1("UTF-8 string (the first one): %s", sb->p); + else if(noquiet) error("unable to convert string to UTF-8 (out of memory, junk input?)!"); +} + +/* On error, sb->size is 0. */ +void id3_to_utf8(mpg123_string *sb, unsigned char encoding, const unsigned char *source, size_t source_size, int noquiet) +{ + unsigned int bwidth; + debug1("encoding: %u", encoding); + /* A note: ID3v2.3 uses UCS-2 non-variable 16bit encoding, v2.4 uses UTF16. + UTF-16 uses a reserved/private range in UCS-2 to add the magic, so we just always treat it as UTF. */ + if(encoding > mpg123_id3_enc_max) + { + if(noquiet) error1("Unknown text encoding %u, I take no chances, sorry!", encoding); + + mpg123_free_string(sb); + return; + } + bwidth = encoding_widths[encoding]; + /* Hack! I've seen a stray zero byte before BOM. Is that supposed to happen? */ + if(encoding != mpg123_id3_utf16be) /* UTF16be _can_ beging with a null byte! */ + while(source_size > bwidth && source[0] == 0) + { + --source_size; + ++source; + debug("skipped leading zero"); + } + if(source_size % bwidth) + { + /* When we need two bytes for a character, it's strange to have an uneven bytestream length. */ + if(noquiet) warning2("Weird tag size %d for encoding %u - I will probably trim too early or something but I think the MP3 is broken.", (int)source_size, encoding); + source_size -= source_size % bwidth; + } + text_converters[encoding](sb, source, source_size, noquiet); +} + +char *next_text(char* prev, int encoding, size_t limit) +{ + char *text = prev; + size_t width = encoding_widths[encoding]; + + /* So I go lengths to find zero or double zero... + Remember bug 2834636: Only check for aligned NULLs! */ + while(text-prev < (long)limit) + { + if(text[0] == 0) + { + if(width <= limit-(text-prev)) + { + size_t i = 1; + for(; i= limit) text = NULL; + + return text; +} + +static const char *enc_name(int enc) +{ + switch(enc) + { + case 0: return "Latin 1"; + case 1: return "UTF-16 BOM"; + case 2: return "UTF-16 BE"; + case 3: return "UTF-8"; + default: return "unknown!"; + } +} + +static void process_text(mpg123_handle *fr, char *realdata, size_t realsize, char *id) +{ + /* Text encoding $xx */ + /* The text (encoded) ... */ + mpg123_text *t = add_text(fr); + if(VERBOSE4) fprintf(stderr, "Note: Storing text from %s encoding\n", enc_name(realdata[0])); + if(t == NULL) + { + if(NOQUIET) error("Unable to attach new text!"); + return; + } + memcpy(t->id, id, 4); + store_id3_text(&t->text, realdata, realsize, NOQUIET, fr->p.flags & MPG123_PLAIN_ID3TEXT); + if(VERBOSE4) fprintf(stderr, "Note: ID3v2 %c%c%c%c text frame: %s\n", id[0], id[1], id[2], id[3], t->text.p); +} + +/* Store a new comment that perhaps is a RVA / RVA_ALBUM/AUDIOPHILE / RVA_MIX/RADIO one + Special gimmik: It also stores USLT to the texts. Stucture is the same as for comments. */ +static void process_comment(mpg123_handle *fr, enum frame_types tt, char *realdata, size_t realsize, int rva_level, char *id) +{ + /* Text encoding $xx */ + /* Language $xx xx xx */ + /* Short description (encoded!) $00 (00) */ + /* Then the comment text (encoded) ... */ + char encoding = realdata[0]; + char *lang = realdata+1; /* I'll only use the 3 bytes! */ + char *descr = realdata+4; + char *text = NULL; + mpg123_text *xcom = NULL; + mpg123_text localcom; /* UTF-8 variant for local processing. */ + + if((int)realsize < descr-realdata) + { + if(NOQUIET) error1("Invalid frame size of %lu (too small for anything).", (unsigned long)realsize); + return; + } + xcom = (tt == uslt ? add_text(fr) : add_comment(fr)); + if(VERBOSE4) fprintf(stderr, "Note: Storing comment from %s encoding\n", enc_name(realdata[0])); + if(xcom == NULL) + { + if(NOQUIET) error("Unable to attach new comment!"); + return; + } + memcpy(xcom->lang, lang, 3); + memcpy(xcom->id, id, 4); + /* Now I can abuse a byte from lang for the encoding. */ + descr[-1] = encoding; + /* Be careful with finding the end of description, I have to honor encoding here. */ + text = next_text(descr, encoding, realsize-(descr-realdata)); + if(text == NULL) + { + if(NOQUIET) error("No comment text / valid description?"); + pop_comment(fr); + return; + } + + init_mpg123_text(&localcom); + /* Store the text, without translation to UTF-8, but for comments always a local copy in UTF-8. + Reminder: No bailing out from here on without freeing the local comment data! */ + store_id3_text(&xcom->description, descr-1, text-descr+1, NOQUIET, fr->p.flags & MPG123_PLAIN_ID3TEXT); + if(tt == comment) + store_id3_text(&localcom.description, descr-1, text-descr+1, NOQUIET, 0); + + text[-1] = encoding; /* Byte abusal for encoding... */ + store_id3_text(&xcom->text, text-1, realsize+1-(text-realdata), NOQUIET, fr->p.flags & MPG123_PLAIN_ID3TEXT); + /* Remember: I will probably decode the above (again) for rva comment checking. So no messing around, please. */ + + if(VERBOSE4) /* Do _not_ print the verbatim text: The encoding might be funny! */ + { + fprintf(stderr, "Note: ID3 comm/uslt desc of length %"SIZE_P".\n", (size_p)xcom->description.fill); + fprintf(stderr, "Note: ID3 comm/uslt text of length %"SIZE_P".\n", (size_p)xcom->text.fill); + } + /* Look out for RVA info only when we really deal with a straight comment. */ + if(tt == comment && localcom.description.fill > 0) + { + int rva_mode = -1; /* mix / album */ + if( !strcasecmp(localcom.description.p, "rva") + || !strcasecmp(localcom.description.p, "rva_mix") + || !strcasecmp(localcom.description.p, "rva_track") + || !strcasecmp(localcom.description.p, "rva_radio") ) + rva_mode = 0; + else if( !strcasecmp(localcom.description.p, "rva_album") + || !strcasecmp(localcom.description.p, "rva_audiophile") + || !strcasecmp(localcom.description.p, "rva_user") ) + rva_mode = 1; + if((rva_mode > -1) && (fr->rva.level[rva_mode] <= rva_level)) + { + /* Only translate the contents in here where we really need them. */ + store_id3_text(&localcom.text, text-1, realsize+1-(text-realdata), NOQUIET, 0); + if(localcom.text.fill > 0) + { + fr->rva.gain[rva_mode] = (float) atof(localcom.text.p); + if(VERBOSE3) fprintf(stderr, "Note: RVA value %fdB\n", fr->rva.gain[rva_mode]); + fr->rva.peak[rva_mode] = 0; + fr->rva.level[rva_mode] = rva_level; + } + } + } + /* Make sure to free the local memory... */ + free_mpg123_text(&localcom); +} + +void process_extra(mpg123_handle *fr, char* realdata, size_t realsize, int rva_level, char *id) +{ + /* Text encoding $xx */ + /* Description ... $00 (00) */ + /* Text ... */ + char encoding = realdata[0]; + char *descr = realdata+1; /* remember, the encoding is descr[-1] */ + char *text; + mpg123_text *xex; + mpg123_text localex; + + if((int)realsize < descr-realdata) + { + if(NOQUIET) error1("Invalid frame size of %lu (too small for anything).", (unsigned long)realsize); + return; + } + text = next_text(descr, encoding, realsize-(descr-realdata)); + if(VERBOSE4) fprintf(stderr, "Note: Storing extra from %s encoding\n", enc_name(realdata[0])); + if(text == NULL) + { + if(NOQUIET) error("No extra frame text / valid description?"); + return; + } + xex = add_extra(fr); + if(xex == NULL) + { + if(NOQUIET) error("Unable to attach new extra text!"); + return; + } + memcpy(xex->id, id, 4); + init_mpg123_text(&localex); /* For our local copy. */ + + /* The outside storage gets reencoded to UTF-8 only if not requested otherwise. + Remember that we really need the -1 here to hand in the encoding byte!*/ + store_id3_text(&xex->description, descr-1, text-descr+1, NOQUIET, fr->p.flags & MPG123_PLAIN_ID3TEXT); + /* Our local copy is always stored in UTF-8! */ + store_id3_text(&localex.description, descr-1, text-descr+1, NOQUIET, 0); + /* At first, only store the outside copy of the payload. We may not need the local copy. */ + text[-1] = encoding; + store_id3_text(&xex->text, text-1, realsize-(text-realdata)+1, NOQUIET, fr->p.flags & MPG123_PLAIN_ID3TEXT); + + /* Now check if we would like to interpret this extra info for RVA. */ + if(localex.description.fill > 0) + { + int is_peak = 0; + int rva_mode = -1; /* mix / album */ + + if(!strncasecmp(localex.description.p, "replaygain_track_",17)) + { + if(VERBOSE3) fprintf(stderr, "Note: RVA ReplayGain track gain/peak\n"); + + rva_mode = 0; + if(!strcasecmp(localex.description.p, "replaygain_track_peak")) is_peak = 1; + else if(strcasecmp(localex.description.p, "replaygain_track_gain")) rva_mode = -1; + } + else + if(!strncasecmp(localex.description.p, "replaygain_album_",17)) + { + if(VERBOSE3) fprintf(stderr, "Note: RVA ReplayGain album gain/peak\n"); + + rva_mode = 1; + if(!strcasecmp(localex.description.p, "replaygain_album_peak")) is_peak = 1; + else if(strcasecmp(localex.description.p, "replaygain_album_gain")) rva_mode = -1; + } + if((rva_mode > -1) && (fr->rva.level[rva_mode] <= rva_level)) + { + /* Now we need the translated copy of the data. */ + store_id3_text(&localex.text, text-1, realsize-(text-realdata)+1, NOQUIET, 0); + if(localex.text.fill > 0) + { + if(is_peak) + { + fr->rva.peak[rva_mode] = (float) atof(localex.text.p); + if(VERBOSE3) fprintf(stderr, "Note: RVA peak %f\n", fr->rva.peak[rva_mode]); + } + else + { + fr->rva.gain[rva_mode] = (float) atof(localex.text.p); + if(VERBOSE3) fprintf(stderr, "Note: RVA gain %fdB\n", fr->rva.gain[rva_mode]); + } + fr->rva.level[rva_mode] = rva_level; + } + } + } + + free_mpg123_text(&localex); +} + +/* Make a ID3v2.3+ 4-byte ID from a ID3v2.2 3-byte ID + Note that not all frames survived to 2.4; the mapping goes to 2.3 . + A notable miss is the old RVA frame, which is very unspecific anyway. + This function returns -1 when a not known 3 char ID was encountered, 0 otherwise. */ +int promote_framename(mpg123_handle *fr, char *id) /* fr because of VERBOSE macros */ +{ + size_t i; + char *old[] = + { + "COM", "TAL", "TBP", "TCM", "TCO", "TCR", "TDA", "TDY", "TEN", "TFT", + "TIM", "TKE", "TLA", "TLE", "TMT", "TOA", "TOF", "TOL", "TOR", "TOT", + "TP1", "TP2", "TP3", "TP4", "TPA", "TPB", "TRC", "TDA", "TRK", "TSI", + "TSS", "TT1", "TT2", "TT3", "TXT", "TXX", "TYE" + }; + char *new[] = + { + "COMM", "TALB", "TBPM", "TCOM", "TCON", "TCOP", "TDAT", "TDLY", "TENC", "TFLT", + "TIME", "TKEY", "TLAN", "TLEN", "TMED", "TOPE", "TOFN", "TOLY", "TORY", "TOAL", + "TPE1", "TPE2", "TPE3", "TPE4", "TPOS", "TPUB", "TSRC", "TRDA", "TRCK", "TSIZ", + "TSSE", "TIT1", "TIT2", "TIT3", "TEXT", "TXXX", "TYER" + }; + for(i=0; ird->read_frame_body(fr, buf, 6)) < 0) /* read more header information */ + return ret2; + + if(buf[0] == 0xff) return 0; /* Revision, will never be 0xff. */ + + /* second new byte are some nice flags, if these are invalid skip the whole thing */ + flags = buf[1]; + debug1("ID3v2: flags 0x%08x", flags); + /* use 4 bytes from buf to construct 28bit uint value and return 1; return 0 if bytes are not synchsafe */ + #define synchsafe_to_long(buf,res) \ + ( \ + (((buf)[0]|(buf)[1]|(buf)[2]|(buf)[3]) & 0x80) ? 0 : \ + (res = (((unsigned long) (buf)[0]) << 21) \ + | (((unsigned long) (buf)[1]) << 14) \ + | (((unsigned long) (buf)[2]) << 7) \ + | ((unsigned long) (buf)[3]) \ + ,1) \ + ) + /* id3v2.3 does not store synchsafe frame sizes, but synchsafe tag size - doh! */ + #define bytes_to_long(buf,res) \ + ( \ + major == 3 ? \ + (res = (((unsigned long) (buf)[0]) << 24) \ + | (((unsigned long) (buf)[1]) << 16) \ + | (((unsigned long) (buf)[2]) << 8) \ + | ((unsigned long) (buf)[3]) \ + ,1) : synchsafe_to_long(buf,res) \ + ) + /* for id3v2.2 only */ + #define threebytes_to_long(buf,res) \ + ( \ + res = (((unsigned long) (buf)[0]) << 16) \ + | (((unsigned long) (buf)[1]) << 8) \ + | ((unsigned long) (buf)[2]) \ + ,1 \ + ) + + /* length-10 or length-20 (footer present); 4 synchsafe integers == 28 bit number */ + /* we have already read 10 bytes, so left are length or length+10 bytes belonging to tag */ + if(!synchsafe_to_long(buf+2,length)) + { + if(NOQUIET) error4("Bad tag length (not synchsafe): 0x%02x%02x%02x%02x; You got a bad ID3 tag here.", buf[2],buf[3],buf[4],buf[5]); + return 0; + } + debug1("ID3v2: tag data length %lu", length); +#ifndef NO_ID3V2 + if(VERBOSE2) fprintf(stderr,"Note: ID3v2.%i rev %i tag of %lu bytes\n", major, buf[0], length); + /* skip if unknown version/scary flags, parse otherwise */ + if((flags & UNKNOWN_FLAGS) || (major > 4) || (major < 2)) + { + /* going to skip because there are unknown flags set */ + if(NOQUIET) warning2("ID3v2: Won't parse the ID3v2 tag with major version %u and flags 0x%xu - some extra code may be needed", major, flags); +#endif + if((ret2 = fr->rd->skip_bytes(fr,length)) < 0) /* will not store data in backbuff! */ + ret = ret2; +#ifndef NO_ID3V2 + } + else + { + fr->id3v2.version = major; + /* try to interpret that beast */ + if((tagdata = (unsigned char*) malloc(length+1)) != NULL) + { + debug("ID3v2: analysing frames..."); + if((ret2 = fr->rd->read_frame_body(fr,tagdata,length)) > 0) + { + unsigned long tagpos = 0; + debug1("ID3v2: have read at all %lu bytes for the tag now", (unsigned long)length+6); + /* going to apply strlen for strings inside frames, make sure that it doesn't overflow! */ + tagdata[length] = 0; + if(flags & EXTHEAD_FLAG) + { + debug("ID3v2: skipping extended header"); + if(!bytes_to_long(tagdata, tagpos)) + { + ret = 0; + if(NOQUIET) error4("Bad (non-synchsafe) tag offset: 0x%02x%02x%02x%02x", tagdata[0], tagdata[1], tagdata[2], tagdata[3]); + } + } + if(ret > 0) + { + char id[5]; + unsigned long framesize; + unsigned long fflags; /* need 16 bits, actually */ + id[4] = 0; + /* pos now advanced after ext head, now a frame has to follow */ + while(tagpos < length-10) /* I want to read at least a full header */ + { + int i = 0; + unsigned long pos = tagpos; + int head_part = fr->id3v2.version == 2 ? 3 : 4; /* bytes of frame title and of framesize value */ + /* level 1,2,3 - 0 is info from lame/info tag! */ + /* rva tags with ascending significance, then general frames */ + enum frame_types tt = unknown; + /* we may have entered the padding zone or any other strangeness: check if we have valid frame id characters */ + for(i=0; i< head_part; ++i) + if( !( ((tagdata[tagpos+i] > 47) && (tagdata[tagpos+i] < 58)) + || ((tagdata[tagpos+i] > 64) && (tagdata[tagpos+i] < 91)) ) ) + { + debug5("ID3v2: real tag data apparently ended after %lu bytes with 0x%02x%02x%02x%02x", tagpos, tagdata[tagpos], tagdata[tagpos+1], tagdata[tagpos+2], tagdata[tagpos+3]); + /* This is no hard error... let's just hope that we got something meaningful already (ret==1 in that case). */ + goto tagparse_cleanup; /* Need to escape two loops here. */ + } + if(ret > 0) + { + /* 4 or 3 bytes id */ + strncpy(id, (char*) tagdata+pos, head_part); + pos += head_part; + tagpos += head_part; + /* size as 32 bits or 28 bits */ + if(fr->id3v2.version == 2) threebytes_to_long(tagdata+pos, framesize); + else + if(!bytes_to_long(tagdata+pos, framesize)) + { + /* Just assume that up to now there was some good data. */ + if(NOQUIET) error1("ID3v2: non-syncsafe size of %s frame, skipping the remainder of tag", id); + break; + } + if(VERBOSE3) fprintf(stderr, "Note: ID3v2 %s frame of size %lu\n", id, framesize); + tagpos += head_part + framesize; /* the important advancement in whole tag */ + if(tagpos > length) + { + if(NOQUIET) error("Whoa! ID3v2 frame claims to be larger than the whole rest of the tag."); + break; + } + pos += head_part; + if(fr->id3v2.version > 2) + { + fflags = (((unsigned long) tagdata[pos]) << 8) | ((unsigned long) tagdata[pos+1]); + pos += 2; + tagpos += 2; + } + else fflags = 0; + /* for sanity, after full parsing tagpos should be == pos */ + /* debug4("ID3v2: found %s frame, size %lu (as bytes: 0x%08lx), flags 0x%016lx", id, framesize, framesize, fflags); */ + /* %0abc0000 %0h00kmnp */ + #define BAD_FFLAGS (unsigned long) 36784 + #define PRES_TAG_FFLAG 16384 + #define PRES_FILE_FFLAG 8192 + #define READ_ONLY_FFLAG 4096 + #define GROUP_FFLAG 64 + #define COMPR_FFLAG 8 + #define ENCR_FFLAG 4 + #define UNSYNC_FFLAG 2 + #define DATLEN_FFLAG 1 + if(head_part < 4 && promote_framename(fr, id) != 0) continue; + + /* shall not or want not handle these */ + if(fflags & (BAD_FFLAGS | COMPR_FFLAG | ENCR_FFLAG)) + { + if(NOQUIET) warning("ID3v2: skipping invalid/unsupported frame"); + continue; + } + + for(i = 0; i < KNOWN_FRAMES; ++i) + if(!strncmp(frame_type[i], id, 4)){ tt = i; break; } + + if(id[0] == 'T' && tt != extra) tt = text; + + if(tt != unknown) + { + int rva_mode = -1; /* mix / album */ + unsigned long realsize = framesize; + unsigned char* realdata = tagdata+pos; + if((flags & UNSYNC_FLAG) || (fflags & UNSYNC_FFLAG)) + { + unsigned long ipos = 0; + unsigned long opos = 0; + debug("Id3v2: going to de-unsync the frame data"); + /* de-unsync: FF00 -> FF; real FF00 is simply represented as FF0000 ... */ + /* damn, that means I have to delete bytes from withing the data block... thus need temporal storage */ + /* standard mandates that de-unsync should always be safe if flag is set */ + realdata = (unsigned char*) malloc(framesize); /* will need <= bytes */ + if(realdata == NULL) + { + if(NOQUIET) error("ID3v2: unable to allocate working buffer for de-unsync"); + continue; + } + /* now going byte per byte through the data... */ + realdata[0] = tagdata[pos]; + opos = 1; + for(ipos = pos+1; ipos < pos+framesize; ++ipos) + { + if(!((tagdata[ipos] == 0) && (tagdata[ipos-1] == 0xff))) + { + realdata[opos++] = tagdata[ipos]; + } + } + realsize = opos; + debug2("ID3v2: de-unsync made %lu out of %lu bytes", realsize, framesize); + } + pos = 0; /* now at the beginning again... */ + switch(tt) + { + case comment: + case uslt: + process_comment(fr, tt, (char*)realdata, realsize, comment+1, id); + break; + case extra: /* perhaps foobar2000's work */ + process_extra(fr, (char*)realdata, realsize, extra+1, id); + break; + case rva2: /* "the" RVA tag */ + { + /* starts with null-terminated identification */ + if(VERBOSE3) fprintf(stderr, "Note: RVA2 identification \"%s\"\n", realdata); + /* default: some individual value, mix mode */ + rva_mode = 0; + if( !strncasecmp((char*)realdata, "album", 5) + || !strncasecmp((char*)realdata, "audiophile", 10) + || !strncasecmp((char*)realdata, "user", 4)) + rva_mode = 1; + if(fr->rva.level[rva_mode] <= rva2+1) + { + pos += strlen((char*) realdata) + 1; + if(realdata[pos] == 1) + { + ++pos; + /* only handle master channel */ + debug("ID3v2: it is for the master channel"); + /* two bytes adjustment, one byte for bits representing peak - n bytes, eh bits, for peak */ + /* 16 bit signed integer = dB * 512 ... the double cast is needed to preserve the sign of negative values! */ + fr->rva.gain[rva_mode] = (float) ( (((short)((signed char)realdata[pos])) << 8) | realdata[pos+1] ) / 512; + pos += 2; + if(VERBOSE3) fprintf(stderr, "Note: RVA value %fdB\n", fr->rva.gain[rva_mode]); + /* heh, the peak value is represented by a number of bits - but in what manner? Skipping that part */ + fr->rva.peak[rva_mode] = 0; + fr->rva.level[rva_mode] = rva2+1; + } + } + } + break; + /* non-rva metainfo, simply store... */ + case text: + process_text(fr, (char*)realdata, realsize, id); + break; + default: if(NOQUIET) error1("ID3v2: unknown frame type %i", tt); + } + if((flags & UNSYNC_FLAG) || (fflags & UNSYNC_FFLAG)) free(realdata); + } + #undef BAD_FFLAGS + #undef PRES_TAG_FFLAG + #undef PRES_FILE_FFLAG + #undef READ_ONLY_FFLAG + #undef GROUP_FFLAG + #undef COMPR_FFLAG + #undef ENCR_FFLAG + #undef UNSYNC_FFLAG + #undef DATLEN_FFLAG + } + else break; + #undef KNOWN_FRAMES + } + } + } + else + { + /* There are tags with zero length. Strictly not an error, then. */ + if(length > 0 && NOQUIET) error("ID3v2: Duh, not able to read ID3v2 tag data."); + ret = ret2; + } +tagparse_cleanup: + free(tagdata); + } + else + { + if(NOQUIET) error1("ID3v2: Arrg! Unable to allocate %lu bytes for interpreting ID3v2 data - trying to skip instead.", length); + if((ret2 = fr->rd->skip_bytes(fr,length)) < 0) ret = ret2; /* will not store data in backbuff! */ + else ret = 0; + } + } +#endif /* NO_ID3V2 */ + /* skip footer if present */ + if((ret > 0) && (flags & FOOTER_FLAG) && ((ret2 = fr->rd->skip_bytes(fr,length)) < 0)) ret = ret2; + + return ret; + #undef UNSYNC_FLAG + #undef EXTHEAD_FLAG + #undef EXP_FLAG + #undef FOOTER_FLAG + #undef UNKOWN_FLAGS +} + +#ifndef NO_ID3V2 /* Disabling all the rest... */ + +static void convert_latin1(mpg123_string *sb, const unsigned char* s, size_t l, const int noquiet) +{ + size_t length = l; + size_t i; + unsigned char *p; + /* determine real length, a latin1 character can at most take 2 in UTF8 */ + for(i=0; i= 0x80) ++length; + + debug1("UTF-8 length: %lu", (unsigned long)length); + /* one extra zero byte for paranoia */ + if(!mpg123_resize_string(sb, length+1)){ mpg123_free_string(sb); return ; } + + p = (unsigned char*) sb->p; /* Signedness doesn't matter but it shows I thought about the non-issue */ + for(i=0; i>6); + *(p+1) = 0x80 | (s[i] & 0x3f); + p+=2; + } + + sb->p[length] = 0; + sb->fill = length+1; +} + +/* + Check if we have a byte oder mark(s) there, return: + -1: little endian + 0: no BOM + 1: big endian + + This modifies source and len to indicate the data _after_ the BOM(s). + Note on nasty data: The last encountered BOM determines the endianess. + I have seen data with multiple BOMS, namely from "the" id3v2 program. + Not nice, but what should I do? +*/ +static int check_bom(const unsigned char** source, size_t *len) +{ + int this_bom = 0; + int further_bom = 0; + + if(*len < 2) return 0; + + if((*source)[0] == 0xff && (*source)[1] == 0xfe) + this_bom = -1; + + if((*source)[0] == 0xfe && (*source)[1] == 0xff) + this_bom = 1; + + /* Skip the detected BOM. */ + if(this_bom != 0) + { + *source += 2; + *len -= 2; + /* Check for following BOMs. The last one wins! */ + further_bom = check_bom(source, len); + if(further_bom == 0) return this_bom; /* End of the recursion. */ + else return further_bom; + } + else return 0; +} + +#define FULLPOINT(f,s) ( (((f)&0x3ff)<<10) + ((s)&0x3ff) + 0x10000 ) +/* Remember: There's a limit at 0x1ffff. */ +#define UTF8LEN(x) ( (x)<0x80 ? 1 : ((x)<0x800 ? 2 : ((x)<0x10000 ? 3 : 4))) +static void convert_utf16bom(mpg123_string *sb, const unsigned char* s, size_t l, const int noquiet) +{ + size_t i; + size_t n; /* number bytes that make up full pairs */ + unsigned char *p; + size_t length = 0; /* the resulting UTF-8 length */ + /* Determine real length... extreme case can be more than utf-16 length. */ + size_t high = 0; + size_t low = 1; + int bom_endian; + + debug1("convert_utf16 with length %lu", (unsigned long)l); + + bom_endian = check_bom(&s, &l); + debug1("UTF16 endianess check: %i", bom_endian); + + if(bom_endian == -1) /* little-endian */ + { + high = 1; /* The second byte is the high byte. */ + low = 0; /* The first byte is the low byte. */ + } + + n = (l/2)*2; /* number bytes that make up full pairs */ + + /* first: get length, check for errors -- stop at first one */ + for(i=0; i < n; i+=2) + { + unsigned long point = ((unsigned long) s[i+high]<<8) + s[i+low]; + if((point & 0xd800) == 0xd800) /* lead surrogate */ + { + unsigned short second = (i+3 < l) ? (s[i+2+high]<<8) + s[i+2+low] : 0; + if((second & 0xdc00) == 0xdc00) /* good... */ + { + point = FULLPOINT(point,second); + length += UTF8LEN(point); /* possibly 4 bytes */ + i+=2; /* We overstepped one word. */ + } + else /* if no valid pair, break here */ + { + if(noquiet) error2("Invalid UTF16 surrogate pair at %li (0x%04lx).", (unsigned long)i, point); + n = i; /* Forget the half pair, END! */ + break; + } + } + else length += UTF8LEN(point); /* 1,2 or 3 bytes */ + } + + if(!mpg123_resize_string(sb, length+1)){ mpg123_free_string(sb); return ; } + + /* Now really convert, skip checks as these have been done just before. */ + p = (unsigned char*) sb->p; /* Signedness doesn't matter but it shows I thought about the non-issue */ + for(i=0; i < n; i+=2) + { + unsigned long codepoint = ((unsigned long) s[i+high]<<8) + s[i+low]; + if((codepoint & 0xd800) == 0xd800) /* lead surrogate */ + { + unsigned short second = (s[i+2+high]<<8) + s[i+2+low]; + codepoint = FULLPOINT(codepoint,second); + i+=2; /* We overstepped one word. */ + } + if(codepoint < 0x80) *p++ = (unsigned char) codepoint; + else if(codepoint < 0x800) + { + *p++ = (unsigned char) (0xc0 | (codepoint>>6)); + *p++ = (unsigned char) (0x80 | (codepoint & 0x3f)); + } + else if(codepoint < 0x10000) + { + *p++ = (unsigned char) (0xe0 | (codepoint>>12)); + *p++ = 0x80 | ((codepoint>>6) & 0x3f); + *p++ = 0x80 | (codepoint & 0x3f); + } + else if (codepoint < 0x200000) + { + *p++ = (unsigned char) (0xf0 | codepoint>>18); + *p++ = (unsigned char) (0x80 | ((codepoint>>12) & 0x3f)); + *p++ = (unsigned char) (0x80 | ((codepoint>>6) & 0x3f)); + *p++ = (unsigned char) (0x80 | (codepoint & 0x3f)); + } /* ignore bigger ones (that are not possible here anyway) */ + } + sb->p[sb->size-1] = 0; /* paranoia... */ + sb->fill = sb->size; +} +#undef UTF8LEN +#undef FULLPOINT + +static void convert_utf8(mpg123_string *sb, const unsigned char* source, size_t len, const int noquiet) +{ + if(mpg123_resize_string(sb, len+1)) + { + memcpy(sb->p, source, len); + sb->p[len] = 0; + sb->fill = len+1; + } + else mpg123_free_string(sb); +} + +#endif diff --git a/lib/3rdparty/libmpg123/index.c b/lib/3rdparty/libmpg123/index.c new file mode 100644 index 00000000000..bb5af3271c8 --- /dev/null +++ b/lib/3rdparty/libmpg123/index.c @@ -0,0 +1,134 @@ +/* + index: frame index data structure and functions + + copyright 2007-8 by the mpg123 project - free software under the terms of the LGPL 2.1 + see COPYING and AUTHORS files in distribution or http://mpg123.org + initially written by Thomas Orgis +*/ + +#include "index.h" +#include "debug.h" + +/* The next expected frame offset, one step ahead. */ +static off_t fi_next(struct frame_index *fi) +{ + return (off_t)fi->fill*fi->step; +} + +/* Shrink down the used index to the half. + Be careful with size = 1 ... there's no shrinking possible there. */ +static void fi_shrink(struct frame_index *fi) +{ + if(fi->fill < 2) return; /* Won't shrink below 1. */ + else + { /* Double the step, half the fill. Should work as well for fill%2 = 1 */ + size_t c; + debug2("shrink index with fill %lu and step %lu", (unsigned long)fi->fill, (unsigned long)fi->step); + fi->step *= 2; + fi->fill /= 2; + /* Move the data down. */ + for(c = 0; c < fi->fill; ++c) + fi->data[c] = fi->data[2*c]; + } + + fi->next = fi_next(fi); +} + +void fi_init(struct frame_index *fi) +{ + fi->data = NULL; + fi->step = 1; + fi->fill = 0; + fi->size = 0; + fi->grow_size = 0; + fi->next = fi_next(fi); +} + +void fi_exit(struct frame_index *fi) +{ + debug2("fi_exit: %p and %lu", (void*)fi->data, (unsigned long)fi->size); + if(fi->size && fi->data != NULL) free(fi->data); + + fi_init(fi); /* Be prepared for further fun, still. */ +} + +int fi_resize(struct frame_index *fi, size_t newsize) +{ + off_t *newdata = NULL; + if(newsize == fi->size) return 0; + + if(newsize > 0 && newsize < fi->size) + { /* When we reduce buffer size a bit, shrink stuff. */ + while(fi->fill > newsize){ fi_shrink(fi); } + } + + newdata = safe_realloc(fi->data, newsize*sizeof(off_t)); + if(newsize == 0 || newdata != NULL) + { + fi->data = newdata; + fi->size = newsize; + if(fi->fill > fi->size) fi->fill = fi->size; + + fi->next = fi_next(fi); + debug2("new index of size %lu at %p", (unsigned long)fi->size, (void*)fi->data); + return 0; + } + else + { + error("failed to resize index!"); + return -1; + } +} + +void fi_add(struct frame_index *fi, off_t pos) +{ + debug3("wanting to add to fill %lu, step %lu, size %lu", (unsigned long)fi->fill, (unsigned long)fi->step, (unsigned long)fi->size); + if(fi->fill == fi->size) + { /* Index is full, we need to shrink... or grow. */ + /* Store the current frame number to check later if we still want it. */ + off_t framenum = fi->fill*fi->step; + /* If we want not / cannot grow, we shrink. */ + if( !(fi->grow_size && fi_resize(fi, fi->size+fi->grow_size)==0) ) + fi_shrink(fi); + + /* Now check if we still want to add this frame (could be that not, because of changed step). */ + if(fi->next != framenum) return; + } + /* When we are here, we want that frame. */ + if(fi->fill < fi->size) /* safeguard for size=1, or just generally */ + { + debug1("adding to index at %p", (void*)(fi->data+fi->fill)); + fi->data[fi->fill] = pos; + ++fi->fill; + fi->next = fi_next(fi); + debug3("added pos %li to index with fill %lu and step %lu", (long) pos, (unsigned long)fi->fill, (unsigned long)fi->step); + } +} + +int fi_set(struct frame_index *fi, off_t *offsets, off_t step, size_t fill) +{ + if(fi_resize(fi, fill) == -1) return -1; + fi->step = step; + if(offsets != NULL) + { + memcpy(fi->data, offsets, fill*sizeof(off_t)); + fi->fill = fill; + } + else + { + /* allocation only, no entries in index yet */ + fi->fill = 0; + } + fi->next = fi_next(fi); + debug3("set new index of fill %lu, size %lu at %p", + (unsigned long)fi->fill, (unsigned long)fi->size, (void*)fi->data); + return 0; +} + +void fi_reset(struct frame_index *fi) +{ + debug1("reset with size %"SIZE_P, (size_p)fi->size); + fi->fill = 0; + fi->step = 1; + fi->next = fi_next(fi); +} diff --git a/lib/3rdparty/libmpg123/layer1.c b/lib/3rdparty/libmpg123/layer1.c new file mode 100644 index 00000000000..6894a33608b --- /dev/null +++ b/lib/3rdparty/libmpg123/layer1.c @@ -0,0 +1,155 @@ +/* + layer1.c: the layer 1 decoder + + copyright 1995-2009 by the mpg123 project - free software under the terms of the LGPL 2.1 + see COPYING and AUTHORS files in distribution or http://mpg123.org + initially written by Michael Hipp + + may have a few bugs after last optimization ... +*/ + +#include "mpg123lib_intern.h" +#include "getbits.h" + +void I_step_one(unsigned int balloc[], unsigned int scale_index[2][SBLIMIT],mpg123_handle *fr) +{ + unsigned int *ba=balloc; + unsigned int *sca = (unsigned int *) scale_index; + + if(fr->stereo == 2) + { + int i; + int jsbound = fr->jsbound; + for(i=0;istereo == 2) + { + int jsbound = fr->jsbound; + register real *f0 = fraction[0]; + register real *f1 = fraction[1]; + ba = balloc; + for(sample=smpb,i=0;imuls[n+1][*sca++]); + else *f0++ = DOUBLE_TO_REAL(0.0); + + if((n=*ba++)) + *f1++ = REAL_MUL_SCALE_LAYER12(DOUBLE_TO_REAL_15( ((-1)<muls[n+1][*sca++]); + else *f1++ = DOUBLE_TO_REAL(0.0); + } + for(i=jsbound;imuls[n+1][*sca++]); + *f1++ = REAL_MUL_SCALE_LAYER12(samp, fr->muls[n+1][*sca++]); + } + else *f0++ = *f1++ = DOUBLE_TO_REAL(0.0); + } + for(i=fr->down_sample_sblimit;i<32;i++) + fraction[0][i] = fraction[1][i] = 0.0; + } + else + { + register real *f0 = fraction[0]; + ba = balloc; + for(sample=smpb,i=0;imuls[n+1][*sca++]); + else *f0++ = DOUBLE_TO_REAL(0.0); + } + for(i=fr->down_sample_sblimit;i<32;i++) + fraction[0][i] = DOUBLE_TO_REAL(0.0); + } +} + +int do_layer1(mpg123_handle *fr) +{ + int clip=0; + int i,stereo = fr->stereo; + unsigned int balloc[2*SBLIMIT]; + unsigned int scale_index[2][SBLIMIT]; + real (*fraction)[SBLIMIT] = fr->layer1.fraction; /* fraction[2][SBLIMIT] */ + int single = fr->single; + + fr->jsbound = (fr->mode == MPG_MD_JOINT_STEREO) ? (fr->mode_ext<<2)+4 : 32; + + if(stereo == 1 || single == SINGLE_MIX) /* I don't see mixing handled here */ + single = SINGLE_LEFT; + + I_step_one(balloc,scale_index,fr); + + for(i=0;isynth_mono)(fraction[single], fr); + else + clip += (fr->synth_stereo)(fraction[0], fraction[1], fr); + } + + return clip; +} + + diff --git a/lib/3rdparty/libmpg123/layer2.c b/lib/3rdparty/libmpg123/layer2.c new file mode 100644 index 00000000000..acaeba23691 --- /dev/null +++ b/lib/3rdparty/libmpg123/layer2.c @@ -0,0 +1,371 @@ +/* + layer2.c: the layer 2 decoder, root of mpg123 + + copyright 1994-2009 by the mpg123 project - free software under the terms of the LGPL 2.1 + see COPYING and AUTHORS files in distribution or http://mpg123.org + initially written by Michael Hipp + + mpg123 started as mp2 decoder a long time ago... + part of this file is required for layer 1, too. +*/ + + +#include "mpg123lib_intern.h" +#ifndef NO_LAYER2 +#include "l2tables.h" +#endif +#include "getbits.h" + +#ifndef NO_LAYER12 /* Stuff needed for layer I and II. */ + +static int grp_3tab[32 * 3] = { 0, }; /* used: 27 */ +static int grp_5tab[128 * 3] = { 0, }; /* used: 125 */ +static int grp_9tab[1024 * 3] = { 0, }; /* used: 729 */ + +#if defined(REAL_IS_FIXED) && defined(PRECALC_TABLES) +#include "l12_integer_tables.h" +#else +static const double mulmul[27] = +{ + 0.0 , -2.0/3.0 , 2.0/3.0 , + 2.0/7.0 , 2.0/15.0 , 2.0/31.0, 2.0/63.0 , 2.0/127.0 , 2.0/255.0 , + 2.0/511.0 , 2.0/1023.0 , 2.0/2047.0 , 2.0/4095.0 , 2.0/8191.0 , + 2.0/16383.0 , 2.0/32767.0 , 2.0/65535.0 , + -4.0/5.0 , -2.0/5.0 , 2.0/5.0, 4.0/5.0 , + -8.0/9.0 , -4.0/9.0 , -2.0/9.0 , 2.0/9.0 , 4.0/9.0 , 8.0/9.0 +}; +#endif + +void init_layer12(void) +{ + const int base[3][9] = + { + { 1 , 0, 2 , } , + { 17, 18, 0 , 19, 20 , } , + { 21, 1, 22, 23, 0, 24, 25, 2, 26 } + }; + int i,j,k,l,len; + const int tablen[3] = { 3 , 5 , 9 }; + int *itable; + int *tables[3] = { grp_3tab , grp_5tab , grp_9tab }; + + for(i=0;i<3;i++) + { + itable = tables[i]; + len = tablen[i]; + for(j=0;jmuls[k], k); + *table++ = 0.0; + } +} + +real* init_layer12_table(mpg123_handle *fr, real *table, int m) +{ +#if defined(REAL_IS_FIXED) && defined(PRECALC_TABLES) + int i; + for(i=0;i<63;i++) + *table++ = layer12_table[m][i]; +#else + int i,j; + for(j=3,i=0;i<63;i++,j--) + *table++ = DOUBLE_TO_REAL_SCALE_LAYER12(mulmul[m] * pow(2.0,(double) j / 3.0)); +#endif + + return table; +} + +#ifdef OPT_MMXORSSE +real* init_layer12_table_mmx(mpg123_handle *fr, real *table, int m) +{ + int i,j; + if(!fr->p.down_sample) + { + for(j=3,i=0;i<63;i++,j--) + *table++ = DOUBLE_TO_REAL(16384 * mulmul[m] * pow(2.0,(double) j / 3.0)); + } + else + { + for(j=3,i=0;i<63;i++,j--) + *table++ = DOUBLE_TO_REAL(mulmul[m] * pow(2.0,(double) j / 3.0)); + } + return table; +} +#endif + +#endif /* NO_LAYER12 */ + +/* The rest is the actual decoding of layer II data. */ + +#ifndef NO_LAYER2 + +void II_step_one(unsigned int *bit_alloc,int *scale,mpg123_handle *fr) +{ + int stereo = fr->stereo-1; + int sblimit = fr->II_sblimit; + int jsbound = fr->jsbound; + int sblimit2 = fr->II_sblimit<alloc; + int i; + unsigned int scfsi_buf[64]; + unsigned int *scfsi,*bita; + int sc,step; + + bita = bit_alloc; + if(stereo) + { + for(i=jsbound;i;i--,alloc1+=(1<bits; + *bita++ = (char) getbits(fr, step); + *bita++ = (char) getbits(fr, step); + } + for(i=sblimit-jsbound;i;i--,alloc1+=(1<bits; + bita[0] = (char) getbits(fr, step); + bita[1] = bita[0]; + bita+=2; + } + bita = bit_alloc; + scfsi=scfsi_buf; + + for(i=sblimit2;i;i--) + if(*bita++) *scfsi++ = (char) getbits_fast(fr, 2); + } + else /* mono */ + { + for(i=sblimit;i;i--,alloc1+=(1<bits; + *bita++ = (char) getbits(fr, step); + } + bita = bit_alloc; + scfsi=scfsi_buf; + for(i=sblimit;i;i--) + if(*bita++) *scfsi++ = (char) getbits_fast(fr, 2); + } + + bita = bit_alloc; + scfsi=scfsi_buf; + for(i=sblimit2;i;i--) + if(*bita++) + switch(*scfsi++) + { + case 0: + *scale++ = getbits_fast(fr, 6); + *scale++ = getbits_fast(fr, 6); + *scale++ = getbits_fast(fr, 6); + break; + case 1 : + *scale++ = sc = getbits_fast(fr, 6); + *scale++ = sc; + *scale++ = getbits_fast(fr, 6); + break; + case 2: + *scale++ = sc = getbits_fast(fr, 6); + *scale++ = sc; + *scale++ = sc; + break; + default: /* case 3 */ + *scale++ = getbits_fast(fr, 6); + *scale++ = sc = getbits_fast(fr, 6); + *scale++ = sc; + break; + } +} + + +void II_step_two(unsigned int *bit_alloc,real fraction[2][4][SBLIMIT],int *scale,mpg123_handle *fr,int x1) +{ + int i,j,k,ba; + int stereo = fr->stereo; + int sblimit = fr->II_sblimit; + int jsbound = fr->jsbound; + const struct al_table *alloc2,*alloc1 = fr->alloc; + unsigned int *bita=bit_alloc; + int d1,step; + + for(i=0;ibits; + for(j=0;jbits; + if( (d1=alloc2->d) < 0) + { + real cm=fr->muls[k][scale[x1]]; + fraction[j][0][i] = REAL_MUL_SCALE_LAYER12(DOUBLE_TO_REAL_15((int)getbits(fr, k) + d1), cm); + fraction[j][1][i] = REAL_MUL_SCALE_LAYER12(DOUBLE_TO_REAL_15((int)getbits(fr, k) + d1), cm); + fraction[j][2][i] = REAL_MUL_SCALE_LAYER12(DOUBLE_TO_REAL_15((int)getbits(fr, k) + d1), cm); + } + else + { + const int *table[] = { 0,0,0,grp_3tab,0,grp_5tab,0,0,0,grp_9tab }; + unsigned int idx,*tab,m=scale[x1]; + idx = (unsigned int) getbits(fr, k); + tab = (unsigned int *) (table[d1] + idx + idx + idx); + fraction[j][0][i] = REAL_SCALE_LAYER12(fr->muls[*tab++][m]); + fraction[j][1][i] = REAL_SCALE_LAYER12(fr->muls[*tab++][m]); + fraction[j][2][i] = REAL_SCALE_LAYER12(fr->muls[*tab][m]); + } + scale+=3; + } + else + fraction[j][0][i] = fraction[j][1][i] = fraction[j][2][i] = DOUBLE_TO_REAL(0.0); + } + } + + for(i=jsbound;ibits; + bita++; /* channel 1 and channel 2 bitalloc are the same */ + if( (ba=*bita++) ) + { + k=(alloc2 = alloc1+ba)->bits; + if( (d1=alloc2->d) < 0) + { + real cm; + cm=fr->muls[k][scale[x1+3]]; + fraction[0][0][i] = DOUBLE_TO_REAL_15((int)getbits(fr, k) + d1); + fraction[0][1][i] = DOUBLE_TO_REAL_15((int)getbits(fr, k) + d1); + fraction[0][2][i] = DOUBLE_TO_REAL_15((int)getbits(fr, k) + d1); + fraction[1][0][i] = REAL_MUL_SCALE_LAYER12(fraction[0][0][i], cm); + fraction[1][1][i] = REAL_MUL_SCALE_LAYER12(fraction[0][1][i], cm); + fraction[1][2][i] = REAL_MUL_SCALE_LAYER12(fraction[0][2][i], cm); + cm=fr->muls[k][scale[x1]]; + fraction[0][0][i] = REAL_MUL_SCALE_LAYER12(fraction[0][0][i], cm); + fraction[0][1][i] = REAL_MUL_SCALE_LAYER12(fraction[0][1][i], cm); + fraction[0][2][i] = REAL_MUL_SCALE_LAYER12(fraction[0][2][i], cm); + } + else + { + const int *table[] = { 0,0,0,grp_3tab,0,grp_5tab,0,0,0,grp_9tab }; + unsigned int idx,*tab,m1,m2; + m1 = scale[x1]; m2 = scale[x1+3]; + idx = (unsigned int) getbits(fr, k); + tab = (unsigned int *) (table[d1] + idx + idx + idx); + fraction[0][0][i] = REAL_SCALE_LAYER12(fr->muls[*tab][m1]); fraction[1][0][i] = REAL_SCALE_LAYER12(fr->muls[*tab++][m2]); + fraction[0][1][i] = REAL_SCALE_LAYER12(fr->muls[*tab][m1]); fraction[1][1][i] = REAL_SCALE_LAYER12(fr->muls[*tab++][m2]); + fraction[0][2][i] = REAL_SCALE_LAYER12(fr->muls[*tab][m1]); fraction[1][2][i] = REAL_SCALE_LAYER12(fr->muls[*tab][m2]); + } + scale+=6; + } + else + { + fraction[0][0][i] = fraction[0][1][i] = fraction[0][2][i] = + fraction[1][0][i] = fraction[1][1][i] = fraction[1][2][i] = DOUBLE_TO_REAL(0.0); + } +/* + Historic comment... + should we use individual scalefac for channel 2 or + is the current way the right one , where we just copy channel 1 to + channel 2 ?? + The current 'strange' thing is, that we throw away the scalefac + values for the second channel ...!! + -> changed .. now we use the scalefac values of channel one !! +*/ + } + + if(sblimit > (fr->down_sample_sblimit) ) + sblimit = fr->down_sample_sblimit; + + for(i=sblimit;isampling_frequency >= 3) /* Or equivalent: (fr->lsf == 1) */ + table = 4; + else + table = translate[fr->sampling_frequency][2-fr->stereo][fr->bitrate_index]; + + sblim = sblims[table]; + fr->alloc = tables[table]; + fr->II_sblimit = sblim; +} + + +int do_layer2(mpg123_handle *fr) +{ + int clip=0; + int i,j; + int stereo = fr->stereo; + /* pick_table clears unused subbands */ + /* replacement for real fraction[2][4][SBLIMIT], needs alignment. */ + real (*fraction)[4][SBLIMIT] = fr->layer2.fraction; + unsigned int bit_alloc[64]; + int scale[192]; + int single = fr->single; + + II_select_table(fr); + fr->jsbound = (fr->mode == MPG_MD_JOINT_STEREO) ? (fr->mode_ext<<2)+4 : fr->II_sblimit; + + if(fr->jsbound > fr->II_sblimit) + { + fprintf(stderr, "Truncating stereo boundary to sideband limit.\n"); + fr->jsbound=fr->II_sblimit; + } + + /* TODO: What happens with mono mixing, actually? */ + if(stereo == 1 || single == SINGLE_MIX) /* also, mix not really handled */ + single = SINGLE_LEFT; + + II_step_one(bit_alloc, scale, fr); + + for(i=0;i>2); + for(j=0;j<3;j++) + { + if(single != SINGLE_STEREO) + clip += (fr->synth_mono)(fraction[single][j], fr); + else + clip += (fr->synth_stereo)(fraction[0][j], fraction[1][j], fr); + } + } + + return clip; +} + +#endif /* NO_LAYER2 */ diff --git a/lib/3rdparty/libmpg123/layer3.c b/lib/3rdparty/libmpg123/layer3.c new file mode 100644 index 00000000000..b8d51fa887c --- /dev/null +++ b/lib/3rdparty/libmpg123/layer3.c @@ -0,0 +1,2058 @@ +/* + layer3.c: the layer 3 decoder + + copyright 1995-2009 by the mpg123 project - free software under the terms of the LGPL 2.1 + see COPYING and AUTHORS files in distribution or http://mpg123.org + initially written by Michael Hipp + + Dear visitor: + If you feel you don't understand fully the works of this file, your feeling might be correct. + + Optimize-TODO: put short bands into the band-field without the stride of 3 reals + Length-optimze: unify long and short band code where it is possible + + The int-vs-pointer situation has to be cleaned up. +*/ + +#include "mpg123lib_intern.h" +#include "huffman.h" +#include "getbits.h" +#include "debug.h" + +/* define CUT_SFB21 if you want to cut-off the frequency above 16kHz */ +#if 0 +#define CUT_SFB21 +#endif + +#ifdef REAL_IS_FIXED +#define NEW_DCT9 +#include "l3_integer_tables.h" +#else +/* static one-time calculated tables... or so */ +static real ispow[8207]; +static real aa_ca[8],aa_cs[8]; +static real win[4][36]; +static real win1[4][36]; +real COS9[9]; /* dct36_3dnow wants to use that */ +static real COS6_1,COS6_2; +real tfcos36[9]; /* dct36_3dnow wants to use that */ +static real tfcos12[3]; +#define NEW_DCT9 +#ifdef NEW_DCT9 +static real cos9[3],cos18[3]; +static real tan1_1[16],tan2_1[16],tan1_2[16],tan2_2[16]; +static real pow1_1[2][16],pow2_1[2][16],pow1_2[2][16],pow2_2[2][16]; +#endif +#endif + +/* Decoder state data, living on the stack of do_layer3. */ + +struct gr_info_s +{ + int scfsi; + unsigned part2_3_length; + unsigned big_values; + unsigned scalefac_compress; + unsigned block_type; + unsigned mixed_block_flag; + unsigned table_select[3]; + /* Making those two signed int as workaround for open64/pathscale/sun compilers, and also for consistency, since they're worked on together with other signed variables. */ + int maxband[3]; + int maxbandl; + unsigned maxb; + unsigned region1start; + unsigned region2start; + unsigned preflag; + unsigned scalefac_scale; + unsigned count1table_select; + real *full_gain[3]; + real *pow2gain; +}; + +struct III_sideinfo +{ + unsigned main_data_begin; + unsigned private_bits; + /* Hm, funny... struct inside struct... */ + struct { struct gr_info_s gr[2]; } ch[2]; +}; + +struct bandInfoStruct +{ + int longIdx[23]; + int longDiff[22]; + int shortIdx[14]; + int shortDiff[13]; +}; + +/* Techy details about our friendly MPEG data. Fairly constant over the years;-) */ +const struct bandInfoStruct bandInfo[9] = +{ + { /* MPEG 1.0 */ + {0,4,8,12,16,20,24,30,36,44,52,62,74, 90,110,134,162,196,238,288,342,418,576}, + {4,4,4,4,4,4,6,6,8, 8,10,12,16,20,24,28,34,42,50,54, 76,158}, + {0,4*3,8*3,12*3,16*3,22*3,30*3,40*3,52*3,66*3, 84*3,106*3,136*3,192*3}, + {4,4,4,4,6,8,10,12,14,18,22,30,56} + }, + { + {0,4,8,12,16,20,24,30,36,42,50,60,72, 88,106,128,156,190,230,276,330,384,576}, + {4,4,4,4,4,4,6,6,6, 8,10,12,16,18,22,28,34,40,46,54, 54,192}, + {0,4*3,8*3,12*3,16*3,22*3,28*3,38*3,50*3,64*3, 80*3,100*3,126*3,192*3}, + {4,4,4,4,6,6,10,12,14,16,20,26,66} + }, + { + {0,4,8,12,16,20,24,30,36,44,54,66,82,102,126,156,194,240,296,364,448,550,576}, + {4,4,4,4,4,4,6,6,8,10,12,16,20,24,30,38,46,56,68,84,102, 26}, + {0,4*3,8*3,12*3,16*3,22*3,30*3,42*3,58*3,78*3,104*3,138*3,180*3,192*3}, + {4,4,4,4,6,8,12,16,20,26,34,42,12} + }, + { /* MPEG 2.0 */ + {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576}, + {6,6,6,6,6,6,8,10,12,14,16,20,24,28,32,38,46,52,60,68,58,54 } , + {0,4*3,8*3,12*3,18*3,24*3,32*3,42*3,56*3,74*3,100*3,132*3,174*3,192*3} , + {4,4,4,6,6,8,10,14,18,26,32,42,18 } + }, + { /* Twiddling 3 values here (not just 330->332!) fixed bug 1895025. */ + {0,6,12,18,24,30,36,44,54,66,80,96,114,136,162,194,232,278,332,394,464,540,576}, + {6,6,6,6,6,6,8,10,12,14,16,18,22,26,32,38,46,54,62,70,76,36 }, + {0,4*3,8*3,12*3,18*3,26*3,36*3,48*3,62*3,80*3,104*3,136*3,180*3,192*3}, + {4,4,4,6,8,10,12,14,18,24,32,44,12 } + }, + { + {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576}, + {6,6,6,6,6,6,8,10,12,14,16,20,24,28,32,38,46,52,60,68,58,54 }, + {0,4*3,8*3,12*3,18*3,26*3,36*3,48*3,62*3,80*3,104*3,134*3,174*3,192*3}, + {4,4,4,6,8,10,12,14,18,24,30,40,18 } + }, + { /* MPEG 2.5 */ + {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576}, + {6,6,6,6,6,6,8,10,12,14,16,20,24,28,32,38,46,52,60,68,58,54}, + {0,12,24,36,54,78,108,144,186,240,312,402,522,576}, + {4,4,4,6,8,10,12,14,18,24,30,40,18} + }, + { + {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576}, + {6,6,6,6,6,6,8,10,12,14,16,20,24,28,32,38,46,52,60,68,58,54}, + {0,12,24,36,54,78,108,144,186,240,312,402,522,576}, + {4,4,4,6,8,10,12,14,18,24,30,40,18} + }, + { + {0,12,24,36,48,60,72,88,108,132,160,192,232,280,336,400,476,566,568,570,572,574,576}, + {12,12,12,12,12,12,16,20,24,28,32,40,48,56,64,76,90,2,2,2,2,2}, + {0, 24, 48, 72,108,156,216,288,372,480,486,492,498,576}, + {8,8,8,12,16,20,24,28,36,2,2,2,26} + } +}; + +static int mapbuf0[9][152]; +static int mapbuf1[9][156]; +static int mapbuf2[9][44]; +static int *map[9][3]; +static int *mapend[9][3]; + +static unsigned int n_slen2[512]; /* MPEG 2.0 slen for 'normal' mode */ +static unsigned int i_slen2[256]; /* MPEG 2.0 slen for intensity stereo */ + +/* Some helpers used in init_layer3 */ + +#ifdef OPT_MMXORSSE +real init_layer3_gainpow2_mmx(mpg123_handle *fr, int i) +{ + if(!fr->p.down_sample) return DOUBLE_TO_REAL(16384.0 * pow((double)2.0,-0.25 * (double) (i+210) )); + else return DOUBLE_TO_REAL(pow((double)2.0,-0.25 * (double) (i+210))); +} +#endif + +real init_layer3_gainpow2(mpg123_handle *fr, int i) +{ +#if defined(REAL_IS_FIXED) && defined(PRECALC_TABLES) + return gainpow2[i+256]; +#else + return DOUBLE_TO_REAL_SCALE_LAYER3(pow((double)2.0,-0.25 * (double) (i+210)),i+256); +#endif +} + + +/* init tables for layer-3 ... specific with the downsampling... */ +void init_layer3(void) +{ + int i,j,k,l; + +#if !defined(REAL_IS_FIXED) || !defined(PRECALC_TABLES) + for(i=0;i<8207;i++) + ispow[i] = DOUBLE_TO_REAL_POW43(pow((double)i,(double)4.0/3.0)); + + for(i=0;i<8;i++) + { + const double Ci[8] = {-0.6,-0.535,-0.33,-0.185,-0.095,-0.041,-0.0142,-0.0037}; + double sq = sqrt(1.0+Ci[i]*Ci[i]); + aa_cs[i] = DOUBLE_TO_REAL(1.0/sq); + aa_ca[i] = DOUBLE_TO_REAL(Ci[i]/sq); + } + + for(i=0;i<18;i++) + { + win[0][i] = win[1][i] = + DOUBLE_TO_REAL( 0.5*sin(M_PI/72.0 * (double)(2*(i+0) +1)) / cos(M_PI * (double)(2*(i+0) +19) / 72.0) ); + win[0][i+18] = win[3][i+18] = + DOUBLE_TO_REAL( 0.5*sin(M_PI/72.0 * (double)(2*(i+18)+1)) / cos(M_PI * (double)(2*(i+18)+19) / 72.0) ); + } + for(i=0;i<6;i++) + { + win[1][i+18] = DOUBLE_TO_REAL(0.5 / cos ( M_PI * (double) (2*(i+18)+19) / 72.0 )); + win[3][i+12] = DOUBLE_TO_REAL(0.5 / cos ( M_PI * (double) (2*(i+12)+19) / 72.0 )); + win[1][i+24] = DOUBLE_TO_REAL(0.5 * sin( M_PI / 24.0 * (double) (2*i+13) ) / cos ( M_PI * (double) (2*(i+24)+19) / 72.0 )); + win[1][i+30] = win[3][i] = DOUBLE_TO_REAL(0.0); + win[3][i+6 ] = DOUBLE_TO_REAL(0.5 * sin( M_PI / 24.0 * (double) (2*i+1 ) ) / cos ( M_PI * (double) (2*(i+6 )+19) / 72.0 )); + } + + for(i=0;i<9;i++) + COS9[i] = DOUBLE_TO_REAL(cos( M_PI / 18.0 * (double) i)); + + for(i=0;i<9;i++) + tfcos36[i] = DOUBLE_TO_REAL(0.5 / cos ( M_PI * (double) (i*2+1) / 36.0 )); + + for(i=0;i<3;i++) + tfcos12[i] = DOUBLE_TO_REAL(0.5 / cos ( M_PI * (double) (i*2+1) / 12.0 )); + + COS6_1 = DOUBLE_TO_REAL(cos( M_PI / 6.0 * (double) 1)); + COS6_2 = DOUBLE_TO_REAL(cos( M_PI / 6.0 * (double) 2)); + +#ifdef NEW_DCT9 + cos9[0] = DOUBLE_TO_REAL(cos(1.0*M_PI/9.0)); + cos9[1] = DOUBLE_TO_REAL(cos(5.0*M_PI/9.0)); + cos9[2] = DOUBLE_TO_REAL(cos(7.0*M_PI/9.0)); + cos18[0] = DOUBLE_TO_REAL(cos(1.0*M_PI/18.0)); + cos18[1] = DOUBLE_TO_REAL(cos(11.0*M_PI/18.0)); + cos18[2] = DOUBLE_TO_REAL(cos(13.0*M_PI/18.0)); +#endif + + for(i=0;i<12;i++) + { + win[2][i] = DOUBLE_TO_REAL(0.5 * sin( M_PI / 24.0 * (double) (2*i+1) ) / cos ( M_PI * (double) (2*i+7) / 24.0 )); + } + + for(i=0;i<16;i++) + { + double t = tan( (double) i * M_PI / 12.0 ); + tan1_1[i] = DOUBLE_TO_REAL_15(t / (1.0+t)); + tan2_1[i] = DOUBLE_TO_REAL_15(1.0 / (1.0 + t)); + tan1_2[i] = DOUBLE_TO_REAL_15(M_SQRT2 * t / (1.0+t)); + tan2_2[i] = DOUBLE_TO_REAL_15(M_SQRT2 / (1.0 + t)); + + for(j=0;j<2;j++) + { + double base = pow(2.0,-0.25*(j+1.0)); + double p1=1.0,p2=1.0; + if(i > 0) + { + if( i & 1 ) p1 = pow(base,(i+1.0)*0.5); + else p2 = pow(base,i*0.5); + } + pow1_1[j][i] = DOUBLE_TO_REAL_15(p1); + pow2_1[j][i] = DOUBLE_TO_REAL_15(p2); + pow1_2[j][i] = DOUBLE_TO_REAL_15(M_SQRT2 * p1); + pow2_2[j][i] = DOUBLE_TO_REAL_15(M_SQRT2 * p2); + } + } +#endif + + for(j=0;j<4;j++) + { + const int len[4] = { 36,36,12,36 }; + for(i=0;ilongDiff; + for(i=0,cb = 0; cb < 8 ; cb++,i+=*bdf++) + { + *mp++ = (*bdf) >> 1; + *mp++ = i; + *mp++ = 3; + *mp++ = cb; + } + bdf = bi->shortDiff+3; + for(cb=3;cb<13;cb++) + { + int l = (*bdf++) >> 1; + for(lwin=0;lwin<3;lwin++) + { + *mp++ = l; + *mp++ = i + lwin; + *mp++ = lwin; + *mp++ = cb; + } + i += 6*l; + } + mapend[j][0] = mp; + + mp = map[j][1] = mapbuf1[j]; + bdf = bi->shortDiff+0; + for(i=0,cb=0;cb<13;cb++) + { + int l = (*bdf++) >> 1; + for(lwin=0;lwin<3;lwin++) + { + *mp++ = l; + *mp++ = i + lwin; + *mp++ = lwin; + *mp++ = cb; + } + i += 6*l; + } + mapend[j][1] = mp; + + mp = map[j][2] = mapbuf2[j]; + bdf = bi->longDiff; + for(cb = 0; cb < 22 ; cb++) + { + *mp++ = (*bdf++) >> 1; + *mp++ = cb; + } + mapend[j][2] = mp; + } + + /* Now for some serious loopings! */ + for(i=0;i<5;i++) + for(j=0;j<6;j++) + for(k=0;k<6;k++) + { + int n = k + j * 6 + i * 36; + i_slen2[n] = i|(j<<3)|(k<<6)|(3<<12); + } + for(i=0;i<4;i++) + for(j=0;j<4;j++) + for(k=0;k<4;k++) + { + int n = k + j * 4 + i * 16; + i_slen2[n+180] = i|(j<<3)|(k<<6)|(4<<12); + } + for(i=0;i<4;i++) + for(j=0;j<3;j++) + { + int n = j + i * 3; + i_slen2[n+244] = i|(j<<3) | (5<<12); + n_slen2[n+500] = i|(j<<3) | (2<<12) | (1<<15); + } + for(i=0;i<5;i++) + for(j=0;j<5;j++) + for(k=0;k<4;k++) + for(l=0;l<4;l++) + { + int n = l + k * 4 + j * 16 + i * 80; + n_slen2[n] = i|(j<<3)|(k<<6)|(l<<9)|(0<<12); + } + for(i=0;i<5;i++) + for(j=0;j<5;j++) + for(k=0;k<4;k++) + { + int n = k + j * 4 + i * 20; + n_slen2[n+400] = i|(j<<3)|(k<<6)|(1<<12); + } +} + + +void init_layer3_stuff(mpg123_handle *fr, real (*gainpow2)(mpg123_handle *fr, int i)) +{ + int i,j; + + for(i=-256;i<118+4;i++) fr->gainpow2[i+256] = gainpow2(fr,i); + + for(j=0;j<9;j++) + { + for(i=0;i<23;i++) + { + fr->longLimit[j][i] = (bandInfo[j].longIdx[i] - 1 + 8) / 18 + 1; + if(fr->longLimit[j][i] > (fr->down_sample_sblimit) ) + fr->longLimit[j][i] = fr->down_sample_sblimit; + } + for(i=0;i<14;i++) + { + fr->shortLimit[j][i] = (bandInfo[j].shortIdx[i] - 1) / 18 + 1; + if(fr->shortLimit[j][i] > (fr->down_sample_sblimit) ) + fr->shortLimit[j][i] = fr->down_sample_sblimit; + } + } +} + +/* + Observe! + Now come the actualy decoding routines. +*/ + +/* read additional side information (for MPEG 1 and MPEG 2) */ +static int III_get_side_info(mpg123_handle *fr, struct III_sideinfo *si,int stereo, int ms_stereo,long sfreq,int single) +{ + int ch, gr; + int powdiff = (single == SINGLE_MIX) ? 4 : 0; + + const int tabs[2][5] = { { 2,9,5,3,4 } , { 1,8,1,2,9 } }; + const int *tab = tabs[fr->lsf]; + + si->main_data_begin = getbits(fr, tab[1]); + + if(si->main_data_begin > fr->bitreservoir) + { + if(VERBOSE2) fprintf(stderr, "Note: missing %d bytes in bit reservoir for frame %li\n", (int)(si->main_data_begin - fr->bitreservoir), (long)fr->num); + + /* overwrite main_data_begin for the really available bit reservoir */ + backbits(fr, tab[1]); + if(fr->lsf == 0) + { + fr->wordpointer[0] = (unsigned char) (fr->bitreservoir >> 1); + fr->wordpointer[1] = (unsigned char) ((fr->bitreservoir & 1) << 7); + } + else fr->wordpointer[0] = (unsigned char) fr->bitreservoir; + + /* zero "side-info" data for a silence-frame + without touching audio data used as bit reservoir for following frame */ + memset(fr->wordpointer+2, 0, fr->ssize-2); + + /* reread the new bit reservoir offset */ + si->main_data_begin = getbits(fr, tab[1]); + } + + /* Keep track of the available data bytes for the bit reservoir. + Think: Substract the 2 crc bytes in parser already? */ + fr->bitreservoir = fr->bitreservoir + fr->framesize - fr->ssize - (fr->error_protection ? 2 : 0); + /* Limit the reservoir to the max for MPEG 1.0 or 2.x . */ + if(fr->bitreservoir > (unsigned int) (fr->lsf == 0 ? 511 : 255)) + fr->bitreservoir = (fr->lsf == 0 ? 511 : 255); + + /* Now back into less commented territory. It's code. It works. */ + + if (stereo == 1) + si->private_bits = getbits_fast(fr, tab[2]); + else + si->private_bits = getbits_fast(fr, tab[3]); + + if(!fr->lsf) for(ch=0; chch[ch].gr[0].scfsi = -1; + si->ch[ch].gr[1].scfsi = getbits_fast(fr, 4); + } + + for (gr=0; grch[ch].gr[gr]); + + gr_info->part2_3_length = getbits(fr, 12); + gr_info->big_values = getbits(fr, 9); + if(gr_info->big_values > 288) + { + if(NOQUIET) error("big_values too large!"); + gr_info->big_values = 288; + } + gr_info->pow2gain = fr->gainpow2+256 - getbits_fast(fr, 8) + powdiff; + if(ms_stereo) gr_info->pow2gain += 2; + + gr_info->scalefac_compress = getbits(fr, tab[4]); + + if(get1bit(fr)) + { /* window switch flag */ + int i; + gr_info->block_type = getbits_fast(fr, 2); + gr_info->mixed_block_flag = get1bit(fr); + gr_info->table_select[0] = getbits_fast(fr, 5); + gr_info->table_select[1] = getbits_fast(fr, 5); + /* + table_select[2] not needed, because there is no region2, + but to satisfy some verification tools we set it either. + */ + gr_info->table_select[2] = 0; + for(i=0;i<3;i++) + gr_info->full_gain[i] = gr_info->pow2gain + (getbits_fast(fr, 3)<<3); + + if(gr_info->block_type == 0) + { + if(NOQUIET) error("Blocktype == 0 and window-switching == 1 not allowed."); + return 1; + } + + /* region_count/start parameters are implicit in this case. */ + if( (!fr->lsf || (gr_info->block_type == 2)) && !fr->mpeg25) + { + gr_info->region1start = 36>>1; + gr_info->region2start = 576>>1; + } + else + { + if(fr->mpeg25) + { + int r0c,r1c; + if((gr_info->block_type == 2) && (!gr_info->mixed_block_flag) ) r0c = 5; + else r0c = 7; + + r1c = 20 - r0c; + gr_info->region1start = bandInfo[sfreq].longIdx[r0c+1] >> 1 ; + gr_info->region2start = bandInfo[sfreq].longIdx[r0c+1+r1c+1] >> 1; + } + else + { + gr_info->region1start = 54>>1; + gr_info->region2start = 576>>1; + } + } + } + else + { + int i,r0c,r1c; + for (i=0; i<3; i++) + gr_info->table_select[i] = getbits_fast(fr, 5); + + r0c = getbits_fast(fr, 4); + r1c = getbits_fast(fr, 3); + gr_info->region1start = bandInfo[sfreq].longIdx[r0c+1] >> 1 ; + gr_info->region2start = bandInfo[sfreq].longIdx[r0c+1+r1c+1] >> 1; + + if(r0c + r1c + 2 > 22) gr_info->region2start = 576>>1; + else gr_info->region2start = bandInfo[sfreq].longIdx[r0c+1+r1c+1] >> 1; + + gr_info->block_type = 0; + gr_info->mixed_block_flag = 0; + } + if(!fr->lsf) gr_info->preflag = get1bit(fr); + + gr_info->scalefac_scale = get1bit(fr); + gr_info->count1table_select = get1bit(fr); + } + return 0; +} + + +/* read scalefactors */ +static int III_get_scale_factors_1(mpg123_handle *fr, int *scf,struct gr_info_s *gr_info,int ch,int gr) +{ + const unsigned char slen[2][16] = + { + {0, 0, 0, 0, 3, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4}, + {0, 1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 3} + }; + int numbits; + int num0 = slen[0][gr_info->scalefac_compress]; + int num1 = slen[1][gr_info->scalefac_compress]; + + if(gr_info->block_type == 2) + { + int i=18; + numbits = (num0 + num1) * 18; + + if(gr_info->mixed_block_flag) + { + for (i=8;i;i--) + *scf++ = getbits_fast(fr, num0); + + i = 9; + numbits -= num0; /* num0 * 17 + num1 * 18 */ + } + + for(;i;i--) *scf++ = getbits_fast(fr, num0); + + for(i = 18; i; i--) *scf++ = getbits_fast(fr, num1); + + *scf++ = 0; *scf++ = 0; *scf++ = 0; /* short[13][0..2] = 0 */ + } + else + { + int i; + int scfsi = gr_info->scfsi; + + if(scfsi < 0) + { /* scfsi < 0 => granule == 0 */ + for(i=11;i;i--) *scf++ = getbits_fast(fr, num0); + + for(i=10;i;i--) *scf++ = getbits_fast(fr, num1); + + numbits = (num0 + num1) * 10 + num0; + *scf++ = 0; + } + else + { + numbits = 0; + if(!(scfsi & 0x8)) + { + for (i=0;i<6;i++) *scf++ = getbits_fast(fr, num0); + + numbits += num0 * 6; + } + else scf += 6; + + if(!(scfsi & 0x4)) + { + for (i=0;i<5;i++) *scf++ = getbits_fast(fr, num0); + + numbits += num0 * 5; + } + else scf += 5; + + if(!(scfsi & 0x2)) + { + for(i=0;i<5;i++) *scf++ = getbits_fast(fr, num1); + + numbits += num1 * 5; + } + else scf += 5; + + if(!(scfsi & 0x1)) + { + for (i=0;i<5;i++) *scf++ = getbits_fast(fr, num1); + + numbits += num1 * 5; + } + else scf += 5; + + *scf++ = 0; /* no l[21] in original sources */ + } + } + return numbits; +} + + +static int III_get_scale_factors_2(mpg123_handle *fr, int *scf,struct gr_info_s *gr_info,int i_stereo) +{ + const unsigned char *pnt; + int i,j,n=0,numbits=0; + unsigned int slen; + + const unsigned char stab[3][6][4] = + { + { + { 6, 5, 5,5 } , { 6, 5, 7,3 } , { 11,10,0,0}, + { 7, 7, 7,0 } , { 6, 6, 6,3 } , { 8, 8,5,0} + }, + { + { 9, 9, 9,9 } , { 9, 9,12,6 } , { 18,18,0,0}, + {12,12,12,0 } , {12, 9, 9,6 } , { 15,12,9,0} + }, + { + { 6, 9, 9,9 } , { 6, 9,12,6 } , { 15,18,0,0}, + { 6,15,12,0 } , { 6,12, 9,6 } , { 6,18,9,0} + } + }; + + if(i_stereo) /* i_stereo AND second channel -> do_layer3() checks this */ + slen = i_slen2[gr_info->scalefac_compress>>1]; + else + slen = n_slen2[gr_info->scalefac_compress]; + + gr_info->preflag = (slen>>15) & 0x1; + + n = 0; + if( gr_info->block_type == 2 ) + { + n++; + if(gr_info->mixed_block_flag) n++; + } + + pnt = stab[n][(slen>>12)&0x7]; + + for(i=0;i<4;i++) + { + int num = slen & 0x7; + slen >>= 3; + if(num) + { + for(j=0;j<(int)(pnt[i]);j++) *scf++ = getbits_fast(fr, num); + + numbits += pnt[i] * num; + } + else + for(j=0;j<(int)(pnt[i]);j++) *scf++ = 0; + } + + n = (n << 1) + 1; + for(i=0;iscalefac_scale; + real *xrpnt = (real *) xr; + int l[3],l3; + int part2remain = gr_info->part2_3_length - part2bits; + int *me; +#ifdef REAL_IS_FIXED + int gainpow2_scale_idx = 378; +#endif + + /* mhipp tree has this split up a bit... */ + int num=getbitoffset(fr); + long mask; + /* We must split this, because for num==0 the shift is undefined if you do it in one step. */ + mask = ((unsigned long) getbits(fr, num))<big_values; + int region1 = gr_info->region1start; + int region2 = gr_info->region2start; + if(region1 > region2) + { + /* + That's not optimal: it fixes a segfault with fuzzed data, but also apparently triggers where it shouldn't, see bug 1641196. + The benefit of not crashing / having this security risk is bigger than these few frames of a lame-3.70 file that aren't audible anyway. + But still, I want to know if indeed this check or the old lame is at fault. + */ + if(NOQUIET) error("You got some really nasty file there... region1>region2!"); + return 1; + } + l3 = ((576>>1)-bv)>>1; + + /* we may lose the 'odd' bit here !! check this later again */ + if(bv <= region1) + { + l[0] = bv; + l[1] = 0; + l[2] = 0; + } + else + { + l[0] = region1; + if(bv <= region2) + { + l[1] = bv - l[0]; + l[2] = 0; + } + else + { + l[1] = region2 - l[0]; + l[2] = bv - region2; + } + } + } + + if(gr_info->block_type == 2) + { + /* decoding with short or mixed mode BandIndex table */ + int i,max[4]; + int step=0,lwin=3,cb=0; + register real v = 0.0; + register int *m,mc; + + if(gr_info->mixed_block_flag) + { + max[3] = -1; + max[0] = max[1] = max[2] = 2; + m = map[sfreq][0]; + me = mapend[sfreq][0]; + } + else + { + max[0] = max[1] = max[2] = max[3] = -1; + /* max[3] not really needed in this case */ + m = map[sfreq][1]; + me = mapend[sfreq][1]; + } + + mc = 0; + for(i=0;i<2;i++) + { + int lp = l[i]; + struct newhuff *h = ht+gr_info->table_select[i]; + for(;lp;lp--,mc--) + { + register int x,y; + if( (!mc) ) + { + mc = *m++; + xrpnt = ((real *) xr) + (*m++); + lwin = *m++; + cb = *m++; + if(lwin == 3) + { +#ifdef REAL_IS_FIXED + gainpow2_scale_idx = (int)(gr_info->pow2gain + (*scf << shift) - fr->gainpow2); +#endif + v = gr_info->pow2gain[(*scf++) << shift]; + step = 1; + } + else + { +#ifdef REAL_IS_FIXED + gainpow2_scale_idx = (int)(gr_info->full_gain[lwin] + (*scf << shift) - fr->gainpow2); +#endif + v = gr_info->full_gain[lwin][(*scf++) << shift]; + step = 3; + } + } + { + register short *val = h->table; + REFRESH_MASK; + while((y=*val++)<0) + { + if (mask < 0) val -= y; + + num--; + mask <<= 1; + } + x = y >> 4; + y &= 0xf; + } + if(x == 15 && h->linbits) + { + max[lwin] = cb; + REFRESH_MASK; + x += ((unsigned long) mask) >> (BITSHIFT+8-h->linbits); + num -= h->linbits+1; + mask <<= h->linbits; + if(mask < 0) *xrpnt = REAL_MUL_SCALE_LAYER3(-ispow[x], v, gainpow2_scale_idx); + else *xrpnt = REAL_MUL_SCALE_LAYER3( ispow[x], v, gainpow2_scale_idx); + + mask <<= 1; + } + else if(x) + { + max[lwin] = cb; + if(mask < 0) *xrpnt = REAL_MUL_SCALE_LAYER3(-ispow[x], v, gainpow2_scale_idx); + else *xrpnt = REAL_MUL_SCALE_LAYER3( ispow[x], v, gainpow2_scale_idx); + + num--; + mask <<= 1; + } + else *xrpnt = DOUBLE_TO_REAL(0.0); + + xrpnt += step; + if(y == 15 && h->linbits) + { + max[lwin] = cb; + REFRESH_MASK; + y += ((unsigned long) mask) >> (BITSHIFT+8-h->linbits); + num -= h->linbits+1; + mask <<= h->linbits; + if(mask < 0) *xrpnt = REAL_MUL_SCALE_LAYER3(-ispow[y], v, gainpow2_scale_idx); + else *xrpnt = REAL_MUL_SCALE_LAYER3( ispow[y], v, gainpow2_scale_idx); + + mask <<= 1; + } + else if(y) + { + max[lwin] = cb; + if(mask < 0) *xrpnt = REAL_MUL_SCALE_LAYER3(-ispow[y], v, gainpow2_scale_idx); + else *xrpnt = REAL_MUL_SCALE_LAYER3( ispow[y], v, gainpow2_scale_idx); + + num--; + mask <<= 1; + } + else *xrpnt = DOUBLE_TO_REAL(0.0); + + xrpnt += step; + } + } + + for(;l3 && (part2remain+num > 0);l3--) + { + struct newhuff* h; + register short* val; + register short a; + /* + This is only a humble hack to prevent a special segfault. + More insight into the real workings is still needed. + Especially why there are (valid?) files that make xrpnt exceed the array with 4 bytes without segfaulting, more seems to be really bad, though. + */ + #ifdef DEBUG + if(!(xrpnt < &xr[SBLIMIT][0])) + { + if(VERBOSE) debug2("attempted soft xrpnt overflow (%p !< %p) ?", (void*) xrpnt, (void*) &xr[SBLIMIT][0]); + } + #endif + if(!(xrpnt < &xr[SBLIMIT][0]+5)) + { + if(NOQUIET) error2("attempted xrpnt overflow (%p !< %p)", (void*) xrpnt, (void*) &xr[SBLIMIT][0]); + return 2; + } + h = htc+gr_info->count1table_select; + val = h->table; + + REFRESH_MASK; + while((a=*val++)<0) + { + if(mask < 0) val -= a; + + num--; + mask <<= 1; + } + if(part2remain+num <= 0) + { + num -= part2remain+num; + break; + } + + for(i=0;i<4;i++) + { + if(!(i & 1)) + { + if(!mc) + { + mc = *m++; + xrpnt = ((real *) xr) + (*m++); + lwin = *m++; + cb = *m++; + if(lwin == 3) + { +#ifdef REAL_IS_FIXED + gainpow2_scale_idx = (int)(gr_info->pow2gain + (*scf << shift) - fr->gainpow2); +#endif + v = gr_info->pow2gain[(*scf++) << shift]; + step = 1; + } + else + { +#ifdef REAL_IS_FIXED + gainpow2_scale_idx = (int)(gr_info->full_gain[lwin] + (*scf << shift) - fr->gainpow2); +#endif + v = gr_info->full_gain[lwin][(*scf++) << shift]; + step = 3; + } + } + mc--; + } + if( (a & (0x8>>i)) ) + { + max[lwin] = cb; + if(part2remain+num <= 0) + break; + + if(mask < 0) *xrpnt = -REAL_SCALE_LAYER3(v, gainpow2_scale_idx); + else *xrpnt = REAL_SCALE_LAYER3(v, gainpow2_scale_idx); + + num--; + mask <<= 1; + } + else *xrpnt = DOUBLE_TO_REAL(0.0); + + xrpnt += step; + } + } + + if(lwin < 3) + { /* short band? */ + while(1) + { + for(;mc > 0;mc--) + { + *xrpnt = DOUBLE_TO_REAL(0.0); xrpnt += 3; /* short band -> step=3 */ + *xrpnt = DOUBLE_TO_REAL(0.0); xrpnt += 3; + } + if(m >= me) + break; + + mc = *m++; + xrpnt = ((real *) xr) + *m++; + if(*m++ == 0) + break; /* optimize: field will be set to zero at the end of the function */ + + m++; /* cb */ + } + } + + gr_info->maxband[0] = max[0]+1; + gr_info->maxband[1] = max[1]+1; + gr_info->maxband[2] = max[2]+1; + gr_info->maxbandl = max[3]+1; + + { + int rmax = max[0] > max[1] ? max[0] : max[1]; + rmax = (rmax > max[2] ? rmax : max[2]) + 1; + gr_info->maxb = rmax ? fr->shortLimit[sfreq][rmax] : fr->longLimit[sfreq][max[3]+1]; + } + + } + else + { + /* decoding with 'long' BandIndex table (block_type != 2) */ + const int *pretab = gr_info->preflag ? pretab1 : pretab2; + int i,max = -1; + int cb = 0; + int *m = map[sfreq][2]; + register real v = 0.0; + int mc = 0; + + /* long hash table values */ + for(i=0;i<3;i++) + { + int lp = l[i]; + struct newhuff *h = ht+gr_info->table_select[i]; + + for(;lp;lp--,mc--) + { + int x,y; + if(!mc) + { + mc = *m++; + cb = *m++; +#ifdef CUT_SFB21 + if(cb == 21) + v = 0.0; + else +#endif + { +#ifdef REAL_IS_FIXED + gainpow2_scale_idx = (int)(gr_info->pow2gain + (*scf << shift) - fr->gainpow2); +#endif + v = gr_info->pow2gain[(*(scf++) + (*pretab++)) << shift]; + } + } + { + register short *val = h->table; + REFRESH_MASK; + while((y=*val++)<0) + { + if (mask < 0) val -= y; + + num--; + mask <<= 1; + } + x = y >> 4; + y &= 0xf; + } + + if(x == 15 && h->linbits) + { + max = cb; + REFRESH_MASK; + x += ((unsigned long) mask) >> (BITSHIFT+8-h->linbits); + num -= h->linbits+1; + mask <<= h->linbits; + if(mask < 0) *xrpnt++ = REAL_MUL_SCALE_LAYER3(-ispow[x], v, gainpow2_scale_idx); + else *xrpnt++ = REAL_MUL_SCALE_LAYER3( ispow[x], v, gainpow2_scale_idx); + + mask <<= 1; + } + else if(x) + { + max = cb; + if(mask < 0) *xrpnt++ = REAL_MUL_SCALE_LAYER3(-ispow[x], v, gainpow2_scale_idx); + else *xrpnt++ = REAL_MUL_SCALE_LAYER3( ispow[x], v, gainpow2_scale_idx); + num--; + + mask <<= 1; + } + else *xrpnt++ = DOUBLE_TO_REAL(0.0); + + if(y == 15 && h->linbits) + { + max = cb; + REFRESH_MASK; + y += ((unsigned long) mask) >> (BITSHIFT+8-h->linbits); + num -= h->linbits+1; + mask <<= h->linbits; + if(mask < 0) *xrpnt++ = REAL_MUL_SCALE_LAYER3(-ispow[y], v, gainpow2_scale_idx); + else *xrpnt++ = REAL_MUL_SCALE_LAYER3( ispow[y], v, gainpow2_scale_idx); + + mask <<= 1; + } + else if(y) + { + max = cb; + if(mask < 0) *xrpnt++ = REAL_MUL_SCALE_LAYER3(-ispow[y], v, gainpow2_scale_idx); + else *xrpnt++ = REAL_MUL_SCALE_LAYER3( ispow[y], v, gainpow2_scale_idx); + + num--; + mask <<= 1; + } + else *xrpnt++ = DOUBLE_TO_REAL(0.0); + } + } + + /* short (count1table) values */ + for(;l3 && (part2remain+num > 0);l3--) + { + struct newhuff *h = htc+gr_info->count1table_select; + register short *val = h->table,a; + + REFRESH_MASK; + while((a=*val++)<0) + { + if (mask < 0) val -= a; + + num--; + mask <<= 1; + } + if(part2remain+num <= 0) + { + num -= part2remain+num; + break; + } + + for(i=0;i<4;i++) + { + if(!(i & 1)) + { + if(!mc) + { + mc = *m++; + cb = *m++; +#ifdef CUT_SFB21 + if(cb == 21) + v = 0.0; + else +#endif + { +#ifdef REAL_IS_FIXED + gainpow2_scale_idx = (int)(gr_info->pow2gain + (*scf << shift) - fr->gainpow2); +#endif + v = gr_info->pow2gain[((*scf++) + (*pretab++)) << shift]; + } + } + mc--; + } + if( (a & (0x8>>i)) ) + { + max = cb; + if(part2remain+num <= 0) + break; + + if(mask < 0) *xrpnt++ = -REAL_SCALE_LAYER3(v, gainpow2_scale_idx); + else *xrpnt++ = REAL_SCALE_LAYER3(v, gainpow2_scale_idx); + + num--; + mask <<= 1; + } + else *xrpnt++ = DOUBLE_TO_REAL(0.0); + } + } + + gr_info->maxbandl = max+1; + gr_info->maxb = fr->longLimit[sfreq][gr_info->maxbandl]; + } + + part2remain += num; + backbits(fr, num); + num = 0; + + while(xrpnt < &xr[SBLIMIT][0]) + *xrpnt++ = DOUBLE_TO_REAL(0.0); + + while( part2remain > 16 ) + { + skipbits(fr, 16); /* Dismiss stuffing Bits */ + part2remain -= 16; + } + if(part2remain > 0) skipbits(fr, part2remain); + else if(part2remain < 0) + { + debug1("Can't rewind stream by %d bits!",-part2remain); + return 1; /* -> error */ + } + return 0; +} + + +/* calculate real channel values for Joint-I-Stereo-mode */ +static void III_i_stereo(real xr_buf[2][SBLIMIT][SSLIMIT],int *scalefac, struct gr_info_s *gr_info,int sfreq,int ms_stereo,int lsf) +{ + real (*xr)[SBLIMIT*SSLIMIT] = (real (*)[SBLIMIT*SSLIMIT] ) xr_buf; + const struct bandInfoStruct *bi = &bandInfo[sfreq]; + + const real *tab1,*tab2; + +#if 1 + int tab; +/* TODO: optimize as static */ + const real *tabs[3][2][2] = + { + { { tan1_1,tan2_1 } , { tan1_2,tan2_2 } }, + { { pow1_1[0],pow2_1[0] } , { pow1_2[0],pow2_2[0] } }, + { { pow1_1[1],pow2_1[1] } , { pow1_2[1],pow2_2[1] } } + }; + + tab = lsf + (gr_info->scalefac_compress & lsf); + tab1 = tabs[tab][ms_stereo][0]; + tab2 = tabs[tab][ms_stereo][1]; +#else + if(lsf) + { + int p = gr_info->scalefac_compress & 0x1; + if(ms_stereo) + { + tab1 = pow1_2[p]; + tab2 = pow2_2[p]; + } + else + { + tab1 = pow1_1[p]; + tab2 = pow2_1[p]; + } + } + else + { + if(ms_stereo) + { + tab1 = tan1_2; + tab2 = tan2_2; + } + else + { + tab1 = tan1_1; + tab2 = tan2_1; + } + } +#endif + + if(gr_info->block_type == 2) + { + int lwin,do_l = 0; + if( gr_info->mixed_block_flag ) do_l = 1; + + for(lwin=0;lwin<3;lwin++) + { /* process each window */ + /* get first band with zero values */ + int is_p,sb,idx,sfb = gr_info->maxband[lwin]; /* sfb is minimal 3 for mixed mode */ + if(sfb > 3) do_l = 0; + + for(;sfb<12;sfb++) + { + is_p = scalefac[sfb*3+lwin-gr_info->mixed_block_flag]; /* scale: 0-15 */ + if(is_p != 7) + { + real t1,t2; + sb = bi->shortDiff[sfb]; + idx = bi->shortIdx[sfb] + lwin; + t1 = tab1[is_p]; t2 = tab2[is_p]; + for (; sb > 0; sb--,idx+=3) + { + real v = xr[0][idx]; + xr[0][idx] = REAL_MUL_15(v, t1); + xr[1][idx] = REAL_MUL_15(v, t2); + } + } + } + +#if 1 +/* in the original: copy 10 to 11 , here: copy 11 to 12 +maybe still wrong??? (copy 12 to 13?) */ + is_p = scalefac[11*3+lwin-gr_info->mixed_block_flag]; /* scale: 0-15 */ + sb = bi->shortDiff[12]; + idx = bi->shortIdx[12] + lwin; +#else + is_p = scalefac[10*3+lwin-gr_info->mixed_block_flag]; /* scale: 0-15 */ + sb = bi->shortDiff[11]; + idx = bi->shortIdx[11] + lwin; +#endif + if(is_p != 7) + { + real t1,t2; + t1 = tab1[is_p]; t2 = tab2[is_p]; + for( ; sb > 0; sb--,idx+=3 ) + { + real v = xr[0][idx]; + xr[0][idx] = REAL_MUL_15(v, t1); + xr[1][idx] = REAL_MUL_15(v, t2); + } + } + } /* end for(lwin; .. ; . ) */ + + /* also check l-part, if ALL bands in the three windows are 'empty' and mode = mixed_mode */ + if(do_l) + { + int sfb = gr_info->maxbandl; + int idx; + if(sfb > 21) return; /* similarity fix related to CVE-2006-1655 */ + + idx = bi->longIdx[sfb]; + for( ; sfb<8; sfb++ ) + { + int sb = bi->longDiff[sfb]; + int is_p = scalefac[sfb]; /* scale: 0-15 */ + if(is_p != 7) + { + real t1,t2; + t1 = tab1[is_p]; t2 = tab2[is_p]; + for( ; sb > 0; sb--,idx++) + { + real v = xr[0][idx]; + xr[0][idx] = REAL_MUL_15(v, t1); + xr[1][idx] = REAL_MUL_15(v, t2); + } + } + else idx += sb; + } + } + } + else + { /* ((gr_info->block_type != 2)) */ + int sfb = gr_info->maxbandl; + int is_p,idx; + if(sfb > 21) return; /* tightened fix for CVE-2006-1655 */ + + idx = bi->longIdx[sfb]; + for ( ; sfb<21; sfb++) + { + int sb = bi->longDiff[sfb]; + is_p = scalefac[sfb]; /* scale: 0-15 */ + if(is_p != 7) + { + real t1,t2; + t1 = tab1[is_p]; t2 = tab2[is_p]; + for( ; sb > 0; sb--,idx++) + { + real v = xr[0][idx]; + xr[0][idx] = REAL_MUL_15(v, t1); + xr[1][idx] = REAL_MUL_15(v, t2); + } + } + else idx += sb; + } + + is_p = scalefac[20]; + if(is_p != 7) + { /* copy l-band 20 to l-band 21 */ + int sb; + real t1 = tab1[is_p],t2 = tab2[is_p]; + + for( sb = bi->longDiff[21]; sb > 0; sb--,idx++ ) + { + real v = xr[0][idx]; + xr[0][idx] = REAL_MUL_15(v, t1); + xr[1][idx] = REAL_MUL_15(v, t2); + } + } + } +} + + +static void III_antialias(real xr[SBLIMIT][SSLIMIT],struct gr_info_s *gr_info) +{ + int sblim; + + if(gr_info->block_type == 2) + { + if(!gr_info->mixed_block_flag) return; + + sblim = 1; + } + else sblim = gr_info->maxb-1; + + /* 31 alias-reduction operations between each pair of sub-bands */ + /* with 8 butterflies between each pair */ + + { + int sb; + real *xr1=(real *) xr[1]; + + for(sb=sblim; sb; sb--,xr1+=10) + { + int ss; + real *cs=aa_cs,*ca=aa_ca; + real *xr2 = xr1; + + for(ss=7;ss>=0;ss--) + { /* upper and lower butterfly inputs */ + register real bu = *--xr2,bd = *xr1; + *xr2 = REAL_MUL(bu, *cs) - REAL_MUL(bd, *ca); + *xr1++ = REAL_MUL(bd, *cs++) + REAL_MUL(bu, *ca++); + } + } + } +} + +/* + This is an optimized DCT from Jeff Tsay's maplay 1.2+ package. + Saved one multiplication by doing the 'twiddle factor' stuff + together with the window mul. (MH) + + This uses Byeong Gi Lee's Fast Cosine Transform algorithm, but the + 9 point IDCT needs to be reduced further. Unfortunately, I don't + know how to do that, because 9 is not an even number. - Jeff. + + Original Message: + + 9 Point Inverse Discrete Cosine Transform + + This piece of code is Copyright 1997 Mikko Tommila and is freely usable + by anybody. The algorithm itself is of course in the public domain. + + Again derived heuristically from the 9-point WFTA. + + The algorithm is optimized (?) for speed, not for small rounding errors or + good readability. + + 36 additions, 11 multiplications + + Again this is very likely sub-optimal. + + The code is optimized to use a minimum number of temporary variables, + so it should compile quite well even on 8-register Intel x86 processors. + This makes the code quite obfuscated and very difficult to understand. + + References: + [1] S. Winograd: "On Computing the Discrete Fourier Transform", + Mathematics of Computation, Volume 32, Number 141, January 1978, + Pages 175-199 +*/ + +/* Calculation of the inverse MDCT + used to be static without 3dnow - does that really matter? */ +void dct36(real *inbuf,real *o1,real *o2,real *wintab,real *tsbuf) +{ +#ifdef NEW_DCT9 + real tmp[18]; +#endif + + { + register real *in = inbuf; + + in[17]+=in[16]; in[16]+=in[15]; in[15]+=in[14]; + in[14]+=in[13]; in[13]+=in[12]; in[12]+=in[11]; + in[11]+=in[10]; in[10]+=in[9]; in[9] +=in[8]; + in[8] +=in[7]; in[7] +=in[6]; in[6] +=in[5]; + in[5] +=in[4]; in[4] +=in[3]; in[3] +=in[2]; + in[2] +=in[1]; in[1] +=in[0]; + + in[17]+=in[15]; in[15]+=in[13]; in[13]+=in[11]; in[11]+=in[9]; + in[9] +=in[7]; in[7] +=in[5]; in[5] +=in[3]; in[3] +=in[1]; + + +#ifdef NEW_DCT9 +#if 1 + { + real t3; + { + real t0, t1, t2; + + t0 = REAL_MUL(COS6_2, (in[8] + in[16] - in[4])); + t1 = REAL_MUL(COS6_2, in[12]); + + t3 = in[0]; + t2 = t3 - t1 - t1; + tmp[1] = tmp[7] = t2 - t0; + tmp[4] = t2 + t0 + t0; + t3 += t1; + + t2 = REAL_MUL(COS6_1, (in[10] + in[14] - in[2])); + tmp[1] -= t2; + tmp[7] += t2; + } + { + real t0, t1, t2; + + t0 = REAL_MUL(cos9[0], (in[4] + in[8] )); + t1 = REAL_MUL(cos9[1], (in[8] - in[16])); + t2 = REAL_MUL(cos9[2], (in[4] + in[16])); + + tmp[2] = tmp[6] = t3 - t0 - t2; + tmp[0] = tmp[8] = t3 + t0 + t1; + tmp[3] = tmp[5] = t3 - t1 + t2; + } + } + { + real t1, t2, t3; + + t1 = REAL_MUL(cos18[0], (in[2] + in[10])); + t2 = REAL_MUL(cos18[1], (in[10] - in[14])); + t3 = REAL_MUL(COS6_1, in[6]); + + { + real t0 = t1 + t2 + t3; + tmp[0] += t0; + tmp[8] -= t0; + } + + t2 -= t3; + t1 -= t3; + + t3 = REAL_MUL(cos18[2], (in[2] + in[14])); + + t1 += t3; + tmp[3] += t1; + tmp[5] -= t1; + + t2 -= t3; + tmp[2] += t2; + tmp[6] -= t2; + } + +#else + { + real t0, t1, t2, t3, t4, t5, t6, t7; + + t1 = REAL_MUL(COS6_2, in[12]); + t2 = REAL_MUL(COS6_2, (in[8] + in[16] - in[4])); + + t3 = in[0] + t1; + t4 = in[0] - t1 - t1; + t5 = t4 - t2; + tmp[4] = t4 + t2 + t2; + + t0 = REAL_MUL(cos9[0], (in[4] + in[8])); + t1 = REAL_MUL(cos9[1], (in[8] - in[16])); + + t2 = REAL_MUL(cos9[2], (in[4] + in[16])); + + t6 = t3 - t0 - t2; + t0 += t3 + t1; + t3 += t2 - t1; + + t2 = REAL_MUL(cos18[0], (in[2] + in[10])); + t4 = REAL_MUL(cos18[1], (in[10] - in[14])); + t7 = REAL_MUL(COS6_1, in[6]); + + t1 = t2 + t4 + t7; + tmp[0] = t0 + t1; + tmp[8] = t0 - t1; + t1 = REAL_MUL(cos18[2], (in[2] + in[14])); + t2 += t1 - t7; + + tmp[3] = t3 + t2; + t0 = REAL_MUL(COS6_1, (in[10] + in[14] - in[2])); + tmp[5] = t3 - t2; + + t4 -= t1 + t7; + + tmp[1] = t5 - t0; + tmp[7] = t5 + t0; + tmp[2] = t6 + t4; + tmp[6] = t6 - t4; + } +#endif + + { + real t0, t1, t2, t3, t4, t5, t6, t7; + + t1 = REAL_MUL(COS6_2, in[13]); + t2 = REAL_MUL(COS6_2, (in[9] + in[17] - in[5])); + + t3 = in[1] + t1; + t4 = in[1] - t1 - t1; + t5 = t4 - t2; + + t0 = REAL_MUL(cos9[0], (in[5] + in[9])); + t1 = REAL_MUL(cos9[1], (in[9] - in[17])); + + tmp[13] = REAL_MUL((t4 + t2 + t2), tfcos36[17-13]); + t2 = REAL_MUL(cos9[2], (in[5] + in[17])); + + t6 = t3 - t0 - t2; + t0 += t3 + t1; + t3 += t2 - t1; + + t2 = REAL_MUL(cos18[0], (in[3] + in[11])); + t4 = REAL_MUL(cos18[1], (in[11] - in[15])); + t7 = REAL_MUL(COS6_1, in[7]); + + t1 = t2 + t4 + t7; + tmp[17] = REAL_MUL((t0 + t1), tfcos36[17-17]); + tmp[9] = REAL_MUL((t0 - t1), tfcos36[17-9]); + t1 = REAL_MUL(cos18[2], (in[3] + in[15])); + t2 += t1 - t7; + + tmp[14] = REAL_MUL((t3 + t2), tfcos36[17-14]); + t0 = REAL_MUL(COS6_1, (in[11] + in[15] - in[3])); + tmp[12] = REAL_MUL((t3 - t2), tfcos36[17-12]); + + t4 -= t1 + t7; + + tmp[16] = REAL_MUL((t5 - t0), tfcos36[17-16]); + tmp[10] = REAL_MUL((t5 + t0), tfcos36[17-10]); + tmp[15] = REAL_MUL((t6 + t4), tfcos36[17-15]); + tmp[11] = REAL_MUL((t6 - t4), tfcos36[17-11]); + } + +#define MACRO(v) { \ + real tmpval; \ + tmpval = tmp[(v)] + tmp[17-(v)]; \ + out2[9+(v)] = REAL_MUL(tmpval, w[27+(v)]); \ + out2[8-(v)] = REAL_MUL(tmpval, w[26-(v)]); \ + tmpval = tmp[(v)] - tmp[17-(v)]; \ + ts[SBLIMIT*(8-(v))] = out1[8-(v)] + REAL_MUL(tmpval, w[8-(v)]); \ + ts[SBLIMIT*(9+(v))] = out1[9+(v)] + REAL_MUL(tmpval, w[9+(v)]); } + + { + register real *out2 = o2; + register real *w = wintab; + register real *out1 = o1; + register real *ts = tsbuf; + + MACRO(0); + MACRO(1); + MACRO(2); + MACRO(3); + MACRO(4); + MACRO(5); + MACRO(6); + MACRO(7); + MACRO(8); + } + +#else + + { + +#define MACRO0(v) { \ + real tmp; \ + out2[9+(v)] = REAL_MUL((tmp = sum0 + sum1), w[27+(v)]); \ + out2[8-(v)] = REAL_MUL(tmp, w[26-(v)]); } \ + sum0 -= sum1; \ + ts[SBLIMIT*(8-(v))] = out1[8-(v)] + REAL_MUL(sum0, w[8-(v)]); \ + ts[SBLIMIT*(9+(v))] = out1[9+(v)] + REAL_MUL(sum0, w[9+(v)]); +#define MACRO1(v) { \ + real sum0,sum1; \ + sum0 = tmp1a + tmp2a; \ + sum1 = REAL_MUL((tmp1b + tmp2b), tfcos36[(v)]); \ + MACRO0(v); } +#define MACRO2(v) { \ + real sum0,sum1; \ + sum0 = tmp2a - tmp1a; \ + sum1 = REAL_MUL((tmp2b - tmp1b), tfcos36[(v)]); \ + MACRO0(v); } + + register const real *c = COS9; + register real *out2 = o2; + register real *w = wintab; + register real *out1 = o1; + register real *ts = tsbuf; + + real ta33,ta66,tb33,tb66; + + ta33 = REAL_MUL(in[2*3+0], c[3]); + ta66 = REAL_MUL(in[2*6+0], c[6]); + tb33 = REAL_MUL(in[2*3+1], c[3]); + tb66 = REAL_MUL(in[2*6+1], c[6]); + + { + real tmp1a,tmp2a,tmp1b,tmp2b; + tmp1a = REAL_MUL(in[2*1+0], c[1]) + ta33 + REAL_MUL(in[2*5+0], c[5]) + REAL_MUL(in[2*7+0], c[7]); + tmp1b = REAL_MUL(in[2*1+1], c[1]) + tb33 + REAL_MUL(in[2*5+1], c[5]) + REAL_MUL(in[2*7+1], c[7]); + tmp2a = REAL_MUL(in[2*2+0], c[2]) + REAL_MUL(in[2*4+0], c[4]) + ta66 + REAL_MUL(in[2*8+0], c[8]); + tmp2b = REAL_MUL(in[2*2+1], c[2]) + REAL_MUL(in[2*4+1], c[4]) + tb66 + REAL_MUL(in[2*8+1], c[8]); + + MACRO1(0); + MACRO2(8); + } + + { + real tmp1a,tmp2a,tmp1b,tmp2b; + tmp1a = REAL_MUL(( in[2*1+0] - in[2*5+0] - in[2*7+0] ), c[3]); + tmp1b = REAL_MUL(( in[2*1+1] - in[2*5+1] - in[2*7+1] ), c[3]); + tmp2a = REAL_MUL(( in[2*2+0] - in[2*4+0] - in[2*8+0] ), c[6]) - in[2*6+0] + in[2*0+0]; + tmp2b = REAL_MUL(( in[2*2+1] - in[2*4+1] - in[2*8+1] ), c[6]) - in[2*6+1] + in[2*0+1]; + + MACRO1(1); + MACRO2(7); + } + + { + real tmp1a,tmp2a,tmp1b,tmp2b; + tmp1a = REAL_MUL(in[2*1+0], c[5]) - ta33 - REAL_MUL(in[2*5+0], c[7]) + REAL_MUL(in[2*7+0], c[1]); + tmp1b = REAL_MUL(in[2*1+1], c[5]) - tb33 - REAL_MUL(in[2*5+1], c[7]) + REAL_MUL(in[2*7+1], c[1]); + tmp2a = - REAL_MUL(in[2*2+0], c[8]) - REAL_MUL(in[2*4+0], c[2]) + ta66 + REAL_MUL(in[2*8+0], c[4]); + tmp2b = - REAL_MUL(in[2*2+1], c[8]) - REAL_MUL(in[2*4+1], c[2]) + tb66 + REAL_MUL(in[2*8+1], c[4]); + + MACRO1(2); + MACRO2(6); + } + + { + real tmp1a,tmp2a,tmp1b,tmp2b; + tmp1a = REAL_MUL(in[2*1+0], c[7]) - ta33 + REAL_MUL(in[2*5+0], c[1]) - REAL_MUL(in[2*7+0], c[5]); + tmp1b = REAL_MUL(in[2*1+1], c[7]) - tb33 + REAL_MUL(in[2*5+1], c[1]) - REAL_MUL(in[2*7+1], c[5]); + tmp2a = - REAL_MUL(in[2*2+0], c[4]) + REAL_MUL(in[2*4+0], c[8]) + ta66 - REAL_MUL(in[2*8+0], c[2]); + tmp2b = - REAL_MUL(in[2*2+1], c[4]) + REAL_MUL(in[2*4+1], c[8]) + tb66 - REAL_MUL(in[2*8+1], c[2]); + + MACRO1(3); + MACRO2(5); + } + + { + real sum0,sum1; + sum0 = in[2*0+0] - in[2*2+0] + in[2*4+0] - in[2*6+0] + in[2*8+0]; + sum1 = REAL_MUL((in[2*0+1] - in[2*2+1] + in[2*4+1] - in[2*6+1] + in[2*8+1] ), tfcos36[4]); + MACRO0(4); + } + } +#endif + + } +} + + +/* new DCT12 */ +static void dct12(real *in,real *rawout1,real *rawout2,register real *wi,register real *ts) +{ +#define DCT12_PART1 \ + in5 = in[5*3]; \ + in5 += (in4 = in[4*3]); \ + in4 += (in3 = in[3*3]); \ + in3 += (in2 = in[2*3]); \ + in2 += (in1 = in[1*3]); \ + in1 += (in0 = in[0*3]); \ + \ + in5 += in3; in3 += in1; \ + \ + in2 = REAL_MUL(in2, COS6_1); \ + in3 = REAL_MUL(in3, COS6_1); + +#define DCT12_PART2 \ + in0 += REAL_MUL(in4, COS6_2); \ + \ + in4 = in0 + in2; \ + in0 -= in2; \ + \ + in1 += REAL_MUL(in5, COS6_2); \ + \ + in5 = REAL_MUL((in1 + in3), tfcos12[0]); \ + in1 = REAL_MUL((in1 - in3), tfcos12[2]); \ + \ + in3 = in4 + in5; \ + in4 -= in5; \ + \ + in2 = in0 + in1; \ + in0 -= in1; + + { + real in0,in1,in2,in3,in4,in5; + register real *out1 = rawout1; + ts[SBLIMIT*0] = out1[0]; ts[SBLIMIT*1] = out1[1]; ts[SBLIMIT*2] = out1[2]; + ts[SBLIMIT*3] = out1[3]; ts[SBLIMIT*4] = out1[4]; ts[SBLIMIT*5] = out1[5]; + + DCT12_PART1 + + { + real tmp0,tmp1 = (in0 - in4); + { + real tmp2 = REAL_MUL((in1 - in5), tfcos12[1]); + tmp0 = tmp1 + tmp2; + tmp1 -= tmp2; + } + ts[(17-1)*SBLIMIT] = out1[17-1] + REAL_MUL(tmp0, wi[11-1]); + ts[(12+1)*SBLIMIT] = out1[12+1] + REAL_MUL(tmp0, wi[6+1]); + ts[(6 +1)*SBLIMIT] = out1[6 +1] + REAL_MUL(tmp1, wi[1]); + ts[(11-1)*SBLIMIT] = out1[11-1] + REAL_MUL(tmp1, wi[5-1]); + } + + DCT12_PART2 + + ts[(17-0)*SBLIMIT] = out1[17-0] + REAL_MUL(in2, wi[11-0]); + ts[(12+0)*SBLIMIT] = out1[12+0] + REAL_MUL(in2, wi[6+0]); + ts[(12+2)*SBLIMIT] = out1[12+2] + REAL_MUL(in3, wi[6+2]); + ts[(17-2)*SBLIMIT] = out1[17-2] + REAL_MUL(in3, wi[11-2]); + + ts[(6 +0)*SBLIMIT] = out1[6+0] + REAL_MUL(in0, wi[0]); + ts[(11-0)*SBLIMIT] = out1[11-0] + REAL_MUL(in0, wi[5-0]); + ts[(6 +2)*SBLIMIT] = out1[6+2] + REAL_MUL(in4, wi[2]); + ts[(11-2)*SBLIMIT] = out1[11-2] + REAL_MUL(in4, wi[5-2]); + } + + in++; + + { + real in0,in1,in2,in3,in4,in5; + register real *out2 = rawout2; + + DCT12_PART1 + + { + real tmp0,tmp1 = (in0 - in4); + { + real tmp2 = REAL_MUL((in1 - in5), tfcos12[1]); + tmp0 = tmp1 + tmp2; + tmp1 -= tmp2; + } + out2[5-1] = REAL_MUL(tmp0, wi[11-1]); + out2[0+1] = REAL_MUL(tmp0, wi[6+1]); + ts[(12+1)*SBLIMIT] += REAL_MUL(tmp1, wi[1]); + ts[(17-1)*SBLIMIT] += REAL_MUL(tmp1, wi[5-1]); + } + + DCT12_PART2 + + out2[5-0] = REAL_MUL(in2, wi[11-0]); + out2[0+0] = REAL_MUL(in2, wi[6+0]); + out2[0+2] = REAL_MUL(in3, wi[6+2]); + out2[5-2] = REAL_MUL(in3, wi[11-2]); + + ts[(12+0)*SBLIMIT] += REAL_MUL(in0, wi[0]); + ts[(17-0)*SBLIMIT] += REAL_MUL(in0, wi[5-0]); + ts[(12+2)*SBLIMIT] += REAL_MUL(in4, wi[2]); + ts[(17-2)*SBLIMIT] += REAL_MUL(in4, wi[5-2]); + } + + in++; + + { + real in0,in1,in2,in3,in4,in5; + register real *out2 = rawout2; + out2[12]=out2[13]=out2[14]=out2[15]=out2[16]=out2[17]=0.0; + + DCT12_PART1 + + { + real tmp0,tmp1 = (in0 - in4); + { + real tmp2 = REAL_MUL((in1 - in5), tfcos12[1]); + tmp0 = tmp1 + tmp2; + tmp1 -= tmp2; + } + out2[11-1] = REAL_MUL(tmp0, wi[11-1]); + out2[6 +1] = REAL_MUL(tmp0, wi[6+1]); + out2[0+1] += REAL_MUL(tmp1, wi[1]); + out2[5-1] += REAL_MUL(tmp1, wi[5-1]); + } + + DCT12_PART2 + + out2[11-0] = REAL_MUL(in2, wi[11-0]); + out2[6 +0] = REAL_MUL(in2, wi[6+0]); + out2[6 +2] = REAL_MUL(in3, wi[6+2]); + out2[11-2] = REAL_MUL(in3, wi[11-2]); + + out2[0+0] += REAL_MUL(in0, wi[0]); + out2[5-0] += REAL_MUL(in0, wi[5-0]); + out2[0+2] += REAL_MUL(in4, wi[2]); + out2[5-2] += REAL_MUL(in4, wi[5-2]); + } +} + + +static void III_hybrid(real fsIn[SBLIMIT][SSLIMIT], real tsOut[SSLIMIT][SBLIMIT], int ch,struct gr_info_s *gr_info, mpg123_handle *fr) +{ + real (*block)[2][SBLIMIT*SSLIMIT] = fr->hybrid_block; + int *blc = fr->hybrid_blc; + + real *tspnt = (real *) tsOut; + real *rawout1,*rawout2; + int bt = 0; + size_t sb = 0; + + { + int b = blc[ch]; + rawout1=block[b][ch]; + b=-b+1; + rawout2=block[b][ch]; + blc[ch] = b; + } + + if(gr_info->mixed_block_flag) + { + sb = 2; + opt_dct36(fr)(fsIn[0],rawout1,rawout2,win[0],tspnt); + opt_dct36(fr)(fsIn[1],rawout1+18,rawout2+18,win1[0],tspnt+1); + rawout1 += 36; rawout2 += 36; tspnt += 2; + } + + bt = gr_info->block_type; + if(bt == 2) + { + for(; sbmaxb; sb+=2,tspnt+=2,rawout1+=36,rawout2+=36) + { + dct12(fsIn[sb] ,rawout1 ,rawout2 ,win[2] ,tspnt); + dct12(fsIn[sb+1],rawout1+18,rawout2+18,win1[2],tspnt+1); + } + } + else + { + for(; sbmaxb; sb+=2,tspnt+=2,rawout1+=36,rawout2+=36) + { + opt_dct36(fr)(fsIn[sb],rawout1,rawout2,win[bt],tspnt); + opt_dct36(fr)(fsIn[sb+1],rawout1+18,rawout2+18,win1[bt],tspnt+1); + } + } + + for(;sbstereo; + int single = fr->single; + int ms_stereo,i_stereo; + int sfreq = fr->sampling_frequency; + int stereo1,granules; + + if(stereo == 1) + { /* stream is mono */ + stereo1 = 1; + single = SINGLE_LEFT; + } + else if(single != SINGLE_STEREO) /* stream is stereo, but force to mono */ + stereo1 = 1; + else + stereo1 = 2; + + if(fr->mode == MPG_MD_JOINT_STEREO) + { + ms_stereo = (fr->mode_ext & 0x2)>>1; + i_stereo = fr->mode_ext & 0x1; + } + else ms_stereo = i_stereo = 0; + + granules = fr->lsf ? 1 : 2; + + /* quick hack to keep the music playing */ + /* after having seen this nasty test file... */ + if(III_get_side_info(fr, &sideinfo,stereo,ms_stereo,sfreq,single)) + { + if(NOQUIET) error("bad frame - unable to get valid sideinfo"); + return clip; + } + + set_pointer(fr,sideinfo.main_data_begin); + + for(gr=0;grlayer3.hybrid_in; + /* hybridOut[2][SSLIMIT][SBLIMIT] */ + real (*hybridOut)[SSLIMIT][SBLIMIT] = fr->layer3.hybrid_out; + + { + struct gr_info_s *gr_info = &(sideinfo.ch[0].gr[gr]); + long part2bits; + if(fr->lsf) + part2bits = III_get_scale_factors_2(fr, scalefacs[0],gr_info,0); + else + part2bits = III_get_scale_factors_1(fr, scalefacs[0],gr_info,0,gr); + + if(III_dequantize_sample(fr, hybridIn[0], scalefacs[0],gr_info,sfreq,part2bits)) + { + if(VERBOSE2) error("dequantization failed!"); + return clip; + } + } + + if(stereo == 2) + { + struct gr_info_s *gr_info = &(sideinfo.ch[1].gr[gr]); + long part2bits; + if(fr->lsf) + part2bits = III_get_scale_factors_2(fr, scalefacs[1],gr_info,i_stereo); + else + part2bits = III_get_scale_factors_1(fr, scalefacs[1],gr_info,1,gr); + + if(III_dequantize_sample(fr, hybridIn[1],scalefacs[1],gr_info,sfreq,part2bits)) + { + if(VERBOSE2) error("dequantization failed!"); + return clip; + } + + if(ms_stereo) + { + int i; + unsigned int maxb = sideinfo.ch[0].gr[gr].maxb; + if(sideinfo.ch[1].gr[gr].maxb > maxb) maxb = sideinfo.ch[1].gr[gr].maxb; + + for(i=0;ilsf); + + if(ms_stereo || i_stereo || (single == SINGLE_MIX) ) + { + if(gr_info->maxb > sideinfo.ch[0].gr[gr].maxb) + sideinfo.ch[0].gr[gr].maxb = gr_info->maxb; + else + gr_info->maxb = sideinfo.ch[0].gr[gr].maxb; + } + + switch(single) + { + case SINGLE_MIX: + { + register int i; + register real *in0 = (real *) hybridIn[0],*in1 = (real *) hybridIn[1]; + for(i=0;imaxb;i++,in0++) + *in0 = (*in0 + *in1++); /* *0.5 done by pow-scale */ + } + break; + case SINGLE_RIGHT: + { + register int i; + register real *in0 = (real *) hybridIn[0],*in1 = (real *) hybridIn[1]; + for(i=0;imaxb;i++) + *in0++ = *in1++; + } + break; + } + } + + for(ch=0;chaf.encoding != MPG123_ENC_SIGNED_16 || fr->down_sample != 0) + { +#endif + for(ss=0;sssynth_mono)(hybridOut[0][ss], fr); + else + clip += (fr->synth_stereo)(hybridOut[0][ss], hybridOut[1][ss], fr); + + } +#ifdef OPT_I486 + } else + { + /* Only stereo, 16 bits benefit from the 486 optimization. */ + ss=0; + while(ss < SSLIMIT) + { + int n; + n=(fr->buffer.size - fr->buffer.fill) / (2*2*32); + if(n > (SSLIMIT-ss)) n=SSLIMIT-ss; + + /* Clip counting makes no sense with this function. */ + absynth_1to1_i486(hybridOut[0][ss], 0, fr, n); + absynth_1to1_i486(hybridOut[1][ss], 1, fr, n); + ss+=n; + fr->buffer.fill+=(2*2*32)*n; + } + } +#endif + } + + return clip; +} diff --git a/lib/3rdparty/libmpg123/lfs_alias.c b/lib/3rdparty/libmpg123/lfs_alias.c new file mode 100644 index 00000000000..876699bbf1b --- /dev/null +++ b/lib/3rdparty/libmpg123/lfs_alias.c @@ -0,0 +1,244 @@ +/* + lfs_alias: Aliases to the small/native API functions with the size of long int as suffix. + + copyright 2010 by the mpg123 project - free software under the terms of the LGPL 2.1 + see COPYING and AUTHORS files in distribution or http://mpg123.org + initially written by Thomas Orgis + + Use case: Client code on Linux/x86-64 that defines _FILE_OFFSET_BITS to 64, which is the only choice on that platform anyway. It should be no-op, but prompts the platform-agnostic header of mpg123 to define API calls with the corresponding suffix. + This file provides the names for this case. It's cruft, but glibc does it, too -- so people rely on it. + Oh, and it also caters for the lunatics that define _FILE_OFFSET_BITS=32 on 32 bit platforms. + + There is also the strange case that the mpg123 build itself is configured for unnecessary _FILE_OFFSET_BITS == LFS_ALIAS_BITS =^ sizeof(long). In that case, the "native" function will have the suffix and the alias shall be provided without the suffix. + + So, two basic cases: + 1. mpg123_bla_32 alias for mpg123_bla + 2. mpg123_bla alias for mpg123_bla_32 + Confusing, I know. It sucks. +*/ + +#include "config.h" + +/* Hack for Solaris: Some system headers included from compat.h might force _FILE_OFFSET_BITS. Need to follow that here. */ +#include "compat.h" + +#ifndef LFS_ALIAS_BITS +#error "I need the count of alias bits here." +#endif + +#define MACROCAT_REALLY(a, b) a ## b +#define MACROCAT(a, b) MACROCAT_REALLY(a, b) + +/* This is wicked switchery: Decide which way the aliases are facing. */ + +#if _FILE_OFFSET_BITS+0 == LFS_ALIAS_BITS + +/* The native functions are actually _with_ suffix, so let the mpg123 header use large file hackery to define the correct interfaces. */ +#include "mpg123.h" +/* Don't forget to undef the function symbols before usage... */ + +/* The native functions have suffix, the aliases not. */ +#define NATIVE_SUFFIX MACROCAT(_, _FILE_OFFSET_BITS) +#define NATIVE_NAME(func) MACROCAT(func, NATIVE_SUFFIX) +#define ALIAS_NAME(func) func + +#else + +/* Native functions are without suffix... */ +#define MPG123_NO_LARGENAME +#include "mpg123.h" + +/* The alias functions have suffix, the native ones not. */ +#define ALIAS_SUFFIX MACROCAT(_, LFS_ALIAS_BITS) +#define ALIAS_NAME(func) MACROCAT(func, ALIAS_SUFFIX) +#define NATIVE_NAME(func) func + +#endif + +/* Now get the rest of the infrastructure on speed, namely attribute_align_arg, to stay safe. */ +#include "mpg123lib_intern.h" + +/* + Extract the list of functions we need wrappers for, pregenerating the wrappers for simple cases (inline script for nedit): +perl -ne ' +if(/^\s*EXPORT\s+(\S+)\s+(mpg123_\S+)\((.*)\);\s*$/) +{ + my $type = $1; + my $name = $2; + my $args = $3; + next unless ($type =~ /off_t/ or $args =~ /off_t/ or ($name =~ /open/ and $name ne mpg123_open_feed)); + $type =~ s/off_t/long/g; + my @nargs = (); + $args =~ s/off_t/long/g; + foreach my $a (split(/,/, $args)) + { + $a =~ s/^.*\s\**([a-z_]+)$/$1/; + push(@nargs, $a); + } + my $nargs = join(", ", @nargs); + $nargs = "Human: figure me out." if($nargs =~ /\(/); + print < +#include +#include +#include "compat.h" +#include "debug.h" + +#include "aligncheck.h" + +#include "mpg123.h" + +/* + Now, start off easy... translate simple API calls. + I need to deal with these here: +perl -ne ' +if(/^\s*EXPORT\s+(\S+)\s+(mpg123_\S+)\((.*)\);\s*$/) +{ + $type = $1; + $name = $2; + $args = $3; + next unless ($type =~ /off_t/ or $args =~ /off_t/); + print "$name\n" unless grep {$_ eq $name} + ("mpg123_open", "mpg123_open_fd", "mpg123_open_handle", "mpg123_replace_reader", "mpg123_replace_reader_handle"); +}' < mpg123.h.in + +mpg123_decode_frame +mpg123_framebyframe_decode +mpg123_tell +mpg123_tellframe +mpg123_tell_stream +mpg123_seek +mpg123_feedseek +mpg123_seek_frame +mpg123_timeframe +mpg123_index +mpg123_set_index +mpg123_position +mpg123_length +mpg123_set_filesize + +Let's work on them in that order. +*/ + +/* I see that I will need custom data storage. Main use is for the replaced I/O later, but the seek table for small file offsets needs extra storage, too. */ + +/* The wrapper handle for descriptor and handle I/O. */ + +/* The handle is used for nothing (0), or one of these two modes of operation: */ +#define IO_FD 1 /* Wrapping over callbacks operation on integer file descriptor. */ +#define IO_HANDLE 2 /* Wrapping over custom handle callbacks. */ + +struct wrap_data +{ + /* Storage for small offset index table. */ + long *indextable; + /* I/O handle stuff */ + int iotype; /* IO_FD or IO_HANDLE */ + /* Data for IO_FD. */ + int fd; + int my_fd; /* A descriptor that the wrapper code opened itself. */ + /* The actual callbacks from the outside. */ + long (*r_read) (int, void *, size_t); + long (*r_lseek)(int, long, int); + /* Data for IO_HANDLE. */ + void* handle; + long (*r_h_read)(void *, void *, size_t); + long (*r_h_lseek)(void*, long, int); + void (*h_cleanup)(void*); +}; + + +/* Cleanup I/O part of the handle handle... but not deleting the wrapper handle itself. + That is stored in the frame and only deleted on mpg123_delete(). */ +static void wrap_io_cleanup(void *handle) +{ + struct wrap_data *ioh = handle; + if(ioh->iotype == IO_HANDLE) + { + if(ioh->h_cleanup != NULL && ioh->handle != NULL) + ioh->h_cleanup(ioh->handle); + + ioh->handle = NULL; + } + if(ioh->my_fd >= 0) + { + close(ioh->my_fd); + ioh->my_fd = -1; + } +} + +/* Really finish off the handle... freeing all memory. */ +static void wrap_destroy(void *handle) +{ + struct wrap_data *wh = handle; + wrap_io_cleanup(handle); + if(wh->indextable != NULL) + free(wh->indextable); + + free(wh); +} + +/* More helper code... extract the special wrapper handle, possible allocate and initialize it. */ +static struct wrap_data* wrap_get(mpg123_handle *mh) +{ + struct wrap_data* whd; + if(mh == NULL) return NULL; + + /* Access the private storage inside the mpg123 handle. + The real callback functions and handles are stored there. */ + if(mh->wrapperdata == NULL) + { + /* Create a new one. */ + mh->wrapperdata = malloc(sizeof(struct wrap_data)); + if(mh->wrapperdata == NULL) + { + mh->err = MPG123_OUT_OF_MEM; + return NULL; + } + /* When we have wrapper data present, the callback for its proper cleanup is needed. */ + mh->wrapperclean = wrap_destroy; + + whd = mh->wrapperdata; + whd->indextable = NULL; + whd->iotype = 0; + whd->fd = -1; + whd->my_fd = -1; + whd->r_read = NULL; + whd->r_lseek = NULL; + whd->handle = NULL; + whd->r_h_read = NULL; + whd->r_h_lseek = NULL; + whd->h_cleanup = NULL; + } + else whd = mh->wrapperdata; + + return whd; +} + +/* After settling the data... start with some simple wrappers. */ + +#undef mpg123_decode_frame +/* int mpg123_decode_frame(mpg123_handle *mh, off_t *num, unsigned char **audio, size_t *bytes) */ +int attribute_align_arg mpg123_decode_frame(mpg123_handle *mh, long *num, unsigned char **audio, size_t *bytes) +{ + off_t largenum; + int err; + ALIGNCHECK(mh); + err = MPG123_LARGENAME(mpg123_decode_frame)(mh, &largenum, audio, bytes); + if(err == MPG123_OK && num != NULL) + { + *num = largenum; + if(*num != largenum) + { + mh->err = MPG123_LFS_OVERFLOW; + err = MPG123_ERR; + } + } + return err; +} + +#undef mpg123_framebyframe_decode +/* int mpg123_framebyframe_decode(mpg123_handle *mh, off_t *num, unsigned char **audio, size_t *bytes); */ +int attribute_align_arg mpg123_framebyframe_decode(mpg123_handle *mh, long *num, unsigned char **audio, size_t *bytes) +{ + off_t largenum; + int err; + ALIGNCHECK(mh); + err = MPG123_LARGENAME(mpg123_framebyframe_decode)(mh, &largenum, audio, bytes); + if(err == MPG123_OK && num != NULL) + { + *num = largenum; + if(*num != largenum) + { + mh->err = MPG123_LFS_OVERFLOW; + err = MPG123_ERR; + } + } + return err; +} + +#undef mpg123_tell +/* off_t mpg123_tell(mpg123_handle *mh); */ +long attribute_align_arg mpg123_tell(mpg123_handle *mh) +{ + long val; + off_t largeval; + ALIGNCHECK(mh); + largeval = MPG123_LARGENAME(mpg123_tell)(mh); + val = largeval; + if(val != largeval) + { + mh->err = MPG123_LFS_OVERFLOW; + return MPG123_ERR; + } + return val; +} + +#undef mpg123_tellframe +/* off_t mpg123_tellframe(mpg123_handle *mh); */ +long attribute_align_arg mpg123_tellframe(mpg123_handle *mh) +{ + long val; + off_t largeval; + ALIGNCHECK(mh); + largeval = MPG123_LARGENAME(mpg123_tellframe)(mh); + val = largeval; + if(val != largeval) + { + mh->err = MPG123_LFS_OVERFLOW; + return MPG123_ERR; + } + return val; +} + +#undef mpg123_tell_stream +/* off_t mpg123_tell_stream(mpg123_handle *mh); */ +long attribute_align_arg mpg123_tell_stream(mpg123_handle *mh) +{ + long val; + off_t largeval; + ALIGNCHECK(mh); + largeval = MPG123_LARGENAME(mpg123_tell_stream)(mh); + val = largeval; + if(val != largeval) + { + mh->err = MPG123_LFS_OVERFLOW; + return MPG123_ERR; + } + return val; +} + +#undef mpg123_seek +/* off_t mpg123_seek(mpg123_handle *mh, off_t sampleoff, int whence); */ +long attribute_align_arg mpg123_seek(mpg123_handle *mh, long sampleoff, int whence) +{ + long val; + off_t largeval; + ALIGNCHECK(mh); + largeval = MPG123_LARGENAME(mpg123_seek)(mh, sampleoff, whence); + val = largeval; + if(val != largeval) + { + mh->err = MPG123_LFS_OVERFLOW; + return MPG123_ERR; + } + return val; +} + +#undef mpg123_feedseek +/* off_t mpg123_feedseek(mpg123_handle *mh, off_t sampleoff, int whence, off_t *input_offset); */ +long attribute_align_arg mpg123_feedseek(mpg123_handle *mh, long sampleoff, int whence, long *input_offset) +{ + long val; + off_t largeioff; + off_t largeval; + ALIGNCHECK(mh); + largeval = MPG123_LARGENAME(mpg123_feedseek)(mh, sampleoff, whence, &largeioff); + /* Error/message codes are small... */ + if(largeval < 0) return (long)largeval; + + val = largeval; + *input_offset = largeioff; + if(val != largeval || *input_offset != largeioff) + { + mh->err = MPG123_LFS_OVERFLOW; + return MPG123_ERR; + } + return val; +} + +#undef mpg123_seek_frame +/* off_t mpg123_seek_frame(mpg123_handle *mh, off_t frameoff, int whence); */ +long attribute_align_arg mpg123_seek_frame(mpg123_handle *mh, long frameoff, int whence) +{ + long val; + off_t largeval; + ALIGNCHECK(mh); + largeval = MPG123_LARGENAME(mpg123_seek_frame)(mh, frameoff, whence); + val = largeval; + if(val != largeval) + { + mh->err = MPG123_LFS_OVERFLOW; + return MPG123_ERR; + } + return val; +} + +#undef mpg123_timeframe +/* off_t mpg123_timeframe(mpg123_handle *mh, double sec); */ +long attribute_align_arg mpg123_timeframe(mpg123_handle *mh, double sec) +{ + long val; + off_t largeval; + ALIGNCHECK(mh); + largeval = MPG123_LARGENAME(mpg123_timeframe)(mh, sec); + val = largeval; + if(val != largeval) + { + mh->err = MPG123_LFS_OVERFLOW; + return MPG123_ERR; + } + return val; +} + +/* Now something less simple: Index retrieval and manipulation. + The index is an _array_ of off_t, which means that I need to construct a copy with translated long values. */ +#undef mpg123_index +/* int mpg123_index(mpg123_handle *mh, off_t **offsets, off_t *step, size_t *fill) */ +int attribute_align_arg mpg123_index(mpg123_handle *mh, long **offsets, long *step, size_t *fill) +{ + int err; + size_t i; + long smallstep; + size_t thefill; + off_t largestep; + off_t *largeoffsets; + struct wrap_data *whd; + ALIGNCHECK(mh); + whd = wrap_get(mh); + if(whd == NULL) return MPG123_ERR; + + err = MPG123_LARGENAME(mpg123_index)(mh, &largeoffsets, &largestep, &thefill); + if(err != MPG123_OK) return err; + + /* For a _very_ large file, even the step could overflow. */ + smallstep = largestep; + if(smallstep != largestep) + { + mh->err = MPG123_LFS_OVERFLOW; + return MPG123_ERR; + } + if(step != NULL) *step = smallstep; + + /* When there are no values stored, there is no table content to take care of. + Table pointer does not matter. Mission completed. */ + if(thefill == 0) return MPG123_OK; + + if(fill != NULL) *fill = thefill; + + /* Construct a copy of the index to hand over to the small-minded client. */ + *offsets = safe_realloc(whd->indextable, (*fill)*sizeof(long)); + if(*offsets == NULL) + { + mh->err = MPG123_OUT_OF_MEM; + return MPG123_ERR; + } + whd->indextable = *offsets; + /* Elaborate conversion of each index value, with overflow check. */ + for(i=0; i<*fill; ++i) + { + whd->indextable[i] = largeoffsets[i]; + if(whd->indextable[i] != largeoffsets[i]) + { + mh->err = MPG123_LFS_OVERFLOW; + return MPG123_ERR; + } + } + /* If we came that far... there should be a valid copy of the table now. */ + return MPG123_OK; +} + +/* The writing does basically the same than the above, just the opposite. + Oh, and the overflow checks are not needed -- off_t is bigger than long. */ +#undef mpg123_set_index +/* int mpg123_set_index(mpg123_handle *mh, off_t *offsets, off_t step, size_t fill); */ +int attribute_align_arg mpg123_set_index(mpg123_handle *mh, long *offsets, long step, size_t fill) +{ + int err; + size_t i; + struct wrap_data *whd; + off_t *indextmp; + ALIGNCHECK(mh); + whd = wrap_get(mh); + if(whd == NULL) return MPG123_ERR; + + /* Expensive temporary storage... for staying outside at the API layer. */ + indextmp = malloc(fill*sizeof(off_t)); + if(indextmp == NULL) + { + mh->err = MPG123_OUT_OF_MEM; + return MPG123_ERR; + } + + if(fill > 0 && offsets == NULL) + { + mh->err = MPG123_BAD_INDEX_PAR; + err = MPG123_ERR; + } + else + { + /* Fill the large-file copy of the provided index, then feed it to mpg123. */ + for(i=0; ierr = MPG123_LFS_OVERFLOW; + return MPG123_ERR; + } + + if(current_frame != NULL) *current_frame = small_curframe; + + if(frames_left != NULL) *frames_left = small_frameleft; + + + return MPG123_OK; +} + +#undef mpg123_length +/* off_t mpg123_length(mpg123_handle *mh); */ +long attribute_align_arg mpg123_length(mpg123_handle *mh) +{ + long val; + off_t largeval; + ALIGNCHECK(mh); + largeval = MPG123_LARGENAME(mpg123_length)(mh); + val = largeval; + if(val != largeval) + { + mh->err = MPG123_LFS_OVERFLOW; + return MPG123_ERR; + } + return val; +} + +/* The simplest wrapper of all... */ +#undef mpg123_set_filesize +/* int mpg123_set_filesize(mpg123_handle *mh, off_t size); */ +int attribute_align_arg mpg123_set_filesize(mpg123_handle *mh, long size) +{ + ALIGNCHECK(mh); + return MPG123_LARGENAME(mpg123_set_filesize)(mh, size); +} + + +/* ========================================= + THE BOUNDARY OF SANITY + Behold, stranger! + ========================================= */ + + +/* + The messy part: Replacement of I/O core (actally, this is only due to lseek()). + Both descriptor and handle replaced I/O are mapped to replaced handle I/O, the handle wrapping over the actual callbacks and the actual handle/descriptor. + You got multiple levels of handles and callbacks to think about. Have fun reading and comprehending. +*/ + +/* Could go into compat.h ... Windows needs that flag. */ +#ifndef O_BINARY +#define O_BINARY 0 +#endif + +/* Read callback needs nothing special. */ +long wrap_read(void* handle, void *buf, size_t count) +{ + struct wrap_data *ioh = handle; + switch(ioh->iotype) + { + case IO_FD: return ioh->r_read(ioh->fd, buf, count); + case IO_HANDLE: return ioh->r_h_read(ioh->handle, buf, count); + } + error("Serious breakage - bad IO type in LFS wrapper!"); + return -1; +} + +/* Seek callback needs protection from too big offsets. */ +off_t wrap_lseek(void *handle, off_t offset, int whence) +{ + struct wrap_data *ioh = handle; + long smalloff = offset; + if(smalloff == offset) + { + switch(ioh->iotype) + { + case IO_FD: return ioh->r_lseek(ioh->fd, smalloff, whence); + case IO_HANDLE: return ioh->r_h_lseek(ioh->handle, smalloff, whence); + } + error("Serious breakage - bad IO type in LFS wrapper!"); + return -1; + } + else + { + errno = EOVERFLOW; + return -1; + } +} + + +/* + Now, let's replace the API dealing with replacement I/O. + Start with undefining the renames... +*/ + +#undef mpg123_replace_reader +#undef mpg123_replace_reader_handle +#undef mpg123_open +#undef mpg123_open_fd +#undef mpg123_open_handle + + +/* Normal reader replacement needs fallback implementations. */ +static long fallback_read(int fd, void *buf, size_t count) +{ + return read(fd, buf, count); +} + +static long fallback_lseek(int fd, long offset, int whence) +{ + /* Since the offset is long int already, the returned value really should fit into a long... but whatever. */ + long newpos_long; + off_t newpos; + newpos = lseek(fd, offset, whence); + newpos_long = newpos; + if(newpos_long == newpos) + return newpos_long; + else + { + errno = EOVERFLOW; + return -1; + } +} + +/* Reader replacement prepares the hidden handle storage for next mpg123_open_fd() or plain mpg123_open(). */ +int attribute_align_arg mpg123_replace_reader(mpg123_handle *mh, long (*r_read) (int, void *, size_t), long (*r_lseek)(int, long, int) ) +{ + struct wrap_data* ioh; + ALIGNCHECK(mh); + if(mh == NULL) return MPG123_ERR; + + mpg123_close(mh); + ioh = wrap_get(mh); + if(ioh == NULL) return MPG123_ERR; + + /* If both callbacks are NULL, switch totally to internal I/O, else just use fallback for at most half of them. */ + if(r_read == NULL && r_lseek == NULL) + { + /* Only the type is actually important to disable the code. */ + ioh->iotype = 0; + ioh->fd = -1; + ioh->r_read = NULL; + ioh->r_lseek = NULL; + } + else + { + ioh->iotype = IO_FD; + ioh->fd = -1; /* On next mpg123_open_fd(), this gets a value. */ + ioh->r_read = r_read != NULL ? r_read : fallback_read; + ioh->r_lseek = r_lseek != NULL ? r_lseek : fallback_lseek; + } + + /* The real reader replacement will happen while opening. */ + return MPG123_OK; +} + +int attribute_align_arg mpg123_replace_reader_handle(mpg123_handle *mh, long (*r_read) (void*, void *, size_t), long (*r_lseek)(void*, long, int), void (*cleanup)(void*)) +{ + struct wrap_data* ioh; + ALIGNCHECK(mh); + if(mh == NULL) return MPG123_ERR; + + mpg123_close(mh); + ioh = wrap_get(mh); + if(ioh == NULL) return MPG123_ERR; + + ioh->iotype = IO_HANDLE; + ioh->handle = NULL; + ioh->r_h_read = r_read; + ioh->r_h_lseek = r_lseek; + ioh->h_cleanup = cleanup; + + /* The real reader replacement will happen while opening. */ + return MPG123_OK; +} + +/* + The open routines always need to watch out for a prepared wrapper handle to use replaced normal I/O. + Two cases to consider: + 1. Plain normal open using internal I/O. + 2. Client called mpg123_replace_reader() before. + The second case needs hackery to activate the client I/O callbacks. For that, we create a custom I/O handle and use the guts of mpg123_open_fd() on it. +*/ +int attribute_align_arg mpg123_open(mpg123_handle *mh, const char *path) +{ + struct wrap_data* ioh; + ALIGNCHECK(mh); + + if(mh == NULL) return MPG123_ERR; + + ioh = mh->wrapperdata; + /* Mimic the use of mpg123_replace_reader() functions by lower levels... + IO_HANDLE is not valid here, though. Only IO_FD. */ + if(ioh != NULL && ioh->iotype == IO_FD) + { + int err; + err = MPG123_LARGENAME(mpg123_replace_reader_handle)(mh, wrap_read, wrap_lseek, wrap_io_cleanup); + if(err != MPG123_OK) return MPG123_ERR; + + /* The above call implied mpg123_close() already */ + /* + I really need to open the file here... to be able to use the replacer handle I/O ... + my_fd is used to indicate closing of the descriptor on cleanup. + */ + ioh->my_fd = compat_open(path, O_RDONLY|O_BINARY); + if(ioh->my_fd < 0) + { + if(!(mh->p.flags & MPG123_QUIET)) error2("Cannot open file %s: %s", path, strerror(errno)); + + mh->err = MPG123_BAD_FILE; + return MPG123_ERR; + } + /* Store a copy of the descriptor where it is actually used. */ + ioh->fd = ioh->my_fd; + /* Initiate I/O operating on my handle now. */ + err = open_stream_handle(mh, ioh); + if(err != MPG123_OK) + { + wrap_io_cleanup(ioh); + return MPG123_ERR; + } + /* All fine... */ + return MPG123_OK; + } + else return MPG123_LARGENAME(mpg123_open)(mh, path); +} + +/* + This is in fact very similar to the above: + The open routines always need to watch out for a prepared wrapper handle to use replaced normal I/O. + Two cases to consider: + 1. Plain normal open_fd using internal I/O. + 2. Client called mpg123_replace_reader() before. + The second case needs hackery to activate the client I/O callbacks. For that, we create a custom I/O handle and use the guts of mpg123_open_fd() on it. +*/ + +int attribute_align_arg mpg123_open_fd(mpg123_handle *mh, int fd) +{ + struct wrap_data* ioh; + ALIGNCHECK(mh); + + if(mh == NULL) return MPG123_ERR; + + mpg123_close(mh); + ioh = mh->wrapperdata; + if(ioh != NULL && ioh->iotype == IO_FD) + { + int err; + err = MPG123_LARGENAME(mpg123_replace_reader_handle)(mh, wrap_read, wrap_lseek, wrap_io_cleanup); + if(err != MPG123_OK) return MPG123_ERR; + + /* The above call implied mpg123_close() already */ + + /* Store the real file descriptor inside the handle. */ + ioh->fd = fd; + /* Initiate I/O operating on my handle now. */ + err = open_stream_handle(mh, ioh); + if(err != MPG123_OK) + { + wrap_io_cleanup(ioh); + return MPG123_ERR; + } + /* All fine... */ + return MPG123_OK; + } + else return MPG123_LARGENAME(mpg123_open_fd)(mh, fd); +} + +int attribute_align_arg mpg123_open_handle(mpg123_handle *mh, void *handle) +{ + struct wrap_data* ioh; + ALIGNCHECK(mh); + + if(mh == NULL) return MPG123_ERR; + + mpg123_close(mh); + ioh = mh->wrapperdata; + if(ioh != NULL && ioh->iotype == IO_HANDLE && ioh->r_h_read != NULL) + { + /* Wrap the custom handle into my handle. */ + int err; + err = MPG123_LARGENAME(mpg123_replace_reader_handle)(mh, wrap_read, wrap_lseek, wrap_io_cleanup); + if(err != MPG123_OK) return MPG123_ERR; + + ioh->handle = handle; + /* No extra error handling, keep behaviour of the original open_handle. */ + return open_stream_handle(mh, ioh); + } + else + { + /* This is an error ... you need to prepare the I/O before using it. */ + mh->err = MPG123_BAD_CUSTOM_IO; + return MPG123_ERR; + } +} + diff --git a/lib/3rdparty/libmpg123/libmpg123.c b/lib/3rdparty/libmpg123/libmpg123.c new file mode 100644 index 00000000000..8a18a6ee4bd --- /dev/null +++ b/lib/3rdparty/libmpg123/libmpg123.c @@ -0,0 +1,1673 @@ +/* + libmpg123: MPEG Audio Decoder library + + copyright 1995-2010 by the mpg123 project - free software under the terms of the LGPL 2.1 + see COPYING and AUTHORS files in distribution or http://mpg123.org + +*/ + +#include "mpg123lib_intern.h" +#include "icy2utf8.h" +#include "debug.h" + +#ifdef GAPLESS +#define SAMPLE_ADJUST(x) ((x) - ((mh->p.flags & MPG123_GAPLESS) ? mh->begin_os : 0)) +#define SAMPLE_UNADJUST(x) ((x) + ((mh->p.flags & MPG123_GAPLESS) ? mh->begin_os : 0)) +#else +#define SAMPLE_ADJUST(x) (x) +#define SAMPLE_UNADJUST(x) (x) +#endif + +#define SEEKFRAME(mh) ((mh)->ignoreframe < 0 ? 0 : (mh)->ignoreframe) + +static int initialized = 0; + +#include "aligncheck.h" + +#ifdef GAPLESS +/* + Take the buffer after a frame decode (strictly: it is the data from frame fr->num!) and cut samples out. + fr->buffer.fill may then be smaller than before... +*/ +static void frame_buffercheck(mpg123_handle *fr) +{ + /* When we have no accurate position, gapless code does not make sense. */ + if(!fr->accurate) return; + + /* Important: We first cut samples from the end, then cut from beginning (including left-shift of the buffer). + This order works also for the case where firstframe == lastframe. */ + + /* The last interesting (planned) frame: Only use some leading samples. + Note a difference from the below: The last frame and offset are unchanges by seeks. + The lastoff keeps being valid. */ + if(fr->lastframe > -1 && fr->num >= fr->lastframe) + { + /* There can be more than one frame of padding at the end, so we ignore the whole frame if we are beyond lastframe. */ + off_t byteoff = (fr->num == fr->lastframe) ? samples_to_bytes(fr, fr->lastoff) : 0; + if((off_t)fr->buffer.fill > byteoff) + { + fr->buffer.fill = byteoff; + } + debug1("Cut frame buffer on end of stream, fill now %"SIZE_P" bytes.", (size_p)fr->buffer.fill); + } + + /* The first interesting frame: Skip some leading samples. */ + if(fr->firstoff && fr->num == fr->firstframe) + { + off_t byteoff = samples_to_bytes(fr, fr->firstoff); + if((off_t)fr->buffer.fill > byteoff) + { + fr->buffer.fill -= byteoff; + /* buffer.p != buffer.data only for own buffer */ + debug6("cutting %li samples/%li bytes on begin, own_buffer=%i at %p=%p, buf[1]=%i", + (long)fr->firstoff, (long)byteoff, fr->own_buffer, (void*)fr->buffer.p, (void*)fr->buffer.data, ((short*)fr->buffer.p)[2]); + if(fr->own_buffer) fr->buffer.p = fr->buffer.data + byteoff; + else memmove(fr->buffer.data, fr->buffer.data + byteoff, fr->buffer.fill); + debug3("done cutting, buffer at %p =? %p, buf[1]=%i", + (void*)fr->buffer.p, (void*)fr->buffer.data, ((short*)fr->buffer.p)[2]); + } + else fr->buffer.fill = 0; + /* We can only reach this frame again by seeking. And on seeking, firstoff will be recomputed. + So it is safe to null it here (and it makes the if() decision abort earlier). */ + fr->firstoff = 0; + } +} +#endif + +int attribute_align_arg mpg123_init(void) +{ + ALIGNCHECKK + if((sizeof(short) != 2) || (sizeof(long) < 4)) return MPG123_BAD_TYPES; + + if(initialized) return MPG123_OK; /* no need to initialize twice */ + +#ifndef NO_LAYER12 + init_layer12(); /* inits also shared tables with layer1 */ +#endif +#ifndef NO_LAYER3 + init_layer3(); +#endif + prepare_decode_tables(); + check_decoders(); + initialized = 1; + return MPG123_OK; +} + +void attribute_align_arg mpg123_exit(void) +{ + /* nothing yet, but something later perhaps */ +} + +/* create a new handle with specified decoder, decoder can be "", "auto" or NULL for auto-detection */ +mpg123_handle attribute_align_arg *mpg123_new(const char* decoder, int *error) +{ + return mpg123_parnew(NULL, decoder, error); +} + +/* ...the full routine with optional initial parameters to override defaults. */ +mpg123_handle attribute_align_arg *mpg123_parnew(mpg123_pars *mp, const char* decoder, int *error) +{ + mpg123_handle *fr = NULL; + int err = MPG123_OK; +#if (defined CCALIGN) && (defined NEED_ALIGNCHECK) && ((defined DEBUG) || (defined CHECK_ALIGN)) +#ifdef CCALIGN + double ALIGNED(16) altest[4]; + if(((size_t)altest) % 16 != 0) + { + error("Stack variable is not aligned! Your combination of compiler/library is dangerous!"); + *error = MPG123_BAD_ALIGN; + return NULL; + } +#endif +#endif + if(initialized) fr = (mpg123_handle*) malloc(sizeof(mpg123_handle)); + else err = MPG123_NOT_INITIALIZED; + if(fr != NULL) + { + frame_init_par(fr, mp); + debug("cpu opt setting"); + if(frame_cpu_opt(fr, decoder) != 1) + { + err = MPG123_BAD_DECODER; + frame_exit(fr); + free(fr); + fr = NULL; + } + } + if(fr != NULL) + { + /* Cleanup that mess! ... use mpg123_decoder / decode_update! */ + if(frame_outbuffer(fr) != 0) + { + err = MPG123_NO_BUFFERS; + frame_exit(fr); + free(fr); + fr = NULL; + } + else + { + /* I smell cleanup here... with get_next_frame() */ +/* if(decode_update(fr) != 0) + { + err = fr->err != MPG123_OK ? fr->err : MPG123_BAD_DECODER; + frame_exit(fr); + free(fr); + fr = NULL; + } + else */ + fr->decoder_change = 1; + } + } + else if(err == MPG123_OK) err = MPG123_OUT_OF_MEM; + + if(error != NULL) *error = err; + return fr; +} + +int attribute_align_arg mpg123_decoder(mpg123_handle *mh, const char* decoder) +{ + enum optdec dt = dectype(decoder); + ALIGNCHECK(mh); + if(mh == NULL) return MPG123_ERR; + + if(dt == nodec) + { + mh->err = MPG123_BAD_DECODER; + return MPG123_ERR; + } + if(dt == mh->cpu_opts.type) return MPG123_OK; + + /* Now really change. */ + /* frame_exit(mh); + frame_init(mh); */ + debug("cpu opt setting"); + if(frame_cpu_opt(mh, decoder) != 1) + { + mh->err = MPG123_BAD_DECODER; + frame_exit(mh); + return MPG123_ERR; + } + /* New buffers for decoder are created in frame_buffers() */ + if((frame_outbuffer(mh) != 0)) + { + mh->err = MPG123_NO_BUFFERS; + frame_exit(mh); + return MPG123_ERR; + } + /* I smell cleanup here... with get_next_frame() */ + decode_update(mh); + mh->decoder_change = 1; + return MPG123_OK; +} + +int attribute_align_arg mpg123_param(mpg123_handle *mh, enum mpg123_parms key, long val, double fval) +{ + int r; + ALIGNCHECK(mh); + if(mh == NULL) return MPG123_ERR; + r = mpg123_par(&mh->p, key, val, fval); + if(r != MPG123_OK){ mh->err = r; r = MPG123_ERR; } + else + { /* Special treatment for some settings. */ +#ifdef FRAME_INDEX + if(key == MPG123_INDEX_SIZE) + { /* Apply frame index size and grow property on the fly. */ + r = frame_index_setup(mh); + if(r != MPG123_OK) mh->err = MPG123_INDEX_FAIL; + } +#endif + } + return r; +} + +int attribute_align_arg mpg123_par(mpg123_pars *mp, enum mpg123_parms key, long val, double fval) +{ + int ret = MPG123_OK; + ALIGNCHECKK + if(mp == NULL) return MPG123_BAD_PARS; + switch(key) + { + case MPG123_VERBOSE: + mp->verbose = val; + break; + case MPG123_FLAGS: +#ifndef GAPLESS + if(val & MPG123_GAPLESS) ret = MPG123_NO_GAPLESS; +#endif + if(ret == MPG123_OK) mp->flags = val; + debug1("set flags to 0x%lx", (unsigned long) mp->flags); + break; + case MPG123_ADD_FLAGS: +#ifndef GAPLESS + /* Enabling of gapless mode doesn't work when it's not there, but disabling (below) is no problem. */ + if(val & MPG123_GAPLESS) ret = MPG123_NO_GAPLESS; + else +#endif + mp->flags |= val; + debug1("set flags to 0x%lx", (unsigned long) mp->flags); + break; + case MPG123_REMOVE_FLAGS: + mp->flags &= ~val; + debug1("set flags to 0x%lx", (unsigned long) mp->flags); + break; + case MPG123_FORCE_RATE: /* should this trigger something? */ +#ifdef NO_NTOM + if(val > 0) + ret = MPG123_BAD_RATE; +#else + if(val > 96000) ret = MPG123_BAD_RATE; + else mp->force_rate = val < 0 ? 0 : val; /* >0 means enable, 0 disable */ +#endif + break; + case MPG123_DOWN_SAMPLE: +#ifdef NO_DOWNSAMPLE + if(val != 0) ret = MPG123_BAD_RATE; +#else + if(val < 0 || val > 2) ret = MPG123_BAD_RATE; + else mp->down_sample = (int)val; +#endif + break; + case MPG123_RVA: + if(val < 0 || val > MPG123_RVA_MAX) ret = MPG123_BAD_RVA; + else mp->rva = (int)val; + break; + case MPG123_DOWNSPEED: + mp->halfspeed = val < 0 ? 0 : val; + break; + case MPG123_UPSPEED: + mp->doublespeed = val < 0 ? 0 : val; + break; + case MPG123_ICY_INTERVAL: +#ifndef NO_ICY + mp->icy_interval = val > 0 ? val : 0; +#else + if(val > 0) ret = MPG123_BAD_PARAM; +#endif + break; + case MPG123_OUTSCALE: + /* Choose the value that is non-zero, if any. + Downscaling integers to 1.0 . */ + mp->outscale = val == 0 ? fval : (double)val/SHORT_SCALE; + break; + case MPG123_TIMEOUT: +#ifdef TIMEOUT_READ + mp->timeout = val >= 0 ? val : 0; +#else + if(val > 0) ret = MPG123_NO_TIMEOUT; +#endif + break; + case MPG123_RESYNC_LIMIT: + mp->resync_limit = val; + break; + case MPG123_INDEX_SIZE: +#ifdef FRAME_INDEX + mp->index_size = val; +#else + ret = MPG123_NO_INDEX; +#endif + break; + case MPG123_PREFRAMES: + if(val >= 0) mp->preframes = val; + else ret = MPG123_BAD_VALUE; + break; + default: + ret = MPG123_BAD_PARAM; + } + return ret; +} + +int attribute_align_arg mpg123_getparam(mpg123_handle *mh, enum mpg123_parms key, long *val, double *fval) +{ + int r; + ALIGNCHECK(mh); + if(mh == NULL) return MPG123_ERR; + r = mpg123_getpar(&mh->p, key, val, fval); + if(r != MPG123_OK){ mh->err = r; r = MPG123_ERR; } + return r; +} + +int attribute_align_arg mpg123_getpar(mpg123_pars *mp, enum mpg123_parms key, long *val, double *fval) +{ + int ret = 0; + ALIGNCHECKK + if(mp == NULL) return MPG123_BAD_PARS; + switch(key) + { + case MPG123_VERBOSE: + if(val) *val = mp->verbose; + break; + case MPG123_FLAGS: + case MPG123_ADD_FLAGS: + if(val) *val = mp->flags; + break; + case MPG123_FORCE_RATE: + if(val) +#ifdef NO_NTOM + *val = 0; +#else + *val = mp->force_rate; +#endif + break; + case MPG123_DOWN_SAMPLE: + if(val) *val = mp->down_sample; + break; + case MPG123_RVA: + if(val) *val = mp->rva; + break; + case MPG123_DOWNSPEED: + if(val) *val = mp->halfspeed; + break; + case MPG123_UPSPEED: + if(val) *val = mp->doublespeed; + break; + case MPG123_ICY_INTERVAL: +#ifndef NO_ICY + if(val) *val = (long)mp->icy_interval; +#else + if(val) *val = 0; +#endif + break; + case MPG123_OUTSCALE: + if(fval) *fval = mp->outscale; + if(val) *val = (long)(mp->outscale*SHORT_SCALE); + break; + case MPG123_RESYNC_LIMIT: + if(val) *val = mp->resync_limit; + break; + case MPG123_INDEX_SIZE: + if(val) +#ifdef FRAME_INDEX + *val = mp->index_size; +#else + *val = 0; /* graceful fallback: no index is index of zero size */ +#endif + break; + case MPG123_PREFRAMES: + *val = mp->preframes; + break; + default: + ret = MPG123_BAD_PARAM; + } + return ret; +} + +int attribute_align_arg mpg123_getstate(mpg123_handle *mh, enum mpg123_state key, long *val, double *fval) +{ + int ret = MPG123_OK; + long theval = 0; + double thefval = 0.; + ALIGNCHECK(mh); + if(mh == NULL) return MPG123_ERR; + + switch(key) + { + case MPG123_ACCURATE: + theval = mh->accurate; + break; + default: + mh->err = MPG123_BAD_KEY; + ret = MPG123_ERR; + } + + if(val != NULL) *val = theval; + if(fval != NULL) *fval = thefval; + + return ret; +} + +int attribute_align_arg mpg123_eq(mpg123_handle *mh, enum mpg123_channels channel, int band, double val) +{ + ALIGNCHECK(mh); + if(mh == NULL) return MPG123_ERR; + if(band < 0 || band > 31){ mh->err = MPG123_BAD_BAND; return MPG123_ERR; } + switch(channel) + { + case MPG123_LEFT|MPG123_RIGHT: + mh->equalizer[0][band] = mh->equalizer[1][band] = DOUBLE_TO_REAL(val); + break; + case MPG123_LEFT: mh->equalizer[0][band] = DOUBLE_TO_REAL(val); break; + case MPG123_RIGHT: mh->equalizer[1][band] = DOUBLE_TO_REAL(val); break; + default: + mh->err=MPG123_BAD_CHANNEL; + return MPG123_ERR; + } + mh->have_eq_settings = TRUE; + return MPG123_OK; +} + +double attribute_align_arg mpg123_geteq(mpg123_handle *mh, enum mpg123_channels channel, int band) +{ + double ret = 0.; + ALIGNCHECK(mh); + if(mh == NULL) return MPG123_ERR; + + /* Handle this gracefully. When there is no band, it has no volume. */ + if(band > -1 && band < 32) + switch(channel) + { + case MPG123_LEFT|MPG123_RIGHT: + ret = 0.5*(REAL_TO_DOUBLE(mh->equalizer[0][band])+REAL_TO_DOUBLE(mh->equalizer[1][band])); + break; + case MPG123_LEFT: ret = REAL_TO_DOUBLE(mh->equalizer[0][band]); break; + case MPG123_RIGHT: ret = REAL_TO_DOUBLE(mh->equalizer[1][band]); break; + /* Default case is already handled: ret = 0 */ + } + + return ret; +} + + +/* plain file access, no http! */ +int attribute_align_arg mpg123_open(mpg123_handle *mh, const char *path) +{ + ALIGNCHECK(mh); + if(mh == NULL) return MPG123_ERR; + + mpg123_close(mh); + return open_stream(mh, path, -1); +} + +int attribute_align_arg mpg123_open_fd(mpg123_handle *mh, int fd) +{ + ALIGNCHECK(mh); + if(mh == NULL) return MPG123_ERR; + + mpg123_close(mh); + return open_stream(mh, NULL, fd); +} + +int attribute_align_arg mpg123_open_handle(mpg123_handle *mh, void *iohandle) +{ + ALIGNCHECK(mh); + if(mh == NULL) return MPG123_ERR; + + mpg123_close(mh); + if(mh->rdat.r_read_handle == NULL) + { + mh->err = MPG123_BAD_CUSTOM_IO; + return MPG123_ERR; + } + return open_stream_handle(mh, iohandle); +} + +int attribute_align_arg mpg123_open_feed(mpg123_handle *mh) +{ + ALIGNCHECK(mh); + if(mh == NULL) return MPG123_ERR; + + mpg123_close(mh); + return open_feed(mh); +} + +int attribute_align_arg mpg123_replace_reader( mpg123_handle *mh, + long (*r_read) (int, void *, size_t), + off_t (*r_lseek)(int, off_t, int) ) +{ + ALIGNCHECK(mh); + if(mh == NULL) return MPG123_ERR; + + mpg123_close(mh); + mh->rdat.r_read = r_read; + mh->rdat.r_lseek = r_lseek; + return MPG123_OK; +} + +int attribute_align_arg mpg123_replace_reader_handle( mpg123_handle *mh, + long (*r_read) (void*, void *, size_t), + off_t (*r_lseek)(void*, off_t, int), + void (*cleanup)(void*) ) +{ + ALIGNCHECK(mh); + if(mh == NULL) return MPG123_ERR; + + mpg123_close(mh); + mh->rdat.r_read_handle = r_read; + mh->rdat.r_lseek_handle = r_lseek; + mh->rdat.cleanup_handle = cleanup; + return MPG123_OK; +} + +int decode_update(mpg123_handle *mh) +{ + long native_rate; + int b; + ALIGNCHECK(mh); + native_rate = frame_freq(mh); + + b = frame_output_format(mh); /* Select the new output format based on given constraints. */ + if(b < 0) return MPG123_ERR; + + if(b == 1) mh->new_format = 1; /* Store for later... */ + + debug3("updating decoder structure with native rate %li and af.rate %li (new format: %i)", native_rate, mh->af.rate, mh->new_format); + if(mh->af.rate == native_rate) mh->down_sample = 0; + else if(mh->af.rate == native_rate>>1) mh->down_sample = 1; + else if(mh->af.rate == native_rate>>2) mh->down_sample = 2; + else mh->down_sample = 3; /* flexible (fixed) rate */ + switch(mh->down_sample) + { + case 0: + case 1: + case 2: + mh->down_sample_sblimit = SBLIMIT>>(mh->down_sample); + /* With downsampling I get less samples per frame */ + mh->outblock = samples_to_bytes(mh, (spf(mh)>>mh->down_sample)); + break; +#ifndef NO_NTOM + case 3: + { + if(synth_ntom_set_step(mh) != 0) return -1; + if(frame_freq(mh) > mh->af.rate) + { + mh->down_sample_sblimit = SBLIMIT * mh->af.rate; + mh->down_sample_sblimit /= frame_freq(mh); + } + else mh->down_sample_sblimit = SBLIMIT; + mh->outblock = mh->af.encsize * mh->af.channels * + ( ( NTOM_MUL-1+spf(mh) + * (((size_t)NTOM_MUL*mh->af.rate)/frame_freq(mh)) + )/NTOM_MUL ); + } + break; +#endif + } + + if(!(mh->p.flags & MPG123_FORCE_MONO)) + { + if(mh->af.channels == 1) mh->single = SINGLE_MIX; + else mh->single = SINGLE_STEREO; + } + else mh->single = (mh->p.flags & MPG123_FORCE_MONO)-1; + if(set_synth_functions(mh) != 0) return -1;; + + do_rva(mh); + debug3("done updating decoder structure with native rate %li and af.rate %li and down_sample %i", frame_freq(mh), mh->af.rate, mh->down_sample); + + return 0; +} + +size_t attribute_align_arg mpg123_safe_buffer(void) +{ + /* real is the largest possible output (it's 32bit float, 32bit int or 64bit double). */ + return sizeof(real)*2*1152*NTOM_MAX; +} + +size_t attribute_align_arg mpg123_outblock(mpg123_handle *mh) +{ + if(mh != NULL) return mh->outblock; + else return mpg123_safe_buffer(); +} + +static int get_next_frame(mpg123_handle *mh) +{ + int change = mh->decoder_change; + do + { + int b; + /* Decode & discard some frame(s) before beginning. */ + if(mh->to_ignore && mh->num < mh->firstframe && mh->num >= mh->ignoreframe) + { + debug1("ignoring frame %li", (long)mh->num); + /* Decoder structure must be current! decode_update has been called before... */ + (mh->do_layer)(mh); mh->buffer.fill = 0; +#ifndef NO_NTOM + /* The ignored decoding may have failed. Make sure ntom stays consistent. */ + if(mh->down_sample == 3) ntom_set_ntom(mh, mh->num+1); +#endif + mh->to_ignore = mh->to_decode = FALSE; + } + /* Read new frame data; possibly breaking out here for MPG123_NEED_MORE. */ + debug("read frame"); + mh->to_decode = FALSE; + b = read_frame(mh); /* That sets to_decode only if a full frame was read. */ + debug4("read of frame %li returned %i (to_decode=%i) at sample %li", (long)mh->num, b, mh->to_decode, (long)mpg123_tell(mh)); + if(b == MPG123_NEED_MORE) return MPG123_NEED_MORE; /* need another call with data */ + else if(b <= 0) + { + /* More sophisticated error control? */ + if(b==0 || mh->rdat.filepos == mh->rdat.filelen) + { /* We simply reached the end. */ + mh->track_frames = mh->num + 1; + debug("What about updating/checking gapless sample count here?"); + return MPG123_DONE; + } + else return MPG123_ERR; /* Some real error. */ + } + /* Now, there should be new data to decode ... and also possibly new stream properties */ + if(mh->header_change > 1) + { + debug("big header change"); + change = 1; + } + /* Now some accounting: Look at the numbers and decide if we want this frame. */ + ++mh->playnum; + /* Plain skipping without decoding, only when frame is not ignored on next cycle. */ + if(mh->num < mh->firstframe || (mh->p.doublespeed && (mh->playnum % mh->p.doublespeed))) + { + if(!(mh->to_ignore && mh->num < mh->firstframe && mh->num >= mh->ignoreframe)) + { + frame_skip(mh); + /* Should one fix NtoM here or not? + It is not work the trouble for doublespeed, but what with leading frames? */ + } + } + /* Or, we are finally done and have a new frame. */ + else break; + } while(1); + + if(change) + { + if(decode_update(mh) < 0) /* dito... */ + return MPG123_ERR; + +debug1("new format: %i", mh->new_format); + + mh->decoder_change = 0; + if(mh->fresh) + { +#ifdef GAPLESS + int b=0; + /* Prepare offsets for gapless decoding. */ + debug1("preparing gapless stuff with native rate %li", frame_freq(mh)); + frame_gapless_realinit(mh); + frame_set_frameseek(mh, mh->num); +#endif + mh->fresh = 0; +#ifdef GAPLESS + /* Could this possibly happen? With a real big gapless offset... */ + if(mh->num < mh->firstframe) b = get_next_frame(mh); + if(b < 0) return b; /* Could be error, need for more, new format... */ +#endif + } + } + return MPG123_OK; +} + +/* Assumption: A buffer full of zero samples can be constructed by repetition of this byte. + Only to be used by decode_the_frame() ... */ +static int zero_byte(mpg123_handle *fr) +{ +#ifndef NO_8BIT + return fr->af.encoding & MPG123_ENC_8 ? fr->conv16to8[0] : 0; +#else + return 0; /* All normal signed formats have the zero here (even in byte form -- that may be an assumption for your funny machine...). */ +#endif +} + +/* + Not part of the api. This just decodes the frame and fills missing bits with zeroes. + There can be frames that are broken and thus make do_layer() fail. +*/ +void decode_the_frame(mpg123_handle *fr) +{ + size_t needed_bytes = samples_to_bytes(fr, frame_expect_outsamples(fr)); fr->clip += (fr->do_layer)(fr); + /*fprintf(stderr, "frame %"OFF_P": got %"SIZE_P" / %"SIZE_P"\n", fr->num,(size_p)fr->buffer.fill, (size_p)needed_bytes);*/ + /* There could be less data than promised. + Also, then debugging, we look out for coding errors that could result in _more_ data than expected. */ +#ifdef DEBUG + if(fr->buffer.fill != needed_bytes) + { +#endif + if(fr->buffer.fill < needed_bytes) + { + if(VERBOSE2) + fprintf(stderr, "Note: broken frame %li, filling up with %"SIZE_P" zeroes, from %"SIZE_P"\n", (long)fr->num, (size_p)(needed_bytes-fr->buffer.fill), (size_p)fr->buffer.fill); + + /* + One could do a loop with individual samples instead... but zero is zero + Actually, that is wrong: zero is mostly a series of null bytes, + but we have funny 8bit formats that have a different opinion on zero... + Unsigned 16 or 32 bit formats are handled later. + */ + memset( fr->buffer.data + fr->buffer.fill, zero_byte(fr), needed_bytes - fr->buffer.fill ); + + fr->buffer.fill = needed_bytes; +#ifndef NO_NTOM + /* ntom_val will be wrong when the decoding wasn't carried out completely */ + ntom_set_ntom(fr, fr->num+1); +#endif + } +#ifdef DEBUG + else + { + if(NOQUIET) + error2("I got _more_ bytes than expected (%"SIZE_P" / %"SIZE_P"), that should not be possible!", (size_p)fr->buffer.fill, (size_p)needed_bytes); + } + } +#endif + /* Handle unsigned output formats via reshifting after decode here. */ +#ifndef NO_32BIT + if(fr->af.encoding == MPG123_ENC_UNSIGNED_32) + { /* 32bit signed -> unsigned */ + size_t i; + int32_t *ssamples; + uint32_t *usamples; + ssamples = (int32_t*)fr->buffer.data; + usamples = (uint32_t*)fr->buffer.data; + debug("converting output to unsigned 32 bit integer"); + for(i=0; ibuffer.fill/sizeof(int32_t); ++i) + { + /* Different strategy since we don't have a larger type at hand. + Also watch out for silly +-1 fun because integer constants are signed in C90! */ + if(ssamples[i] >= 0) + usamples[i] = (uint32_t)ssamples[i] + 2147483647+1; + /* The smalles value goes zero. */ + else if(ssamples[i] == ((int32_t)-2147483647-1)) + usamples[i] = 0; + /* Now -value is in the positive range of signed int ... so it's a possible value at all. */ + else + usamples[i] = (uint32_t)2147483647+1 - (uint32_t)(-ssamples[i]); + } + } +#endif +#ifndef NO_16BIT + if(fr->af.encoding == MPG123_ENC_UNSIGNED_16) + { + size_t i; + short *ssamples; + unsigned short *usamples; + ssamples = (short*)fr->buffer.data; + usamples = (unsigned short*)fr->buffer.data; + debug("converting output to unsigned 16 bit integer"); + for(i=0; ibuffer.fill/sizeof(short); ++i) + { + long tmp = (long)ssamples[i]+32768; + usamples[i] = (unsigned short)tmp; + } + } +#endif +} + +/* + Decode the current frame into the frame structure's buffer, accessible at the location stored in