Hopefully fail to break anything in the process of syncing with trunk (r47786)

svn path=/branches/reactos-yarotows/; revision=47795
This commit is contained in:
Jérôme Gardou 2010-06-17 01:25:16 +00:00
commit 2d0dd58947
190 changed files with 13100 additions and 3034 deletions

View file

@ -18,6 +18,7 @@
<define name="TARGET_amd64" host="true" />
<define name="USE_COMPILER_EXCEPTIONS" />
<define name ="NO_UNDERSCORE_PREFIX" />
<property name="PLATFORM" value="PC"/>
<property name="usewrc" value="false"/>

View file

@ -1,6 +1,6 @@
/* TRANSLATOR : Mário Kaèmár /Mario Kacmar/ aka Kario (kario@szm.sk)
* DATE OF TR.: 30-01-2008
* LAST CHANGE: 04-09-2009
* LAST CHANGE: 31-05-2010
* ---------------------------------------
* TODO:
* pridanie navigaèných znaèiek "&" ?
@ -647,7 +647,7 @@ STRINGTABLE DISCARDABLE
BEGIN
IDS_TIME_DAYS "Dni"
IDS_TIME_HOURS "Hodiny"
IDS_TIME_NANOSECONDS "Nanoseconds"
IDS_TIME_NANOSECONDS "Nanosekundy"
IDS_TIME_MICROSECONDS "Mikrosekundy"
IDS_TIME_MILLISECONDS "Milisekundy"
IDS_TIME_MINUTES "Minúty"

View file

@ -3,6 +3,7 @@
* Danish language support
*
* Copyright 2008 Jens Albretsen <jens@albretsen.dk>
* 2010 Thomas Larsen
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@ -21,12 +22,19 @@
#include "reg.h"
#pragma code_page(65001)
LANGUAGE LANG_DANISH, SUBLANG_DEFAULT
STRINGTABLE
{
STRING_USAGE, "Syntaksen for dette kommando er:\n\nREG [ ADD | DELETE | QUERY ]\nREG kommando /?\n"
STRING_ADD_USAGE, "REG ADD nøgle_navn [/v værdi | /ve] [/t type] [/s separator] [/d data] [/f]\n"
STRING_DELETE_USAGE, "REG DELETE nøgle_navn [/v værdi | /ve | /va] [/f]\n"
STRING_QUERY_USAGE, "REG QUERY nøgle_navn [/v værdi | /ve] [/s]\n"
STRING_ADD_USAGE, "REG ADD nøgle_navn [/v værdi | /ve] [/t type] [/s separator] [/d data] [/f]\n"
STRING_DELETE_USAGE, "REG DELETE nøgle_navn [/v værdi | /ve | /va] [/f]\n"
STRING_QUERY_USAGE, "REG QUERY nøgle_navn [/v værdi | /ve] [/s]\n"
STRING_SUCCESS, "Operationen blev afsluttet med succes\n"
STRING_INVALID_KEY, "Fejl: Ugyldigt nøgle navn\n"
STRING_INVALID_CMDLINE, "Fejl: Ugyldige kommando linje parametre\n"
STRING_NO_REMOTE, "Fejl: Kunne ikke tilføje nøgler til fjern maskinen\n"
STRING_CANNOT_FIND, "Fejl: Systemet kunne ikke finde, den angivet registrerings nøgle eller værdi\n"
}

View file

@ -0,0 +1,40 @@
/*
* REG.EXE - Wine-compatible reg program.
* Spanish language support
*
* Copyright 2010 José Rostagno
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include "reg.h"
/* UTF-8 */
#pragma code_page(65001)
LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL
STRINGTABLE
{
STRING_USAGE, "La sintaxis de este comando es:\n\nREG [ ADD | DELETE | QUERY ]\nREG comando /?\n"
STRING_ADD_USAGE, "REG ADD nombre_clave [/v nombre_valor | /ve] [/t tipo] [/s separador] [/d datos] [/f]\n"
STRING_DELETE_USAGE, "REG DELETE nombre_clave [/v nombre_valor | /ve | /va] [/f]\n"
STRING_QUERY_USAGE, "REG QUERY nombre_clave [/v nombre_valor | /ve] [/s]\n"
STRING_SUCCESS, "La operación finalizó con éxito\n"
STRING_INVALID_KEY, "Error: nombre de clave no válido\n"
STRING_INVALID_CMDLINE, "Error: parámetros de línea de comandos inválidos\n"
STRING_NO_REMOTE, "Error: No se puede agregar claves al equipo remoto\n"
STRING_CANNOT_FIND, "Error: El sistema no pudo encontrar la clave o el valor del Registro especificado\n"
}

View file

@ -31,7 +31,7 @@ STRINGTABLE
STRING_QUERY_USAGE, "REG QUERY sleutel_naam [/v waarde_naam | /ve] [/s]\n"
STRING_SUCCESS, "De bewerking is succesvol voltooid\n"
STRING_INVALID_KEY, "Fout: Foutieve sleutelnaam\n"
STRING_INVALID_CMDLINE, "Fout: Foutieve commando regel parameters\n"
STRING_INVALID_CMDLINE, "Fout: Foutieve commandoregel-parameters\n"
STRING_NO_REMOTE, "Fout: Sleutels konden niet toegevoegd worden aan de remote machine\n"
STRING_CANNOT_FIND, "Fout: Het systeem kon de gespecificeerde registry sleutel of waarde niet vinden\n"
STRING_CANNOT_FIND, "Fout: Het systeem kon de gespecificeerde registersleutel of waarde niet vinden\n"
}

View file

@ -4,6 +4,7 @@
*
* Copyright 2008 Andrew Riedi
* Copyright 2008 Mikolaj Zalewski
* Copyright 2010 Łukasz Wojniłowicz
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@ -30,4 +31,9 @@ STRINGTABLE
STRING_ADD_USAGE, "REG ADD nazwa_klucza [/v nazwa_wartoœci | /ve] [/t typ] [/s separator] [/d dane] [/f]\n"
STRING_DELETE_USAGE, "REG DELETE nazwa_klucza [/v nazwa_wartoœci | /ve | /va] [/f]\n"
STRING_QUERY_USAGE, "REG QUERY nazwa_klucza [/v nazwa_wartoœci | /ve] [/s]\n"
STRING_SUCCESS, "Operacja zakończona pomyślnie\n"
STRING_INVALID_KEY, "Błąd: Niewłaściwa nazwa klucza\n"
STRING_INVALID_CMDLINE, "Błąd: Niewłaściwe parametry wiersza poleceń\n"
STRING_NO_REMOTE, "Błąd: Nie można dodać kluczy do zdalnej maszyny\n"
STRING_CANNOT_FIND, "Błąd: System nie mógł znaleźć podanej wartości lub klucza rejestru\n"
}

View file

@ -1,11 +1,12 @@
#include "Da.rc"
#include "En.rc"
#include "Ko.rc"
#include "Nl.rc"
#include "Pl.rc"
/* UTF-8 */
#include "Da.rc"
#include "De.rc"
#include "Es.rc"
#include "Fr.rc"
#include "It.rc"
#include "Ja.rc"

View file

@ -29,15 +29,15 @@ STRINGTABLE
{
STRING_INVPARMS, "Onjuist aantal parameters - Gebruik xcopy /? om hulp te krijgen\n"
STRING_INVPARM, "Onjuiste parameter '%s' - Gebruik xcopy /? om hulp te krijgen\n"
STRING_PAUSE, "Druk op <enter> om te beginnen met copiëren\n"
STRING_SIMCOPY, "%d bestand(en) zouden worden gecopiëerd\n"
STRING_COPY, "%d bestand(en) gecopiëerd\n"
STRING_QISDIR, "Is '%s' een bestand of een directory\n" \
STRING_PAUSE, "Druk op <enter> om te beginnen met kopiëren\n"
STRING_SIMCOPY, "%d bestand(en) zouden worden gekopieerd\n"
STRING_COPY, "%d bestand(en) gekopieerd\n"
STRING_QISDIR, "Is '%s' een bestand of een map\n" \
"op de bestemming?\n" \
"(B - Bestand, D - Directory)\n"
STRING_SRCPROMPT,"%s? (Ja|Nee)\n"
STRING_OVERWRITE,"Overschrijven %s? (Ja|Nee|Alles)\n"
STRING_COPYFAIL, "Copiëren van '%s' naar '%s' mislukt met r/c %d\n"
STRING_COPYFAIL, "Kopiëren van '%s' naar '%s' mislukt met r/c %d\n"
STRING_OPENFAIL, "Fout tijdens openen van '%s'\n"
STRING_READFAIL, "Fout tijdens lezen van '%s'\n"
STRING_YES_CHAR, "J"
@ -47,7 +47,7 @@ STRINGTABLE
STRING_DIR_CHAR, "D"
STRING_HELP,
"XCOPY - Copiëerd bron bestanden of directory bomen naar een bestemming\n\
"XCOPY - Kopieert bronbestanden of -mappen naar een bestemming\n\
\n\
Gebruik:\n\
XCOPY bron [bestemming] [/I] [/S] [/Q] [/F] [/L] [/W] [/T] [/N] [/U]\n\
@ -56,26 +56,26 @@ XCOPY bron [bestemming] [/I] [/S] [/Q] [/F] [/L] [/W] [/T] [/N] [/U]\n\
Parameters:\n\
\n\
[/I] Als bestemming niet bestaat en 2 of meer bestanden worden\n\
\tgecopiëerd, neem aan dat een directory werd bedoeld\n\
[/S] Copiëer directories en subdirectories\n\
[/E] Copiëer directories en subdirectories, inclusief lege\n\
[/Q] Toon geen namen tijdens copiëren (stil).\n\
[/F] Toon volledige bron- en bestemmingnamen tijdens copiëren\n\
[/L] Simuleer de actie, toon de namen die gecopiëerd zouden worden\n\
[/W] Wacht op gebruiker actie voordat de copiëeractie begint\n\
[/T] Creëert de lege directory structuur maar copiëert geen bestanden\n\
\tgekopieerd, neem aan dat een map werd bedoeld\n\
[/S] Kopieer mappen en submappen\n\
[/E] Kopieer mappen en submappen, inclusief lege\n\
[/Q] Toon geen namen tijdens kopiëren (stil).\n\
[/F] Toon volledige bron- en bestemmingnamen tijdens kopiëren\n\
[/L] Simuleer de actie, toon de namen die gekopieerd zouden worden\n\
[/W] Wacht op actie van de gebruiker voor het kopiëren begint\n\
[/T] Creëert een lege mapstructuur, maar kopieert geen bestanden\n\
[/Y] Onderdrukt gebruikersactie wanneer bestanden worden overschreven\n\
[/-Y] Vraagt gebruikersactie wanneer bestanden worden overschreven\n\
[/P] Vraagt gebruikersactie voor ieder bron bestand voor copiëren\n\
[/N] Copiëer m.b.v korte bestandsnamen\n\
[/U] Copiëer alleen bestanden die al bestaan op de bestemming\n\
[/P] Vraagt gebruikersactie voor ieder bronbestand voor kopiëren\n\
[/N] Kopieer m.b.v korte bestandsnamen\n\
[/U] Kopieer alleen bestanden die al bestaan op de bestemming\n\
[/R] Overschrijf alle schrijf-beveiligde bestanden\n\
[/H] Inclusief verborgen en systeem bestanden\n\
[/C] Ga door zelfs als er een fout optreed tijdens het copiëren\n\
[/A] Copiëer alleen bestanden met archiverings attribuut aan\n\
[/M] Copiëer alleen bestanden met archiverings attribuut aan, verwijderd\n\
[/C] Ga door zelfs als er een fout optreed tijdens het kopiëren\n\
[/A] Kopieer alleen bestanden met archiveringsattribuut aan\n\
[/M] Kopieer alleen bestanden met archiveringsattribuut aan, verwijdert\n\
\tdit archiveringsattribuut\n\
[/D | /D:m-d-y] Copiëer nieuwe bestanden of die gewijzigd zijn na de opgegeven\n\
\t\tdatum. Als geen detum wordt gegeven, copiëer alleen als bron nieuwer is.\n\n"
[/D | /D:m-d-y] Kopieer bestanden die nieuw zijn of gewijzigd zijn na de opgegeven\n\
\t\tdatum. Als geen datum wordt gegeven, kopieer alleen als bron nieuwer is.\n\n"
}

View file

@ -261,11 +261,13 @@ int wmain (int argc, WCHAR *argvW[])
WINE_TRACE("Destination : '%s'\n", wine_dbgstr_w(supplieddestination));
/* Extract required information from source specification */
XCOPY_ProcessSourceParm(suppliedsource, sourcestem, sourcespec, flags);
rc = XCOPY_ProcessSourceParm(suppliedsource, sourcestem, sourcespec, flags);
if (rc != RC_OK) return rc;
/* Extract required information from destination specification */
XCOPY_ProcessDestParm(supplieddestination, destinationstem,
rc = XCOPY_ProcessDestParm(supplieddestination, destinationstem,
destinationspec, sourcespec, flags);
if (rc != RC_OK) return rc;
/* Trace out the resulting information */
WINE_TRACE("Resolved parameters:\n");

View file

@ -0,0 +1,89 @@
/*
* PROJECT: Spider Solitaire
* LICENSE: See COPYING in top level directory
* FILE: base/applications/games/spider/lang/fr-FR.rc
* PURPOSE: French Language File for Spider Solitaire
* TRANSLATOR: Pierre Schweitzer
*/
#include "resource.h"
LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL
/* Dialogs */
IDD_CARDBACK DIALOGEX 6, 6, 186, 104
CAPTION "Sélectionnez le tarot des cartes"
FONT 8, "MS Shell Dlg"
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | DS_SHELLFONT
BEGIN
CONTROL "", IDC_CARDBACK1, "Static", SS_NOTIFY, 4, 7, 26, 32
CONTROL "", IDC_CARDBACK2, "Static", SS_NOTIFY, 34, 7, 26, 32
CONTROL "", IDC_CARDBACK3, "Static", SS_NOTIFY, 64, 7, 26, 32
CONTROL "", IDC_CARDBACK4, "Static", SS_NOTIFY, 94, 7, 26, 32
CONTROL "", IDC_CARDBACK5, "Static", SS_NOTIFY, 124, 7, 26, 32
CONTROL "", IDC_CARDBACK6, "Static", SS_NOTIFY, 154, 7, 26, 32
CONTROL "", IDC_CARDBACK7, "Static", SS_NOTIFY, 4, 46, 26, 32
CONTROL "", IDC_CARDBACK8, "Static", SS_NOTIFY, 34, 46, 26, 32
CONTROL "", IDC_CARDBACK9, "Static", SS_NOTIFY, 64, 46, 26, 32
CONTROL "", IDC_CARDBACK10, "Static", SS_NOTIFY, 94, 46, 26, 32
CONTROL "", IDC_CARDBACK11, "Static", SS_NOTIFY, 124, 46, 26, 32
CONTROL "", IDC_CARDBACK12, "Static", SS_NOTIFY, 154, 46, 26, 32
DEFPUSHBUTTON "OK", IDOK, 66, 84, 54, 13
PUSHBUTTON "Annuler", IDCANCEL, 126, 84, 54, 13
END
IDD_DIFFICULTY DIALOGEX DISCARDABLE 100, 100, 106, 80
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | DS_SHELLFONT
CAPTION "Difficulté"
FONT 8, "MS Shell Dlg"
BEGIN
AUTORADIOBUTTON "Facile : &une couleur", IDC_DIF_ONECOLOR, 8, 10, 80, 10, WS_GROUP | WS_TABSTOP
AUTORADIOBUTTON "Moyenne : &deux couleurs", IDC_DIF_TWOCOLORS, 8, 23, 80, 10
AUTORADIOBUTTON "Difficile : &quatre couleurs", IDC_DIF_FOURCOLORS, 8, 36, 80, 10
DEFPUSHBUTTON "OK", IDOK, 8, 58, 40, 14
PUSHBUTTON "Annuler", IDCANCEL, 58, 58, 40, 14
END
/* Strings */
STRINGTABLE
BEGIN
IDS_SPI_NAME "Spider"
IDS_SPI_ABOUT "Spider Solitaire par Gregor Schneider\n\nCardLib version 1.0"
IDS_SPI_QUIT "Quitter le jeu actuel ?"
IDS_SPI_WIN "Félicitations, Vous avez gagné !"
IDS_SPI_DEAL "Redistribuer ?"
END
/* Menus */
IDR_MENU1 MENU DISCARDABLE
BEGIN
POPUP "&Partie"
BEGIN
MENUITEM "&Donne\tF2", IDM_GAME_NEW
MENUITEM SEPARATOR
MENUITEM "&Jeux...", IDM_GAME_DECK
MENUITEM SEPARATOR
MENUITEM "&Quitter", IDM_GAME_EXIT
END
POPUP "&Aide"
BEGIN
MENUITEM "&Sommaire\tF1", IDM_HELP_CONTENTS
MENUITEM "&À propos", IDM_HELP_ABOUT
END
END
/* Accelerator */
IDR_ACCELERATOR1 ACCELERATORS DISCARDABLE
BEGIN
VK_F1, IDM_HELP_CONTENTS, VIRTKEY, NOINVERT
VK_F2, IDM_GAME_NEW, VIRTKEY, NOINVERT
END

View file

@ -9,6 +9,7 @@ IDI_SPIDER ICON DISCARDABLE "spider.ico"
#include "lang/de-DE.rc"
#include "lang/en-US.rc"
#include "lang/es-ES.rc"
#include "lang/fr-FR.rc"
#include "lang/hu-HU.rc"
#include "lang/it-IT.rc"
#include "lang/ja-JP.rc"

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

View file

@ -6,5 +6,5 @@
<library>gdi32</library>
<library>shdocvw</library>
<file>main.c</file>
<file>version.rc</file>
<file>iexplore.rc</file>
</module>

View file

@ -25,3 +25,6 @@
#define WINE_PRODUCTVERSION_STR "6.0.2900.2180"
#include "wine/wine_common_ver.rc"
/* @makedep: iexplore.ico */
1 ICON iexplore.ico

View file

@ -49,7 +49,7 @@ BEGIN
MENUITEM SEPARATOR
POPUP "Zoom"
BEGIN
POPUP "User defined"
POPUP "Défini par l'utilisateur"
BEGIN
MENUITEM "12,5%", IDM_VIEWZOOM125
MENUITEM "25%", IDM_VIEWZOOM25
@ -60,8 +60,8 @@ BEGIN
MENUITEM "800%", IDM_VIEWZOOM800
END
MENUITEM SEPARATOR
MENUITEM "Show grid", IDM_VIEWSHOWGRID
MENUITEM "Show miniature", IDM_VIEWSHOWMINIATURE
MENUITEM "Montrer la grille", IDM_VIEWSHOWGRID
MENUITEM "Montrer la miniature", IDM_VIEWSHOWMINIATURE
END
MENUITEM "Plein écran\tCtrl+F", IDM_VIEWFULLSCREEN
END
@ -200,6 +200,6 @@ BEGIN
IDS_TOOLTIP16, "Rectangle arrondi"
IDS_OPENFILTER, "Bitmap (*.bmp;*.dib)\1*.bmp;*.dib\1Tous les fichiers (*.*)\1*.*\1"
IDS_SAVEFILTER, "Bitmap 24 bit (*.bmp;*.dib)\1*.bmp;*.dib\1"
IDS_FILESIZE, "%d bytes"
IDS_PRINTRES, "%d x %d pixels per meter"
IDS_FILESIZE, "%d octets"
IDS_PRINTRES, "%d x %d pixels par mètre"
END

View file

@ -416,14 +416,11 @@ INT_PTR CALLBACK modify_binary_dlgproc(HWND hwndDlg, UINT uMsg, WPARAM wParam, L
if ((hwndValue = GetDlgItem(hwndDlg, IDC_VALUE_DATA)))
{
len = (UINT) HexEdit_GetBufferSize(hwndValue);
if (len != valueDataLen && len > 0)
{
if (len > 0 && binValueData)
binValueData = HeapReAlloc(GetProcessHeap(), 0, binValueData, len);
}
if (len > 0)
{
else
binValueData = HeapAlloc(GetProcessHeap(), 0, len + 1);
HexEdit_CopyBuffer(hwndValue, binValueData, len);
}
valueDataLen = len;
}
EndDialog(hwndDlg, IDOK);
@ -642,7 +639,7 @@ BOOL ModifyValue(HWND hwnd, HKEY hKey, LPCTSTR valueName, BOOL EditBin)
#endif
if(valueDataLen > 0)
{
if(!(binValueData = HeapAlloc(GetProcessHeap(), 0, valueDataLen)))
if(!(binValueData = HeapAlloc(GetProcessHeap(), 0, valueDataLen + 1)))
{
error(hwnd, IDS_TOO_BIG_VALUE, valueDataLen);
goto done;

View file

@ -30,7 +30,7 @@ typedef struct
INT nLines;
INT nVisibleLinesComplete;
INT nVisibleLines;
INT Position;
INT Index;
INT LineHeight;
INT CharWidth;
HFONT hFont;
@ -43,6 +43,7 @@ typedef struct
BOOL EditingField;
INT CaretCol;
INT CaretLine;
BOOL InMid;
} HEXEDIT_DATA, *PHEXEDIT_DATA;
/* hit test codes */
@ -112,7 +113,7 @@ HEXEDIT_MoveCaret(PHEXEDIT_DATA hed, BOOL Scroll)
}
if(hed->EditingField)
SetCaretPos(hed->LeftMargin + ((4 + hed->AddressSpacing + (3 * hed->CaretCol)) * hed->CharWidth) - 1, (hed->CaretLine - si.nPos) * hed->LineHeight);
SetCaretPos(hed->LeftMargin + ((4 + hed->AddressSpacing + (3 * hed->CaretCol) + hed->InMid * 2) * hed->CharWidth) - 1, (hed->CaretLine - si.nPos) * hed->LineHeight);
else
SetCaretPos(hed->LeftMargin + ((4 + hed->AddressSpacing + hed->SplitSpacing + (3 * hed->ColumnsPerLine) + hed->CaretCol) * hed->CharWidth) - 2, (hed->CaretLine - si.nPos) * hed->LineHeight);
}
@ -314,10 +315,10 @@ HEXEDIT_HitRegionTest(PHEXEDIT_DATA hed, POINTS pt)
}
static DWORD
HEXEDIT_PositionFromPoint(PHEXEDIT_DATA hed, POINTS pt, DWORD Hit, POINT *EditPos, BOOL *EditField)
HEXEDIT_IndexFromPoint(PHEXEDIT_DATA hed, POINTS pt, DWORD Hit, POINT *EditPos, BOOL *EditField)
{
SCROLLINFO si;
DWORD Pos, bufsize;
DWORD Index, bufsize;
si.cbSize = sizeof(SCROLLINFO);
si.fMask = SIF_POS;
@ -353,18 +354,18 @@ HEXEDIT_PositionFromPoint(PHEXEDIT_DATA hed, POINTS pt, DWORD Hit, POINT *EditPo
if(pt.x > 0)
{
INT BlockWidth = (*EditField ? hed->CharWidth * 3 : hed->CharWidth);
EditPos->x = min(hed->ColumnsPerLine, pt.x / BlockWidth);
EditPos->x = min(hed->ColumnsPerLine, (pt.x + BlockWidth / 2) / BlockWidth);
}
bufsize = (hed->hBuffer ? (DWORD) LocalSize(hed->hBuffer) : 0);
Pos = (EditPos->y * hed->ColumnsPerLine) + EditPos->x;
if(Pos > bufsize)
Index = (EditPos->y * hed->ColumnsPerLine) + EditPos->x;
if(Index > bufsize)
{
INT tmp = bufsize % hed->ColumnsPerLine;
Pos = bufsize;
Index = bufsize;
EditPos->x = (tmp == 0 ? hed->ColumnsPerLine : tmp);
}
return Pos;
return Index;
}
/*** Control specific messages ************************************************/
@ -393,7 +394,7 @@ HEXEDIT_HEM_LOADBUFFER(PHEXEDIT_DATA hed, PVOID Buffer, DWORD Size)
else
{
hed->hBuffer = LocalFree(hed->hBuffer);
hed->Position = 0;
hed->Index = 0;
HEXEDIT_Update(hed);
return 0;
@ -416,13 +417,13 @@ HEXEDIT_HEM_LOADBUFFER(PHEXEDIT_DATA hed, PVOID Buffer, DWORD Size)
LocalUnlock(hed->hBuffer);
}
hed->Position = 0;
hed->Index = 0;
HEXEDIT_Update(hed);
return Size;
}
else if(hed->hBuffer)
{
hed->Position = 0;
hed->Index = 0;
hed->hBuffer = LocalFree(hed->hBuffer);
HEXEDIT_Update(hed);
}
@ -466,12 +467,16 @@ static LRESULT
HEXEDIT_HEM_SETMAXBUFFERSIZE(PHEXEDIT_DATA hed, DWORD nMaxSize)
{
hed->MaxBuffer = nMaxSize;
if(hed->MaxBuffer > 0 && hed->hBuffer && LocalSize(hed->hBuffer) > hed->MaxBuffer)
if (hed->MaxBuffer == 0)
{
/* truncate the buffer */
hed->hBuffer = LocalReAlloc(hed->hBuffer, hed->MaxBuffer, LMEM_MOVEABLE);
HEXEDIT_Update(hed);
hed->hBuffer = LocalFree(hed->hBuffer);
return 0;
}
if (hed->hBuffer)
hed->hBuffer = LocalReAlloc(hed->hBuffer, hed->MaxBuffer, LMEM_MOVEABLE);
else
hed->hBuffer = LocalAlloc(LMEM_MOVEABLE, hed->MaxBuffer);
HEXEDIT_Update(hed);
return 0;
}
@ -496,6 +501,7 @@ HEXEDIT_WM_NCCREATE(HWND hWnd, CREATESTRUCT *cs)
hed->AddressSpacing = 2;
hed->SplitSpacing = 2;
hed->EditingField = TRUE; /* in hexdump field */
hed->InMid = FALSE;
SetWindowLongPtr(hWnd, 0, (DWORD_PTR)hed);
HEXEDIT_Update(hed);
@ -754,10 +760,11 @@ HEXEDIT_WM_LBUTTONDOWN(PHEXEDIT_DATA hed, INT Buttons, POINTS Pt)
UNREFERENCED_PARAMETER(Buttons);
SetFocus(hed->hWndSelf);
hed->Position = HEXEDIT_PositionFromPoint(hed, Pt, Hit, &EditPos, &NewField);
hed->Index = HEXEDIT_IndexFromPoint(hed, Pt, Hit, &EditPos, &NewField);
hed->EditingField = NewField;
hed->CaretCol = EditPos.x;
hed->CaretLine = EditPos.y;
hed->InMid = FALSE;
HEXEDIT_MoveCaret(hed, TRUE);
@ -768,6 +775,7 @@ static BOOL
HEXEDIT_WM_KEYDOWN(PHEXEDIT_DATA hed, INT VkCode)
{
size_t bufsize;
PBYTE buf;
if(GetKeyState(VK_MENU) & 0x8000)
{
return FALSE;
@ -777,72 +785,113 @@ HEXEDIT_WM_KEYDOWN(PHEXEDIT_DATA hed, INT VkCode)
switch(VkCode)
{
case VK_LEFT:
if(hed->Position > 0)
case VK_DELETE:
if (hed->InMid && hed->EditingField)
{
if(--hed->CaretCol < 0)
buf = (PBYTE) LocalLock(hed->hBuffer);
if (buf)
{
hed->CaretLine--;
hed->CaretCol = hed->ColumnsPerLine;
MoveMemory(buf + hed->Index, buf + hed->Index + 1,
bufsize - hed->Index - 1);
LocalUnlock(hed->hBuffer);
}
else
hed->Position--;
HexEdit_SetMaxBufferSize(hed->hWndSelf, bufsize - 1);
hed->InMid = FALSE;
}
else if (hed->Index < bufsize)
{
buf = (PBYTE) LocalLock(hed->hBuffer);
if (buf)
{
MoveMemory(buf + hed->Index, buf + hed->Index + 1,
bufsize - hed->Index - 1);
LocalUnlock(hed->hBuffer);
}
HexEdit_SetMaxBufferSize(hed->hWndSelf, bufsize - 1);
}
InvalidateRect(hed->hWndSelf, NULL, TRUE);
HEXEDIT_MoveCaret(hed, TRUE);
break;
case VK_BACK:
if (hed->InMid && hed->EditingField)
{
buf = (PBYTE) LocalLock(hed->hBuffer);
if (buf)
{
MoveMemory(buf + hed->Index, buf + hed->Index + 1,
bufsize - hed->Index - 1);
LocalUnlock(hed->hBuffer);
}
HexEdit_SetMaxBufferSize(hed->hWndSelf, bufsize - 1);
hed->InMid = FALSE;
}
else if (hed->Index > 0)
{
buf = (PBYTE) LocalLock(hed->hBuffer);
if (buf)
{
MoveMemory(buf + hed->Index - 1, buf + hed->Index,
bufsize - hed->Index);
LocalUnlock(hed->hBuffer);
}
HexEdit_SetMaxBufferSize(hed->hWndSelf, bufsize - 1);
hed->Index--;
hed->CaretCol = hed->Index % hed->ColumnsPerLine;
hed->CaretLine = hed->Index / hed->ColumnsPerLine;
hed->InMid = FALSE;
}
InvalidateRect(hed->hWndSelf, NULL, TRUE);
HEXEDIT_MoveCaret(hed, TRUE);
break;
case VK_LEFT:
if (hed->Index > 0)
{
hed->Index--;
hed->CaretCol = hed->Index % hed->ColumnsPerLine;
hed->CaretLine = hed->Index / hed->ColumnsPerLine;
hed->InMid = FALSE;
HEXEDIT_MoveCaret(hed, TRUE);
}
break;
case VK_RIGHT:
if(hed->Position < (INT)bufsize)
if (hed->Index < (INT)bufsize)
{
if(++hed->CaretCol > hed->ColumnsPerLine)
{
hed->CaretCol = 0;
hed->CaretLine++;
}
else
hed->Position++;
}
hed->Index++;
hed->CaretCol = hed->Index % hed->ColumnsPerLine;
hed->CaretLine = hed->Index / hed->ColumnsPerLine;
hed->InMid = FALSE;
HEXEDIT_MoveCaret(hed, TRUE);
}
break;
case VK_UP:
if(hed->Position > 0)
if (hed->Index >= hed->ColumnsPerLine)
{
if(hed->CaretLine <= 0)
{
hed->CaretCol = 0;
hed->Position = 0;
}
else
{
hed->CaretLine--;
hed->Position -= hed->ColumnsPerLine;
}
}
hed->Index -= hed->ColumnsPerLine;
hed->CaretCol = hed->Index % hed->ColumnsPerLine;
hed->CaretLine = hed->Index / hed->ColumnsPerLine;
hed->InMid = FALSE;
HEXEDIT_MoveCaret(hed, TRUE);
}
break;
case VK_DOWN:
if(hed->Position <= (INT)bufsize)
if (hed->Index + hed->ColumnsPerLine <= (INT) bufsize)
{
if(hed->CaretLine < hed->nLines - 1)
{
hed->Position += hed->ColumnsPerLine;
hed->CaretLine++;
if(hed->Position > (INT)bufsize)
{
hed->Position = (INT) bufsize;
hed->CaretLine = (hed->nLines > 0 ? hed->nLines - 1 : 0);
hed->CaretCol = (INT) bufsize % hed->ColumnsPerLine;
}
hed->Index += hed->ColumnsPerLine;
hed->CaretCol = hed->Index % hed->ColumnsPerLine;
hed->CaretLine = hed->Index / hed->ColumnsPerLine;
}
else
{
INT tmp = (INT) bufsize % hed->ColumnsPerLine;
hed->Position = (INT) bufsize;
hed->CaretCol = (tmp == 0 ? hed->ColumnsPerLine : tmp);
}
hed->Index = bufsize;
hed->CaretCol = hed->Index % hed->ColumnsPerLine;
hed->CaretLine = hed->Index / hed->ColumnsPerLine;
}
hed->InMid = FALSE;
HEXEDIT_MoveCaret(hed, TRUE);
break;
}
@ -850,6 +899,87 @@ HEXEDIT_WM_KEYDOWN(PHEXEDIT_DATA hed, INT VkCode)
return FALSE;
}
static BOOL
HEXEDIT_WM_CHAR(PHEXEDIT_DATA hed, WCHAR ch)
{
size_t bufsize;
PBYTE buf;
bufsize = (hed->hBuffer ? LocalSize(hed->hBuffer) : 0);
if (!hed->EditingField)
{
if (0x20 <= ch && ch < 0x7F)
{
HexEdit_SetMaxBufferSize(hed->hWndSelf, bufsize + 1);
buf = (PBYTE) LocalLock(hed->hBuffer);
if (buf)
{
MoveMemory(buf + hed->Index + 1, buf + hed->Index,
bufsize - hed->Index);
buf[hed->Index] = ch;
LocalUnlock(hed->hBuffer);
}
hed->Index++;
hed->CaretCol = hed->Index % hed->ColumnsPerLine;
hed->CaretLine = hed->Index / hed->ColumnsPerLine;
InvalidateRect(hed->hWndSelf, NULL, TRUE);
HEXEDIT_MoveCaret(hed, TRUE);
return FALSE;
}
}
else
{
if (('0' <= ch && ch <= '9') || ('A' <= ch && ch <= 'F') ||
('a' <= ch && ch <= 'f'))
{
if (hed->InMid)
{
buf = (PBYTE) LocalLock(hed->hBuffer);
if (buf)
{
if ('0' <= ch && ch <= '9')
buf[hed->Index] |= ch - '0';
else if ('A' <= ch && ch <= 'F')
buf[hed->Index] |= ch + 10 - 'A';
else if ('a' <= ch && ch <= 'f')
buf[hed->Index] |= ch + 10 - 'a';
LocalUnlock(hed->hBuffer);
}
hed->InMid = FALSE;
hed->Index++;
hed->CaretCol = hed->Index % hed->ColumnsPerLine;
hed->CaretLine = hed->Index / hed->ColumnsPerLine;
InvalidateRect(hed->hWndSelf, NULL, TRUE);
HEXEDIT_MoveCaret(hed, TRUE);
}
else
{
HexEdit_SetMaxBufferSize(hed->hWndSelf, bufsize + 1);
buf = (PBYTE) LocalLock(hed->hBuffer);
if (buf)
{
MoveMemory(buf + hed->Index + 1, buf + hed->Index,
bufsize - hed->Index);
if ('0' <= ch && ch <= '9')
buf[hed->Index] = (ch - '0') << 4;
else if ('A' <= ch && ch <= 'F')
buf[hed->Index] = (ch + 10 - 'A') << 4;
else if ('a' <= ch && ch <= 'f')
buf[hed->Index] = (ch + 10 - 'a') << 4;
LocalUnlock(hed->hBuffer);
}
hed->InMid = TRUE;
hed->CaretCol = hed->Index % hed->ColumnsPerLine;
hed->CaretLine = hed->Index / hed->ColumnsPerLine;
InvalidateRect(hed->hWndSelf, NULL, TRUE);
HEXEDIT_MoveCaret(hed, TRUE);
}
return FALSE;
}
}
return TRUE;
}
static LRESULT
HEXEDIT_WM_SIZE(PHEXEDIT_DATA hed, DWORD sType, WORD NewWidth, WORD NewHeight)
{
@ -878,6 +1008,9 @@ HexEditWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
case WM_KEYDOWN:
return HEXEDIT_WM_KEYDOWN(hed, (INT)wParam);
case WM_CHAR:
return HEXEDIT_WM_CHAR(hed, (WCHAR)wParam);
case WM_VSCROLL:
return HEXEDIT_WM_VSCROLL(hed, HIWORD(wParam), LOWORD(wParam));

View file

@ -543,7 +543,8 @@ BOOL RefreshListView(HWND hwndLV, HKEY hKey, LPCTSTR keyPath)
errCode = RegQueryInfoKey(hNewKey, NULL, NULL, NULL, NULL, &max_sub_key_len, NULL,
&val_count, &max_val_name_len, &max_val_size, NULL, NULL);
if (errCode == ERROR_SUCCESS) {
if (errCode == ERROR_SUCCESS)
{
TCHAR* ValName = HeapAlloc(GetProcessHeap(), 0, ++max_val_name_len * sizeof(TCHAR));
DWORD dwValNameLen = max_val_name_len;
BYTE* ValBuf = HeapAlloc(GetProcessHeap(), 0, max_val_size + sizeof(TCHAR));
@ -557,9 +558,15 @@ BOOL RefreshListView(HWND hwndLV, HKEY hKey, LPCTSTR keyPath)
while (RegEnumValue(hNewKey, dwIndex, ValName, &dwValNameLen, NULL, &dwValType, ValBuf, &dwValSize) == ERROR_SUCCESS) {
/* Remove unwanted path from key name */
TCHAR *pLastBl = _tcsrchr(ValName, TEXT('\\'));
if (pLastBl != NULL) ++pLastBl; else pLastBl = ValName;
if (pLastBl != NULL)
++pLastBl;
else
pLastBl = ValName;
/* Add a terminating 0 character. Usually this is only necessary for strings. */
((TCHAR*)ValBuf)[dwValSize/sizeof(TCHAR)] = 0;
ValBuf[dwValSize] = 0;
#ifdef UNICODE
ValBuf[dwValSize + 1] = 0;
#endif
AddEntryToList(hwndLV, pLastBl, dwValType, ValBuf, dwValSize, -1, TRUE);
dwValNameLen = max_val_name_len;
dwValSize = max_val_size;

View file

@ -4,6 +4,7 @@
* Copyright 1997 Henrik Olsen
* Copyright 2002 Sylvain Petreolle <spetreolle@yahoo.fr>
* Copyright 2008 Jens Albretsen<jens@albretsen.dk>
* 2010 Thomas Larsen
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@ -22,12 +23,16 @@
#include "winhelp_res.h"
#pragma code_page(65001)
LANGUAGE LANG_DANISH, SUBLANG_DEFAULT
/* Menu */
MAIN_MENU MENU LANGUAGE LANG_DANISH, SUBLANG_DEFAULT
MAIN_MENU MENU
{
POPUP "&Filer" {
MENUITEM "Å&ben...", MNID_FILE_OPEN
MENUITEM "Å&ben...", MNID_FILE_OPEN
MENUITEM SEPARATOR
MENUITEM "&Udskriv emne", MNID_FILE_PRINT
MENUITEM "&Indstil printer", MNID_FILE_SETUP
@ -37,9 +42,9 @@ MAIN_MENU MENU LANGUAGE LANG_DANISH, SUBLANG_DEFAULT
POPUP "&Rediger" {
MENUITEM "K&opier...", MNID_EDIT_COPYDLG
MENUITEM SEPARATOR
MENUITEM "&Anmærk...", MNID_EDIT_ANNOTATE
MENUITEM "&Anmærk...", MNID_EDIT_ANNOTATE
}
POPUP "Bog&mærke" {
POPUP "Bog&mærke" {
MENUITEM "&Definer...", MNID_BKMK_DEFINE
}
POPUP "&Options" {
@ -58,18 +63,18 @@ MAIN_MENU MENU LANGUAGE LANG_DANISH, SUBLANG_DEFAULT
END
MENUITEM "Use system colors", MNID_OPTS_SYSTEM_COLORS
}
POPUP "&Hjælp" {
MENUITEM "&Brug af Hjælp", MNID_HELP_HELPON
MENUITEM "Altid &øverst", MNID_HELP_HELPTOP
POPUP "&Hjælp" {
MENUITEM "&Brug af Hjælp", MNID_HELP_HELPON
MENUITEM "Altid &øverst", MNID_HELP_HELPTOP
MENUITEM SEPARATOR
MENUITEM "&Information...", MNID_HELP_ABOUT
#ifdef WINELIB
MENUITEM "Om &WINE", MNID_HELP_WINE
MENUITEM "Om &Wine", MNID_HELP_WINE
#endif
}
}
IDD_INDEX DIALOG DISCARDABLE 0, 0, 200, 190 LANGUAGE LANG_DANISH, SUBLANG_DEFAULT
IDD_INDEX DIALOG DISCARDABLE 0, 0, 200, 190
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Shell Dlg"
CAPTION "Index"
@ -77,21 +82,52 @@ CAPTION "Index"
LISTBOX IDC_INDEXLIST, 10, 10, 180, 150, LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_BORDER
}
/* Strings */
STRINGTABLE DISCARDABLE LANGUAGE LANG_DANISH, SUBLANG_DEFAULT
IDD_SEARCH DIALOG DISCARDABLE 0, 0, 200, 190
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Shell Dlg"
CAPTION "Søg"
{
STID_WINE_HELP, "WINE Hjælp"
LTEXT "Er ikke blevet implementeret endnu", -1, 10, 10, 180, 150
}
/* Strings */
STRINGTABLE DISCARDABLE
{
STID_WINE_HELP, "Wine Hjælp"
STID_WHERROR, "FEJL"
STID_WARNING, "ADVARSEL"
STID_INFO, "Information"
STID_NOT_IMPLEMENTED, "Ikke implementeret"
STID_HLPFILE_ERROR_s, "Fejl ved indlæsning af filen `%s'"
STID_HLPFILE_ERROR_s, "Fejl ved indlæsning af filen `%s'"
STID_INDEX, "&Indhold"
STID_CONTENTS, "Summary"
STID_BACK, "&Tilbage"
STID_ALL_FILES, "Alle filer (*.*)"
STID_HELP_FILES_HLP, "Hjælpe filer (*.hlp)"
STID_HELP_FILES_HLP, "Hjælpe filer (*.hlp)"
STID_FILE_NOT_FOUND_s "Kan ikke finde '%s'. Vil du selv finde filen?"
STID_NO_RICHEDIT "Kan ikke finde en 'richedit' implementering... Afbryder"
STID_PSH_INDEX, "Help topics: "
}
CONTEXT_MENU MENU
BEGIN
POPUP ""
BEGIN
MENUITEM "Notat...", MNID_CTXT_ANNOTATE
MENUITEM "Kopier", MNID_CTXT_COPY
MENUITEM "Udskriv...", MNID_CTXT_PRINT
POPUP "Skrifttype"
BEGIN
MENUITEM "Lille", MNID_CTXT_FONTS_SMALL
MENUITEM "Normal", MNID_CTXT_FONTS_NORMAL
MENUITEM "Stor", MNID_CTXT_FONTS_LARGE
END
POPUP "Bevar Hjælp øverst"
BEGIN
MENUITEM "Standard", MNID_CTXT_HELP_DEFAULT
MENUITEM "Synlig", MNID_CTXT_HELP_VISIBLE
MENUITEM "Usynlig", MNID_CTXT_HELP_NONVISIBLE
END
MENUITEM "Benyt systemfarver", MNID_CTXT_SYSTEM_COLORS
END
END

View file

@ -59,7 +59,7 @@ MAIN_MENU MENU LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL
END
MENUITEM "Usa colori di sistema", MNID_OPTS_SYSTEM_COLORS
}
POPUP "&?" {
POPUP "&Aiuto" {
MENUITEM "&Aiuto sulla guida", MNID_HELP_HELPON
MENUITEM "Sempre in primo &piano", MNID_HELP_HELPTOP
MENUITEM SEPARATOR
@ -70,8 +70,23 @@ MAIN_MENU MENU LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL
}
}
/* Strings */
IDD_INDEX DIALOG DISCARDABLE 0, 0, 200, 190 LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Shell Dlg"
CAPTION "Indice"
{
LISTBOX IDC_INDEXLIST, 10, 10, 180, 150, LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_BORDER
}
IDD_SEARCH DIALOG DISCARDABLE 0, 0, 200, 190 LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Shell Dlg"
CAPTION "Cerca"
{
LTEXT "Non implementato.", -1, 10, 10, 180, 150
}
/* Strings */
STRINGTABLE DISCARDABLE LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL
{
STID_WINE_HELP, "Guida di WINE"
@ -89,3 +104,26 @@ STID_FILE_NOT_FOUND_s "Non è stato possibile trovare '%s'. Vuoi cercare questo
STID_NO_RICHEDIT "Non è stato possibile trovare un'implementazione richedit... Annullando"
STID_PSH_INDEX, "Argomenti di aiuto: "
}
CONTEXT_MENU MENU LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL
BEGIN
POPUP ""
BEGIN
MENUITEM "Annotazione...", MNID_CTXT_ANNOTATE
MENUITEM "Copia", MNID_CTXT_COPY
MENUITEM "Stampa...", MNID_CTXT_PRINT
POPUP "Caratteri"
BEGIN
MENUITEM "Piccolo", MNID_CTXT_FONTS_SMALL
MENUITEM "Normale", MNID_CTXT_FONTS_NORMAL
MENUITEM "Grande", MNID_CTXT_FONTS_LARGE
END
POPUP "Aiuto sempre visibile"
BEGIN
MENUITEM "Default", MNID_CTXT_HELP_DEFAULT
MENUITEM "Visibile", MNID_CTXT_HELP_VISIBLE
MENUITEM "Non visibile", MNID_CTXT_HELP_NONVISIBLE
END
MENUITEM "Usa i colori di sistema", MNID_CTXT_SYSTEM_COLORS
END
END

View file

@ -23,15 +23,17 @@
#pragma code_page(65001)
LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL
/* Menu */
MAIN_MENU MENU LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL
MAIN_MENU MENU
{
POPUP "&Bestand" {
MENUITEM "&Openen", MNID_FILE_OPEN
MENUITEM SEPARATOR
MENUITEM "Af&drukken", MNID_FILE_PRINT
MENUITEM "&Printerinstellingen...", MNID_FILE_SETUP
MENUITEM "&Pagina-instellingen...", MNID_FILE_SETUP
MENUITEM SEPARATOR
MENUITEM "&Afsluiten", MNID_FILE_EXIT
}
@ -50,7 +52,7 @@ MAIN_MENU MENU LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL
MENUITEM "Zichtbaar", MNID_OPTS_HELP_VISIBLE
MENUITEM "Niet zichtbaar", MNID_OPTS_HELP_NONVISIBLE
END
MENUITEM "Historie", MNID_OPTS_HISTORY
MENUITEM "Geschiedenis", MNID_OPTS_HISTORY
POPUP "Lettertype"
BEGIN
MENUITEM "Klein", MNID_OPTS_FONTS_SMALL
@ -70,7 +72,7 @@ MAIN_MENU MENU LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL
}
}
IDD_INDEX DIALOG DISCARDABLE 0, 0, 200, 190 LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL
IDD_INDEX DIALOG DISCARDABLE 0, 0, 200, 190
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Shell Dlg"
CAPTION "Index"
@ -78,7 +80,7 @@ CAPTION "Index"
LISTBOX IDC_INDEXLIST, 10, 10, 180, 150, LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_BORDER
}
IDD_SEARCH DIALOG DISCARDABLE 0, 0, 200, 190 LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL
IDD_SEARCH DIALOG DISCARDABLE 0, 0, 200, 190
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Shell Dlg"
CAPTION "Zoeken"
@ -87,7 +89,7 @@ CAPTION "Zoeken"
}
/* Strings */
STRINGTABLE DISCARDABLE LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL
STRINGTABLE DISCARDABLE
{
STID_WINE_HELP, "Wine Help"
STID_WHERROR, "FOUT"
@ -102,17 +104,17 @@ STID_ALL_FILES, "Alle bestanden (*.*)"
STID_HELP_FILES_HLP, "Helpbestanden (*.hlp)"
STID_FILE_NOT_FOUND_s "Kan '%s' niet openen. Wilt u zelf dit bestand zoeken?"
STID_NO_RICHEDIT "Kan geen richedit implementatie vinden... Actie afgebroken"
STID_PSH_INDEX, "Help onderwerpen: "
STID_PSH_INDEX, "Help-onderwerpen: "
}
CONTEXT_MENU MENU LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL
CONTEXT_MENU MENU
BEGIN
POPUP ""
BEGIN
MENUITEM "Annotering...", MNID_CTXT_ANNOTATE
MENUITEM "Kopiëren", MNID_CTXT_COPY
MENUITEM "Print...", MNID_CTXT_PRINT
POPUP "Lettertypes"
MENUITEM "Afdrukken ...", MNID_CTXT_PRINT
POPUP "Lettertype"
BEGIN
MENUITEM "Klein", MNID_CTXT_FONTS_SMALL
MENUITEM "Normaal", MNID_CTXT_FONTS_NORMAL

View file

@ -0,0 +1,202 @@
/*
* Help Viewer
*
* Copyright 1996 Ulrich Schmid
* Copyright 2002 Sylvain Petreolle <spetreolle@yahoo.fr>
*
* Ukrainian language support
*
* Copyright (C) 2010 Igor Paliychuk
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include "winhelp_res.h"
/* UTF-8 */
#pragma code_page(65001)
/* Menu */
MAIN_MENU MENU LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT
{
POPUP "&Файл" {
MENUITEM "&Відкрити", MNID_FILE_OPEN
MENUITEM SEPARATOR
MENUITEM "&Друк", MNID_FILE_PRINT
MENUITEM "Налаштування &принтера...", MNID_FILE_SETUP
MENUITEM SEPARATOR
MENUITEM "В&ихід", MNID_FILE_EXIT
}
POPUP "&Правка" {
MENUITEM "&Копіювати...", MNID_EDIT_COPYDLG
MENUITEM SEPARATOR
MENUITEM "&Annotate...", MNID_EDIT_ANNOTATE
}
POPUP "&Закладка" {
MENUITEM "&Define...", MNID_BKMK_DEFINE
}
POPUP "&Налаштування" {
POPUP "Help always visible"
BEGIN
MENUITEM "За замовчуванням", MNID_OPTS_HELP_DEFAULT
MENUITEM "Видимий", MNID_OPTS_HELP_VISIBLE
MENUITEM "Невидимий", MNID_OPTS_HELP_NONVISIBLE
END
MENUITEM "Історія", MNID_OPTS_HISTORY
POPUP "Шрифти"
BEGIN
MENUITEM "Малий", MNID_OPTS_FONTS_SMALL
MENUITEM "Нормальний", MNID_OPTS_FONTS_NORMAL
MENUITEM "Великий", MNID_OPTS_FONTS_LARGE
END
MENUITEM "Використати системні кольори", MNID_OPTS_SYSTEM_COLORS
}
POPUP "&Довідка" {
MENUITEM "Help &on help", MNID_HELP_HELPON
MENUITEM "Завжди &зверху", MNID_HELP_HELPTOP
MENUITEM SEPARATOR
MENUITEM "&Інформація...", MNID_HELP_ABOUT
#ifdef WINELIB
MENUITEM "&Про Wine", MNID_HELP_WINE
#endif
}
}
MAIN_MENU MENU LANGUAGE LANG_UKRAINIAN, SUBLANG_NEUTRAL
{
POPUP "&Файл" {
MENUITEM "&Відкрити", MNID_FILE_OPEN
MENUITEM SEPARATOR
MENUITEM "&Друк", MNID_FILE_PRINT
MENUITEM "Налаштування &принтера...", MNID_FILE_SETUP
MENUITEM SEPARATOR
MENUITEM "В&ихід", MNID_FILE_EXIT
}
POPUP "&Правка" {
MENUITEM "&Копіювати...", MNID_EDIT_COPYDLG
MENUITEM SEPARATOR
MENUITEM "&Annotate...", MNID_EDIT_ANNOTATE
}
POPUP "&Закладка" {
MENUITEM "&Define...", MNID_BKMK_DEFINE
}
POPUP "&Налаштування" {
POPUP "Help always visible"
BEGIN
MENUITEM "За замовчуванням", MNID_OPTS_HELP_DEFAULT
MENUITEM "Видимий", MNID_OPTS_HELP_VISIBLE
MENUITEM "Невидимий", MNID_OPTS_HELP_NONVISIBLE
END
MENUITEM "Історія", MNID_OPTS_HISTORY
POPUP "Шрифти"
BEGIN
MENUITEM "Малий", MNID_OPTS_FONTS_SMALL
MENUITEM "Нормальний", MNID_OPTS_FONTS_NORMAL
MENUITEM "Великий", MNID_OPTS_FONTS_LARGE
END
MENUITEM "Використати системні кольори", MNID_OPTS_SYSTEM_COLORS
}
POPUP "&Довідка" {
MENUITEM "Help &on help", MNID_HELP_HELPON
MENUITEM "Завжди &зверху", MNID_HELP_HELPTOP
MENUITEM SEPARATOR
MENUITEM "&Інформація...", MNID_HELP_ABOUT
#ifdef WINELIB
MENUITEM "&Про Wine", MNID_HELP_WINE
#endif
}
}
IDD_INDEX DIALOG DISCARDABLE 0, 0, 200, 190 LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Shell Dlg"
CAPTION "Index"
{
LISTBOX IDC_INDEXLIST, 10, 10, 180, 150, LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_BORDER
}
IDD_SEARCH DIALOG DISCARDABLE 0, 0, 200, 190 LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Shell Dlg"
CAPTION "Search"
{
LTEXT "Ще не впроваджено", -1, 10, 10, 180, 150
}
/* Strings */
STRINGTABLE DISCARDABLE LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT
{
STID_WINE_HELP, "Довідка Wine"
STID_WHERROR, "ПОМИЛКА"
STID_WARNING, "УВАГА"
STID_INFO, "Інформація"
STID_NOT_IMPLEMENTED, "Не впроваджено"
STID_HLPFILE_ERROR_s, "Помилка читання файлу довідки `%s'"
STID_INDEX, "&Index"
STID_CONTENTS, "Summary"
STID_BACK, "&Назад"
STID_ALL_FILES, "Всі файли (*.*)"
STID_HELP_FILES_HLP, "Файли довідки (*.hlp)"
STID_FILE_NOT_FOUND_s "Не можу знайти '%s'. Хочете знайти цей файл самотужки?"
STID_NO_RICHEDIT "Cannot find a richedit implementation... Aborting"
STID_PSH_INDEX, "Розділи Довідки: "
}
CONTEXT_MENU MENU LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT
BEGIN
POPUP ""
BEGIN
MENUITEM "Annotation...", MNID_CTXT_ANNOTATE
MENUITEM "Копіювати", MNID_CTXT_COPY
MENUITEM "Друк...", MNID_CTXT_PRINT
POPUP "Шрифти"
BEGIN
MENUITEM "Малий", MNID_CTXT_FONTS_SMALL
MENUITEM "Нормальний", MNID_CTXT_FONTS_NORMAL
MENUITEM "Великий", MNID_CTXT_FONTS_LARGE
END
POPUP "Довідка завжди видима"
BEGIN
MENUITEM "За замовчуванням", MNID_CTXT_HELP_DEFAULT
MENUITEM "Видима", MNID_CTXT_HELP_VISIBLE
MENUITEM "Невидима", MNID_CTXT_HELP_NONVISIBLE
END
MENUITEM "Використати системні кольори", MNID_CTXT_SYSTEM_COLORS
END
END
CONTEXT_MENU MENU LANGUAGE LANG_UKRAINIAN, SUBLANG_NEUTRAL
BEGIN
POPUP ""
BEGIN
MENUITEM "Annotation...", MNID_CTXT_ANNOTATE
MENUITEM "Копіювати", MNID_CTXT_COPY
MENUITEM "Друк...", MNID_CTXT_PRINT
POPUP "Шрифти"
BEGIN
MENUITEM "Малий", MNID_CTXT_FONTS_SMALL
MENUITEM "Нормальний", MNID_CTXT_FONTS_NORMAL
MENUITEM "Великий", MNID_CTXT_FONTS_LARGE
END
POPUP "Довідка завжди видима"
BEGIN
MENUITEM "За замовчуванням", MNID_CTXT_HELP_DEFAULT
MENUITEM "Видима", MNID_CTXT_HELP_VISIBLE
MENUITEM "Невидима", MNID_CTXT_HELP_NONVISIBLE
END
MENUITEM "Використати ситемні кольори", MNID_CTXT_SYSTEM_COLORS
END
END

View file

@ -815,6 +815,34 @@ static void HLPFILE_AddHotSpotLinks(struct RtfData* rd, HLPFILE* file,
file->lpszPath, -1, HLPFILE_Hash(str),
0, 1, -1);
break;
case 0xEE:
case 0xEF:
{
const char* win = strchr(str, '>');
int wnd = -1;
char* tgt = NULL;
if (win)
{
for (wnd = file->numWindows - 1; wnd >= 0; wnd--)
{
if (!strcmp(win + 1, file->windows[wnd].name)) break;
}
if (wnd == -1)
WINE_WARN("Couldn't find window info for %s\n", win);
if ((tgt = HeapAlloc(GetProcessHeap(), 0, win - str + 1)))
{
memcpy(tgt, str, win - str);
tgt[win - str] = '\0';
}
}
hslink = (HLPFILE_HOTSPOTLINK*)
HLPFILE_AllocLink(rd, (start[7 + 15 * i + 0] & 1) ? hlp_link_link : hlp_link_popup,
file->lpszPath, -1, HLPFILE_Hash(tgt ? tgt : str), 0, 1, wnd);
HeapFree(GetProcessHeap(), 0, tgt);
break;
}
default:
WINE_FIXME("unknown hotsport target 0x%x\n", start[7 + 15 * i + 0]);
}
@ -1736,16 +1764,6 @@ BOOL HLPFILE_BrowsePage(HLPFILE_PAGE* page, struct RtfData* rd,
if (!HLPFILE_RtfAddControl(rd, "{\\colortbl ;\\red0\\green128\\blue0;")) return FALSE;
for (index = 0; index < hlpfile->numFonts; index++)
{
const char* family;
switch (hlpfile->fonts[index].LogFont.lfPitchAndFamily & 0xF0)
{
case FF_MODERN: family = "modern"; break;
case FF_ROMAN: family = "roman"; break;
case FF_SWISS: family = "swiss"; break;
case FF_SCRIPT: family = "script"; break;
case FF_DECORATIVE: family = "decor"; break;
default: family = "nil"; break;
}
sprintf(tmp, "\\red%d\\green%d\\blue%d;",
GetRValue(hlpfile->fonts[index].color),
GetGValue(hlpfile->fonts[index].color),

View file

@ -25,6 +25,7 @@
#include "windows.h"
#include "commdlg.h"
#include "shellapi.h"
#include "winhelp.h"
#include "wine/debug.h"
@ -64,6 +65,9 @@ static WINHELP_BUTTON** MACRO_LookupButton(WINHELP_WINDOW* win, LPCSTR na
return b;
}
/******* some forward declarations *******/
static void CALLBACK MACRO_JumpID(LPCSTR lpszPathWindow, LPCSTR topic_id);
/******* real macro implementation *******/
void CALLBACK MACRO_CreateButton(LPCSTR id, LPCSTR name, LPCSTR macro)
@ -352,9 +356,20 @@ static void CALLBACK MACRO_EndMPrint(void)
WINE_FIXME("()\n");
}
static void CALLBACK MACRO_ExecFile(LPCSTR str1, LPCSTR str2, LONG u, LPCSTR str3)
static void CALLBACK MACRO_ExecFile(LPCSTR pgm, LPCSTR args, LONG cmd_show, LPCSTR topic)
{
WINE_FIXME("(\"%s\", \"%s\", %u, \"%s\")\n", str1, str2, u, str3);
HINSTANCE ret;
WINE_TRACE("(%s, %s, %u, %s)\n",
wine_dbgstr_a(pgm), wine_dbgstr_a(args), cmd_show, wine_dbgstr_a(topic));
ret = ShellExecuteA(Globals.active_win ? Globals.active_win->hMainWnd : NULL, "open",
pgm, args, ".", cmd_show);
if ((DWORD_PTR)ret < 32)
{
WINE_WARN("Failed with %p\n", ret);
if (topic) MACRO_JumpID(NULL, topic);
}
}
static void CALLBACK MACRO_ExecProgram(LPCSTR str, LONG u)

View file

@ -26,7 +26,6 @@ IDI_WINHELP ICON DISCARDABLE winhelp.ico
#include "Bg.rc"
#include "Cs.rc"
#include "Da.rc"
#include "En.rc"
#include "Es.rc"
#include "Fi.rc"
@ -39,6 +38,7 @@ IDI_WINHELP ICON DISCARDABLE winhelp.ico
#include "Tr.rc"
/* UTF-8 */
#include "Da.rc"
#include "De.rc"
#include "Fr.rc"
#include "It.rc"
@ -50,4 +50,5 @@ IDI_WINHELP ICON DISCARDABLE winhelp.ico
#include "Ro.rc"
#include "Ru.rc"
#include "Si.rc"
#include "Uk.rc"
#include "Zh.rc"

View file

@ -22,7 +22,6 @@
const char MAIN_WIN_CLASS_NAME[] = "MS_WINHELP";
const char BUTTON_BOX_WIN_CLASS_NAME[] = "WHButtonBox";
const char SHADOW_WIN_CLASS_NAME[] = "WHShadow";
const char HISTORY_WIN_CLASS_NAME[] = "WHHistory";
const char STRING_BUTTON[] = "BUTTON";

View file

@ -570,7 +570,6 @@ static void WINHELP_DeleteWindow(WINHELP_WINDOW* win)
WINHELP_DeleteButtons(win);
if (win->page) WINHELP_DeletePageLinks(win->page);
if (win->hShadowWnd) DestroyWindow(win->hShadowWnd);
if (win->hHistoryWnd) DestroyWindow(win->hHistoryWnd);
DeleteObject(win->hBrush);
@ -712,14 +711,24 @@ BOOL WINHELP_CreateHelpWindow(WINHELP_WNDPAGE* wpage, int nCmdShow, BOOL remembe
for (win = Globals.win_list; win; win = win->next)
{
if (!lstrcmpi(win->info->name, wpage->wininfo->name))
{
if (win->page == wpage->page && win->info == wpage->wininfo)
{
/* see #22979, some hlp files have a macro (run at page opening), which
* jumps to the very same page
* Exit gracefully in that case
*/
return TRUE;
}
WINHELP_DeleteButtons(win);
bReUsed = TRUE;
SetWindowText(win->hMainWnd, WINHELP_GetCaption(wpage));
if (win->info != wpage->wininfo)
{
POINT pt = {0, 0};
SIZE sz = {0, 0};
DWORD flags = SWP_NOSIZE | SWP_NOMOVE;
WINHELP_DeleteButtons(win);
bReUsed = TRUE;
SetWindowText(win->hMainWnd, WINHELP_GetCaption(wpage));
if (wpage->wininfo->origin.x != CW_USEDEFAULT &&
wpage->wininfo->origin.y != CW_USEDEFAULT)
{
@ -733,6 +742,7 @@ BOOL WINHELP_CreateHelpWindow(WINHELP_WNDPAGE* wpage, int nCmdShow, BOOL remembe
flags &= ~SWP_NOMOVE;
}
SetWindowPos(win->hMainWnd, HWND_TOP, pt.x, pt.y, sz.cx, sz.cy, flags);
}
if (wpage->page && win->page && wpage->page->file != win->page->file)
WINHELP_DeleteBackSet(win);
@ -817,7 +827,8 @@ BOOL WINHELP_CreateHelpWindow(WINHELP_WNDPAGE* wpage, int nCmdShow, BOOL remembe
}
hIcon = (wpage->page) ? wpage->page->file->hIcon : NULL;
if (!hIcon) hIcon = LoadIcon(Globals.hInstance, MAKEINTRESOURCE(IDI_WINHELP));
if (!hIcon) hIcon = LoadImage(Globals.hInstance, MAKEINTRESOURCE(IDI_WINHELP), IMAGE_ICON,
GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), LR_SHARED);
SendMessage(win->hMainWnd, WM_SETICON, ICON_SMALL, (DWORD_PTR)hIcon);
/* Initialize file specific pushbuttons */
@ -842,7 +853,6 @@ BOOL WINHELP_CreateHelpWindow(WINHELP_WNDPAGE* wpage, int nCmdShow, BOOL remembe
if (bPopup)
{
DWORD mask = SendMessage(hTextWnd, EM_GETEVENTMASK, 0, 0);
RECT rect;
win->font_scale = Globals.active_win->font_scale;
WINHELP_SetupText(hTextWnd, win, wpage->relative);
@ -852,17 +862,6 @@ BOOL WINHELP_CreateHelpWindow(WINHELP_WNDPAGE* wpage, int nCmdShow, BOOL remembe
SendMessage(hTextWnd, EM_SETEVENTMASK, 0, mask | ENM_REQUESTRESIZE);
SendMessage(hTextWnd, EM_REQUESTRESIZE, 0, 0);
SendMessage(hTextWnd, EM_SETEVENTMASK, 0, mask);
GetWindowRect(win->hMainWnd, &rect);
win->hShadowWnd = CreateWindowEx(WS_EX_TOOLWINDOW, SHADOW_WIN_CLASS_NAME,
"", WS_POPUP | WS_VISIBLE,
rect.left + SHADOW_DX, rect.top + SHADOW_DY,
rect.right - rect.left,
rect.bottom - rect.top,
Globals.active_win->hMainWnd, 0,
Globals.hInstance, NULL);
SetWindowPos(win->hMainWnd, win->hShadowWnd, 0, 0, 0, 0,
SWP_NOSIZE | SWP_NOMOVE);
}
else
{
@ -968,7 +967,7 @@ static BOOL WINHELP_CheckPopup(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam
}
break;
case WM_ACTIVATE:
if (wParam != WA_INACTIVE || (HWND)lParam == Globals.active_win->hMainWnd ||
if (LOWORD(wParam) != WA_INACTIVE || (HWND)lParam == Globals.active_win->hMainWnd ||
(HWND)lParam == Globals.active_popup->hMainWnd ||
GetWindow((HWND)lParam, GW_OWNER) == Globals.active_win->hMainWnd)
break;
@ -976,7 +975,6 @@ static BOOL WINHELP_CheckPopup(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam
if (WINHELP_HandleTextMouse(Globals.active_popup, msg, lParam))
return FALSE;
/* fall through */
case WM_LBUTTONUP:
case WM_MBUTTONDOWN:
case WM_RBUTTONDOWN:
case WM_NCLBUTTONDOWN:
@ -1197,16 +1195,6 @@ static LRESULT CALLBACK WINHELP_HistoryWndProc(HWND hWnd, UINT msg, WPARAM wPara
return DefWindowProc(hWnd, msg, wParam, lParam);
}
/***********************************************************************
*
* WINHELP_ShadowWndProc
*/
static LRESULT CALLBACK WINHELP_ShadowWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
if (WINHELP_CheckPopup(hWnd, msg, wParam, lParam, NULL)) return 0;
return WINHELP_CheckPopup(hWnd, msg, wParam, lParam, NULL) ? 0L : DefWindowProc(hWnd, msg, wParam, lParam);
}
/**************************************************************************
* cb_KWBTree
*
@ -1306,12 +1294,9 @@ static INT_PTR CALLBACK WINHELP_IndexDlgProc(HWND hWnd, UINT msg, WPARAM wParam,
*/
static INT_PTR CALLBACK WINHELP_SearchDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
static struct index_data* id;
switch (msg)
{
case WM_INITDIALOG:
id = (struct index_data*)((PROPSHEETPAGE*)lParam)->lParam;
return TRUE;
case WM_NOTIFY:
switch (((NMHDR*)lParam)->code)
@ -1337,7 +1322,6 @@ static LRESULT CALLBACK WINHELP_MainWndProc(HWND hWnd, UINT msg, WPARAM wParam,
{
WINHELP_WINDOW *win;
WINHELP_BUTTON *button;
INT keyDelta;
HWND hTextWnd;
LRESULT ret;
@ -1451,7 +1435,6 @@ static LRESULT CALLBACK WINHELP_MainWndProc(HWND hWnd, UINT msg, WPARAM wParam,
break;
case WM_KEYDOWN:
keyDelta = 0;
win = (WINHELP_WINDOW*) GetWindowLongPtr(hWnd, 0);
hTextWnd = GetDlgItem(win->hMainWnd, CTL_ID_TEXT);
@ -1633,8 +1616,9 @@ BOOL WINHELP_CreateIndexWindow(BOOL is_search)
*/
static BOOL WINHELP_RegisterWinClasses(void)
{
WNDCLASS class_main, class_button_box, class_shadow, class_history;
WNDCLASSEX class_main, class_button_box, class_history;
class_main.cbSize = sizeof(class_main);
class_main.style = CS_HREDRAW | CS_VREDRAW;
class_main.lpfnWndProc = WINHELP_MainWndProc;
class_main.cbClsExtra = 0;
@ -1645,6 +1629,9 @@ static BOOL WINHELP_RegisterWinClasses(void)
class_main.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
class_main.lpszMenuName = 0;
class_main.lpszClassName = MAIN_WIN_CLASS_NAME;
class_main.hIconSm = LoadImage(Globals.hInstance, MAKEINTRESOURCE(IDI_WINHELP), IMAGE_ICON,
GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON),
LR_SHARED);
class_button_box = class_main;
class_button_box.lpfnWndProc = WINHELP_ButtonBoxWndProc;
@ -1652,20 +1639,13 @@ static BOOL WINHELP_RegisterWinClasses(void)
class_button_box.hbrBackground = (HBRUSH)(COLOR_BTNFACE+1);
class_button_box.lpszClassName = BUTTON_BOX_WIN_CLASS_NAME;
class_shadow = class_main;
class_shadow.lpfnWndProc = WINHELP_ShadowWndProc;
class_shadow.cbWndExtra = 0;
class_shadow.hbrBackground = (HBRUSH)(COLOR_3DDKSHADOW+1);
class_shadow.lpszClassName = SHADOW_WIN_CLASS_NAME;
class_history = class_main;
class_history.lpfnWndProc = WINHELP_HistoryWndProc;
class_history.lpszClassName = HISTORY_WIN_CLASS_NAME;
return (RegisterClass(&class_main) &&
RegisterClass(&class_button_box) &&
RegisterClass(&class_shadow) &&
RegisterClass(&class_history));
return (RegisterClassEx(&class_main) &&
RegisterClassEx(&class_button_box) &&
RegisterClassEx(&class_history));
}
/***********************************************************************

View file

@ -76,7 +76,6 @@ typedef struct tagWinHelp
HLPFILE_PAGE* page;
HWND hMainWnd;
HWND hShadowWnd;
HWND hHistoryWnd;
WNDPROC origRicheditWndProc;

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Before After
Before After

View file

@ -1,5 +1,6 @@
/*
* Copyright 2008 by Jens Albretsen <jens@albretsen.dk>
* 2010 Thomas Larsen
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@ -18,6 +19,8 @@
#include "wordpad.h"
#pragma code_page(65001)
LANGUAGE LANG_DANISH, SUBLANG_DEFAULT
IDM_MAINMENU MENU DISCARDABLE
@ -25,12 +28,12 @@ BEGIN
POPUP "&Fil"
BEGIN
MENUITEM "&Ny...\tCtrl+N", ID_FILE_NEW
MENUITEM "&Åben...\tCtrl+O", ID_FILE_OPEN
MENUITEM "&Åben...\tCtrl+O", ID_FILE_OPEN
MENUITEM "&Gemme\tCtrl+S", ID_FILE_SAVE
MENUITEM "Gemme &som...", ID_FILE_SAVEAS
MENUITEM SEPARATOR
MENUITEM "&Udskriv...\tCtrl+P", ID_PRINT
MENUITEM "&Forhåndsvisning...", ID_PREVIEW
MENUITEM "&Forhåndsvisning...", ID_PREVIEW
MENUITEM "&Side indstillinger...", ID_PRINTSETUP
MENUITEM SEPARATOR
MENUITEM "&Afslut", ID_FILE_EXIT
@ -42,20 +45,20 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "&Klip\tCtrl+X", ID_EDIT_CUT
MENUITEM "K&opier\tCtrl+C", ID_EDIT_COPY
MENUITEM "&Indsæt\tCtrl+V", ID_EDIT_PASTE
MENUITEM "&Indsæt\tCtrl+V", ID_EDIT_PASTE
MENUITEM "&Fjern\tDEL", ID_EDIT_CLEAR
MENUITEM "&Marker alt\tCtrl+A", ID_EDIT_SELECTALL
MENUITEM SEPARATOR
MENUITEM "&Søg efter...\tCtrl+F", ID_FIND
MENUITEM "Søg efter &næste\tF3", ID_FIND_NEXT
MENUITEM "&Søg efter...\tCtrl+F", ID_FIND
MENUITEM "Søg efter &næste\tF3", ID_FIND_NEXT
MENUITEM "E&rstat...\tCtrl+H", ID_REPLACE
MENUITEM SEPARATOR
MENUITEM "S&krivebeskyttet", ID_EDIT_READONLY
MENUITEM "Æ&ndret", ID_EDIT_MODIFIED
MENUITEM "Æ&ndret", ID_EDIT_MODIFIED
MENUITEM SEPARATOR
POPUP "&Ekstra"
BEGIN
MENUITEM "&Information om markeret område", ID_EDIT_SELECTIONINFO
MENUITEM "&Information om markeret område", ID_EDIT_SELECTIONINFO
MENUITEM "Tegn&format", ID_EDIT_CHARFORMAT
MENUITEM "Stan&dard tegnformat", ID_EDIT_DEFCHARFORMAT
MENUITEM "&Afsnitsformat", ID_EDIT_PARAFORMAT
@ -64,14 +67,14 @@ BEGIN
END
POPUP "&Vis"
BEGIN
MENUITEM "Værk&tøjslinie", ID_TOGGLE_TOOLBAR
MENUITEM "Værk&tøjslinie", ID_TOGGLE_TOOLBAR
MENUITEM "&Formatteringlinie", ID_TOGGLE_FORMATBAR
MENUITEM "&Lineal", ID_TOGGLE_RULER
MENUITEM "&Statuslinie", ID_TOGGLE_STATUSBAR
MENUITEM SEPARATOR
MENUITEM "&Alternativer...", ID_VIEWPROPERTIES
END
POPUP "&Indsæt"
POPUP "&Indsæt"
BEGIN
MENUITEM "&Dato og tid...", ID_DATETIME
END
@ -87,7 +90,7 @@ BEGIN
MENUITEM "&Huskeseddel\tCtrl+2", ID_BACK_2
END
END
POPUP "&Hjælp"
POPUP "&Hjælp"
BEGIN
MENUITEM "&Om Wine Wordpad" ID_ABOUT
END
@ -99,7 +102,7 @@ BEGIN
BEGIN
MENUITEM "&Klip" ID_EDIT_CUT
MENUITEM "K&opier" ID_EDIT_COPY
MENUITEM "&Indsæt" ID_EDIT_PASTE
MENUITEM "&Indsæt" ID_EDIT_PASTE
MENUITEM SEPARATOR
MENUITEM "&Bullets" ID_BULLET
MENUITEM "&Afsnit..." ID_PARAFORMAT
@ -111,18 +114,18 @@ BEGIN
POPUP ""
BEGIN
MENUITEM "Sort", ID_COLOR_BLACK
MENUITEM "Mørkerød", ID_COLOR_MAROON
MENUITEM "Grøn", ID_COLOR_GREEN
MENUITEM "Mørkerød", ID_COLOR_MAROON
MENUITEM "Grøn", ID_COLOR_GREEN
MENUITEM "Oliven" ID_COLOR_OLIVE
MENUITEM "Navy" ID_COLOR_NAVY
MENUITEM "Lilla" ID_COLOR_PURPLE
MENUITEM "Teal" ID_COLOR_TEAL
MENUITEM "Grå" ID_COLOR_GRAY
MENUITEM "Sølv" ID_COLOR_SILVER
MENUITEM "Rød" ID_COLOR_RED
MENUITEM "Grå" ID_COLOR_GRAY
MENUITEM "Sølv" ID_COLOR_SILVER
MENUITEM "Rød" ID_COLOR_RED
MENUITEM "Lime" ID_COLOR_LIME
MENUITEM "Gul" ID_COLOR_YELLOW
MENUITEM "Blå" ID_COLOR_BLUE
MENUITEM "Blå" ID_COLOR_BLUE
MENUITEM "Violet" ID_COLOR_FUCHSIA
MENUITEM "Cyan" ID_COLOR_AQUA
MENUITEM "Hvid" ID_COLOR_WHITE
@ -135,7 +138,7 @@ STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "Dato og tid"
FONT 10, "MS Sans Serif"
BEGIN
LTEXT "Tilgængelige formater",-1,3,2,100,15
LTEXT "Tilgængelige formater",-1,3,2,100,15
LISTBOX IDC_DATETIME,3,12,80,65,LBS_NOINTEGRALHEIGHT | LBS_NOTIFY
PUSHBUTTON "&OK",IDOK,87,12,40,12
PUSHBUTTON "&Annuller",IDCANCEL,87,26,40,12
@ -160,9 +163,9 @@ BEGIN
GROUPBOX "Indryk", -1, 10, 10, 120, 68
LTEXT "Venstre", -1, 15, 22, 40, 13
EDITTEXT IDC_PARA_LEFT, 55, 20, 60, 13
LTEXT "Højre", -1, 15, 40, 40, 13
LTEXT "Højre", -1, 15, 40, 40, 13
EDITTEXT IDC_PARA_RIGHT, 55, 38, 60, 13
LTEXT "Første linie", -1, 15, 58, 40, 13
LTEXT "Første linie", -1, 15, 58, 40, 13
EDITTEXT IDC_PARA_FIRST, 55, 56, 60, 13
LTEXT "Justering", -1, 15, 87, 40, 13
COMBOBOX IDC_PARA_ALIGN, 55, 85, 60, 60, CBS_DROPDOWNLIST
@ -177,7 +180,7 @@ FONT 8, "MS SHell DLg"
BEGIN
GROUPBOX "Tabulatorstop", -1, 10, 10, 120, 90
COMBOBOX IDC_TABSTOPS, 20, 20, 100, 60, CBS_SIMPLE
DEFPUSHBUTTON "&Tilføj", ID_TAB_ADD, 20, 80, 45, 15
DEFPUSHBUTTON "&Tilføj", ID_TAB_ADD, 20, 80, 45, 15
PUSHBUTTON "&Fjern", ID_TAB_DEL, 72, 80, 45, 15
PUSHBUTTON "&OK", IDOK, 137, 15, 50, 15
PUSHBUTTON "&Annuller", IDCANCEL, 137, 33, 50, 15
@ -193,8 +196,8 @@ BEGIN
RADIOBUTTON "No line wrapping", IDC_PAGEFMT_WN, 18, 25, 117, 15
RADIOBUTTON "Bryd tekst efter v&indusbredden", IDC_PAGEFMT_WW, 18, 45, 117, 15
RADIOBUTTON "Bryd tekst efter &margen", IDC_PAGEFMT_WM, 18, 65, 117, 15
GROUPBOX "Værktøjslinier", -1, 150, 10, 120, 85
CHECKBOX "&Værktøjslinie", IDC_PAGEFMT_TB, 160, 20, 80, 15
GROUPBOX "Værktøjslinier", -1, 150, 10, 120, 85
CHECKBOX "&Værktøjslinie", IDC_PAGEFMT_TB, 160, 20, 80, 15
CHECKBOX "&Formatteringlinie", IDC_PAGEFMT_FB, 160, 38, 80, 15
CHECKBOX "&Lineal", IDC_PAGEFMT_RU, 160, 56, 80, 15
CHECKBOX "&Statuslinie", IDC_PAGEFMT_SB, 160, 74, 80, 15
@ -219,7 +222,7 @@ END
STRINGTABLE DISCARDABLE
BEGIN
STRING_ALIGN_LEFT, "Venstrestillet"
STRING_ALIGN_RIGHT, "Højrestillet"
STRING_ALIGN_RIGHT, "Højrestillet"
STRING_ALIGN_CENTER, "Midterstillet"
END
@ -238,31 +241,36 @@ END
STRINGTABLE DISCARDABLE
BEGIN
STRING_PREVIEW_PRINT, "Udskriv"
STRING_PREVIEW_NEXTPAGE, "Næste side"
STRING_PREVIEW_NEXTPAGE, "Næste side"
STRING_PREVIEW_PREVPAGE, "Forrige side"
STRING_PREVIEW_TWOPAGES, "To sider"
STRING_PREVIEW_ONEPAGE, "Én side"
STRING_PREVIEW_ONEPAGE, "Én side"
STRING_PREVIEW_ZOOMIN, "Zoom in"
STRING_PREVIEW_ZOOMOUT, "Zoom out"
STRING_PREVIEW_CLOSE, "Luk"
STRING_PREVIEW_PAGE, "Page"
STRING_PREVIEW_PAGES, "Pages"
END
STRINGTABLE DISCARDABLE
BEGIN
STRING_PREVIEW_PAGE, "Side"
STRING_PREVIEW_PAGES, "Sider"
STRING_UNITS_CM, "cm"
STRING_UNITS_IN, "tomme"
STRING_UNITS_INCH, "tommer"
STRING_UNITS_PT, "pkt"
END
STRINGTABLE DISCARDABLE
BEGIN
STRING_DEFAULT_FILENAME, "Dokument"
STRING_PROMPT_SAVE_CHANGES, "Gemme ændringer i «%s»?"
STRING_SEARCH_FINISHED, "Færdig med at søge i dokumentet."
STRING_LOAD_RICHED_FAILED, "Kunne ikke indlæse RichEdit-biblioteket."
STRING_PROMPT_SAVE_CHANGES, "Gemme ændringer i «%s»?"
STRING_SEARCH_FINISHED, "Færdig med at søge i dokumentet."
STRING_LOAD_RICHED_FAILED, "Kunne ikke indlæse RichEdit-biblioteket."
STRING_SAVE_LOSEFORMATTING, "Du har valgt at gemme i rent tekstformat, noget som " \
"vil medføre at al formatering går tabt. Er du " \
"sikker på at du vil fortsætte?"
"vil medføre at al formatering går tabt. Er du " \
"sikker på at du vil fortsætte?"
STRING_INVALID_NUMBER, "Ugyldigt talformat"
STRING_OLE_STORAGE_NOT_SUPPORTED, "OLE storage dokumenter er ikke understøttet"
STRING_OLE_STORAGE_NOT_SUPPORTED, "OLE storage dokumenter er ikke understøttet"
STRING_WRITE_FAILED, "Kunne ikke gemme filen."
STRING_WRITE_ACCESS_DENIED, "Filen kunne ikke gemmes, adgang nægtet."
STRING_OPEN_FAILED, "Kunne ikke åbne filen."
STRING_OPEN_ACCESS_DENIED, "Filen kunne ikke åbnes, adgang nægtet."
STRING_PRINTING_NOT_IMPLEMENTED, "Udskrivning er endnu ikke implementeret."
STRING_MAX_TAB_STOPS, "Kan ikke tilføje mere end 32 tabulatorer."
END

View file

@ -192,7 +192,7 @@ Caption ""
FONT 8, "MS Shell Dlg"
BEGIN
GROUPBOX "Zeilenumbruch", -1, 10, 10, 130, 85
RADIOBUTTON "No line wrapping", IDC_PAGEFMT_WN, 18, 25, 117, 15
RADIOBUTTON "&Kein Zeilenumbruch", IDC_PAGEFMT_WN, 18, 25, 117, 15
RADIOBUTTON "&Am Fenster umbrechen", IDC_PAGEFMT_WW, 18, 45, 117, 15
RADIOBUTTON "A&m Lineal umbrechen", IDC_PAGEFMT_WM, 18, 65, 117, 15
GROUPBOX "Symbolleisten", -1, 150, 10, 120, 85
@ -249,11 +249,10 @@ BEGIN
STRING_PREVIEW_CLOSE, "&Schließen"
STRING_PREVIEW_PAGE, "Seite"
STRING_PREVIEW_PAGES, "Seiten"
END
STRINGTABLE DISCARDABLE
BEGIN
STRING_UNITS_CM, "cm"
STRING_UNITS_IN, "in"
STRING_UNITS_INCH, "Zoll"
STRING_UNITS_PT, "pt"
END
STRINGTABLE DISCARDABLE

View file

@ -240,6 +240,9 @@ BEGIN
STRING_PREVIEW_PAGE, "Page"
STRING_PREVIEW_PAGES, "Pages"
STRING_UNITS_CM, "cm"
STRING_UNITS_IN, "in"
STRING_UNITS_INCH, "inch"
STRING_UNITS_PT, "pt"
END
STRINGTABLE DISCARDABLE

View file

@ -1,5 +1,6 @@
/*
* Copyright 2006-2009 by Jonathan Ernst
* Copyright 2010 by Frédéric Delanoy
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@ -58,10 +59,10 @@ BEGIN
MENUITEM SEPARATOR
POPUP "&Avancé"
BEGIN
MENUITEM "&Information sélection", ID_EDIT_SELECTIONINFO
MENUITEM "&Format caractères", ID_EDIT_CHARFORMAT
MENUITEM "&Déf. format car.", ID_EDIT_DEFCHARFORMAT
MENUITEM "Format paragrap&he", ID_EDIT_PARAFORMAT
MENUITEM "&Informations sur la sélection", ID_EDIT_SELECTIONINFO
MENUITEM "&Format de caractères", ID_EDIT_CHARFORMAT
MENUITEM "Format de caractères par &défaut", ID_EDIT_DEFCHARFORMAT
MENUITEM "Format de &paragraphe", ID_EDIT_PARAFORMAT
MENUITEM "Texte &complet", ID_EDIT_GETTEXT
END
END
@ -129,7 +130,7 @@ BEGIN
MENUITEM "Fuchsia" ID_COLOR_FUCHSIA
MENUITEM "Eau" ID_COLOR_AQUA
MENUITEM "Blanc" ID_COLOR_WHITE
MENUITEM "Automatic" ID_COLOR_AUTOMATIC
MENUITEM "Automatique" ID_COLOR_AUTOMATIC
END
END
@ -250,11 +251,10 @@ BEGIN
STRING_PREVIEW_CLOSE, "Fermer"
STRING_PREVIEW_PAGE, "Page"
STRING_PREVIEW_PAGES, "Pages"
END
STRINGTABLE DISCARDABLE
BEGIN
STRING_UNITS_CM, "cm"
STRING_UNITS_IN, "po"
STRING_UNITS_INCH, "pouces"
STRING_UNITS_PT, "pt"
END
STRINGTABLE DISCARDABLE

View file

@ -54,7 +54,7 @@ BEGIN
MENUITEM "Trova s&uccessivo\tF3", ID_FIND_NEXT
MENUITEM "S&ostituisci...\tCtrl+H", ID_REPLACE
MENUITEM SEPARATOR
MENUITEM "Sola &Lettura", ID_EDIT_READONLY
MENUITEM "Solo &Lettura", ID_EDIT_READONLY
MENUITEM "&Modificato", ID_EDIT_MODIFIED
MENUITEM SEPARATOR
POPUP "E&xtra"
@ -81,7 +81,7 @@ BEGIN
END
POPUP "F&ormato"
BEGIN
MENUITEM "&Font...", ID_FONTSETTINGS
MENUITEM "&Carattere...", ID_FONTSETTINGS
MENUITEM "&Elenco" ID_BULLET
MENUITEM "&Paragrafo..." ID_PARAFORMAT
MENUITEM "&Tabulazioni..." ID_TABSTOPS
@ -93,7 +93,7 @@ BEGIN
END
POPUP "&Aiuto"
BEGIN
MENUITEM "&Su Wine Wordpad" ID_ABOUT
MENUITEM "&Riguardo A Wine Wordpad" ID_ABOUT
END
END
@ -208,9 +208,9 @@ END
STRINGTABLE DISCARDABLE
BEGIN
STRING_ALL_FILES, "Tutti i files (*.*)"
STRING_TEXT_FILES_TXT, "Files di testo (*.txt)"
STRING_TEXT_FILES_UNICODE_TXT, "Files di testo Unicode (*.txt)"
STRING_RICHTEXT_FILES_RTF, "Rich text format (*.rtf)"
STRING_TEXT_FILES_TXT, "File di testo (*.txt)"
STRING_TEXT_FILES_UNICODE_TXT, "File di testo Unicode (*.txt)"
STRING_RICHTEXT_FILES_RTF, "Formato rich text (*.rtf)"
STRING_NEWFILE_RICHTEXT, "Documento Rich text"
STRING_NEWFILE_TXT, "Documento di testo"
STRING_NEWFILE_TXT_UNICODE, "Documento di testo Unicode"
@ -241,9 +241,12 @@ BEGIN
STRING_PREVIEW_ZOOMIN, "Ingrandisci"
STRING_PREVIEW_ZOOMOUT, "Rimpicciolisci"
STRING_PREVIEW_CLOSE, "Chiudi"
STRING_PREVIEW_PAGE, "Page"
STRING_PREVIEW_PAGES, "Pages"
STRING_PREVIEW_PAGE, "Pagina"
STRING_PREVIEW_PAGES, "Pagine"
STRING_UNITS_CM, "cm"
STRING_UNITS_IN, "po"
STRING_UNITS_INCH, "pollici"
STRING_UNITS_PT, "pt"
END
STRINGTABLE DISCARDABLE

View file

@ -129,14 +129,14 @@ BEGIN
MENUITEM "赤紫" ID_COLOR_FUCHSIA
MENUITEM "水色" ID_COLOR_AQUA
MENUITEM "白" ID_COLOR_WHITE
MENUITEM "Automatic" ID_COLOR_AUTOMATIC
MENUITEM "自動" ID_COLOR_AUTOMATIC
END
END
IDD_DATETIME DIALOG DISCARDABLE 30, 20, 130, 80
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "日付と時刻"
FONT 9, "MS Shell Dlg"
FONT 10, "MS Shell Dlg"
BEGIN
LTEXT "利用できる形式",-1,3,2,100,15
LISTBOX IDC_DATETIME,3,12,80,65,LBS_NOINTEGRALHEIGHT | LBS_NOTIFY
@ -147,7 +147,7 @@ END
IDD_NEWFILE DIALOG DISCARDABLE 30, 20, 140, 80
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "新規作成"
FONT 9, "MS Shell Dlg"
FONT 10, "MS Shell Dlg"
BEGIN
LTEXT "新しい文書形式",-1,3,2,100,15
LISTBOX IDC_NEWFILE,3,12,90,65,LBS_NOINTEGRALHEIGHT
@ -193,7 +193,7 @@ CAPTION ""
FONT 9, "MS Shell Dlg"
BEGIN
GROUPBOX "行の折り返し", -1, 10, 10, 130, 85
RADIOBUTTON "No line wrapping", IDC_PAGEFMT_WN, 18, 25, 117, 15
RADIOBUTTON "折り返ししない", IDC_PAGEFMT_WN, 18, 25, 117, 15
RADIOBUTTON "ウィンドウの境界で折り返す(&W)", IDC_PAGEFMT_WW, 18, 45, 117, 15
RADIOBUTTON "マージンで折り返す(&M)", IDC_PAGEFMT_WM, 18, 65, 117, 15
GROUPBOX "ツールバー", -1, 150, 10, 120, 85
@ -206,10 +206,14 @@ END
STRINGTABLE DISCARDABLE
BEGIN
STRING_RICHTEXT_FILES_RTF, "リッチテキスト形式 (*.rtf)"
STRING_ALL_FILES, "すべてのファイル (*.*)"
STRING_TEXT_FILES_TXT, "テキスト文書 (*.txt)"
STRING_TEXT_FILES_UNICODE_TXT, "Unicodeテキスト文書(*.txt)"
STRING_ALL_FILES, "すべてのファイル (*.*)"
STRING_RICHTEXT_FILES_RTF, "リッチテキスト形式 (*.rtf)"
STRING_NEWFILE_RICHTEXT, "リッチテキスト文書"
STRING_NEWFILE_TXT, "テキスト文書"
STRING_NEWFILE_TXT_UNICODE, "Unicodeテキスト文書"
STRING_PRINTER_FILES_PRN, "プリンタファイル (*.PRN)"
END
STRINGTABLE DISCARDABLE
@ -219,18 +223,6 @@ BEGIN
STRING_ALIGN_CENTER, "中央"
END
STRINGTABLE DISCARDABLE
BEGIN
STRING_NEWFILE_RICHTEXT, "リッチテキスト文書"
STRING_NEWFILE_TXT, "テキスト文書"
STRING_NEWFILE_TXT_UNICODE, "Unicodeテキスト文書"
END
STRINGTABLE DISCARDABLE
BEGIN
STRING_PRINTER_FILES_PRN, "プリンタファイル (*.PRN)"
END
STRINGTABLE DISCARDABLE
BEGIN
STRING_VIEWPROPS_TITLE, "オプション"
@ -245,16 +237,15 @@ BEGIN
STRING_PREVIEW_PREVPAGE, "前のページ"
STRING_PREVIEW_TWOPAGES, "2ページ"
STRING_PREVIEW_ONEPAGE, "1ページ"
STRING_PREVIEW_ZOOMIN, "Zoom in"
STRING_PREVIEW_ZOOMOUT, "Zoom out"
STRING_PREVIEW_ZOOMIN, "拡大"
STRING_PREVIEW_ZOOMOUT, "縮小"
STRING_PREVIEW_CLOSE, "閉じる"
STRING_PREVIEW_PAGE, "Page"
STRING_PREVIEW_PAGES, "Pages"
END
STRINGTABLE DISCARDABLE
BEGIN
STRING_PREVIEW_PAGE, "ページ"
STRING_PREVIEW_PAGES, "ページ"
STRING_UNITS_CM, "cm"
STRING_UNITS_IN, "in"
STRING_UNITS_INCH, "インチ"
STRING_UNITS_PT, "pt"
END
STRINGTABLE DISCARDABLE

View file

@ -242,6 +242,9 @@ BEGIN
STRING_PREVIEW_PAGE, "페이지"
STRING_PREVIEW_PAGES, "페이지들"
STRING_UNITS_CM, "cm"
STRING_UNITS_IN, "in"
STRING_UNITS_INCH, "인치"
STRING_UNITS_PT, "pt"
END
STRINGTABLE DISCARDABLE

View file

@ -250,11 +250,10 @@ BEGIN
STRING_PREVIEW_CLOSE, "Užverti"
STRING_PREVIEW_PAGE, "Puslapis"
STRING_PREVIEW_PAGES, "Puslapiai"
END
STRINGTABLE DISCARDABLE
BEGIN
STRING_UNITS_CM, "cm"
STRING_UNITS_IN, "col."
STRING_UNITS_INCH, "coliai"
STRING_UNITS_PT, "tašk."
END
STRINGTABLE DISCARDABLE

View file

@ -21,6 +21,8 @@
LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL
#pragma code_page(65001)
IDM_MAINMENU MENU DISCARDABLE
BEGIN
POPUP "&Bestand"
@ -30,26 +32,26 @@ BEGIN
MENUITEM "Op&slaan\tCtrl+S", ID_FILE_SAVE
MENUITEM "Ops&laan als...", ID_FILE_SAVEAS
MENUITEM SEPARATOR
MENUITEM "&Print...\tCtrl+P", ID_PRINT
MENUITEM "Print &voorbeeld...", ID_PREVIEW
MENUITEM "Pa&gina setup...", ID_PRINTSETUP
MENUITEM "Af&drukken...\tCtrl+P", ID_PRINT
MENUITEM "Afdruk&voorbeeld...", ID_PREVIEW
MENUITEM "Pa&gina-instellingen...", ID_PRINTSETUP
MENUITEM SEPARATOR
MENUITEM "&Afsluiten", ID_FILE_EXIT
END
POPUP "Be&werken"
BEGIN
MENUITEM "&Ongedaan maken\tCtrl+Z", ID_EDIT_UNDO
MENUITEM "O&pnieuw\tCtrl+Y", ID_EDIT_REDO
MENUITEM "Opn&ieuw\tCtrl+Y", ID_EDIT_REDO
MENUITEM SEPARATOR
MENUITEM "K&nippen\tCtrl+X", ID_EDIT_CUT
MENUITEM "&Kopieren\tCtrl+C", ID_EDIT_COPY
MENUITEM "&Kopiëren\tCtrl+C", ID_EDIT_COPY
MENUITEM "&Plakken\tCtrl+V", ID_EDIT_PASTE
MENUITEM "&Verwijderen\tDel", ID_EDIT_CLEAR
MENUITEM "&Alles selecteren\tCtrl+A", ID_EDIT_SELECTALL
MENUITEM SEPARATOR
MENUITEM "&Zoeken...\tCtrl+F", ID_FIND
MENUITEM "Zoek vo&lgende\tF3", ID_FIND_NEXT
MENUITEM "Ve&rvang...\tCtrl+H", ID_REPLACE
MENUITEM "Ve&rvangen...\tCtrl+H", ID_REPLACE
MENUITEM SEPARATOR
MENUITEM "Alleen &lezen", ID_EDIT_READONLY
MENUITEM "&Gewijzigd", ID_EDIT_MODIFIED
@ -65,9 +67,9 @@ BEGIN
END
POPUP "&Bekijken"
BEGIN
MENUITEM "&Toolbalk", ID_TOGGLE_TOOLBAR
MENUITEM "&Gereedschapsbalk", ID_TOGGLE_TOOLBAR
MENUITEM "&Formaatbalk", ID_TOGGLE_FORMATBAR
MENUITEM "&Lineaal", ID_TOGGLE_RULER
MENUITEM "&Liniaal", ID_TOGGLE_RULER
MENUITEM "&Statusbalk", ID_TOGGLE_STATUSBAR
MENUITEM SEPARATOR
MENUITEM "&Opties...", ID_VIEWPROPERTIES
@ -99,7 +101,7 @@ BEGIN
POPUP ""
BEGIN
MENUITEM "K&nippen", ID_EDIT_CUT
MENUITEM "&Kopieren", ID_EDIT_COPY
MENUITEM "&Kopiëren", ID_EDIT_COPY
MENUITEM "&Plakken", ID_EDIT_PASTE
MENUITEM SEPARATOR
MENUITEM "&Bullet points" ID_BULLET
@ -127,7 +129,7 @@ BEGIN
MENUITEM "Fuchsiapaars" ID_COLOR_FUCHSIA
MENUITEM "Zeeblauw" ID_COLOR_AQUA
MENUITEM "Wit" ID_COLOR_WHITE
MENUITEM "Automatic" ID_COLOR_AUTOMATIC
MENUITEM "Automatisch" ID_COLOR_AUTOMATIC
END
END
@ -158,7 +160,7 @@ STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
Caption "Paragraaf formaat"
FONT 8, "MS Shell Dlg"
BEGIN
GROUPBOX "Indentation", -1, 10, 10, 120, 68
GROUPBOX "Inspringing", -1, 10, 10, 120, 68
LTEXT "Links", -1, 15, 22, 40, 13
EDITTEXT IDC_PARA_LEFT, 55, 20, 60, 13
LTEXT "Rechts", -1, 15, 40, 40, 13
@ -176,7 +178,7 @@ STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
Caption "Tabs"
FONT 8, "MS SHell DLg"
BEGIN
GROUPBOX "Tab stops", -1, 10, 10, 120, 90
GROUPBOX "Tab-einden", -1, 10, 10, 120, 90
COMBOBOX IDC_TABSTOPS, 20, 20, 100, 60, CBS_SIMPLE
DEFPUSHBUTTON "&Toevoegen", ID_TAB_ADD, 20, 80, 45, 15
PUSHBUTTON "&Verwijderen", ID_TAB_DEL, 72, 80, 45, 15
@ -191,13 +193,13 @@ Caption ""
FONT 8, "MS Shell Dlg"
BEGIN
GROUPBOX "Regel afbreken", -1, 10, 10, 130, 85
RADIOBUTTON "No line wrapping", IDC_PAGEFMT_WN, 18, 25, 117, 15
RADIOBUTTON "Geen regelafbraak", IDC_PAGEFMT_WN, 18, 25, 117, 15
RADIOBUTTON "Breek tekst af bij &venster rand", IDC_PAGEFMT_WW, 18, 45, 117, 15
RADIOBUTTON "Breek tekst af bij de &marge", IDC_PAGEFMT_WM, 18, 65, 117, 15
GROUPBOX "Toolbars", -1, 150, 10, 120, 85
CHECKBOX "&Toolbalk", IDC_PAGEFMT_TB, 160, 20, 80, 15
GROUPBOX "Gereedschapsbalken", -1, 150, 10, 120, 85
CHECKBOX "&Gereedschapsbalk", IDC_PAGEFMT_TB, 160, 20, 80, 15
CHECKBOX "&Formaatbalk", IDC_PAGEFMT_FB, 160, 38, 80, 15
CHECKBOX "&Lineaal", IDC_PAGEFMT_RU, 160, 56, 80, 15
CHECKBOX "&Liniaal", IDC_PAGEFMT_RU, 160, 56, 80, 15
CHECKBOX "&Statusbalk", IDC_PAGEFMT_SB, 160, 74, 80, 15
LTEXT "", IDC_PAGEFMT_ID, 0,0,0,0
END
@ -207,11 +209,11 @@ BEGIN
STRING_ALL_FILES, "Alle documenten (*.*)"
STRING_TEXT_FILES_TXT, "Tekstdocumenten (*.txt)"
STRING_TEXT_FILES_UNICODE_TXT, "Unicode tekstdocument (*.txt)"
STRING_RICHTEXT_FILES_RTF, "Rich text formaat (*.rtf)"
STRING_RICHTEXT_FILES_RTF, "Rich tekstformaat (*.rtf)"
STRING_NEWFILE_RICHTEXT, "Rich tekstdocument"
STRING_NEWFILE_TXT, "Tekstdocument"
STRING_NEWFILE_TXT_UNICODE, "Unicode tekstdocument"
STRING_PRINTER_FILES_PRN, "Printer bestanden (*.PRN)"
STRING_PRINTER_FILES_PRN, "Afdrukbestanden (*.PRN)"
END
STRINGTABLE DISCARDABLE
@ -230,38 +232,37 @@ END
STRINGTABLE DISCARDABLE
BEGIN
STRING_PREVIEW_PRINT, "Print"
STRING_PREVIEW_PRINT, "Afdrukken"
STRING_PREVIEW_NEXTPAGE, "Volgende pagina"
STRING_PREVIEW_PREVPAGE, "Vorige pagina"
STRING_PREVIEW_TWOPAGES, "Twee pagina's"
STRING_PREVIEW_ONEPAGE, "Een pagina"
STRING_PREVIEW_ZOOMIN, "Zoom in"
STRING_PREVIEW_ZOOMOUT, "Zoom out"
STRING_PREVIEW_ZOOMIN, "Inzoomen"
STRING_PREVIEW_ZOOMOUT, "Uitzoomen"
STRING_PREVIEW_CLOSE, "Sluiten"
STRING_PREVIEW_PAGE, "Page"
STRING_PREVIEW_PAGES, "Pages"
END
STRINGTABLE DISCARDABLE
BEGIN
STRING_PREVIEW_PAGE, "Pagina"
STRING_PREVIEW_PAGES, "Pagina's"
STRING_UNITS_CM, "cm"
STRING_UNITS_IN, "in"
STRING_UNITS_INCH, "inch"
STRING_UNITS_PT, "pt"
END
STRINGTABLE DISCARDABLE
BEGIN
STRING_DEFAULT_FILENAME, "Document"
STRING_PROMPT_SAVE_CHANGES, "Wijzigingen opslaan van '%s'?"
STRING_SEARCH_FINISHED, "Doorzoeken van document beeindigd."
STRING_PROMPT_SAVE_CHANGES, "Wijzigingen opslaan naar '%s'?"
STRING_SEARCH_FINISHED, "Doorzoeken van document voltooid."
STRING_LOAD_RICHED_FAILED, "Laden van de RichEdit library is mislukt."
STRING_SAVE_LOSEFORMATTING, "U koos voor opslaan in gewoon tekst formaat, " \
"waardoor alle formatering verloren zal gaan. " \
"waardoor alle formattering verloren zal gaan. " \
"Weet u zeker dat u dit wilt?"
STRING_INVALID_NUMBER, "Foutief nummerformaat"
STRING_OLE_STORAGE_NOT_SUPPORTED, "OLE storage documenten zijn niet ondersteund"
STRING_WRITE_FAILED, "Bestand kon niet opgeslagen worden."
STRING_OLE_STORAGE_NOT_SUPPORTED, "OLE storage documenten worden niet ondersteund"
STRING_WRITE_FAILED, "Bestand kon niet worden opgeslagen."
STRING_WRITE_ACCESS_DENIED, "Onvoldoende rechten om het bestand op te slaan."
STRING_OPEN_FAILED, "Bestand kon niet geopend worden."
STRING_OPEN_FAILED, "Bestand kon niet worden geopend."
STRING_OPEN_ACCESS_DENIED, "Onvoldoende rechten om het bestand te openen."
STRING_PRINTING_NOT_IMPLEMENTED, "Printen is nog niet geimplementeerd"
STRING_PRINTING_NOT_IMPLEMENTED, "Printen is nog niet geïmplementeerd"
STRING_MAX_TAB_STOPS, "Onmogelijk om meer dan 32 tab stops toe te voegen."
END

View file

@ -1,6 +1,7 @@
/*
* Copyright 2004 by Krzysztof Foltman
* Copyright 2006 by Mikolaj Zalewski
* Copyright 2010 by £ukasz Wojni³owicz
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@ -127,7 +128,7 @@ BEGIN
MENUITEM "Fuksja" ID_COLOR_FUCHSIA
MENUITEM "Akwamaryna" ID_COLOR_AQUA
MENUITEM "Bia³y" ID_COLOR_WHITE
MENUITEM "Automatic" ID_COLOR_AUTOMATIC
MENUITEM "Automatycznie" ID_COLOR_AUTOMATIC
END
END
@ -191,7 +192,7 @@ Caption ""
FONT 8, "MS Shell Dlg"
BEGIN
GROUPBOX "Zawijanie wierszy", -1, 10, 10, 130, 85
RADIOBUTTON "No line wrapping", IDC_PAGEFMT_WN, 18, 25, 117, 15
RADIOBUTTON "Bez zawijania wierszy", IDC_PAGEFMT_WN, 18, 25, 117, 15
RADIOBUTTON "Zawijaj do &brzegu okna", IDC_PAGEFMT_WW, 18, 45, 117, 15
RADIOBUTTON "Zawijaj do &marginesu", IDC_PAGEFMT_WM, 18, 65, 117, 15
GROUPBOX "Paski narzêdzi", -1, 150, 10, 120, 85
@ -206,7 +207,7 @@ STRINGTABLE DISCARDABLE
BEGIN
STRING_RICHTEXT_FILES_RTF, "Tekst sformatowany - RTF (*.rtf)"
STRING_TEXT_FILES_TXT, "Dokument tekstowy (*.txt)"
STRING_TEXT_FILES_UNICODE_TXT, "Unicode text document (*.txt)"
STRING_TEXT_FILES_UNICODE_TXT, "Dokument tekstowy Unicode (*.txt)"
STRING_ALL_FILES, "Wszystkie dokumenty (*.*)"
END
@ -219,9 +220,9 @@ END
STRINGTABLE DISCARDABLE
BEGIN
STRING_NEWFILE_RICHTEXT, "Document sformatowany (RTF)"
STRING_NEWFILE_TXT, "Document tekstowy"
STRING_NEWFILE_TXT_UNICODE, "Document tekstowy Unicode"
STRING_NEWFILE_RICHTEXT, "Dokument sformatowany (RTF)"
STRING_NEWFILE_TXT, "Dokument tekstowy"
STRING_NEWFILE_TXT_UNICODE, "Dokument tekstowy Unicode"
END
STRINGTABLE DISCARDABLE
@ -241,18 +242,17 @@ BEGIN
STRING_PREVIEW_PRINT, "Drukuj"
STRING_PREVIEW_NEXTPAGE, "Nast. strona"
STRING_PREVIEW_PREVPAGE, "Poprz. strona"
STRING_PREVIEW_TWOPAGES, "Two pages"
STRING_PREVIEW_ONEPAGE, "One page"
STRING_PREVIEW_ZOOMIN, "Zoom in"
STRING_PREVIEW_ZOOMOUT, "Zoom out"
STRING_PREVIEW_TWOPAGES, "Dwie strony"
STRING_PREVIEW_ONEPAGE, "Jedna strona"
STRING_PREVIEW_ZOOMIN, "Zbli¿"
STRING_PREVIEW_ZOOMOUT, "Oddal"
STRING_PREVIEW_CLOSE, "Zamknij"
STRING_PREVIEW_PAGE, "Page"
STRING_PREVIEW_PAGES, "Pages"
END
STRINGTABLE DISCARDABLE
BEGIN
STRING_PREVIEW_PAGE, "Strona"
STRING_PREVIEW_PAGES, "Strony"
STRING_UNITS_CM, "cm"
STRING_UNITS_IN, "cal"
STRING_UNITS_INCH, "cal"
STRING_UNITS_PT, "punkt"
END
STRINGTABLE DISCARDABLE
@ -266,4 +266,10 @@ BEGIN
"Czy na pewno chcesz to zrobiæ?"
STRING_INVALID_NUMBER, "Z³y format liczby"
STRING_OLE_STORAGE_NOT_SUPPORTED, "Dokumenty typu OLE storage nie s¹ obs³ugiwane"
STRING_WRITE_FAILED, "Nie mo¿na by³o zapisaæ pliku."
STRING_WRITE_ACCESS_DENIED, "Nie masz dostêpu do zapisu pliku."
STRING_OPEN_FAILED, "Nie mo¿na by³o otworzyæ pliku."
STRING_OPEN_ACCESS_DENIED, "Nie masz dostêpu do otwarcia pliku."
STRING_PRINTING_NOT_IMPLEMENTED, "Drukowanie niezaimplementowane"
STRING_MAX_TAB_STOPS, "Nie mo¿na dodaæ wiêcej ni¿ 32 punkty tabulacji."
END

View file

@ -247,13 +247,12 @@ BEGIN
STRING_PREVIEW_ZOOMIN, "Zoom in"
STRING_PREVIEW_ZOOMOUT, "Zoom out"
STRING_PREVIEW_CLOSE, "Zapri"
STRING_PREVIEW_PAGE, "Page"
STRING_PREVIEW_PAGES, "Pages"
END
STRINGTABLE DISCARDABLE
BEGIN
STRING_PREVIEW_PAGE, "Stran"
STRING_PREVIEW_PAGES, "Strani"
STRING_UNITS_CM, "cm"
STRING_UNITS_IN, "in"
STRING_UNITS_INCH, "inch"
STRING_UNITS_PT, "pt"
END
STRINGTABLE DISCARDABLE

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 8.1 KiB

Before After
Before After

View file

@ -487,7 +487,6 @@ static void print(LPPRINTDLGW pd, LPWSTR wszFileName)
StartDocW(fr.hdc, &di);
do
{
int bottom = fr.rc.bottom;
if(StartPage(fr.hdc) <= 0)
break;
@ -495,7 +494,6 @@ static void print(LPPRINTDLGW pd, LPWSTR wszFileName)
if(EndPage(fr.hdc) <= 0)
break;
bottom = fr.rc.bottom;
printedPages++;
if((pd->Flags & PD_PAGENUMS) && (printedPages > (pd->nToPage - pd->nFromPage)))
@ -789,7 +787,6 @@ static void update_scaled_preview(HWND hMainWnd)
void init_preview(HWND hMainWnd, LPWSTR wszFileName)
{
HWND hwndPreview;
HINSTANCE hInstance = GetModuleHandleW(0);
preview.page = 1;
preview.hdc = 0;
@ -799,7 +796,7 @@ void init_preview(HWND hMainWnd, LPWSTR wszFileName)
preview.zoomlevel = 0;
preview_bar_show(hMainWnd, TRUE);
hwndPreview = CreateWindowExW(0, wszPreviewWndClass, NULL,
CreateWindowExW(0, wszPreviewWndClass, NULL,
WS_VISIBLE | WS_CHILD | WS_VSCROLL | WS_HSCROLL,
0, 0, 200, 10, hMainWnd, (HMENU)IDC_PREVIEW, hInstance, NULL);
}

View file

@ -1,4 +1,4 @@
/*
/*
* Copyright 2004 by Krzysztof Foltman
* Copyright 2007 by Alexander N. Sørnes <alex@thehandofagony.com>
*
@ -52,33 +52,24 @@ IDB_FORMATBAR BITMAP "formatbar.bmp"
/* @makedep: wordpad.ico */
IDI_WORDPAD ICON "wordpad.ico"
/* @makedep: rtf.ico */
IDI_RTF ICON "rtf.ico"
/* @makedep: wri.ico */
IDI_WRI ICON "wri.ico"
/* @makedep: txt.ico */
IDI_TXT ICON "txt.ico"
/* @makedep: zoom.cur */
IDC_ZOOM CURSOR "zoom.cur"
#include "Da.rc"
#include "En.rc"
#include "Hu.rc"
#include "Ko.rc"
#include "Nl.rc"
#include "Pl.rc"
#include "Tr.rc"
/* UTF-8 */
#include "Da.rc"
#include "De.rc"
#include "Fr.rc"
#include "It.rc"
#include "Ja.rc"
#include "Lt.rc"
#include "Nl.rc"
#include "No.rc"
#include "Pt.rc"
#include "Ru.rc"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 246 B

After

Width:  |  Height:  |  Size: 1.1 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

View file

@ -76,11 +76,19 @@ static WCHAR wszFilter[MAX_STRING_LEN*4+6*3+5];
static WCHAR wszDefaultFileName[MAX_STRING_LEN];
static WCHAR wszSaveChanges[MAX_STRING_LEN];
static WCHAR units_cmW[MAX_STRING_LEN];
static char units_cmA[MAX_STRING_LEN];
static WCHAR units_inW[MAX_STRING_LEN];
static WCHAR units_inchW[MAX_STRING_LEN];
static WCHAR units_ptW[MAX_STRING_LEN];
static LRESULT OnSize( HWND hWnd, WPARAM wParam, LPARAM lParam );
typedef enum
{
UNIT_CM,
UNIT_INCH,
UNIT_PT
} UNIT;
/* Load string resources */
static void DoLoadStrings(void)
{
@ -115,8 +123,10 @@ static void DoLoadStrings(void)
p = wszSaveChanges;
LoadStringW(hInstance, STRING_PROMPT_SAVE_CHANGES, p, MAX_STRING_LEN);
LoadStringA(hInstance, STRING_UNITS_CM, units_cmA, MAX_STRING_LEN);
LoadStringW(hInstance, STRING_UNITS_CM, units_cmW, MAX_STRING_LEN);
LoadStringW(hInstance, STRING_UNITS_IN, units_inW, MAX_STRING_LEN);
LoadStringW(hInstance, STRING_UNITS_INCH, units_inchW, MAX_STRING_LEN);
LoadStringW(hInstance, STRING_UNITS_PT, units_ptW, MAX_STRING_LEN);
}
/* Show a message box with resource strings */
@ -239,8 +249,10 @@ static void set_caption(LPCWSTR wszNewFileName)
HeapFree(GetProcessHeap(), 0, wszCaption);
}
static BOOL validate_endptr(LPCSTR endptr, BOOL units)
static BOOL validate_endptr(LPCWSTR endptr, UNIT *punit)
{
if(punit != NULL)
*punit = UNIT_CM;
if(!endptr)
return FALSE;
if(!*endptr)
@ -249,28 +261,45 @@ static BOOL validate_endptr(LPCSTR endptr, BOOL units)
while(*endptr == ' ')
endptr++;
if(!units)
if(punit == NULL)
return *endptr == '\0';
/* FIXME: Allow other units and convert between them */
if(!lstrcmpA(endptr, units_cmA))
endptr += 2;
if(!lstrcmpW(endptr, units_cmW))
{
*punit = UNIT_CM;
endptr += lstrlenW(units_cmW);
}
else if (!lstrcmpW(endptr, units_inW))
{
*punit = UNIT_INCH;
endptr += lstrlenW(units_inW);
}
else if (!lstrcmpW(endptr, units_inchW))
{
*punit = UNIT_INCH;
endptr += lstrlenW(units_inchW);
}
else if (!lstrcmpW(endptr, units_ptW))
{
*punit = UNIT_PT;
endptr += lstrlenW(units_ptW);
}
return *endptr == '\0';
}
static BOOL number_from_string(LPCWSTR string, float *num, BOOL units)
static BOOL number_from_string(LPCWSTR string, float *num, UNIT *punit)
{
double ret;
char buffer[MAX_STRING_LEN];
char *endptr = buffer;
WCHAR *endptr;
WideCharToMultiByte(CP_ACP, 0, string, -1, buffer, MAX_STRING_LEN, NULL, NULL);
*num = 0;
errno = 0;
ret = strtod(buffer, &endptr);
ret = wcstod(string, &endptr);
if((ret == 0 && errno != 0) || endptr == buffer || !validate_endptr(endptr, units))
if (punit != NULL)
*punit = UNIT_CM;
if((ret == 0 && errno != 0) || endptr == string || !validate_endptr(endptr, punit))
{
return FALSE;
} else
@ -304,7 +333,7 @@ static void on_sizelist_modified(HWND hwndSizeList, LPWSTR wszNewFontSize)
if(lstrcmpW(sizeBuffer, wszNewFontSize))
{
float size = 0;
if(number_from_string(wszNewFontSize, &size, FALSE)
if(number_from_string(wszNewFontSize, &size, NULL)
&& size > 0)
{
set_size(size);
@ -703,17 +732,8 @@ static void preview_exit(HWND hMainWnd)
static void set_fileformat(WPARAM format)
{
HICON hIcon;
HINSTANCE hInstance = GetModuleHandleW(0);
fileFormat = format;
if(format & SF_TEXT)
hIcon = LoadIconW(hInstance, MAKEINTRESOURCEW(IDI_TXT));
else
hIcon = LoadIconW(hInstance, MAKEINTRESOURCEW(IDI_RTF));
SendMessageW(hMainWnd, WM_SETICON, ICON_BIG, (LPARAM)hIcon);
set_bar_states();
set_default_font();
target_device(hMainWnd, wordWrap[reg_formatindex(fileFormat)]);
@ -1282,6 +1302,7 @@ static LRESULT handle_findmsg(LPFINDREPLACEW pFr)
static void dialog_find(LPFINDREPLACEW fr, BOOL replace)
{
static WCHAR findBuffer[MAX_STRING_LEN];
static WCHAR replaceBuffer[MAX_STRING_LEN];
/* Allow only one search/replace dialog to open */
if(hFindWnd != NULL)
@ -1295,8 +1316,10 @@ static void dialog_find(LPFINDREPLACEW fr, BOOL replace)
fr->hwndOwner = hMainWnd;
fr->Flags = FR_HIDEUPDOWN;
fr->lpstrFindWhat = findBuffer;
fr->lpstrReplaceWith = replaceBuffer;
fr->lCustData = -1;
fr->wFindWhatLen = MAX_STRING_LEN*sizeof(WCHAR);
fr->wFindWhatLen = sizeof(findBuffer);
fr->wReplaceWithLen = sizeof(replaceBuffer);
if(replace)
hFindWnd = ReplaceTextW(fr);
@ -1304,9 +1327,25 @@ static void dialog_find(LPFINDREPLACEW fr, BOOL replace)
hFindWnd = FindTextW(fr);
}
static int current_units_to_twips(float number)
static int units_to_twips(UNIT unit, float number)
{
int twips = (int)(number * 1000.0 / (float)CENTMM_PER_INCH * (float)TWIPS_PER_INCH);
int twips = 0;
switch(unit)
{
case UNIT_CM:
twips = (int)(number * 1000.0 / (float)CENTMM_PER_INCH * (float)TWIPS_PER_INCH);
break;
case UNIT_INCH:
twips = (int)(number * (float)TWIPS_PER_INCH);
break;
case UNIT_PT:
twips = (int)(number * (0.0138 * (float)TWIPS_PER_INCH));
break;
}
return twips;
}
@ -1515,22 +1554,23 @@ static INT_PTR CALLBACK paraformat_proc(HWND hWnd, UINT message, WPARAM wParam,
float num;
int ret = 0;
PARAFORMAT pf;
UNIT unit;
index = SendMessageW(hListWnd, CB_GETCURSEL, 0, 0);
pf.wAlignment = ALIGNMENT_VALUES[index];
GetWindowTextW(hLeftWnd, buffer, MAX_STRING_LEN);
if(number_from_string(buffer, &num, TRUE))
if(number_from_string(buffer, &num, &unit))
ret++;
pf.dxOffset = current_units_to_twips(num);
pf.dxOffset = units_to_twips(unit, num);
GetWindowTextW(hRightWnd, buffer, MAX_STRING_LEN);
if(number_from_string(buffer, &num, TRUE))
if(number_from_string(buffer, &num, &unit))
ret++;
pf.dxRightIndent = current_units_to_twips(num);
pf.dxRightIndent = units_to_twips(unit, num);
GetWindowTextW(hFirstWnd, buffer, MAX_STRING_LEN);
if(number_from_string(buffer, &num, TRUE))
if(number_from_string(buffer, &num, &unit))
ret++;
pf.dxStartIndent = current_units_to_twips(num);
pf.dxStartIndent = units_to_twips(unit, num);
if(ret != 3)
{
@ -1636,6 +1676,7 @@ static INT_PTR CALLBACK tabstops_proc(HWND hWnd, UINT message, WPARAM wParam, LP
{
HWND hTabWnd = GetDlgItem(hWnd, IDC_TABSTOPS);
WCHAR buffer[MAX_STRING_LEN];
UNIT unit;
GetWindowTextW(hTabWnd, buffer, MAX_STRING_LEN);
append_current_units(buffer);
@ -1645,7 +1686,7 @@ static INT_PTR CALLBACK tabstops_proc(HWND hWnd, UINT message, WPARAM wParam, LP
float number = 0;
int item_count = SendMessage(hTabWnd, CB_GETCOUNT, 0, 0);
if(!number_from_string(buffer, &number, TRUE))
if(!number_from_string(buffer, &number, &unit))
{
MessageBoxWithResStringW(hWnd, MAKEINTRESOURCEW(STRING_INVALID_NUMBER),
wszAppTitle, MB_OK | MB_ICONINFORMATION);
@ -1656,14 +1697,14 @@ static INT_PTR CALLBACK tabstops_proc(HWND hWnd, UINT message, WPARAM wParam, LP
int i;
float next_number = -1;
int next_number_in_twips = -1;
int insert_number = current_units_to_twips(number);
int insert_number = units_to_twips(unit, number);
/* linear search for position to insert the string */
for(i = 0; i < item_count; i++)
{
SendMessageW(hTabWnd, CB_GETLBTEXT, i, (LPARAM)&buffer);
number_from_string(buffer, &next_number, TRUE);
next_number_in_twips = current_units_to_twips(next_number);
number_from_string(buffer, &next_number, &unit);
next_number_in_twips = units_to_twips(unit, next_number);
if (insert_number <= next_number_in_twips)
break;
}
@ -1704,6 +1745,7 @@ static INT_PTR CALLBACK tabstops_proc(HWND hWnd, UINT message, WPARAM wParam, LP
WCHAR buffer[MAX_STRING_LEN];
PARAFORMAT pf;
float number;
UNIT unit;
pf.cbSize = sizeof(pf);
pf.dwMask = PFM_TABSTOPS;
@ -1712,8 +1754,8 @@ static INT_PTR CALLBACK tabstops_proc(HWND hWnd, UINT message, WPARAM wParam, LP
(LPARAM)&buffer) != CB_ERR &&
i < MAX_TAB_STOPS; i++)
{
number_from_string(buffer, &number, TRUE);
pf.rgxTabs[i] = current_units_to_twips(number);
number_from_string(buffer, &number, &unit);
pf.rgxTabs[i] = units_to_twips(unit, number);
}
pf.cTabCount = i;
SendMessageW(hEditorWnd, EM_SETPARAFORMAT, 0, (LPARAM)&pf);
@ -2253,11 +2295,11 @@ static LRESULT OnCommand( HWND hWnd, WPARAM wParam, LPARAM lParam)
case ID_EDIT_DEFCHARFORMAT:
{
CHARFORMAT2W cf;
LRESULT i;
ZeroMemory(&cf, sizeof(cf));
cf.cbSize = sizeof(cf);
cf.dwMask = 0;
i = SendMessageW(hwndEditor, EM_GETCHARFORMAT,
SendMessageW(hwndEditor, EM_GETCHARFORMAT,
LOWORD(wParam) == ID_EDIT_CHARFORMAT, (LPARAM)&cf);
return 0;
}
@ -2618,7 +2660,7 @@ int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hOldInstance, LPSTR szCmdPar
{
INITCOMMONCONTROLSEX classes = {8, ICC_BAR_CLASSES|ICC_COOL_CLASSES|ICC_USEREX_CLASSES};
HACCEL hAccel;
WNDCLASSW wc;
WNDCLASSEXW wc;
MSG msg;
RECT rc;
UINT_PTR hPrevRulerProc;
@ -2632,17 +2674,20 @@ int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hOldInstance, LPSTR szCmdPar
hAccel = LoadAcceleratorsW(hInstance, wszAccelTable);
wc.cbSize = sizeof(wc);
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 4;
wc.hInstance = hInstance;
wc.hIcon = LoadIconW(hInstance, MAKEINTRESOURCEW(IDI_WORDPAD));
wc.hIconSm = LoadImageW(hInstance, MAKEINTRESOURCEW(IDI_WORDPAD), IMAGE_ICON,
GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), LR_SHARED);
wc.hCursor = LoadCursor(NULL, IDC_IBEAM);
wc.hbrBackground = GetSysColorBrush(COLOR_WINDOW);
wc.lpszMenuName = MAKEINTRESOURCEW(IDM_MAINMENU);
wc.lpszClassName = wszMainWndClass;
RegisterClassW(&wc);
RegisterClassExW(&wc);
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = preview_proc;
@ -2650,11 +2695,12 @@ int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hOldInstance, LPSTR szCmdPar
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = NULL;
wc.hIconSm = NULL;
wc.hCursor = LoadCursor(NULL, IDC_IBEAM);
wc.hbrBackground = GetSysColorBrush(COLOR_WINDOW);
wc.lpszMenuName = NULL;
wc.lpszClassName = wszPreviewWndClass;
RegisterClassW(&wc);
RegisterClassExW(&wc);
registry_read_winrect(&rc);
hMainWnd = CreateWindowExW(0, wszMainWndClass, wszAppTitle, WS_CLIPCHILDREN|WS_OVERLAPPEDWINDOW,

View file

@ -185,11 +185,8 @@
#define IDB_FORMATBAR 101
#define IDI_WORDPAD 102
#define IDI_RTF 103
#define IDI_WRI 104
#define IDI_TXT 105
#define IDC_ZOOM 106
#define IDC_ZOOM 103
#define STRING_ALL_FILES 1400
#define STRING_TEXT_FILES_TXT 1401
@ -222,6 +219,9 @@
#define STRING_PREVIEW_PAGES 1457
#define STRING_UNITS_CM 1458
#define STRING_UNITS_IN 1459
#define STRING_UNITS_INCH 1460
#define STRING_UNITS_PT 1461
#define STRING_DEFAULT_FILENAME 1700
#define STRING_PROMPT_SAVE_CHANGES 1701

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

View file

@ -0,0 +1,29 @@
/*
* Danish language support
*
* Copyright 2010 Thomas Larsen
* 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 "resources.h"
LANGUAGE LANG_DANISH, SUBLANG_DEFAULT
STRINGTABLE
{
IDS_FAILED, "Kunne ikke starte Wordpad"
}

View file

@ -0,0 +1,32 @@
/*
* Spanish language support
*
* Copyright 2010 José Rostagno
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include "resources.h"
/*UTF-8*/
#pragma code_page(65001)
LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL
STRINGTABLE
{
IDS_FAILED, "Fallo inicio Wordpad"
}

View file

@ -20,6 +20,7 @@
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
#include "Da.rc"
#include "En.rc"
#include "Ko.rc"
#include "Nl.rc"
@ -30,6 +31,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
/* UTF-8 */
#include "De.rc"
#include "Es.rc"
#include "Fr.rc"
#include "It.rc"
#include "Ja.rc"

View file

@ -106,8 +106,7 @@ PrintString(char* fmt,...)
static VOID
DrawBox(
IN SHORT xLeft,
DrawBox(IN SHORT xLeft,
IN SHORT yTop,
IN SHORT Width,
IN SHORT Height)
@ -118,8 +117,7 @@ DrawBox(
/* draw upper left corner */
coPos.X = xLeft;
coPos.Y = yTop;
FillConsoleOutputCharacterA(
StdOutput,
FillConsoleOutputCharacterA(StdOutput,
0xDA, // '+',
1,
coPos,
@ -128,8 +126,7 @@ DrawBox(
/* draw upper edge */
coPos.X = xLeft + 1;
coPos.Y = yTop;
FillConsoleOutputCharacterA(
StdOutput,
FillConsoleOutputCharacterA(StdOutput,
0xC4, // '-',
Width - 2,
coPos,
@ -138,8 +135,7 @@ DrawBox(
/* draw upper right corner */
coPos.X = xLeft + Width - 1;
coPos.Y = yTop;
FillConsoleOutputCharacterA(
StdOutput,
FillConsoleOutputCharacterA(StdOutput,
0xBF, // '+',
1,
coPos,
@ -149,24 +145,21 @@ DrawBox(
for (coPos.Y = yTop + 1; coPos.Y < yTop + Height - 1; coPos.Y++)
{
coPos.X = xLeft;
FillConsoleOutputCharacterA(
StdOutput,
FillConsoleOutputCharacterA(StdOutput,
0xB3, // '|',
1,
coPos,
&Written);
coPos.X = xLeft + 1;
FillConsoleOutputCharacterA(
StdOutput,
FillConsoleOutputCharacterA(StdOutput,
' ',
Width - 2,
coPos,
&Written);
coPos.X = xLeft + Width - 1;
FillConsoleOutputCharacterA(
StdOutput,
FillConsoleOutputCharacterA(StdOutput,
0xB3, // '|',
1,
coPos,
@ -176,8 +169,7 @@ DrawBox(
/* draw lower left corner */
coPos.X = xLeft;
coPos.Y = yTop + Height - 1;
FillConsoleOutputCharacterA(
StdOutput,
FillConsoleOutputCharacterA(StdOutput,
0xC0, // '+',
1,
coPos,
@ -186,8 +178,7 @@ DrawBox(
/* draw lower edge */
coPos.X = xLeft + 1;
coPos.Y = yTop + Height - 1;
FillConsoleOutputCharacterA(
StdOutput,
FillConsoleOutputCharacterA(StdOutput,
0xC4, // '-',
Width - 2,
coPos,
@ -196,14 +187,14 @@ DrawBox(
/* draw lower right corner */
coPos.X = xLeft + Width - 1;
coPos.Y = yTop + Height - 1;
FillConsoleOutputCharacterA(
StdOutput,
FillConsoleOutputCharacterA(StdOutput,
0xD9, // '+',
1,
coPos,
&Written);
}
VOID
PopupError(PCCH Text,
PCCH Status,
@ -563,8 +554,10 @@ CheckUnattendedSetup(VOID)
}
/* search for LocaleID in the 'Unattend' section*/
if (SetupFindFirstLineW (UnattendInf, L"Unattend", L"LocaleID", &Context)){
if (INF_GetData (&Context, NULL, &Value)){
if (SetupFindFirstLineW (UnattendInf, L"Unattend", L"LocaleID", &Context))
{
if (INF_GetData (&Context, NULL, &Value))
{
LONG Id = wcstol(Value, NULL, 16);
swprintf(LocaleID,L"%08lx", Id);
}
@ -575,6 +568,7 @@ CheckUnattendedSetup(VOID)
DPRINT("Running unattended setup\n");
}
VOID
UpdateKBLayout(VOID)
{
@ -611,6 +605,7 @@ UpdateKBLayout(VOID)
}
}
static PAGE_NUMBER
LanguagePage(PINPUT_RECORD Ir)
{
@ -840,10 +835,8 @@ SetupStartPage(PINPUT_RECORD Ir)
LanguageList = CreateLanguageList(SetupInf, DefaultLanguage);
/* new part */
wcscpy(SelectedLanguageId,LocaleID);
/* first we hack LanguageList */
ListEntry = GetFirstListEntry(LanguageList);
@ -858,6 +851,7 @@ SetupStartPage(PINPUT_RECORD Ir)
ListEntry = GetNextListEntry(ListEntry);
}
/* now LayoutList */
ListEntry = GetFirstListEntry(LayoutList);
@ -872,6 +866,7 @@ SetupStartPage(PINPUT_RECORD Ir)
ListEntry = GetNextListEntry(ListEntry);
}
SetConsoleCodePage();
return INSTALL_INTRO_PAGE;
@ -923,6 +918,7 @@ IntroPage(PINPUT_RECORD Ir)
return INTRO_PAGE;
}
/*
* License Page
* RETURNS
@ -947,6 +943,7 @@ LicensePage(PINPUT_RECORD Ir)
return LICENSE_PAGE;
}
static PAGE_NUMBER
RepairIntroPage(PINPUT_RECORD Ir)
{
@ -1401,9 +1398,12 @@ LayoutSettingsPage(PINPUT_RECORD Ir)
return DISPLAY_SETTINGS_PAGE;
}
static BOOL IsDiskSizeValid(PPARTENTRY PartEntry)
static BOOL
IsDiskSizeValid(PPARTENTRY PartEntry)
{
ULONGLONG m;
/* check for unpartitioned space */
m = PartEntry->UnpartitionedLength;
m = (m + (1 << 19)) >> 20; /* in MBytes (rounded) */
@ -1412,7 +1412,7 @@ static BOOL IsDiskSizeValid(PPARTENTRY PartEntry)
return TRUE;
}
// check for partitioned space
/* check for partitioned space */
m = PartEntry->PartInfo[0].PartitionLength.QuadPart;
m = (m + (1 << 19)) >> 20; /* in MBytes (rounded) */
if (m < RequiredPartitionDiskSpace)
@ -1427,6 +1427,7 @@ static BOOL IsDiskSizeValid(PPARTENTRY PartEntry)
}
}
static PAGE_NUMBER
SelectPartitionPage(PINPUT_RECORD Ir)
{
@ -1438,7 +1439,6 @@ SelectPartitionPage(PINPUT_RECORD Ir)
19,
xScreen - 3,
yScreen - 3);
if (PartitionList == NULL)
{
/* FIXME: show an error dialog */
@ -1486,11 +1486,12 @@ SelectPartitionPage(PINPUT_RECORD Ir)
MUIDisplayError(ERROR_INSUFFICIENT_DISKSPACE, Ir, POPUP_WAIT_ANY_KEY);
return SELECT_PARTITION_PAGE; /* let the user select another partition */
}
CreateNewPartition(PartitionList,
MaxSize,
TRUE);
return (SELECT_FILE_SYSTEM_PAGE);
return SELECT_FILE_SYSTEM_PAGE;
}
}
else
@ -1500,7 +1501,8 @@ SelectPartitionPage(PINPUT_RECORD Ir)
MUIDisplayError(ERROR_INSUFFICIENT_DISKSPACE, Ir, POPUP_WAIT_ANY_KEY);
return SELECT_PARTITION_PAGE; /* let the user select another partition */
}
return(SELECT_FILE_SYSTEM_PAGE);
return SELECT_FILE_SYSTEM_PAGE;
}
}
@ -2211,7 +2213,7 @@ SelectFileSystemPage (PINPUT_RECORD Ir)
return FORMAT_PARTITION_PAGE;
}
return(CHECK_FILE_SYSTEM_PAGE);
return CHECK_FILE_SYSTEM_PAGE;
}
while (TRUE)
@ -2310,8 +2312,6 @@ FormatPartitionPage (PINPUT_RECORD Ir)
{
CONSOLE_SetStatusText(MUIGetString(STRING_PLEASEWAIT));
if (PartEntry->PartInfo[PartNum].PartitionType == PARTITION_ENTRY_UNUSED)
{
if (wcscmp(FileSystemList->Selected->FileSystem, L"FAT") == 0)
{
if (PartEntry->PartInfo[PartNum].PartitionLength.QuadPart < (4200LL * 1024LL))
@ -2359,7 +2359,6 @@ FormatPartitionPage (PINPUT_RECORD Ir)
PartEntry->PartInfo[PartNum].PartitionType = PARTITION_EXT2;
else if (!FileSystemList->Selected->FormatFunc)
return QUIT_PAGE;
}
CheckActiveBootPartition(PartitionList);
@ -2437,7 +2436,8 @@ FormatPartitionPage (PINPUT_RECORD Ir)
if (FileSystemList->Selected->FormatFunc)
{
Status = FormatPartition(&DestinationRootPath, FileSystemList->Selected);
Status = FormatPartition(&DestinationRootPath,
FileSystemList->Selected);
if (!NT_SUCCESS(Status))
{
DPRINT1("FormatPartition() failed with status 0x%08lx\n", Status);
@ -2461,7 +2461,8 @@ FormatPartitionPage (PINPUT_RECORD Ir)
PathBuffer, DestinationRootPath.Buffer);
/* Install MBR bootcode */
Status = InstallMbrBootCodeToDisk(PathBuffer, DestinationRootPath.Buffer);
Status = InstallMbrBootCodeToDisk(PathBuffer,
DestinationRootPath.Buffer);
if (!NT_SUCCESS (Status))
{
DPRINT1("InstallMbrBootCodeToDisk() failed (Status %lx)\n",
@ -2483,9 +2484,9 @@ FormatPartitionPage (PINPUT_RECORD Ir)
DPRINT("Install FAT32 bootcode: %S ==> %S\n", PathBuffer,
DestinationRootPath.Buffer);
Status = InstallFat32BootCodeToDisk(PathBuffer,
DestinationRootPath.Buffer);
if (!NT_SUCCESS(Status))
{
DPRINT1("InstallFat32BootCodeToDisk() failed with status 0x%08lx\n", Status);
@ -2502,9 +2503,9 @@ FormatPartitionPage (PINPUT_RECORD Ir)
DPRINT("Install FAT bootcode: %S ==> %S\n", PathBuffer,
DestinationRootPath.Buffer);
Status = InstallFat16BootCodeToDisk(PathBuffer,
DestinationRootPath.Buffer);
if (!NT_SUCCESS(Status))
{
DPRINT1("InstallFat16BootCodeToDisk() failed with status 0x%.08x\n", Status);
@ -2522,9 +2523,9 @@ FormatPartitionPage (PINPUT_RECORD Ir)
DPRINT("Install EXT2 bootcode: %S ==> %S\n", PathBuffer,
DestinationRootPath.Buffer);
Status = InstallFat32BootCodeToDisk(PathBuffer,
DestinationRootPath.Buffer);
if (!NT_SUCCESS(Status))
{
DPRINT1("InstallFat32BootCodeToDisk() failed with status 0x%08lx\n", Status);
@ -2644,7 +2645,10 @@ CheckFileSystemPage(PINPUT_RECORD Ir)
static PAGE_NUMBER
InstallDirectoryPage1(PWCHAR InstallDir, PDISKENTRY DiskEntry, PPARTENTRY PartEntry, UCHAR PartNum)
InstallDirectoryPage1(PWCHAR InstallDir,
PDISKENTRY DiskEntry,
PPARTENTRY PartEntry,
UCHAR PartNum)
{
WCHAR PathBuffer[MAX_PATH];
@ -2676,7 +2680,7 @@ InstallDirectoryPage1(PWCHAR InstallDir, PDISKENTRY DiskEntry, PPARTENTRY PartEn
wcscat(PathBuffer, InstallDir);
RtlCreateUnicodeString(&DestinationArcPath, PathBuffer);
return(PREPARE_COPY_PAGE);
return PREPARE_COPY_PAGE;
}
@ -2724,7 +2728,10 @@ InstallDirectoryPage(PINPUT_RECORD Ir)
if (IsUnattendedSetup)
{
return(InstallDirectoryPage1 (InstallDir, DiskEntry, PartEntry, PartitionList->CurrentPartitionNumber));
return InstallDirectoryPage1(InstallDir,
DiskEntry,
PartEntry,
PartitionList->CurrentPartitionNumber);
}
while (TRUE)
@ -2735,13 +2742,16 @@ InstallDirectoryPage(PINPUT_RECORD Ir)
(Ir->Event.KeyEvent.wVirtualKeyCode == VK_F3)) /* F3 */
{
if (ConfirmQuit(Ir) == TRUE)
return(QUIT_PAGE);
return QUIT_PAGE;
break;
}
else if (Ir->Event.KeyEvent.uChar.AsciiChar == 0x0D) /* ENTER */
{
return (InstallDirectoryPage1 (InstallDir, DiskEntry, PartEntry, PartitionList->CurrentPartitionNumber));
return InstallDirectoryPage1(InstallDir,
DiskEntry,
PartEntry,
PartitionList->CurrentPartitionNumber);
}
else if (Ir->Event.KeyEvent.uChar.AsciiChar == 0x08) /* BACKSPACE */
{
@ -2764,9 +2774,10 @@ InstallDirectoryPage(PINPUT_RECORD Ir)
}
}
return(INSTALL_DIRECTORY_PAGE);
return INSTALL_DIRECTORY_PAGE;
}
static BOOLEAN
AddSectionToCopyQueueCab(HINF InfFile,
PWCHAR SectionName,
@ -2787,7 +2798,7 @@ AddSectionToCopyQueueCab(HINF InfFile,
char Buffer[128];
sprintf(Buffer, MUIGetString(STRING_TXTSETUPFAILED), SectionName);
PopupError(Buffer, MUIGetString(STRING_REBOOTCOMPUTER), Ir, POPUP_WAIT_ENTER);
return(FALSE);
return FALSE;
}
/*
@ -2841,6 +2852,7 @@ AddSectionToCopyQueueCab(HINF InfFile,
return TRUE;
}
static BOOLEAN
AddSectionToCopyQueue(HINF InfFile,
PWCHAR SectionName,
@ -2928,6 +2940,7 @@ AddSectionToCopyQueue(HINF InfFile,
return TRUE;
}
static BOOLEAN
PrepareCopyPageInfFile(HINF InfFile,
PWCHAR SourceCabinet,
@ -3038,6 +3051,7 @@ PrepareCopyPageInfFile(HINF InfFile,
return TRUE;
}
static PAGE_NUMBER
PrepareCopyPage(PINPUT_RECORD Ir)
{
@ -3131,6 +3145,7 @@ PrepareCopyPage(PINPUT_RECORD Ir)
return FILE_COPY_PAGE;
}
VOID
NTAPI
SetupUpdateMemoryInfo(IN PCOPYCONTEXT CopyContext,
@ -3159,7 +3174,9 @@ SetupUpdateMemoryInfo(IN PCOPYCONTEXT CopyContext,
ProgressSetStep(CopyContext->MemoryBars[2], PerfInfo.AvailablePages);
}
static UINT CALLBACK
static UINT
CALLBACK
FileCopyCallback(PVOID Context,
UINT Notification,
UINT_PTR Param1,
@ -3194,6 +3211,7 @@ FileCopyCallback(PVOID Context,
return 0;
}
static
PAGE_NUMBER
FileCopyPage(PINPUT_RECORD Ir)
@ -3270,6 +3288,7 @@ FileCopyPage(PINPUT_RECORD Ir)
return REGISTRY_PAGE;
}
static PAGE_NUMBER
RegistryPage(PINPUT_RECORD Ir)
{
@ -3325,7 +3344,8 @@ RegistryPage(PINPUT_RECORD Ir)
DPRINT("Action: %S File: %S Section %S\n", Action, File, Section);
if (Action == NULL) break; // Hackfix
if (Action == NULL)
break; // Hackfix
if (!_wcsicmp (Action, L"AddReg"))
{
@ -3383,8 +3403,8 @@ RegistryPage(PINPUT_RECORD Ir)
return QUIT_PAGE;
}
if (!IsUnattendedSetup){
if (!IsUnattendedSetup)
{
/* Update keyboard layout settings */
CONSOLE_SetStatusText(MUIGetString(STRING_KEYBOARDSETTINGSUPDATE));
if (!ProcessKeyboardLayoutRegistry(LayoutList))
@ -3393,6 +3413,7 @@ RegistryPage(PINPUT_RECORD Ir)
return QUIT_PAGE;
}
}
/* Add codepage information to registry */
CONSOLE_SetStatusText(MUIGetString(STRING_CODEPAGEINFOUPDATE));
if (!AddCodePage())
@ -3498,8 +3519,11 @@ BootLoaderPage(PINPUT_RECORD Ir)
CONSOLE_NormalTextXY(8, Line, 60, 1);
Line++;
if (Line<12) Line=14;
if (Line>14) Line=12;
if (Line<12)
Line=14;
if (Line>14)
Line=12;
CONSOLE_InvertTextXY(8, Line, 60, 1);
}
@ -3509,8 +3533,11 @@ BootLoaderPage(PINPUT_RECORD Ir)
CONSOLE_NormalTextXY(8, Line, 60, 1);
Line--;
if (Line<12) Line=14;
if (Line>14) Line=12;
if (Line<12)
Line=14;
if (Line>14)
Line=12;
CONSOLE_InvertTextXY(8, Line, 60, 1);
}
@ -3736,7 +3763,16 @@ RunUSetup(VOID)
NtQuerySystemTime(&Time);
Status = RtlCreateUserThread(NtCurrentProcess(), NULL, TRUE, 0, 0, 0, PnpEventThread, &SetupInf, &hPnpThread, NULL);
Status = RtlCreateUserThread(NtCurrentProcess(),
NULL,
TRUE,
0,
0,
0,
PnpEventThread,
&SetupInf,
&hPnpThread,
NULL);
if (!NT_SUCCESS(Status))
hPnpThread = INVALID_HANDLE_VALUE;

View file

@ -1,7 +1,7 @@
/* TRANSLATOR: M rio KaŸm r /Mario Kacmar/ aka Kario (kario@szm.sk)
* DATE OF TR: 22-01-2008
* Encoding : Latin II (852)
* LastChange: 01-11-2009
* LastChange: 31-05-2010
*/
#pragma once
@ -1489,8 +1489,8 @@ MUI_ERROR skSKErrorEntries[] =
},
{
//ERROR_INSUFFICIENT_DISKSPACE,
"Not enough free space in the selected partition.\n"
" * Press any key to continue.",
"Na zvolenej partˇcii nie je dostatok vonho miesta.\n"
" * Pokraźujte stlaźenˇm ubovonho kl vesu.",
NULL
},
{

View file

@ -42,36 +42,6 @@ struct string_list
WCHAR str[1];
};
static const char UsageStr[] =
"Usage:\n"
" Install a product:\n"
" msiexec {package|productcode} [property]\n"
" msiexec /i {package|productcode} [property]\n"
" msiexec /package {package|productcode} [property]\n"
" msiexec /a package [property]\n"
" Repair an installation:\n"
" msiexec /f[p|o|e|d|c|a|u|m|s|v] {package|productcode}\n"
" Uninstall a product:\n"
" msiexec /x {package|productcode} [property]\n"
" Advertise a product:\n"
" msiexec /j[u|m] package [/t transform] [/g languageid]\n"
" msiexec {u|m} package [/t transform] [/g languageid]\n"
" Apply a patch:\n"
" msiexec /p patchpackage [property]\n"
" msiexec /p patchpackage /a package [property]\n"
" Modifiers for above operations:\n"
" msiexec /l[*][i|w|e|a|r|u|c|m|o|p|v|][+|!] logfile\n"
" msiexec /q{|n|b|r|f|n+|b+|b-}\n"
" Register a module:\n"
" msiexec /y module\n"
" Unregister a module:\n"
" msiexec /z module\n"
" Display usage and copyright:\n"
" msiexec {/h|/?}\n"
"NOTE: Product code on commandline unimplemented as of yet\n"
"\n"
"Copyright 2004 Vincent Béron\n";
static const WCHAR ActionAdmin[] = {
'A','C','T','I','O','N','=','A','D','M','I','N',0 };
static const WCHAR RemoveAll[] = {
@ -87,7 +57,41 @@ static const WCHAR InstallRunOnce[] = {
static void ShowUsage(int ExitCode)
{
printf(UsageStr);
WCHAR msiexec_version[40];
WCHAR filename[MAX_PATH];
LPWSTR msi_res;
LPWSTR msiexec_help;
HMODULE hmsi = GetModuleHandleA("msi.dll");
DWORD len;
DWORD res;
/* MsiGetFileVersion need the full path */
*filename = 0;
res = GetModuleFileNameW(hmsi, filename, sizeof(filename) / sizeof(filename[0]));
if (!res)
WINE_ERR("GetModuleFileName failed: %d\n", GetLastError());
len = sizeof(msiexec_version) / sizeof(msiexec_version[0]);
*msiexec_version = 0;
res = MsiGetFileVersionW(filename, msiexec_version, &len, NULL, NULL);
if (res)
WINE_ERR("MsiGetFileVersion failed with %d\n", res);
/* Return the length of the resource.
No typo: The LPWSTR parameter must be a LPWSTR * for this mode */
len = LoadStringW(hmsi, 10, (LPWSTR) &msi_res, 0);
msi_res = HeapAlloc(GetProcessHeap(), 0, (len + 1) * sizeof(WCHAR));
msiexec_help = HeapAlloc(GetProcessHeap(), 0, (len + 1) * sizeof(WCHAR) + sizeof(msiexec_version));
if (msi_res && msiexec_help) {
*msi_res = 0;
LoadStringW(hmsi, 10, msi_res, len + 1);
sprintfW(msiexec_help, msi_res, msiexec_version);
MsiMessageBoxW(0, msiexec_help, NULL, 0, GetUserDefaultLangID(), 0);
}
HeapFree(GetProcessHeap(), 0, msi_res);
HeapFree(GetProcessHeap(), 0, msiexec_help);
ExitProcess(ExitCode);
}
@ -660,11 +664,11 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
WINE_TRACE("argvW[%d] = %s\n", i, wine_dbgstr_w(argvW[i]));
PackageName = argvW[i];
}
else if(msi_option_prefix(argvW[i], "x"))
else if(msi_option_prefix(argvW[i], "x") || msi_option_equal(argvW[i], "uninstall"))
{
FunctionInstall = TRUE;
PackageName = argvW[i]+2;
if (!PackageName[0])
if(msi_option_prefix(argvW[i], "x")) PackageName = argvW[i]+2;
if(!PackageName || !PackageName[0])
{
i++;
if (i >= argc)
@ -898,7 +902,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
WINE_TRACE("argvW[%d] = %s\n", i, wine_dbgstr_w(argvW[i]));
DllName = argvW[i];
}
else if(msi_option_equal(argvW[i], "h") || msi_option_equal(argvW[i], "?"))
else if(msi_option_equal(argvW[i], "help") || msi_option_equal(argvW[i], "?"))
{
ShowUsage(0);
}

View file

@ -150,7 +150,7 @@ dll\cpl\timedate\timedate.cpl 1
;dll\cpl\usrmgr\usrmgr.cpl 1
dll\directx\amstream\amstream.dll 1
dll\directx\bdaplgin\bdaplgin.ax 1
;dll\directx\bdaplgin\bdaplgin.ax 1
dll\directx\dinput\dinput.dll 1
dll\directx\dinput8\dinput8.dll 1
dll\directx\dmusic\dmusic.dll 1
@ -164,8 +164,8 @@ dll\directx\devenum\devenum.dll 1
dll\directx\ksproxy\ksproxy.ax 1
dll\directx\ksuser\ksuser.dll 1
dll\directx\msdmo\msdmo.dll 1
dll\directx\msdvbnp\msdvbnp.ax 1
dll\directx\msvidctl\msvidctl.dll 1
;dll\directx\msdvbnp\msdvbnp.ax 1
;dll\directx\msvidctl\msvidctl.dll 1
dll\directx\quartz\quartz.dll 1
dll\directx\qedit\qedit.dll 1
dll\directx\wine\d3d8\d3d8.dll 1
@ -504,7 +504,7 @@ drivers\input\mouclass\mouclass.sys 2
drivers\input\sermouse\sermouse.sys 2
drivers\ksfilter\ks\ks.sys 2
drivers\multimedia\bdasup\bdasup.sys 2
;drivers\multimedia\bdasup\bdasup.sys 2
drivers\network\afd\afd.sys 2
drivers\network\ndis\ndis.sys 2

View file

@ -1,6 +1,6 @@
/* TRANSLATOR: Mário Kaèmár /Mario Kacmar/ aka Kario (kario@szm.sk)
* DATE OF TR: 28-04-2008
* LastChange: 21-06-2009
* LastChange: 31-05-2010
*/
LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT
@ -194,8 +194,8 @@ STRINGTABLE
BEGIN
IDS_CUSTOMIZE_TITLE "Prispôsobi<62> miestne nastavenia"
IDS_SPAIN "Spanish (Spain)"
IDS_METRIC "Metric"
IDS_IMPERIAL "Imperial"
IDS_METRIC "Metric"
IDS_IMPERIAL "Imperiálny"
END
STRINGTABLE

View file

@ -4,9 +4,9 @@
<directory name="amstream">
<xi:include href="amstream/amstream.rbuild" />
</directory>
<directory name="bdaplgin">
<!--<directory name="bdaplgin">
<xi:include href="bdaplgin/bdaplgin.rbuild" />
</directory>
</directory>-->
<directory name="d3d8thk">
<xi:include href="d3d8thk/d3d8thk.rbuild" />
</directory>
@ -43,12 +43,12 @@
<directory name="msdmo">
<xi:include href="msdmo/msdmo.rbuild" />
</directory>
<directory name="msdvbnp">
<!--<directory name="msdvbnp">
<xi:include href="msdvbnp/msdvbnp.rbuild" />
</directory>
<directory name="msvidctl">
</directory>-->
<!--<directory name="msvidctl">
<xi:include href="msvidctl/msvidctl.rbuild" />
</directory>
</directory>-->
<directory name="qedit">
<xi:include href="qedit/qedit.rbuild" />
</directory>

View file

@ -73,6 +73,6 @@ IDR_REGTREEOPTIONS REGISTRY "res\\regtreeoptions.rgs"
//#include "lang/sk-SK.rc"
//#include "lang/sv-SE.rc"
//#include "lang/tr-TR.rc"
//#include "lang/uk-UA.rc"
#include "lang/uk-UA.rc"
//#include "lang/zh-CN.rc"
//#include "lang/zh-TW.rc"

View file

@ -0,0 +1,273 @@
/*
* Copyright 2009 Andrew Hill
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT
/////////////////////////////////////////////////////////////////////////////
//
// Menus
//
IDM_CABINET_CONTEXTMENU MENUEX
BEGIN
POPUP "", 264,MFT_STRING,MFS_ENABLED
BEGIN
MENUITEM "&Ñòàíäàðòí³ Êíîïêè", IDM_TOOLBARS_STANDARDBUTTONS,MFT_STRING,MFS_ENABLED
MENUITEM "&Ðÿäîê Àäðåñè", IDM_TOOLBARS_ADDRESSBAR,MFT_STRING,MFS_ENABLED
MENUITEM "&Ïîñèëàííÿ", IDM_TOOLBARS_LINKSBAR,MFT_STRING,MFS_ENABLED
MENUITEM SEPARATOR
MENUITEM "Lock the Tool&bars", IDM_TOOLBARS_LOCKTOOLBARS,MFT_STRING,MFS_ENABLED
MENUITEM "&Íàëàøòóâàòè...", IDM_TOOLBARS_CUSTOMIZE,MFT_STRING,MFS_ENABLED
MENUITEM "&Text Labels", IDM_TOOLBARS_TEXTLABELS,MFT_STRING,MFS_ENABLED
MENUITEM "&Go Button", IDM_TOOLBARS_GOBUTTON,MFT_STRING,MFS_ENABLED
END
END
IDM_CABINET_MAINMENU MENUEX
BEGIN
POPUP "&Ôàéë", FCIDM_MENU_FILE
BEGIN
MENUITEM "", -1, MFT_SEPARATOR
MENUITEM "&Çàêðèòè", IDM_FILE_CLOSE
END
POPUP "&Ðåäàãóâàòè", FCIDM_MENU_EDIT
BEGIN
MENUITEM "", -1, MFT_SEPARATOR
END
POPUP "&Âèãëÿä", FCIDM_MENU_VIEW
BEGIN
POPUP "&Toolbars", IDM_VIEW_TOOLBARS
BEGIN
MENUITEM "", -1, MFT_SEPARATOR
END
MENUITEM "Ðÿäîê &Ñòàíó", IDM_VIEW_STATUSBAR
POPUP "&Explorer Bar", IDM_VIEW_EXPLORERBAR
BEGIN
MENUITEM "&Ïîøóê\tCtrl+E", IDM_EXPLORERBAR_SEARCH
MENUITEM "&Îáðàíå\tCtrl+I", IDM_EXPLORERBAR_FAVORITES
MENUITEM "&Ìåä³à", IDM_EXPLORERBAR_MEDIA
MENUITEM "&²ñòîð³ÿ\tCtrl+H", IDM_EXPLORERBAR_HISTORY
MENUITEM "Ï&àïêè", IDM_EXPLORERBAR_FOLDERS
MENUITEM "", IDM_EXPLORERBAR_SEPARATOR
END
MENUITEM "", FCIDM_MENU_VIEW_SEP_OPTIONS, MFT_SEPARATOR
POPUP "É&òè Äî", FCIDM_MENU_EXPLORE
BEGIN
MENUITEM "&Íàçàä\tAlt+˳âà Ñòð³ëêà", IDM_GOTO_BACK
MENUITEM "&Âïåðåä\tAlt+Ïðàâà Ñòð³ëêà", IDM_GOTO_FORWARD
MENUITEM "Ââå&ðõ íà îäèí ð³âåíü", IDM_GOTO_UPONELEVEL
MENUITEM "", -1, MFT_SEPARATOR
MENUITEM "&Äîìàøíÿ Ñòîð³íêà\tAlt+Home", IDM_GOTO_HOMEPAGE
END
MENUITEM "&Îíîâèòè", IDM_VIEW_REFRESH
END
POPUP "F&avorites", FCIDM_MENU_FAVORITES
BEGIN
MENUITEM "&Äîäàòè äî Îáðàíîãî...", IDM_FAVORITES_ADDTOFAVORITES
MENUITEM "&Îðãàí³çóâàòè Îáðàíå...", IDM_FAVORITES_ORGANIZEFAVORITES
MENUITEM "", -1, MFT_SEPARATOR
MENUITEM "(Empty)", IDM_FAVORITES_EMPTY
END
POPUP "&Tools", FCIDM_MENU_TOOLS
BEGIN
MENUITEM "ϳä'ºäíàòè &Ìåðåæåâèé Äèñê...", IDM_TOOLS_MAPNETWORKDRIVE
MENUITEM "&³ä'ºäíàòè Ìåðæåâèé Äèñê...", IDM_TOOLS_DISCONNECTNETWORKDRIVE
MENUITEM "&Ñèíõðîí³çóâàòè...", IDM_TOOLS_SYNCHRONIZE
MENUITEM "", -1, MFT_SEPARATOR
MENUITEM "&Îïö³¿ Ïàïêè...", IDM_TOOLS_FOLDEROPTIONS
END
POPUP "&Äîïîìîãà", FCIDM_MENU_HELP
BEGIN
MENUITEM "Öÿ êîï³ÿ ReactOS &çàêîííà?", IDM_HELP_ISTHISCOPYLEGAL
MENUITEM "&Ïðî ReactOS", IDM_HELP_ABOUT
END
END
/////////////////////////////////////////////////////////////////////////////
//
// Dialogs
//
IDD_CUSTOMIZETOOLBAREX DIALOGEX 0, 0, 357, 33
STYLE DS_SETFONT | DS_3DLOOK | DS_FIXEDSYS | DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CAPTION
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
LTEXT "Te&xt options:",-1,4,2,48,15
COMBOBOX IDC_TEXTOPTIONS,52,0,123,57,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
LTEXT "Ico&n options:",-1,4,20,48,15
COMBOBOX IDC_ICONOPTIONS,52,18,123,57,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
END
/////////////////////////////////////////////////////////////////////////////
//
// Accelerator
//
IDR_ACCELERATORS ACCELERATORS
BEGIN
VK_F5, IDM_VIEW_REFRESH, VIRTKEY, NOINVERT
VK_F5, IDM_VIEW_REFRESH, VIRTKEY, CONTROL, NOINVERT
"R", IDM_VIEW_REFRESH, VIRTKEY, CONTROL, NOINVERT
VK_HOME, IDM_GOTO_HOMEPAGE, VIRTKEY, ALT, NOINVERT
"D", IDM_FAVORITES_ADDTOFAVORITES, VIRTKEY, CONTROL, NOINVERT
"B", IDM_FAVORITES_ORGANIZEFAVORITES, VIRTKEY, CONTROL, NOINVERT
VK_LEFT, IDM_GOTO_BACK, VIRTKEY, ALT
VK_RIGHT, IDM_GOTO_FORWARD, VIRTKEY, ALT
"W", IDM_FILE_CLOSE, VIRTKEY, CONTROL, NOINVERT
"E", IDM_EXPLORERBAR_SEARCH, VIRTKEY, CONTROL, NOINVERT
"I", IDM_EXPLORERBAR_FAVORITES, VIRTKEY, CONTROL, NOINVERT
"H", IDM_EXPLORERBAR_HISTORY, VIRTKEY, CONTROL, NOINVERT
END
/////////////////////////////////////////////////////////////////////////////
//
// Strings
//
STRINGTABLE
BEGIN
800 "̳ñòèòü êîìàíäè ìàí³ïóëþâàííÿ âèáðàíèìè îá'ºêòàìè."
END
STRINGTABLE
BEGIN
864 "̳ñòèòü êîìàíäè ïðàâêè."
END
STRINGTABLE
BEGIN
928 "̳ñòèòü êîìàíäè ìàí³ïóëþâàííÿ âèãëÿäîì."
END
STRINGTABLE
BEGIN
992 "̳ñòèòü êîìàíäè ³íñòðóìåíò³â."
END
STRINGTABLE
BEGIN
1056 "̳ñòèòü êîìàíäè äëÿ â³äîáðàæåííÿ Äîïîìîãè."
END
STRINGTABLE
BEGIN
9025 "Çàêðèâຠâ³êíî."
9026 "Éäå ââåðõ íà îäèí ð³âåíü."
END
STRINGTABLE
BEGIN
9121 "ϳä'ºäíóº äî ìåðåæåâîãî äèñêó."
9122 "³ä'ºäíóº â³ä ìåðåæåâîãî äèñêó."
END
STRINGTABLE
BEGIN
9250 "Displays program information, version number, and copyright."
9252 "Displays information for debugging."
END
STRINGTABLE
BEGIN
9281 "Éäå äî ïîïåðåäíüî¿ ñòîð³íêè."
9282 "Éäå äî íàñòóïíî¿ ñòîð³íêè."
9283 "Enables you to change settings."
9285 "Goes to your home page."
END
STRINGTABLE
BEGIN
9362 "³äêðèâຠïàïêó Îáðàíå."
9363 "Adds the current page to your Favorites list."
END
STRINGTABLE
BEGIN
9505 "Shows or hides toolbars."
9506 "Shows or hides the status bar."
9508 "Displays the Standard Buttons toolbar."
9509 "Displays the Address bar."
9510 "Displays the Quick Links bar."
9516 "Locks the sizes and positions of the toolbars."
END
STRINGTABLE
BEGIN
9533 "Customizes the toolbar."
END
STRINGTABLE
BEGIN
9552 "Shows or hides an Explorer bar."
9553 "Shows the Search bar."
9554 "Shows the Favorites bar."
9555 "Shows the History bar."
9557 "Shows the Folders bar."
9559 "Shows the Media Bar."
END
STRINGTABLE
BEGIN
IDS_SMALLICONS "Ìàë³ çíà÷êè"
IDS_LARGEICONS "Âåëèê³ çíà÷êè"
IDS_SHOWTEXTLABELS "Show text labels"
END
STRINGTABLE
BEGIN
IDS_NOTEXTLABELS "No text labels"
IDS_SELECTIVETEXTONRIGHT "Selective text on right"
END
STRINGTABLE
BEGIN
IDS_GOBUTTONLABEL "|Go||"
IDS_GOBUTTONTIPTEMPLATE "Go to ""%s"""
END
STRINGTABLE
BEGIN
IDS_SEARCHLABEL "Ïîøóê"
IDS_ADDRESSBANDLABEL "À&äðåñà"
END
STRINGTABLE
BEGIN
IDS_FOLDERSLABEL "Ïàïêè"
END
STRINGTABLE
BEGIN
IDS_HISTORYTEXT "&²ñòîð³ÿ\tCtrl+H"
END
STRINGTABLE
BEGIN
IDS_UP "Ââåðõ"
END
STRINGTABLE
BEGIN
IDS_BACK "Íàçàä"
IDS_FORWARD "Âïåðåä"
END

View file

@ -1,6 +1,6 @@
/* TRANSLATOR : Mário Kaèmár /Mario Kacmar/ aka Kario (kario@szm.sk)
* DATE OF TR.: 30-05-2008
* LAST CHANGE: 30-07-2008
* LAST CHANGE: 31-05-2010
*/
LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT
@ -166,7 +166,7 @@ FONT 8, "MS Shell Dlg"
BEGIN
ICON "", IDC_DEVICON, 7, 7, 20, 20
LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
LTEXT "Sprostredkovate¾:", -1, 34, 39, 60, 8, SS_NOPREFIX
LTEXT "Poskytovate¾ ovládaèa:", -1, 34, 39, 60, 8, SS_NOPREFIX
EDITTEXT IDC_DRVPROVIDER, 100, 39, 146, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
LTEXT "Dátum ovládaèa:", -1, 34, 53, 60, 8, SS_NOPREFIX
EDITTEXT IDC_DRVDATE, 100, 53, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
@ -189,7 +189,7 @@ BEGIN
CONTROL "", IDC_DRIVERFILES, "SysListView32", LVS_REPORT | LVS_NOCOLUMNHEADER |
LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS | LVS_SORTASCENDING |
LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 46, 209, 80
LTEXT "Sprostredkovate¾:", -1, 14, 134, 66, 8
LTEXT "Poskytovate¾:", -1, 14, 134, 66, 8
EDITTEXT IDC_FILEPROVIDER, 80, 134, 137, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
LTEXT "Verzia súboru:", -1, 14, 150, 66, 8
EDITTEXT IDC_FILEVERSION, 80, 150, 137, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
@ -202,7 +202,7 @@ END
IDD_DEVICEDETAILS DIALOGEX DISCARDABLE 0, 0, 252, 218
STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Details"
CAPTION "Detaily"
FONT 8, "MS Shell Dlg"
BEGIN
ICON "", IDC_DEVICON, 7, 7, 20, 20

View file

@ -13,3 +13,4 @@
#include "lang/en-US.rc"
#include "lang/es-ES.rc"
#include "lang/ru-RU.rc"
#include "lang/uk-UA.rc"

View file

@ -0,0 +1,163 @@
#pragma code_page(1252)
LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT
STRINGTABLE DISCARDABLE
BEGIN
/* Names of code pages */
1250 "1250 (ANSI - Öĺíňđŕëüíŕ Şâđîďŕ)"
1251 "1251 (ANSI - Ęčđčëčö˙)"
1252 "1252 (ANSI - Ëŕňčíčö˙ I)"
1253 "1253 (ANSI - Ăđĺöüęŕ)"
1254 "1254 (ANSI - Ňóđĺöüęŕ)"
1255 "1255 (ANSI - ˛âđčň)"
1256 "1256 (ANSI - Ŕđŕáńüęŕ)"
1257 "1257 (ANSI - Áŕëňłéńüęŕ)"
1258 "1258 (ANSI/OEM - Â'şňíŕěńüęŕ)"
874 "874 (ANSI/OEM - Ňŕéńüęŕ)"
932 "932 (ANSI/OEM - ßďîíńüęŕ Shift-JIS)"
936 "936 (ANSI/OEM - Ęčňŕéńüęŕ ńďđîůĺíŕ GBK)"
949 "949 (ANSI/OEM - Ęîđĺéńüęŕ)"
950 "950 (ANSI/OEM - Ęčňŕéńüęŕ ňđŕäčöłéíŕ Big5)"
437 "437 (OEM - ŃŘŔ)"
737 "737 (OEM - Ăđĺöüęŕ 437G)"
775 "775 (OEM - Áŕëňłéńüęŕ)"
850 "850 (OEM - Áŕăŕňîěîâíŕ Ëŕňčíčö˙ I)"
852 "852 (OEM - Ëŕňčíčö˙ II)"
855 "855 (OEM - Ęčđčëčö˙)"
857 "857 (OEM - Ňóđĺöüęŕ)"
858 "858 (OEM - Áŕăŕňîěîâíŕ Ëŕňčíčö˙ I + Şâđî)"
860 "860 (OEM - Ďîđňóăŕëüńüęŕ)"
861 "861 (OEM - ˛ńëŕíäńüęŕ)"
862 "862 (OEM - ˛âđčň)"
863 "863 (OEM - Canadian French)"
864 "864 (OEM - Ŕđŕáńüęŕ)"
865 "865 (OEM - Ńęŕíäčíŕâńüęŕ)"
866 "866 (OEM - Đîńłéńüęŕ)"
869 "869 (OEM - Ăđĺöüęŕ ńó÷ŕńíŕ)"
10000 "10000 (MAC - Ëŕňčíčö˙)"
10001 "10001 (MAC - ßďîíńüęŕ)"
10002 "10002 (MAC - Ęčňŕéńüęŕ ňđŕäčöłéíŕ Big5)"
10003 "10003 (MAC - Ęîđĺéńüęŕ)"
10004 "10004 (MAC - Ŕđŕáńüęŕ)"
10005 "10005 (MAC - ˛âđčň)"
10006 "10006 (MAC - Ăđĺöüęŕ I)"
10007 "10007 (MAC - Ęčđčëčö˙)"
10008 "10008 (MAC - Ęčňŕéńüęŕ ńďđîůĺíŕ GB 2312)"
10010 "10010 (MAC - Đóěóíńüęŕ)"
10017 "10017 (MAC - Óęđŕżíńüęŕ)"
10021 "10021 (MAC - Ňŕéńüęŕ)"
10029 "10029 (MAC - Ëŕňčíčö˙ II)"
10079 "10079 (MAC - ˛ńëŕíäńüęŕ)"
10081 "10081 (MAC - Ňóđĺöüęŕ)"
10082 "10082 (MAC - Őîđâŕňńüęŕ)"
65000 "65000 (UTF-7)"
65001 "65001 (UTF-8)"
3700 "37 (IBM EBCDIC - ŃŘŔ/Ęŕíŕäŕ)" /* FIXME */
1026 "1026 (IBM EBCDIC - Ňóđĺöüęŕ (Ëŕňčíčö˙-5))"
1047 "1047 (IBM EBCDIC - Ëŕňčíčö˙-1/Open System)"
1140 "1140 (IBM EBCDIC - ŃŘŔ/Ęŕíŕäŕ (37 + Şâđî))"
1141 "1141 (IBM EBCDIC - Íłěĺöüęŕ (20273 + Şâđî))"
1142 "1142 (IBM EBCDIC - Äŕňńüęŕ/Íîđâĺçüęŕ (20277 + Şâđî))"
1143 "1143 (IBM EBCDIC - Ôłíńüęŕ/Řâĺäńüęŕ (20278 + Şâđî))"
1144 "1144 (IBM EBCDIC - ˛ňŕëłéńüęŕ (20280 + Şâđî))"
1145 "1145 (IBM EBCDIC - Ëŕňčíîŕěĺđ./˛ńďŕíńüęŕ (20284 + Şâđî))"
1146 "1146 (IBM EBCDIC - Áđčňŕíńüęŕ (20285 + Şâđî))"
1147 "1147 (IBM EBCDIC - Ôđŕíöóçüęŕ (20297 + Şâđî))"
1148 "1148 (IBM EBCDIC - Ěłćíŕđîäíŕ (500 + Şâđî))"
1149 "1149 (IBM EBCDIC - ˛ńëŕíäńüęŕ (20871 + Şâđî))"
20273 "20273 (IBM EBCDIC - Íłěĺöüęŕ)"
20277 "20277 (IBM EBCDIC - Äŕňńüęŕ/Íîđâĺçüęŕ)"
20278 "20278 (IBM EBCDIC - Ôłíńüęŕ/Řâĺäńüęŕ)"
20280 "20280 (IBM EBCDIC - ˛ňŕëłéńüęŕ)"
20284 "20284 (IBM EBCDIC - Ëŕňčíîŕěĺđ./˛ńďŕíńüęŕ)"
20285 "20285 (IBM EBCDIC - Áđčňŕíńüęŕ)"
20290 "20290 (IBM EBCDIC - ßďîíńüęŕ Ęŕňŕęŕíŕ Đîçřčđĺíŕ)"
20297 "20297 (IBM EBCDIC - Ôđŕíöóçüęŕ)"
20420 "20420 (IBM EBCDIC - Ŕđŕáńüęŕ)"
20423 "20423 (IBM EBCDIC - Ăđĺöüęŕ)"
20424 "20424 (IBM EBCDIC - ˛âđčň)"
20833 "20833 (IBM EBCDIC - Ęîđĺéńüęŕ Đîçřčđĺíŕ)"
20838 "20838 (IBM EBCDIC - Ňŕéńüęŕ)"
20871 "20871 (IBM EBCDIC - ˛ńëŕíäńüęŕ)"
20880 "20880 (IBM EBCDIC - Ęčđčëčö˙ (Đîńłéńüęŕ))"
20905 "20905 (IBM EBCDIC - Ňóđĺöüęŕ)"
20924 "20924 (IBM EBCDIC - Ëŕňčíčö˙-1/Open System (1047 + Şâđî))"
21025 "21025 (IBM EBCDIC - Ęčđčëčö˙ (Ńĺđáńüęŕ, Áîëăŕđńüęŕ))"
500 "500 (IBM EBCDIC - Ěłćíŕđîäíŕ)"
870 "870 (IBM EBCDIC - Áŕăŕňîěîâíŕ/ROECE (Ëŕňčíčö˙-2))"
875 "875 (IBM EBCDIC - Ńó÷ŕńíŕ Ăđĺöüęŕ)"
20269 "20269 (ISO 6937 Äłŕęđčňč÷íł Çíŕęč)"
28591 "28591 (ISO 8859-1 Ëŕňčíčö˙ I)"
28592 "28592 (ISO 8859-2 Öĺíňđŕëüíîşâđîďĺéńüęŕ)"
28593 "28593 (ISO 8859-3 Ëŕňčíčö˙ 3)"
28594 "28594 (ISO 8859-4 Áŕëňłéńüęŕ)"
28595 "28595 (ISO 8859-5 Ęčđčëčö˙)"
28596 "28596 (ISO 8859-6 Ŕđŕáńüęŕ)"
28597 "28597 (ISO 8859-7 Ăđĺöüęŕ)"
28598 "28598 (ISO 8859-8 ˛âđčň: Âłçóŕëüíčé Ďîđ˙äîę)"
28599 "28599 (ISO 8859-9 Ëŕňčíčö˙ 5)"
28605 "28605 (ISO 8859-15 Ëŕňčíčö˙ 9)"
38598 "38598 (ISO 8859-8 ˛âđčň: Ëîăł÷íčé Ďîđ˙äîę)"
20105 "20105 (IA5 IRV Ěłćíŕđîäíčé Ŕëôŕâłň No.5)"
20106 "20106 (IA5 Íłěĺöüęŕ)"
20107 "20107 (IA5 Řâĺäńüęŕ)"
20108 "20108 (IA5 Íîđâĺçüęŕ)"
1361 "1361 (Ęîđĺéńüęŕ - Johab)"
20000 "20000 (CNS - Ňŕéâŕíńüęŕ)"
20001 "20001 (TCA - Ňŕéâŕíńüęŕ)"
20002 "20002 (Eten - Ňŕéâŕíńüęŕ)"
20003 "20003 (IBM5550 - Ňŕéâŕíńüęŕ)"
20004 "20004 (TeleText - Ňŕéâŕíńüęŕ)"
20005 "20005 (Wang - Ňŕéâŕíńüęŕ)"
20127 "20127 (ŃŘŔ-ASCII)"
20261 "20261 (T.61)"
20866 "20866 (Đîńłéńüęŕ - KOI8)"
21027 "21027 (Đîçř. Ŕëô. Íčćíłé đĺăłńňđ)"
21866 "21866 (Óęđŕżíńüęŕ - KOI8-U)"
708 "708 (Ŕđŕáńüęŕ - ASMO)"
720 "720 (Ŕđŕáńüęŕ - Ďđîçîđŕ ASMO)"
20932 "20932 (JIS X 0208-1990 & 0212-1990)"
20936 "20936 (Ęčňŕéńüęŕ ńďđîůĺíŕ GB2312)"
20949 "20949 (Ęîđĺéńüęŕ Wansung)"
57002 "57002 (ISCII Äĺâŕíŕăŕđł)"
57003 "57003 (ISCII Áĺíăŕëüńüęŕ)"
57004 "57004 (ISCII Ňŕěłëüńüęŕ)"
57005 "57005 (ISCII Ňĺëóăó)"
57006 "57006 (ISCII Ŕńńŕěńüęŕ)"
57007 "57007 (ISCII Îđł˙)"
57008 "57008 (ISCII Ęŕííŕäŕ)"
57009 "57009 (ISCII Ěŕëŕ˙ëŕě)"
57010 "57010 (ISCII Ăóäćŕđŕňł)"
57011 "57011 (ISCII Ăóđěóęőł)"
50930 "50930 (IBM EBCDIC - ßďîíńüęŕ (Ęŕňŕęŕíŕ) Đîçřčđĺíŕ ňŕ ßďîíńüęŕ)"
50931 "50931 (IBM EBCDIC - ŃŘŔ/Ęŕíŕäŕ ňŕ ßďîíńüęŕ)"
50933 "50933 (IBM EBCDIC - Ęîđĺéńüęŕ ňŕ Đîçřčđĺíŕ Ęîđĺéńüęŕ)"
50935 "50935 (IBM EBCDIC - Ęčňŕéńüęŕ ńďđîůĺíŕ)"
50937 "50937 (IBM EBCDIC - ŃŘŔ/Ęŕíŕäŕ ňŕ Ęčňŕéńüęŕ ňđŕäčöłéíŕ)"
50939 "50939 (IBM EBCDIC - ßďîíńüęŕ (Ëŕňčíčö˙) Đîçřčđĺíŕ ňŕ ßďîíńüęŕ)"
50220 "50220 (ISO-2022 ßďîíńüęŕ áĺç ďłâřčđčííîż Ęŕňŕęŕíč)"
50221 "50221 (ISO-2022 ßďîíńüęŕ ç ďłâřčđčííîţ Ęŕňŕęŕíîţ)"
50222 "50222 (ISO-2022 ßďîíńüęŕ JIS X 0201-1989)"
50225 "50225 (ISO-2022 Ęîđĺéńüęŕ)"
50227 "50227 (ISO-2022 Ęčňŕéńüęŕ ńďđîůĺíŕ)"
50229 "50229 (ISO-2022 Ęčňŕéńüęŕ ňđŕäčöłéíŕ)"
51932 "51932 (EUC-ßďîíńüęŕ)"
51936 "51936 (EUC-Ęčňŕéńüęŕ ńďđîůĺíŕ)"
51949 "51949 (EUC-Ęîđĺéńüęŕ)"
51950 "51950 (EUC-Ęčňŕéńüęŕ ňđŕäčöłéíŕ)"
52936 "52936 (HZ-GB2312 Ęčňŕéńüęŕ ńďđîůĺíŕ)"
54936 "54936 (GB18030 Ęčňŕéńüęŕ ńďđîůĺíŕ)"
END

View file

@ -16,12 +16,12 @@ BEGIN
GROUPBOX "Description", -1, 9, 153, 230, 46, BS_GROUPBOX
LTEXT "Description du composant...", IDC_DESCRIPTION, 15, 165, 217, 28, WS_GROUP
CHECKBOX "&Afficher l'icône dans la barre des tâches", IDC_SHOWTASKBAR, 9, 206, 230, 12, BS_AUTOCHECKBOX | WS_TABSTOP
CHECKBOX "&Notify me when this connection has limited or no connectivity", IDC_NOTIFYNOCONNECTION, 9, 220, 230, 12, BS_AUTOCHECKBOX | WS_TABSTOP
CHECKBOX "Me &notifier quand cette connexion n'a pas de connectivité ou une limitée", IDC_NOTIFYNOCONNECTION, 9, 220, 230, 12, BS_AUTOCHECKBOX | WS_TABSTOP
END
IDD_STATUS DIALOGEX DISCARDABLE 0, 0, 200, 280
STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Allgemein"
CAPTION "Général"
FONT 8, "MS Shell Dlg"
BEGIN
END
@ -112,7 +112,7 @@ BEGIN
IDS_NET_REPAIR "Réparer"
IDS_NET_CREATELINK "Créer un raccourci"
IDS_NET_DELETE "Supprimer"
IDS_NET_RENAME "Rename"
IDS_NET_RENAME "Renommer"
IDS_NET_PROPERTIES "Propriétés"
IDS_FORMAT_BIT "%u Bit/s"

View file

@ -1,6 +1,6 @@
/* TRANSLATOR : Mário Kaèmár /Mario Kacmar/ aka Kario (kario@szm.sk)
* DATE OF TR.: 31-08-2008
* LAST CHANGE: 18-04-2009
* LAST CHANGE: 02-05-2010
*/
LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT
@ -32,7 +32,7 @@ BEGIN
END
IDD_LAN_NETSTATUS DIALOGEX DISCARDABLE 0, 0, 200, 180
STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU
STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION
CAPTION "Všeobecné"
FONT 8, "MS Shell Dlg"
BEGIN
@ -42,7 +42,7 @@ BEGIN
LTEXT "Rýchlos<6F>:", -1, 19, 48, 60, 8
GROUPBOX "Èinnos<6F>", -1, 9, 74, 182, 70, BS_GROUPBOX
RTEXT "Odoslané", -1, 26, 90, 60, 8
ICON "", IDC_NETSTAT, 110, 85, 18, 20
ICON "", IDC_NETSTAT, 110, 85, 32, 32
LTEXT "Prijaté", -1, 149, 90, 37, 8
LTEXT "Bajty:", -1, 17, 115, 32, 8
RTEXT "000.000.000", IDC_SEND, 63, 115, 44, 8

View file

@ -27,7 +27,6 @@ typedef struct _OPENGL_INFO
WCHAR DriverName[256]; /*!< Driver name */
} OPENGL_INFO, *POPENGL_INFO;
/*! \brief Append OpenGL Rendering Context (GLRC) to list
*
* \param glrc [IN] Pointer to GLRC to append to list
@ -179,7 +178,7 @@ BOOL
ROSGL_DeleteContext( GLRC *glrc )
{
/* unload icd */
if ((glrc->icd != NULL) && !(InterlockedDecrement((LONG*)&glrc->icd->refcount)))
if ((glrc->icd != NULL) && (!InterlockedDecrement((LONG*)&glrc->icd->refcount)))
{
/* This is the last context, remove the ICD*/
ROSGL_DeleteDCDataForICD( glrc->icd );
@ -272,7 +271,7 @@ ROSGL_GetPrivateDCData( HDC hdc )
data = OPENGL32_processdata.dcdata_list;
while (data != NULL)
{
if ((data->hdc == hdc) || (WindowFromDC(data->hdc) == WindowFromDC(hdc))) /* found */
if (data->hdc == hdc) /* found */
break;
data = data->next;
}
@ -416,7 +415,7 @@ ROSGL_ICDForHDC( HDC hdc )
NULL) != NULL)
{
/* Too bad, somebody else was faster... */
DBGTRACE("Uh, Someone beat you to it!\n");
DBGTRACE("ICD is already set!\n");
}
}
}
@ -689,16 +688,9 @@ rosglCreateLayerContext( HDC hdc, int layer )
/* FIXME: fallback? */
return NULL;
}
/* Don't forget to refcount it, icd will be released when last context is deleted */
InterlockedIncrement((LONG*)&icd->refcount);
if(!rosglGetPixelFormat(hdc))
{
ROSGL_DeleteContext(glrc);
SetLastError(ERROR_INVALID_PIXEL_FORMAT);
return NULL;
}
/* create context */
if (icd->DrvCreateLayerContext != NULL)
@ -1002,12 +994,6 @@ rosglMakeCurrent( HDC hdc, HGLRC hglrc )
glrc->is_current = FALSE;
OPENGL32_threaddata->glrc = NULL;
}
else if ((GetObjectType(hdc) != OBJ_DC) && (GetObjectType(hdc) != OBJ_MEMDC))
{
DBGPRINT("Current context is NULL and requested HDC is invalid.\n");
SetLastError(ERROR_INVALID_HANDLE);
return FALSE;
}
}
else
{

View file

@ -327,13 +327,13 @@ SH_FileGeneralSetFileSizeTime(HWND hwndDlg, WCHAR *lpfilename, PULARGE_INTEGER l
if (SHFileGeneralGetFileTimeString(&accessed_time, resultstr))
{
hDlgCtrl = GetDlgItem(hwndDlg, 14017);
hDlgCtrl = GetDlgItem(hwndDlg, 14019);
SendMessageW(hDlgCtrl, WM_SETTEXT, (WPARAM)NULL, (LPARAM)resultstr);
}
if (SHFileGeneralGetFileTimeString(&write_time, resultstr))
{
hDlgCtrl = GetDlgItem(hwndDlg, 14019);
hDlgCtrl = GetDlgItem(hwndDlg, 14017);
SendMessageW(hDlgCtrl, WM_SETTEXT, (WPARAM)NULL, (LPARAM)resultstr);
}

View file

@ -669,8 +669,8 @@ BEGIN
IDS_RESTART_PROMPT "Voulez-vous redémarrer votre ordinateur ?"
IDS_SHUTDOWN_TITLE "Arrêter"
IDS_SHUTDOWN_PROMPT "Voulez-vous fermer la session ReactOS ?"
IDS_LOGOFF_TITLE "Log Off"
IDS_LOGOFF_PROMPT "Do you want to log off?"
IDS_LOGOFF_TITLE "Se déconnecter"
IDS_LOGOFF_PROMPT "Voulez-vous vous déconnecter ?"
/* shell folder path default values */
IDS_PROGRAMS "Menu Démarrer\\Programmes"
@ -754,7 +754,7 @@ BEGIN
IDS_INSTALLNEWFONT "Installer une nouvelle police..."
IDS_DEFAULT_CLUSTER_SIZE "Taille d'allocation par défaut"
IDS_COPY_OF "Copy of"
IDS_COPY_OF "Copie de"
IDS_SHLEXEC_NOASSOC "Aucun programme Windows n'est configuré pour ouvrir ce type de fichier."
END

View file

@ -1,7 +1,7 @@
/* TRANSLATOR : Mário Kaèmár /Mario Kacmar/ aka Kario (kario@szm.sk)
* NOTE : partially translated
* TRANSLATED : 26-12-2007
* LAST CHANGE: 20-09-2009
* LAST CHANGE: 31-05-2010
*/
/*
@ -671,8 +671,8 @@ BEGIN
IDS_RESTART_PROMPT "Naozaj chcete reštartova<76> systém?"
IDS_SHUTDOWN_TITLE "Vypnú<6E>"
IDS_SHUTDOWN_PROMPT "Naozaj chcete vypnú<6E> poèítaè?"
IDS_LOGOFF_TITLE "Log Off"
IDS_LOGOFF_PROMPT "Do you want to log off?"
IDS_LOGOFF_TITLE "Odhlásiť"
IDS_LOGOFF_PROMPT "Naozaj sa chcete odhlásiť?"
/* shell folder path default values */
IDS_PROGRAMS "Ponuka Štart\\Programy"
@ -758,5 +758,7 @@ BEGIN
IDS_DEFAULT_CLUSTER_SIZE "Predvolená alokaèná ve¾kos<6F>" //Default allocation size
IDS_COPY_OF "Kópia" //Copy of
IDS_SHLEXEC_NOASSOC "There is no Windows program configured to open this type of file."
// There is no Windows program configured to open this type of file.
IDS_SHLEXEC_NOASSOC "Neexistuje žiadny program nakonfigurovaný tak, aby otváral tento typ súborov."
// Na otváranie tohto typu súboru nie je nakonfigurovaný žiadny program systému Windows.
END

View file

@ -855,6 +855,7 @@ InstallReactOS(HINSTANCE hInstance)
DWORD LastError;
HANDLE token;
TOKEN_PRIVILEGES privs;
HKEY hKey;
InitializeSetupActionLog(FALSE);
LogItem(SYSSETUP_SEVERITY_INFORMATION, L"Installing ReactOS");
@ -901,6 +902,29 @@ InstallReactOS(HINSTANCE hInstance)
if (GetWindowsDirectory(szBuffer, sizeof(szBuffer) / sizeof(TCHAR)))
{
if (RegOpenKeyExW(HKEY_LOCAL_MACHINE,
L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion",
0,
KEY_WRITE,
&hKey) == ERROR_SUCCESS)
{
RegSetValueExW(hKey,
L"PathName",
0,
REG_SZ,
(LPBYTE)szBuffer,
(wcslen(szBuffer) + 1) * sizeof(WCHAR));
RegSetValueExW(hKey,
L"SystemRoot",
0,
REG_SZ,
(LPBYTE)szBuffer,
(wcslen(szBuffer) + 1) * sizeof(WCHAR));
RegCloseKey(hKey);
}
PathAddBackslash(szBuffer);
_tcscat(szBuffer, _T("system"));
CreateDirectory(szBuffer, NULL);

View file

@ -212,9 +212,9 @@ BEGIN
IDS_CMT_DEVMGMT "Lancer le gestionnaire de périphériques"
IDS_CMT_SERVMAN "Lancer le gestionnaire de services"
IDS_CMT_RDESKTOP "Lancer le bureau distant"
IDS_CMT_EVENTVIEW "Launch Event Viewer"
IDS_CMT_MSCONFIG "Launch System Configuration program"
IDS_CMT_PAINT "Launch Paint"
IDS_CMT_EVENTVIEW "Lancer la visionneuse des événements"
IDS_CMT_MSCONFIG "Lancer le programme de configuration système"
IDS_CMT_PAINT "Lancer Paint"
END
STRINGTABLE
@ -230,7 +230,7 @@ BEGIN
IDS_SYS_TOOLS "Outils système"
IDS_CMT_CHARMAP "Table des Caractères"
IDS_CMT_KBSWITCH "Sélecteur de configuration clavier"
IDS_CMT_DXDIAG "Launch ReactX-Diagnostic program"
IDS_CMT_DXDIAG "Lancer le prorgramme de diagnostic ReactX"
END
STRINGTABLE
@ -241,10 +241,10 @@ END
STRINGTABLE
BEGIN
IDS_SYS_ENTERTAINMENT "Entertainment"
IDS_CMT_MPLAY32 "Launch Multimedia Player"
IDS_CMT_SNDVOL32 "Launch Volume Control"
IDS_CMT_SNDREC32 "Launch Sound Recorder"
IDS_SYS_ENTERTAINMENT "Divertissement"
IDS_CMT_MPLAY32 "Lancer le lecteur multimédia"
IDS_CMT_SNDVOL32 "Lancer le contrôleur de volume"
IDS_CMT_SNDREC32 "Lancer l'enregistreur de son"
END
STRINGTABLE
@ -279,11 +279,11 @@ BEGIN
IDS_SHORT_MAGNIFY "Loupe.lnk"
IDS_SHORT_RDESKTOP "Bureau Distant.lnk"
IDS_SHORT_KBSWITCH "Sélecteur de configuration clavier.lnk"
IDS_SHORT_EVENTVIEW "Event Viewer.lnk"
IDS_SHORT_MSCONFIG "System Configuration.lnk"
IDS_SHORT_SNDVOL32 "Volume Control.lnk"
IDS_SHORT_SNDREC32 "Audiorecorder.lnk"
IDS_SHORT_DXDIAG "ReactX Diagnostic.lnk"
IDS_SHORT_EVENTVIEW "Visionneuse des événements.lnk"
IDS_SHORT_MSCONFIG "Configuration système.lnk"
IDS_SHORT_SNDVOL32 "Contrôleur de volume.lnk"
IDS_SHORT_SNDREC32 "Enregistreur de son.lnk"
IDS_SHORT_DXDIAG "Diagnostic ReactX.lnk"
IDS_SHORT_PAINT "Paint.lnk"
IDS_SHORT_SPIDER "Spider Solitaire.lnk"
END

View file

@ -1,6 +1,6 @@
/* TRANSLATOR : Mário Kaèmár /Mario Kacmar/ aka Kario (kario@szm.sk)
* DATE OF TR.: 09-02-2008
* LAST CHANGE: 13-10-2009
* LAST CHANGE: 15-12-2009
* THANKS TO : Filip Navara and Kamil Hornicek and all good people ;-)
*/
@ -230,7 +230,7 @@ BEGIN
IDS_SYS_ENTERTAINMENT "Zábava" //Entertainment
IDS_CMT_MPLAY32 "Spusti<74> Multimediálny prehrávaè"
IDS_CMT_SNDVOL32 "Spusti<74> Ovládanie hlasitosti"
IDS_CMT_SNDREC32 "Launch Sound Recorder"
IDS_CMT_SNDREC32 "Spustiť Nahrávanie zvuku"
END
STRINGTABLE
@ -268,7 +268,7 @@ BEGIN
IDS_SHORT_EVENTVIEW "Zobrazovaè udalostí.lnk"
IDS_SHORT_MSCONFIG "Program na konfiguráciu systému.lnk"
IDS_SHORT_SNDVOL32 "Ovládanie hlasitosti.lnk" //Volume Control
IDS_SHORT_SNDREC32 "Audiorecorder.lnk"
IDS_SHORT_SNDREC32 "Audiorekordér.lnk"
IDS_SHORT_DXDIAG "Diagnostika ReactX.lnk"
IDS_SHORT_PAINT "Skicár.lnk"
IDS_SHORT_SPIDER "Pavúèí solitér.lnk"

View file

@ -0,0 +1,7 @@
<?xml version="1.0"?>
<!DOCTYPE group SYSTEM "../../tools/rbuild/project.dtd">
<group xmlns:xi="http://www.w3.org/2001/XInclude">
<!--directory name="fbtusb">
<xi:include href="fbtusb/fbtusb.rbuild" />
</directory-->
</group>

1198
drivers/bluetooth/fbtusb/fbtdev.c Executable file

File diff suppressed because it is too large Load diff

1910
drivers/bluetooth/fbtusb/fbtpnp.c Executable file

File diff suppressed because it is too large Load diff

1062
drivers/bluetooth/fbtusb/fbtpwr.c Executable file

File diff suppressed because it is too large Load diff

543
drivers/bluetooth/fbtusb/fbtrwr.c Executable file
View file

@ -0,0 +1,543 @@
// Copyright (c) 2004, Antony C. Roberts
// Use of this file is subject to the terms
// described in the LICENSE.TXT file that
// accompanies this file.
//
// Your use of this file indicates your
// acceptance of the terms described in
// LICENSE.TXT.
//
// http://www.freebt.net
#include "fbtusb.h"
#include "fbtpnp.h"
#include "fbtpwr.h"
#include "fbtdev.h"
#include "fbtrwr.h"
#include "fbtwmi.h"
#include "fbtusr.h"
// Read/Write handler
NTSTATUS FreeBT_DispatchRead(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
{
PMDL mdl;
PURB urb;
ULONG totalLength;
ULONG stageLength;
NTSTATUS ntStatus;
ULONG_PTR virtualAddress;
PFILE_OBJECT fileObject;
PDEVICE_EXTENSION deviceExtension;
PIO_STACK_LOCATION irpStack;
PIO_STACK_LOCATION nextStack;
PFREEBT_RW_CONTEXT rwContext;
ULONG maxLength=0;
urb = NULL;
mdl = NULL;
rwContext = NULL;
totalLength = 0;
irpStack = IoGetCurrentIrpStackLocation(Irp);
fileObject = irpStack->FileObject;
deviceExtension = (PDEVICE_EXTENSION) DeviceObject->DeviceExtension;
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_DispatchRead: Entered\n"));
if (deviceExtension->DeviceState != Working)
{
FreeBT_DbgPrint(1, ("FBTUSB: FreeBT_DispatchRead: Invalid device state\n"));
ntStatus = STATUS_INVALID_DEVICE_STATE;
goto FreeBT_DispatchRead_Exit;
}
// Make sure that any selective suspend request has been completed.
if (deviceExtension->SSEnable)
{
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_DispatchRead: Waiting on the IdleReqPendEvent\n"));
KeWaitForSingleObject(&deviceExtension->NoIdleReqPendEvent,
Executive,
KernelMode,
FALSE,
NULL);
}
rwContext = (PFREEBT_RW_CONTEXT) ExAllocatePool(NonPagedPool, sizeof(FREEBT_RW_CONTEXT));
if (rwContext == NULL)
{
FreeBT_DbgPrint(1, ("FBTUSB: FreeBT_DispatchRead: Failed to alloc mem for rwContext\n"));
ntStatus = STATUS_INSUFFICIENT_RESOURCES;
goto FreeBT_DispatchRead_Exit;
}
if (Irp->MdlAddress)
{
totalLength = MmGetMdlByteCount(Irp->MdlAddress);
}
FreeBT_DbgPrint(1, ("FBTUSB: FreeBT_DispatchRead: Transfer data length = %d\n", totalLength));
if (totalLength == 0)
{
ntStatus = STATUS_SUCCESS;
ExFreePool(rwContext);
goto FreeBT_DispatchRead_Exit;
}
virtualAddress = (ULONG_PTR) MmGetMdlVirtualAddress(Irp->MdlAddress);
if (totalLength > deviceExtension->DataInPipe.MaximumPacketSize)
{
stageLength = deviceExtension->DataInPipe.MaximumPacketSize;
}
else
{
stageLength = totalLength;
}
mdl = IoAllocateMdl((PVOID) virtualAddress, totalLength, FALSE, FALSE, NULL);
if (mdl == NULL)
{
FreeBT_DbgPrint(1, ("FBTUSB: FreeBT_DispatchRead: Failed to alloc mem for mdl\n"));
ntStatus = STATUS_INSUFFICIENT_RESOURCES;
ExFreePool(rwContext);
goto FreeBT_DispatchRead_Exit;
}
// map the portion of user-buffer described by an mdl to another mdl
IoBuildPartialMdl(Irp->MdlAddress, mdl, (PVOID) virtualAddress, stageLength);
urb = (PURB) ExAllocatePool(NonPagedPool, sizeof(struct _URB_BULK_OR_INTERRUPT_TRANSFER));
if (urb == NULL)
{
FreeBT_DbgPrint(1, ("FBTUSB: FreeBT_DispatchRead: Failed to alloc mem for urb\n"));
ntStatus = STATUS_INSUFFICIENT_RESOURCES;
ExFreePool(rwContext);
IoFreeMdl(mdl);
goto FreeBT_DispatchRead_Exit;
}
UsbBuildInterruptOrBulkTransferRequest(
urb,
sizeof(struct _URB_BULK_OR_INTERRUPT_TRANSFER),
deviceExtension->DataInPipe.PipeHandle,
NULL,
mdl,
stageLength,
USBD_SHORT_TRANSFER_OK | USBD_TRANSFER_DIRECTION_IN,
NULL);
// set FREEBT_RW_CONTEXT parameters.
rwContext->Urb = urb;
rwContext->Mdl = mdl;
rwContext->Length = totalLength - stageLength;
rwContext->Numxfer = 0;
rwContext->VirtualAddress = virtualAddress + stageLength;
// use the original read/write irp as an internal device control irp
nextStack = IoGetNextIrpStackLocation(Irp);
nextStack->MajorFunction = IRP_MJ_INTERNAL_DEVICE_CONTROL;
nextStack->Parameters.Others.Argument1 = (PVOID) urb;
nextStack->Parameters.DeviceIoControl.IoControlCode = IOCTL_INTERNAL_USB_SUBMIT_URB;
IoSetCompletionRoutine(Irp,
(PIO_COMPLETION_ROUTINE)FreeBT_ReadCompletion,
rwContext,
TRUE,
TRUE,
TRUE);
// We return STATUS_PENDING; call IoMarkIrpPending.
IoMarkIrpPending(Irp);
ntStatus = IoCallDriver(deviceExtension->TopOfStackDeviceObject, Irp);
if (!NT_SUCCESS(ntStatus))
{
FreeBT_DbgPrint(1, ("FBTUSB: FreeBT_DispatchRead: IoCallDriver fails with status %X\n", ntStatus));
// if the device was yanked out, then the pipeInformation
// field is invalid.
// similarly if the request was cancelled, then we need not
// invoked reset pipe/device.
if((ntStatus != STATUS_CANCELLED) && (ntStatus != STATUS_DEVICE_NOT_CONNECTED))
{
ntStatus = FreeBT_ResetPipe(DeviceObject, deviceExtension->DataInPipe.PipeHandle);
if(!NT_SUCCESS(ntStatus))
{
FreeBT_DbgPrint(1, ("FBTUSB: FreeBT_DispatchRead: FreeBT_ResetPipe failed\n"));
ntStatus = FreeBT_ResetDevice(DeviceObject);
}
}
else
{
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_DispatchRead: ntStatus is STATUS_CANCELLED or STATUS_DEVICE_NOT_CONNECTED\n"));
}
}
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_DispatchRead::"));
FreeBT_IoIncrement(deviceExtension);
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_DispatchRead: URB sent to lower driver, IRP is pending\n"));
// we return STATUS_PENDING and not the status returned by the lower layer.
return STATUS_PENDING;
FreeBT_DispatchRead_Exit:
Irp->IoStatus.Status = ntStatus;
Irp->IoStatus.Information = 0;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_DispatchRead: Leaving\n"));
return ntStatus;
}
NTSTATUS FreeBT_ReadCompletion(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context)
{
ULONG stageLength;
NTSTATUS ntStatus;
PIO_STACK_LOCATION nextStack;
PFREEBT_RW_CONTEXT rwContext;
PDEVICE_EXTENSION deviceExtension;
deviceExtension = (PDEVICE_EXTENSION) DeviceObject->DeviceExtension;
rwContext = (PFREEBT_RW_CONTEXT) Context;
ntStatus = Irp->IoStatus.Status;
UNREFERENCED_PARAMETER(DeviceObject);
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_ReadCompletion: Entered\n"));
if (NT_SUCCESS(ntStatus))
{
Irp->IoStatus.Information = rwContext->Urb->UrbBulkOrInterruptTransfer.TransferBufferLength;
}
else
{
Irp->IoStatus.Information = 0;
FreeBT_DbgPrint(1, ("FBTUSB: FreeBT_ReadCompletion: - failed with status = %X\n", ntStatus));
}
if (rwContext)
{
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_ReadCompletion: ::"));
FreeBT_IoDecrement(deviceExtension);
ExFreePool(rwContext->Urb);
IoFreeMdl(rwContext->Mdl);
ExFreePool(rwContext);
}
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_ReadCompletion: Leaving\n"));
return ntStatus;
}
// Read/Write handler
NTSTATUS FreeBT_DispatchWrite(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
{
PMDL mdl;
PURB urb;
ULONG totalLength;
ULONG stageLength;
NTSTATUS ntStatus;
ULONG_PTR virtualAddress;
PFILE_OBJECT fileObject;
PDEVICE_EXTENSION deviceExtension;
PIO_STACK_LOCATION irpStack;
PIO_STACK_LOCATION nextStack;
PFREEBT_RW_CONTEXT rwContext;
ULONG maxLength=0;
urb = NULL;
mdl = NULL;
rwContext = NULL;
totalLength = 0;
irpStack = IoGetCurrentIrpStackLocation(Irp);
fileObject = irpStack->FileObject;
deviceExtension = (PDEVICE_EXTENSION) DeviceObject->DeviceExtension;
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_DispatchWrite: Entered\n"));
if (deviceExtension->DeviceState != Working)
{
FreeBT_DbgPrint(1, ("FBTUSB: FreeBT_WriteDispatch: Invalid device state\n"));
ntStatus = STATUS_INVALID_DEVICE_STATE;
goto FreeBT_DispatchWrite_Exit;
}
// Make sure that any selective suspend request has been completed.
if (deviceExtension->SSEnable)
{
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_WriteDispatch: Waiting on the IdleReqPendEvent\n"));
KeWaitForSingleObject(&deviceExtension->NoIdleReqPendEvent,
Executive,
KernelMode,
FALSE,
NULL);
}
rwContext = (PFREEBT_RW_CONTEXT) ExAllocatePool(NonPagedPool, sizeof(FREEBT_RW_CONTEXT));
if (rwContext == NULL)
{
FreeBT_DbgPrint(1, ("FBTUSB: Failed to alloc mem for rwContext\n"));
ntStatus = STATUS_INSUFFICIENT_RESOURCES;
goto FreeBT_DispatchWrite_Exit;
}
if (Irp->MdlAddress)
{
totalLength = MmGetMdlByteCount(Irp->MdlAddress);
}
FreeBT_DbgPrint(1, ("FBTUSB: FreeBT_WriteDispatch: Transfer data length = %d\n", totalLength));
if (totalLength>FBT_HCI_DATA_MAX_SIZE)
{
FreeBT_DbgPrint(1, ("FBTUSB: FreeBT_WriteDispatch: Buffer exceeds maximum packet length (%d), failing IRP\n", FBT_HCI_DATA_MAX_SIZE));
ntStatus = STATUS_INVALID_BUFFER_SIZE;
ExFreePool(rwContext);
goto FreeBT_DispatchWrite_Exit;
}
if (totalLength<FBT_HCI_DATA_MIN_SIZE)
{
FreeBT_DbgPrint(1, ("FBTUSB: FreeBT_WriteDispatch: Zero length buffer, completing IRP\n"));
ntStatus = STATUS_BUFFER_TOO_SMALL;
ExFreePool(rwContext);
goto FreeBT_DispatchWrite_Exit;
}
virtualAddress = (ULONG_PTR) MmGetMdlVirtualAddress(Irp->MdlAddress);
if (totalLength > deviceExtension->DataOutPipe.MaximumPacketSize)
{
stageLength = deviceExtension->DataOutPipe.MaximumPacketSize;
}
else
{
stageLength = totalLength;
}
mdl = IoAllocateMdl((PVOID) virtualAddress, totalLength, FALSE, FALSE, NULL);
if (mdl == NULL)
{
FreeBT_DbgPrint(1, ("FBTUSB: FreeBT_WriteDispatch: Failed to alloc mem for mdl\n"));
ntStatus = STATUS_INSUFFICIENT_RESOURCES;
ExFreePool(rwContext);
goto FreeBT_DispatchWrite_Exit;
}
// map the portion of user-buffer described by an mdl to another mdl
IoBuildPartialMdl(Irp->MdlAddress, mdl, (PVOID) virtualAddress, stageLength);
urb = (PURB) ExAllocatePool(NonPagedPool, sizeof(struct _URB_BULK_OR_INTERRUPT_TRANSFER));
if (urb == NULL)
{
FreeBT_DbgPrint(1, ("FBTUSB: FreeBT_WriteDispatch: Failed to alloc mem for urb\n"));
ntStatus = STATUS_INSUFFICIENT_RESOURCES;
ExFreePool(rwContext);
IoFreeMdl(mdl);
goto FreeBT_DispatchWrite_Exit;
}
UsbBuildInterruptOrBulkTransferRequest(
urb,
sizeof(struct _URB_BULK_OR_INTERRUPT_TRANSFER),
deviceExtension->DataOutPipe.PipeHandle,
NULL,
mdl,
stageLength,
USBD_SHORT_TRANSFER_OK | USBD_TRANSFER_DIRECTION_OUT,
NULL);
// set FREEBT_RW_CONTEXT parameters.
rwContext->Urb = urb;
rwContext->Mdl = mdl;
rwContext->Length = totalLength - stageLength;
rwContext->Numxfer = 0;
rwContext->VirtualAddress = virtualAddress + stageLength;
// use the original read/write irp as an internal device control irp
nextStack = IoGetNextIrpStackLocation(Irp);
nextStack->MajorFunction = IRP_MJ_INTERNAL_DEVICE_CONTROL;
nextStack->Parameters.Others.Argument1 = (PVOID) urb;
nextStack->Parameters.DeviceIoControl.IoControlCode = IOCTL_INTERNAL_USB_SUBMIT_URB;
IoSetCompletionRoutine(Irp,
(PIO_COMPLETION_ROUTINE)FreeBT_WriteCompletion,
rwContext,
TRUE,
TRUE,
TRUE);
// We return STATUS_PENDING; call IoMarkIrpPending.
IoMarkIrpPending(Irp);
ntStatus = IoCallDriver(deviceExtension->TopOfStackDeviceObject, Irp);
if (!NT_SUCCESS(ntStatus))
{
FreeBT_DbgPrint(1, ("FBTUSB: FreeBT_WriteDispatch: IoCallDriver fails with status %X\n", ntStatus));
// if the device was yanked out, then the pipeInformation
// field is invalid.
// similarly if the request was cancelled, then we need not
// invoked reset pipe/device.
if((ntStatus != STATUS_CANCELLED) && (ntStatus != STATUS_DEVICE_NOT_CONNECTED))
{
ntStatus = FreeBT_ResetPipe(DeviceObject, deviceExtension->DataOutPipe.PipeHandle);
if(!NT_SUCCESS(ntStatus))
{
FreeBT_DbgPrint(1, ("FBTUSB: FreeBT_ResetPipe failed\n"));
ntStatus = FreeBT_ResetDevice(DeviceObject);
}
}
else
{
FreeBT_DbgPrint(3, ("FBTUSB: ntStatus is STATUS_CANCELLED or STATUS_DEVICE_NOT_CONNECTED\n"));
}
}
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_DispatchWrite::"));
FreeBT_IoIncrement(deviceExtension);
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_DispatchWrite: URB sent to lower driver, IRP is pending\n"));
// we return STATUS_PENDING and not the status returned by the lower layer.
return STATUS_PENDING;
FreeBT_DispatchWrite_Exit:
Irp->IoStatus.Status = ntStatus;
Irp->IoStatus.Information = 0;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_DispatchWrite: Leaving\n"));
return ntStatus;
}
NTSTATUS FreeBT_WriteCompletion(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context)
{
ULONG stageLength;
NTSTATUS ntStatus;
PIO_STACK_LOCATION nextStack;
PFREEBT_RW_CONTEXT rwContext;
PDEVICE_EXTENSION deviceExtension;
deviceExtension = (PDEVICE_EXTENSION) DeviceObject->DeviceExtension;
rwContext = (PFREEBT_RW_CONTEXT) Context;
ntStatus = Irp->IoStatus.Status;
UNREFERENCED_PARAMETER(DeviceObject);
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_WriteCompletion: Entered\n"));
if (NT_SUCCESS(ntStatus))
{
if (rwContext)
{
rwContext->Numxfer += rwContext->Urb->UrbBulkOrInterruptTransfer.TransferBufferLength;
if (rwContext->Length)
{
// More data to transfer
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_WriteCompletion: Initiating next transfer\n"));
if (rwContext->Length > deviceExtension->DataOutPipe.MaximumPacketSize)
{
stageLength = deviceExtension->DataOutPipe.MaximumPacketSize;
}
else
{
stageLength = rwContext->Length;
}
IoBuildPartialMdl(Irp->MdlAddress, rwContext->Mdl, (PVOID) rwContext->VirtualAddress, stageLength);
// reinitialize the urb
rwContext->Urb->UrbBulkOrInterruptTransfer.TransferBufferLength = stageLength;
rwContext->VirtualAddress += stageLength;
rwContext->Length -= stageLength;
nextStack = IoGetNextIrpStackLocation(Irp);
nextStack->MajorFunction = IRP_MJ_INTERNAL_DEVICE_CONTROL;
nextStack->Parameters.Others.Argument1 = rwContext->Urb;
nextStack->Parameters.DeviceIoControl.IoControlCode = IOCTL_INTERNAL_USB_SUBMIT_URB;
IoSetCompletionRoutine(Irp,
FreeBT_ReadCompletion,
rwContext,
TRUE,
TRUE,
TRUE);
IoCallDriver(deviceExtension->TopOfStackDeviceObject, Irp);
return STATUS_MORE_PROCESSING_REQUIRED;
}
else
{
// No more data to transfer
FreeBT_DbgPrint(1, ("FBTUSB: FreeNT_WriteCompletion: Write completed, %d bytes written\n", Irp->IoStatus.Information));
Irp->IoStatus.Information = rwContext->Numxfer;
}
}
}
else
{
FreeBT_DbgPrint(1, ("FBTUSB: FreeNT_WriteCompletion - failed with status = %X\n", ntStatus));
}
if (rwContext)
{
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_WriteCompletion: ::"));
FreeBT_IoDecrement(deviceExtension);
ExFreePool(rwContext->Urb);
IoFreeMdl(rwContext->Mdl);
ExFreePool(rwContext);
}
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_WriteCompletion: Leaving\n"));
return ntStatus;
}

341
drivers/bluetooth/fbtusb/fbtusb.c Executable file
View file

@ -0,0 +1,341 @@
// Copyright (c) 2004, Antony C. Roberts
// Use of this file is subject to the terms
// described in the LICENSE.TXT file that
// accompanies this file.
//
// Your use of this file indicates your
// acceptance of the terms described in
// LICENSE.TXT.
//
// http://www.freebt.net
#include "stdio.h"
#include "fbtusb.h"
#include "fbtpnp.h"
#include "fbtpwr.h"
#include "fbtdev.h"
#include "fbtwmi.h"
#include "fbtrwr.h"
#include "fbtusr.h"
// Globals
GLOBALS Globals;
ULONG DebugLevel=255;
// Forward declaration
NTSTATUS NTAPI DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING UniRegistryPath );
VOID NTAPI FreeBT_DriverUnload(IN PDRIVER_OBJECT DriverObject);
NTSTATUS NTAPI FreeBT_AddDevice(IN PDRIVER_OBJECT DriverObject, IN PDEVICE_OBJECT PhysicalDeviceObject);
#ifdef PAGE_CODE
#ifdef ALLOC_PRAGMA
#pragma alloc_text(INIT, DriverEntry)
#pragma alloc_text(PAGE, FreeBT_DriverUnload)
#endif
#endif
NTSTATUS NTAPI DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING UniRegistryPath)
{
NTSTATUS ntStatus;
PUNICODE_STRING registryPath;
registryPath = &Globals.FreeBT_RegistryPath;
registryPath->MaximumLength = UniRegistryPath->Length + sizeof(UNICODE_NULL);
registryPath->Length = UniRegistryPath->Length;
registryPath->Buffer = (PWSTR) ExAllocatePool(PagedPool, registryPath->MaximumLength);
if (!registryPath->Buffer)
{
FreeBT_DbgPrint(1, ("FBTUSB: Failed to allocate memory for registryPath\n"));
ntStatus = STATUS_INSUFFICIENT_RESOURCES;
goto DriverEntry_Exit;
}
RtlZeroMemory (registryPath->Buffer, registryPath->MaximumLength);
RtlMoveMemory (registryPath->Buffer, UniRegistryPath->Buffer, UniRegistryPath->Length);
ntStatus = STATUS_SUCCESS;
// Initialize the driver object with this driver's entry points.
DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = FreeBT_DispatchDevCtrl;
DriverObject->MajorFunction[IRP_MJ_POWER] = FreeBT_DispatchPower;
DriverObject->MajorFunction[IRP_MJ_PNP] = FreeBT_DispatchPnP;
DriverObject->MajorFunction[IRP_MJ_CREATE] = FreeBT_DispatchCreate;
DriverObject->MajorFunction[IRP_MJ_CLOSE] = FreeBT_DispatchClose;
DriverObject->MajorFunction[IRP_MJ_CLEANUP] = FreeBT_DispatchClean;
DriverObject->MajorFunction[IRP_MJ_READ] = FreeBT_DispatchRead;
DriverObject->MajorFunction[IRP_MJ_WRITE] = FreeBT_DispatchWrite;
#ifdef ENABLE_WMI
DriverObject->MajorFunction[IRP_MJ_SYSTEM_CONTROL] = FreeBT_DispatchSysCtrl;
#endif
DriverObject->DriverUnload = FreeBT_DriverUnload;
DriverObject->DriverExtension->AddDevice = (PDRIVER_ADD_DEVICE) FreeBT_AddDevice;
DriverEntry_Exit:
return ntStatus;
}
VOID NTAPI FreeBT_DriverUnload(IN PDRIVER_OBJECT DriverObject)
{
PUNICODE_STRING registryPath;
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_DriverUnload: Entered\n"));
registryPath = &Globals.FreeBT_RegistryPath;
if(registryPath->Buffer)
{
ExFreePool(registryPath->Buffer);
registryPath->Buffer = NULL;
}
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_DriverUnload: Leaving\n"));
return;
}
// AddDevice, called when an instance of our supported hardware is found
// Returning anything other than NT_SUCCESS here causes the device to fail
// to initialise
NTSTATUS NTAPI FreeBT_AddDevice(IN PDRIVER_OBJECT DriverObject, IN PDEVICE_OBJECT PhysicalDeviceObject)
{
NTSTATUS ntStatus;
PDEVICE_OBJECT deviceObject;
PDEVICE_EXTENSION deviceExtension;
POWER_STATE state;
KIRQL oldIrql;
UNICODE_STRING uniDeviceName;
WCHAR wszDeviceName[255]={0};
UNICODE_STRING uniDosDeviceName;
LONG instanceNumber=0;
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_AddDevice: Entered\n"));
deviceObject = NULL;
swprintf(wszDeviceName, L"\\Device\\FbtUsb%02d", instanceNumber);
RtlInitUnicodeString(&uniDeviceName, wszDeviceName);
ntStatus=STATUS_OBJECT_NAME_COLLISION;
while (instanceNumber<99 && !NT_SUCCESS(ntStatus))
{
swprintf(wszDeviceName, L"\\Device\\FbtUsb%02d", instanceNumber);
uniDeviceName.Length = wcslen(wszDeviceName) * sizeof(WCHAR);
FreeBT_DbgPrint(1, ("FBTUSB: Attempting to create device %ws\n", wszDeviceName));
ntStatus = IoCreateDevice(
DriverObject, // our driver object
sizeof(DEVICE_EXTENSION), // extension size for us
&uniDeviceName, // name for this device
FILE_DEVICE_UNKNOWN,
0, // device characteristics
FALSE, // Not exclusive
&deviceObject); // Our device object
if (!NT_SUCCESS(ntStatus))
instanceNumber++;
}
if (!NT_SUCCESS(ntStatus))
{
FreeBT_DbgPrint(1, ("FBTUSB: Failed to create device object\n"));
return ntStatus;
}
FreeBT_DbgPrint(1, ("FBTUSB: Created device %ws\n", wszDeviceName));
deviceExtension = (PDEVICE_EXTENSION) deviceObject->DeviceExtension;
deviceExtension->FunctionalDeviceObject = deviceObject;
deviceExtension->PhysicalDeviceObject = PhysicalDeviceObject;
deviceObject->Flags |= DO_DIRECT_IO;
swprintf(deviceExtension->wszDosDeviceName, L"\\DosDevices\\FbtUsb%02d", instanceNumber);
RtlInitUnicodeString(&uniDosDeviceName, deviceExtension->wszDosDeviceName);
ntStatus=IoCreateSymbolicLink(&uniDosDeviceName, &uniDeviceName);
if (!NT_SUCCESS(ntStatus))
{
FreeBT_DbgPrint(1, ("FBTUSB: Failed to create symbolic link %ws to %ws, status=0x%08x\n", deviceExtension->wszDosDeviceName, wszDeviceName, ntStatus));
IoDeleteDevice(deviceObject);
return ntStatus;
}
FreeBT_DbgPrint(1, ("FBTUSB: Created symbolic link %ws\n", deviceExtension->wszDosDeviceName));
KeInitializeSpinLock(&deviceExtension->DevStateLock);
INITIALIZE_PNP_STATE(deviceExtension);
deviceExtension->OpenHandleCount = 0;
// Initialize the selective suspend variables
KeInitializeSpinLock(&deviceExtension->IdleReqStateLock);
deviceExtension->IdleReqPend = 0;
deviceExtension->PendingIdleIrp = NULL;
// Hold requests until the device is started
deviceExtension->QueueState = HoldRequests;
// Initialize the queue and the queue spin lock
InitializeListHead(&deviceExtension->NewRequestsQueue);
KeInitializeSpinLock(&deviceExtension->QueueLock);
// Initialize the remove event to not-signaled.
KeInitializeEvent(&deviceExtension->RemoveEvent, SynchronizationEvent, FALSE);
// Initialize the stop event to signaled.
// This event is signaled when the OutstandingIO becomes 1
KeInitializeEvent(&deviceExtension->StopEvent, SynchronizationEvent, TRUE);
// OutstandingIo count biased to 1.
// Transition to 0 during remove device means IO is finished.
// Transition to 1 means the device can be stopped
deviceExtension->OutStandingIO = 1;
KeInitializeSpinLock(&deviceExtension->IOCountLock);
#ifdef ENABLE_WMI
// Delegating to WMILIB
ntStatus = FreeBT_WmiRegistration(deviceExtension);
if (!NT_SUCCESS(ntStatus))
{
FreeBT_DbgPrint(1, ("FBTUSB: FreeBT_WmiRegistration failed with %X\n", ntStatus));
IoDeleteDevice(deviceObject);
IoDeleteSymbolicLink(&uniDosDeviceName);
return ntStatus;
}
#endif
// Set the flags as underlying PDO
if (PhysicalDeviceObject->Flags & DO_POWER_PAGABLE)
{
deviceObject->Flags |= DO_POWER_PAGABLE;
}
// Typically, the function driver for a device is its
// power policy owner, although for some devices another
// driver or system component may assume this role.
// Set the initial power state of the device, if known, by calling
// PoSetPowerState.
deviceExtension->DevPower = PowerDeviceD0;
deviceExtension->SysPower = PowerSystemWorking;
state.DeviceState = PowerDeviceD0;
PoSetPowerState(deviceObject, DevicePowerState, state);
// attach our driver to device stack
// The return value of IoAttachDeviceToDeviceStack is the top of the
// attachment chain. This is where all the IRPs should be routed.
deviceExtension->TopOfStackDeviceObject = IoAttachDeviceToDeviceStack(deviceObject, PhysicalDeviceObject);
if (NULL == deviceExtension->TopOfStackDeviceObject)
{
#ifdef ENABLE_WMI
FreeBT_WmiDeRegistration(deviceExtension);
#endif
IoDeleteDevice(deviceObject);
IoDeleteSymbolicLink(&uniDosDeviceName);
return STATUS_NO_SUCH_DEVICE;
}
// Register device interfaces
ntStatus = IoRegisterDeviceInterface(deviceExtension->PhysicalDeviceObject,
&GUID_CLASS_FREEBT_USB,
NULL,
&deviceExtension->InterfaceName);
if (!NT_SUCCESS(ntStatus))
{
#ifdef ENABLE_WMI
FreeBT_WmiDeRegistration(deviceExtension);
#endif
IoDetachDevice(deviceExtension->TopOfStackDeviceObject);
IoDeleteDevice(deviceObject);
IoDeleteSymbolicLink(&uniDosDeviceName);
return ntStatus;
}
if (IoIsWdmVersionAvailable(1, 0x20))
{
deviceExtension->WdmVersion = WinXpOrBetter;
}
else if (IoIsWdmVersionAvailable(1, 0x10))
{
deviceExtension->WdmVersion = Win2kOrBetter;
}
else if (IoIsWdmVersionAvailable(1, 0x5))
{
deviceExtension->WdmVersion = WinMeOrBetter;
}
else if (IoIsWdmVersionAvailable(1, 0x0))
{
deviceExtension->WdmVersion = Win98OrBetter;
}
deviceExtension->SSRegistryEnable = 0;
deviceExtension->SSEnable = 0;
// WinXP only: check the registry flag indicating whether
// the device should selectively suspend when idle
if (WinXpOrBetter == deviceExtension->WdmVersion)
{
FreeBT_GetRegistryDword(FREEBT_REGISTRY_PARAMETERS_PATH,
L"BulkUsbEnable",
(PULONG)(&deviceExtension->SSRegistryEnable));
if (deviceExtension->SSRegistryEnable)
{
// initialize DPC
KeInitializeDpc(&deviceExtension->DeferredProcCall, DpcRoutine, deviceObject);
// initialize the timer.
// the DPC and the timer in conjunction,
// monitor the state of the device to
// selectively suspend the device.
KeInitializeTimerEx(&deviceExtension->Timer, NotificationTimer);
// Initialize the NoDpcWorkItemPendingEvent to signaled state.
// This event is cleared when a Dpc is fired and signaled
// on completion of the work-item.
KeInitializeEvent(&deviceExtension->NoDpcWorkItemPendingEvent, NotificationEvent, TRUE);
// Initialize the NoIdleReqPendEvent to ensure that the idle request
// is indeed complete before we unload the drivers.
KeInitializeEvent(&deviceExtension->NoIdleReqPendEvent, NotificationEvent, TRUE);
}
}
// Initialize the NoIdleReqPendEvent to ensure that the idle request
// is indeed complete before we unload the drivers.
KeInitializeEvent(&deviceExtension->DelayEvent, NotificationEvent, FALSE);
// Clear the DO_DEVICE_INITIALIZING flag.
// Note: Do not clear this flag until the driver has set the
// device power state and the power DO flags.
deviceObject->Flags &= ~DO_DEVICE_INITIALIZING;
InterlockedIncrement(&instanceNumber);
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_AddDevice: Leaving\n"));
return ntStatus;
}

View file

@ -0,0 +1,15 @@
<?xml version="1.0"?>
<!DOCTYPE module SYSTEM "../../../tools/rbuild/project.dtd">
<module name="fbtusb" type="kernelmodedriver" installbase="system32/drivers" installname="fbtusb.sys" allowwarnings="true">
<include base="fbtusb">include</include>
<library>ntoskrnl</library>
<library>hal</library>
<library>usbd</library>
<file>fbtdev.c</file>
<file>fbtpnp.c</file>
<file>fbtpwr.c</file>
<file>fbtrwr.c</file>
<file>fbtusb.c</file>
<!--file>fbtwmi.c</file-->
<file>fbtusb.rc</file>
</module>

View file

@ -0,0 +1,5 @@
#define REACTOS_VERSION_DLL
#define REACTOS_STR_FILE_DESCRIPTION "Generic USB Bluetooth Driver\0"
#define REACTOS_STR_INTERNAL_NAME "fbtusb\0"
#define REACTOS_STR_ORIGINAL_FILENAME "fbtusb.sys\0"
#include <reactos/version.rc>

548
drivers/bluetooth/fbtusb/fbtwmi.c Executable file
View file

@ -0,0 +1,548 @@
// Copyright (c) 2004, Antony C. Roberts
// Use of this file is subject to the terms
// described in the LICENSE.TXT file that
// accompanies this file.
//
// Your use of this file indicates your
// acceptance of the terms described in
// LICENSE.TXT.
//
// http://www.freebt.net
#include "fbtusb.h"
#include "fbtpwr.h"
#include "fbtpnp.h"
#include "fbtdev.h"
#include "fbtrwr.h"
#include "fbtwmi.h"
#include "fbtusr.h"
#define MOFRESOURCENAME L"MofResourceName"
#define WMI_FREEBT_DRIVER_INFORMATION 0
DEFINE_GUID (FREEBT_WMI_STD_DATA_GUID, 0x871B1A60, 0xD3EA, 0x4f2f, 0x81, 0x7b, 0x46, 0x5e, 0x44, 0x86, 0x7b, 0xf5);
WMIGUIDREGINFO FreeBTWmiGuidList[1] =
{
{
&FREEBT_WMI_STD_DATA_GUID, 1, 0 // driver information
}
};
NTSTATUS FreeBT_WmiRegistration(IN OUT PDEVICE_EXTENSION DeviceExtension)
{
NTSTATUS ntStatus;
PAGED_CODE();
DeviceExtension->WmiLibInfo.GuidCount = sizeof (FreeBTWmiGuidList) / sizeof (WMIGUIDREGINFO);
DeviceExtension->WmiLibInfo.GuidList = FreeBTWmiGuidList;
DeviceExtension->WmiLibInfo.QueryWmiRegInfo = FreeBT_QueryWmiRegInfo;
DeviceExtension->WmiLibInfo.QueryWmiDataBlock = FreeBT_QueryWmiDataBlock;
DeviceExtension->WmiLibInfo.SetWmiDataBlock = FreeBT_SetWmiDataBlock;
DeviceExtension->WmiLibInfo.SetWmiDataItem = FreeBT_SetWmiDataItem;
DeviceExtension->WmiLibInfo.ExecuteWmiMethod = NULL;
DeviceExtension->WmiLibInfo.WmiFunctionControl = NULL;
// Register with WMI
ntStatus = IoWMIRegistrationControl(DeviceExtension->FunctionalDeviceObject, WMIREG_ACTION_REGISTER);
return ntStatus;
}
NTSTATUS FreeBT_WmiDeRegistration(IN OUT PDEVICE_EXTENSION DeviceExtension)
{
PAGED_CODE();
return IoWMIRegistrationControl(DeviceExtension->FunctionalDeviceObject, WMIREG_ACTION_DEREGISTER);
}
NTSTATUS FreeBT_DispatchSysCtrl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
{
PDEVICE_EXTENSION deviceExtension;
SYSCTL_IRP_DISPOSITION disposition;
NTSTATUS ntStatus;
PIO_STACK_LOCATION irpStack;
PAGED_CODE();
irpStack = IoGetCurrentIrpStackLocation (Irp);
deviceExtension = (PDEVICE_EXTENSION) DeviceObject->DeviceExtension;
FreeBT_DbgPrint(3, ("FBTUSB: "));
FreeBT_DbgPrint(3, (WMIMinorFunctionString(irpStack->MinorFunction)));
if (Removed == deviceExtension->DeviceState)
{
ntStatus = STATUS_DELETE_PENDING;
Irp->IoStatus.Status = ntStatus;
Irp->IoStatus.Information = 0;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return ntStatus;
}
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_DispatchSysCtrl::"));
FreeBT_IoIncrement(deviceExtension);
ntStatus = WmiSystemControl(&deviceExtension->WmiLibInfo,
DeviceObject,
Irp,
&disposition);
switch(disposition)
{
case IrpProcessed:
{
// This irp has been processed and may be completed or pending.
break;
}
case IrpNotCompleted:
{
// This irp has not been completed, but has been fully processed.
// we will complete it now
IoCompleteRequest(Irp, IO_NO_INCREMENT);
break;
}
case IrpForward:
case IrpNotWmi:
{
// This irp is either not a WMI irp or is a WMI irp targeted
// at a device lower in the stack.
IoSkipCurrentIrpStackLocation (Irp);
ntStatus = IoCallDriver(deviceExtension->TopOfStackDeviceObject, Irp);
break;
}
default:
{
// We really should never get here, but if we do just forward....
ASSERT(FALSE);
IoSkipCurrentIrpStackLocation (Irp);
ntStatus = IoCallDriver(deviceExtension->TopOfStackDeviceObject, Irp);
break;
}
}
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_DispatchSysCtrl::"));
FreeBT_IoDecrement(deviceExtension);
return ntStatus;
}
NTSTATUS FreeBT_QueryWmiRegInfo(
IN PDEVICE_OBJECT DeviceObject,
OUT ULONG *RegFlags,
OUT PUNICODE_STRING InstanceName,
OUT PUNICODE_STRING *RegistryPath,
OUT PUNICODE_STRING MofResourceName,
OUT PDEVICE_OBJECT *Pdo
)
/*++
Routine Description:
This routine is a callback into the driver to retrieve the list of
guids or data blocks that the driver wants to register with WMI. This
routine may not pend or block. Driver should NOT call
WmiCompleteRequest.
Arguments:
DeviceObject is the device whose data block is being queried
*RegFlags returns with a set of flags that describe the guids being
registered for this device. If the device wants enable and disable
collection callbacks before receiving queries for the registered
guids then it should return the WMIREG_FLAG_EXPENSIVE flag. Also the
returned flags may specify WMIREG_FLAG_INSTANCE_PDO in which case
the instance name is determined from the PDO associated with the
device object. Note that the PDO must have an associated devnode. If
WMIREG_FLAG_INSTANCE_PDO is not set then Name must return a unique
name for the device.
InstanceName returns with the instance name for the guids if
WMIREG_FLAG_INSTANCE_PDO is not set in the returned *RegFlags. The
caller will call ExFreePool with the buffer returned.
*RegistryPath returns with the registry path of the driver
*MofResourceName returns with the name of the MOF resource attached to
the binary file. If the driver does not have a mof resource attached
then this can be returned as NULL.
*Pdo returns with the device object for the PDO associated with this
device if the WMIREG_FLAG_INSTANCE_PDO flag is returned in
*RegFlags.
Return Value:
status
--*/
{
PDEVICE_EXTENSION deviceExtension;
PAGED_CODE();
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_QueryWmiRegInfo: Entered\n"));
deviceExtension = (PDEVICE_EXTENSION) DeviceObject->DeviceExtension;
*RegFlags = WMIREG_FLAG_INSTANCE_PDO;
*RegistryPath = &Globals.FreeBT_RegistryPath;
*Pdo = deviceExtension->PhysicalDeviceObject;
RtlInitUnicodeString(MofResourceName, MOFRESOURCENAME);
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_QueryWmiRegInfo: Leaving\n"));
return STATUS_SUCCESS;
}
NTSTATUS FreeBT_QueryWmiDataBlock(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN ULONG GuidIndex,
IN ULONG InstanceIndex,
IN ULONG InstanceCount,
IN OUT PULONG InstanceLengthArray,
IN ULONG OutBufferSize,
OUT PUCHAR Buffer
)
/*++
Routine Description:
This routine is a callback into the driver to query for the contents of
a data block. When the driver has finished filling the data block it
must call WmiCompleteRequest to complete the irp. The driver can
return STATUS_PENDING if the irp cannot be completed immediately.
Arguments:
DeviceObject is the device whose data block is being queried
Irp is the Irp that makes this request
GuidIndex is the index into the list of guids provided when the
device registered
InstanceIndex is the index that denotes which instance of the data block
is being queried.
InstanceCount is the number of instances expected to be returned for
the data block.
InstanceLengthArray is a pointer to an array of ULONG that returns the
lengths of each instance of the data block. If this is NULL then
there was not enough space in the output buffer to fulfill the request
so the irp should be completed with the buffer needed.
OutBufferSize has the maximum size available to write the data
block.
Buffer on return is filled with the returned data block
Return Value:
status
--*/
{
PDEVICE_EXTENSION deviceExtension;
NTSTATUS ntStatus;
ULONG size;
WCHAR modelName[] = L"Aishverya\0\0";
USHORT modelNameLen;
PAGED_CODE();
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_QueryWmiDataBlock: Entered\n"));
size = 0;
modelNameLen = (wcslen(modelName) + 1) * sizeof(WCHAR);
// Only ever registers 1 instance per guid
ASSERT((InstanceIndex == 0) && (InstanceCount == 1));
deviceExtension = (PDEVICE_EXTENSION) DeviceObject->DeviceExtension;
switch (GuidIndex)
{
case WMI_FREEBT_DRIVER_INFORMATION:
size = sizeof(ULONG) + modelNameLen + sizeof(USHORT);
if (OutBufferSize < size )
{
FreeBT_DbgPrint(3, ("FBTUSB: OutBuffer too small\n"));
ntStatus = STATUS_BUFFER_TOO_SMALL;
break;
}
* (PULONG) Buffer = DebugLevel;
Buffer += sizeof(ULONG);
// put length of string ahead of string
*((PUSHORT)Buffer) = modelNameLen;
Buffer = (PUCHAR)Buffer + sizeof(USHORT);
RtlCopyBytes((PVOID)Buffer, (PVOID)modelName, modelNameLen);
*InstanceLengthArray = size ;
ntStatus = STATUS_SUCCESS;
break;
default:
ntStatus = STATUS_WMI_GUID_NOT_FOUND;
}
ntStatus = WmiCompleteRequest(DeviceObject,
Irp,
ntStatus,
size,
IO_NO_INCREMENT);
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_QueryWmiDataBlock: Leaving\n"));
return ntStatus;
}
NTSTATUS FreeBT_SetWmiDataItem(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN ULONG GuidIndex,
IN ULONG InstanceIndex,
IN ULONG DataItemId,
IN ULONG BufferSize,
IN PUCHAR Buffer
)
/*++
Routine Description:
This routine is a callback into the driver to set for the contents of
a data block. When the driver has finished filling the data block it
must call WmiCompleteRequest to complete the irp. The driver can
return STATUS_PENDING if the irp cannot be completed immediately.
Arguments:
DeviceObject is the device whose data block is being queried
Irp is the Irp that makes this request
GuidIndex is the index into the list of guids provided when the
device registered
InstanceIndex is the index that denotes which instance of the data block
is being queried.
DataItemId has the id of the data item being set
BufferSize has the size of the data item passed
Buffer has the new values for the data item
Return Value:
status
--*/
{
PDEVICE_EXTENSION deviceExtension;
NTSTATUS ntStatus;
ULONG info;
PAGED_CODE();
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_SetWmiDataItem: Entered\n"));
deviceExtension = (PDEVICE_EXTENSION) DeviceObject->DeviceExtension;
info = 0;
switch(GuidIndex)
{
case WMI_FREEBT_DRIVER_INFORMATION:
if(DataItemId == 1)
{
if(BufferSize == sizeof(ULONG))
{
DebugLevel = *((PULONG)Buffer);
ntStatus = STATUS_SUCCESS;
info = sizeof(ULONG);
}
else
{
ntStatus = STATUS_INFO_LENGTH_MISMATCH;
}
}
else
{
ntStatus = STATUS_WMI_READ_ONLY;
}
break;
default:
ntStatus = STATUS_WMI_GUID_NOT_FOUND;
}
ntStatus = WmiCompleteRequest(DeviceObject,
Irp,
ntStatus,
info,
IO_NO_INCREMENT);
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_SetWmiDataItem: Leaving\n"));
return ntStatus;
}
NTSTATUS FreeBT_SetWmiDataBlock(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN ULONG GuidIndex,
IN ULONG InstanceIndex,
IN ULONG BufferSize,
IN PUCHAR Buffer
)
/*++
Routine Description:
This routine is a callback into the driver to set the contents of
a data block. When the driver has finished filling the data block it
must call WmiCompleteRequest to complete the irp. The driver can
return STATUS_PENDING if the irp cannot be completed immediately.
Arguments:
DeviceObject is the device whose data block is being queried
Irp is the Irp that makes this request
GuidIndex is the index into the list of guids provided when the
device registered
InstanceIndex is the index that denotes which instance of the data block
is being queried.
BufferSize has the size of the data block passed
Buffer has the new values for the data block
--*/
{
PDEVICE_EXTENSION deviceExtension;
NTSTATUS ntStatus;
ULONG info;
PAGED_CODE();
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_SetWmiDataBlock: Entered\n"));
deviceExtension = (PDEVICE_EXTENSION) DeviceObject->DeviceExtension;
info = 0;
switch(GuidIndex)
{
case WMI_FREEBT_DRIVER_INFORMATION:
if(BufferSize == sizeof(ULONG))
{
DebugLevel = *(PULONG) Buffer;
ntStatus = STATUS_SUCCESS;
info = sizeof(ULONG);
}
else
{
ntStatus = STATUS_INFO_LENGTH_MISMATCH;
}
break;
default:
ntStatus = STATUS_WMI_GUID_NOT_FOUND;
}
ntStatus = WmiCompleteRequest(DeviceObject,
Irp,
ntStatus,
info,
IO_NO_INCREMENT);
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_SetWmiDataBlock: Leaving\n"));
return ntStatus;
}
PCHAR WMIMinorFunctionString(UCHAR MinorFunction)
{
switch (MinorFunction)
{
case IRP_MN_CHANGE_SINGLE_INSTANCE:
return "IRP_MN_CHANGE_SINGLE_INSTANCE\n";
case IRP_MN_CHANGE_SINGLE_ITEM:
return "IRP_MN_CHANGE_SINGLE_ITEM\n";
case IRP_MN_DISABLE_COLLECTION:
return "IRP_MN_DISABLE_COLLECTION\n";
case IRP_MN_DISABLE_EVENTS:
return "IRP_MN_DISABLE_EVENTS\n";
case IRP_MN_ENABLE_COLLECTION:
return "IRP_MN_ENABLE_COLLECTION\n";
case IRP_MN_ENABLE_EVENTS:
return "IRP_MN_ENABLE_EVENTS\n";
case IRP_MN_EXECUTE_METHOD:
return "IRP_MN_EXECUTE_METHOD\n";
case IRP_MN_QUERY_ALL_DATA:
return "IRP_MN_QUERY_ALL_DATA\n";
case IRP_MN_QUERY_SINGLE_INSTANCE:
return "IRP_MN_QUERY_SINGLE_INSTANCE\n";
case IRP_MN_REGINFO:
return "IRP_MN_REGINFO\n";
default:
return "IRP_MN_?????\n";
}
}

View file

@ -0,0 +1,721 @@
#ifndef _FBT_HCI_CMD_STRUCTS_H
#define _FBT_HCI_CMD_STRUCTS_H
// Pack structures to single unsigned char boundries
#pragma pack(push, 1)
// Command Header
typedef struct
{
unsigned short OpCode;
unsigned char ParameterLength;
} FBT_HCI_CMD_HEADER, *PFBT_HCI_CMD_HEADER;
// Link control commands
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned char LAP[FBT_HCI_LAP_SIZE];
unsigned char InquiryLength;
unsigned char NumResponses;
} FBT_HCI_INQUIRY, *PFBT_HCI_INQUIRY;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
} FBT_HCI_INQUIRY_CANCEL, *PFBT_HCI_INQUIRY_CANCEL;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned short MaxPeriodLength;
unsigned short MinPeriodLength;
unsigned char LAP[FBT_HCI_LAP_SIZE];
unsigned char InquiryLength;
unsigned char NumResponses;
} FBT_HCI_PERIODIC_INQUIRY_MODE, *PFBT_HCI_PERIODIC_INQUIRY_MODE;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
} FBT_HCI_EXIT_PERIODIC_INQUIRY_MODE, *PFBT_HCI_EXIT_PERIODIC_INQUIRY_MODE;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned char BD_ADDR[FBT_HCI_BDADDR_SIZE];
unsigned short PacketType;
unsigned char PageScanRepetitionMode;
unsigned char PageScanMode;
unsigned short ClockOffset;
unsigned char AllowRoleSwitch;
} FBT_HCI_CREATE_CONNECTION, *PFBT_HCI_CREATE_CONNECTION;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned short ConnectionHandle;
unsigned char Reason;
} FBT_HCI_DISCONNECT, *PFBT_HCI_DISCONNECT;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned short ConnectionHandle;
unsigned short PacketType;
} FBT_HCI_ADD_SCO_CONNECTION, *PFBT_HCI_ADD_SCO_CONNECTION;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned char BD_ADDR[FBT_HCI_BDADDR_SIZE];
unsigned char Role;
} FBT_HCI_ACCEPT_CONNECTION_REQUEST, *PFBT_HCI_ACCEPT_CONNECTION_REQUEST;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned char BD_ADDR[FBT_HCI_BDADDR_SIZE];
unsigned char Reason;
} FBT_HCI_REJECT_CONNECTION_REQUEST, *PFBT_HCI_REJECT_CONNECTION_REQUEST;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned char BD_ADDR[FBT_HCI_BDADDR_SIZE];
unsigned char LinkKey[FBT_HCI_LINK_KEY_SIZE];
} FBT_HCI_LINK_KEY_REQUEST_REPLY, *PFBT_HCI_LINK_KEY_REQUEST_REPLY;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned char BD_ADDR[FBT_HCI_BDADDR_SIZE];
} FBT_HCI_LINK_KEY_REQUEST_NEGATIVE_REPLY, *PFBT_HCI_LINK_KEY_REQUEST_NEGATIVE_REPLY;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned char BD_ADDR[FBT_HCI_BDADDR_SIZE];
unsigned char PINCodeLength;
unsigned char PINCode[FBT_HCI_PIN_CODE_SIZE];
} FBT_HCI_PIN_CODE_REQUEST_REPLY, *PFBT_HCI_PIN_CODE_REQUEST_REPLY;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned char BD_ADDR[FBT_HCI_BDADDR_SIZE];
} FBT_HCI_PIN_CODE_REQUEST_NEGATIVE_REPLY, *PFBT_HCI_PIN_CODE_REQUEST_NEGATIVE_REPLY;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned short ConnectionHandle;
unsigned short PacketType;
} FBT_HCI_CHANGE_CONNECTION_PACKET_TYPE, *PFBT_HCI_CHANGE_CONNECTION_PACKET_TYPE;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned short ConnectionHandle;
} FBT_HCI_AUTHENTICATION_REQUESTED, *PFBT_HCI_AUTHENTICATION_REQUESTED;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned short ConnectionHandle;
unsigned char EncryptionEnable;
} FBT_HCI_SET_CONNECTION_ENCRYPTION, *PFBT_HCI_SET_CONNECTION_ENCRYPTION;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned short ConnectionHandle;
} FBT_HCI_CHANGE_CONNECTION_LINK_KEY, *PFBT_HCI_CHANGE_CONNECTION_LINK_KEY;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned char KeyFlag;
} FBT_HCI_MASTER_LINK_KEY, *PFBT_HCI_MASTER_LINK_KEY;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned char BD_ADDR[FBT_HCI_BDADDR_SIZE];
unsigned char PageScanRepetitionMode;
unsigned char PageScanMode;
unsigned short ClockOffset;
} FBT_HCI_REMOTE_NAME_REQUEST, *PFBT_HCI_REMOTE_NAME_REQUEST;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned short ConnectionHandle;
} FBT_HCI_READ_REMOTE_SUPPORTED_FEATURES, *PFBT_HCI_READ_REMOTE_SUPPORTED_FEATURES;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned short ConnectionHandle;
} FBT_HCI_READ_REMOTE_VERSION_INFORMATION, *PFBT_HCI_READ_REMOTE_VERSION_INFORMATION;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned short ConnectionHandle;
} FBT_HCI_READ_CLOCK_OFFSET, *PFBT_HCI_READ_CLOCK_OFFSET;
// Link policy commands
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned short ConnectionHandle;
unsigned short HoldModeMaxInterval;
unsigned short HoldModeMinInterval;
} FBT_HCI_HOLD_MODE, *PFBT_HCI_HOLD_MODE;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned short ConnectionHandle;
unsigned short SniffMaxInterval;
unsigned short SniffMinInterval;
unsigned short SniffAttempt;
unsigned short SniffTimeout;
} FBT_HCI_SNIFF_MODE, *PFBT_HCI_SNIFF_MODE;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned short ConnectionHandle;
} FBT_HCI_EXIT_SNIFF_MODE, *PFBT_HCI_EXIT_SNIFF_MODE;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned short ConnectionHandle;
unsigned short BeaconMaxInterval;
unsigned short BeaconMinInterval;
} FBT_HCI_PARK_MODE, *PFBT_HCI_PARK_MODE;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned short ConnectionHandle;
} FBT_HCI_EXIT_PARK_MODE, *PFBT_HCI_EXIT_PARK_MODE;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned short ConnectionHandle;
unsigned char Flags;
unsigned char ServiceType;
unsigned long TokenRate;
unsigned long PeakBandwidth;
unsigned long Latency;
unsigned long DelayVariation;
} FBT_HCI_QOS_SETUP, *PFBT_HCI_QOS_SETUP;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned short ConnectionHandle;
} FBT_HCI_ROLE_DISCOVERY, *PFBT_HCI_ROLE_DISCOVERY;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned char BD_ADDR[FBT_HCI_BDADDR_SIZE];
unsigned char Role;
} FBT_HCI_SWITCH_ROLE, *PFBT_HCI_SWITCH_ROLE;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned short ConnectionHandle;
} FBT_HCI_READ_LINK_POLICY_SETTINGS, *PFBT_HCI_READ_LINK_POLICY_SETTINGS;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned short ConnectionHandle;
unsigned short LinkPolicySettings;
} FBT_HCI_WRITE_LINK_POLICY_SETTINGS, *PFBT_HCI_WRITE_LINK_POLICY_SETTINGS;
// Host Controller and Baseband commands
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned char EventMask[8];
} FBT_HCI_SET_EVENT_MASK, *PFBT_HCI_SET_EVENT_MASK;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
} FBT_HCI_RESET, *PFBT_HCI_RESET;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned char FilterType;
unsigned char FilterConditionType;
unsigned char Condition[7];
} FBT_HCI_SET_EVENT_FILTER, *PFBT_HCI_SET_EVENT_FILTER;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned short ConnectionHandle;
} FBT_HCI_FLUSH, *PFBT_HCI_FLUSH;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
} FBT_HCI_READ_PIN_TYPE, *PFBT_HCI_READ_PIN_TYPE;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned char PinType;
} FBT_HCI_WRITE_PIN_TYPE, *PFBT_HCI_WRITE_PIN_TYPE;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
} FBT_HCI_CREATE_NEW_UNIT_KEY, *PFBT_HCI_CREATE_NEW_UNIT_KEY;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned char BD_ADDR[FBT_HCI_BDADDR_SIZE];
unsigned char ReadAllFlag;
} FBT_HCI_READ_STORED_LINK_KEY, *PFBT_HCI_READ_STORED_LINK_KEY;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned char NumKeysToWrite;
unsigned char BD_ADDR[FBT_HCI_VARIABLE_SIZE][FBT_HCI_BDADDR_SIZE];
unsigned char LinkKey[FBT_HCI_VARIABLE_SIZE][FBT_HCI_LINK_KEY_SIZE];
} FBT_HCI_WRITE_STORED_LINK_KEY, *PFBT_HCI_WRITE_STORED_LINK_KEY;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned char BD_ADDR[FBT_HCI_BDADDR_SIZE];
unsigned char DeleteAllFlag;
} FBT_HCI_DELETE_STORED_LINK_KEY, *PFBT_HCI_DELETE_STORED_LINK_KEY;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned char Name[FBT_HCI_NAME_SIZE];
} FBT_HCI_CHANGE_LOCAL_NAME, *PFBT_HCI_CHANGE_LOCAL_NAME;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
} FBT_HCI_READ_LOCAL_NAME, *PFBT_HCI_READ_LOCAL_NAME;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
} FBT_HCI_READ_CONNECTION_ACCEPT_TIMEOUT, *PFBT_HCI_READ_CONNECTION_ACCEPT_TIMEOUT;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned short ConnAcceptTimeout;
} FBT_HCI_WRITE_CONNECTION_ACCEPT_TIMEOUT, *PFBT_HCI_WRITE_CONNECTION_ACCEPT_TIMEOUT;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
} FBT_HCI_READ_PAGE_TIMEOUT, *PFBT_HCI_READ_PAGE_TIMEOUT;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned short PageTimeout;
} FBT_HCI_WRITE_PAGE_TIMEOUT, *PFBT_HCI_WRITE_PAGE_TIMEOUT;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
} FBT_HCI_READ_SCAN_ENABLE, *PFBT_HCI_READ_SCAN_ENABLE;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned char ScanEnable;
} FBT_HCI_WRITE_SCAN_ENABLE, *PFBT_HCI_WRITE_SCAN_ENABLE;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
} FBT_HCI_READ_PAGE_SCAN_ACTIVITY, *PFBT_HCI_READ_PAGE_SCAN_ACTIVITY;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned short PageScanInterval;
unsigned short PageScanWindow;
} FBT_HCI_WRITE_PAGE_SCAN_ACTIVITY, *PFBT_HCI_WRITE_PAGE_SCAN_ACTIVITY;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
} FBT_HCI_READ_INQUIRY_SCAN_ACTIVITY, *PFBT_HCI_READ_INQUIRY_SCAN_ACTIVITY;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned short InquiryScanInterval;
unsigned short InquiryScanWindow;
} FBT_HCI_WRITE_INQUIRY_SCAN_ACTIVITY, *PFBT_HCI_WRITE_INQUIRY_SCAN_ACTIVITY;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
} FBT_HCI_READ_AUTHENTICATION_ENABLE, *PFBT_HCI_READ_AUTHENTICATION_ENABLE;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned char AuthenticationEnable;
} FBT_HCI_WRITE_AUTHENTICATION_ENABLE, *PFBT_HCI_WRITE_AUTHENTICATION_ENABLE;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
} FBT_HCI_READ_ENCRYPTION_MODE, *PFBT_HCI_READ_ENCRYPTION_MODE;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned char EncryptionMode;
} FBT_HCI_WRITE_ENCRYPTION_MODE, *PFBT_HCI_WRITE_ENCRYPTION_MODE;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
} FBT_HCI_READ_CLASS_OF_DEVICE, *PFBT_HCI_READ_CLASS_OF_DEVICE;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned char ClassOfDevice[FBT_HCI_DEVICE_CLASS_SIZE];
} FBT_HCI_WRITE_CLASS_OF_DEVICE, *PFBT_HCI_WRITE_CLASS_OF_DEVICE;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
} FBT_HCI_READ_VOICE_SETTING, *PFBT_HCI_READ_VOICE_SETTING;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned short VoiceSetting;
} FBT_HCI_WRITE_VOICE_SETTING, *PFBT_HCI_WRITE_VOICE_SETTING;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned short ConnectionHandle;
} FBT_HCI_READ_AUTOMATIC_FLUSH_TIMEOUT, *PFBT_HCI_READ_AUTOMATIC_FLUSH_TIMEOUT;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned short ConnectionHandle;
unsigned short FlushTimeout;
} FBT_HCI_WRITE_AUTOMATIC_FLUSH_TIMEOUT, *PFBT_HCI_WRITE_AUTOMATIC_FLUSH_TIMEOUT;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
} FBT_HCI_READ_NUM_BROADCAST_RETRANSMISSIONS, *PFBT_HCI_READ_NUM_BROADCAST_RETRANSMISSIONS;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned char NumBroadcastRetran;
} FBT_HCI_WRITE_NUM_BROADCAST_RETRANSMISSIONS, *PFBT_HCI_WRITE_NUM_BROADCAST_RETRANSMISSIONS;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
} FBT_HCI_READ_HOLD_MODE_ACTIVITY, *PFBT_HCI_READ_HOLD_MODE_ACTIVITY;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned char HoldModeActivity;
} FBT_HCI_WRITE_HOLD_MODE_ACTIVITY, *PFBT_HCI_WRITE_HOLD_MODE_ACTIVITY;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned short ConnectionHandle;
unsigned char Type;
} FBT_HCI_READ_TRANSMIT_POWER_LEVEL, *PFBT_HCI_READ_TRANSMIT_POWER_LEVEL;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
} FBT_HCI_READ_SCO_FLOW_CONTROL_ENABLE, *PFBT_HCI_READ_SCO_FLOW_CONTROL_ENABLE;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned char ScoFlowControlEnable;
} FBT_HCI_WRITE_SCO_FLOW_CONTROL_ENABLE, *PFBT_HCI_WRITE_SCO_FLOW_CONTROL_ENABLE;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned char FlowControlEnable;
} FBT_HCI_SET_HOST_CONTROLLER_TO_HOST_FLOW_CONTROL, *PFBT_HCI_SET_HOST_CONTROLLER_TO_HOST_FLOW_CONTROL;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned short AclDataPacketLength;
unsigned char ScoDataPacketLength;
unsigned short TotalNumAclDataPackets;
unsigned short TotalNumScoDataPackets;
} FBT_HCI_HOST_BUFFER_SIZE, *PFBT_HCI_HOST_BUFFER_SIZE;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned char NumberOfHandles;
unsigned short ConnectionHandle[FBT_HCI_VARIABLE_SIZE];
unsigned short HostNumOfCompletedPackets[FBT_HCI_VARIABLE_SIZE];
} FBT_HCI_HOST_NUMBER_OF_COMPLETED_PACKETS, *PFBT_HCI_HOST_NUMBER_OF_COMPLETED_PACKETS;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned short ConnectionHandle;
} FBT_HCI_READ_LINK_SUPERVISION_TIMEOUT, *PFBT_HCI_READ_LINK_SUPERVISION_TIMEOUT;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned short ConnectionHandle;
unsigned short LinkSupervisionTimeout;
} FBT_HCI_WRITE_LINK_SUPERVISION_TIMEOUT, *PFBT_HCI_WRITE_LINK_SUPERVISION_TIMEOUT;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
} FBT_HCI_READ_NUMBER_OF_SUPPORTED_IAC, *PFBT_HCI_READ_NUMBER_OF_SUPPORTED_IAC;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
} FBT_HCI_READ_CURRENT_IAC_LAP, *PFBT_HCI_READ_CURRENT_IAC_LAP;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned char NumCurrentIac;
unsigned char IacLap[FBT_HCI_VARIABLE_SIZE][FBT_HCI_LAP_SIZE];
} FBT_HCI_WRITE_CURRENT_IAC_LAP, *PFBT_HCI_WRITE_CURRENT_IAC_LAP;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
} FBT_HCI_READ_PAGE_SCAN_PERIOD_MODE, *PFBT_HCI_READ_PAGE_SCAN_PERIOD_MODE;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned char PageScanPeriodMode;
} FBT_HCI_WRITE_PAGE_SCAN_PERIOD_MODE, *PFBT_HCI_WRITE_PAGE_SCAN_PERIOD_MODE;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
} FBT_HCI_READ_PAGE_SCAN_MODE, *PFBT_HCI_READ_PAGE_SCAN_MODE;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned char PageScanMode;
} FBT_HCI_WRITE_PAGE_SCAN_MODE, *PFBT_HCI_WRITE_PAGE_SCAN_MODE;
// Informational parameters
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
} FBT_HCI_READ_LOCAL_VERSION_INFORMATION, *PFBT_HCI_READ_LOCAL_VERSION_INFORMATION;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
} FBT_HCI_READ_LOCAL_SUPPORTED_FEATURES, *PFBT_HCI_READ_LOCAL_SUPPORTED_FEATURES;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
} FBT_HCI_READ_BUFFER_SIZE, *PFBT_HCI_READ_BUFFER_SIZE;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
} FBT_HCI_READ_COUNTRY_CODE, *PFBT_HCI_READ_COUNTRY_CODE;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
} FBT_HCI_READ_BD_ADDR, *PFBT_HCI_READ_BD_ADDR;
// Status parameter commands
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned short ConnectionHandle;
} FBT_HCI_READ_FAILED_CONTACT_COUNTER, *PFBT_HCI_READ_FAILED_CONTACT_COUNTER;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned short ConnectionHandle;
} FBT_HCI_RESET_FAILED_CONTACT_COUNTER, *PFBT_HCI_RESET_FAILED_CONTACT_COUNTER;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned short ConnectionHandle;
} FBT_HCI_GET_LINK_QUALITY, *PFBT_HCI_GET_LINK_QUALITY;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned short ConnectionHandle;
} FBT_HCI_READ_RSSI, *PFBT_HCI_READ_RSSI;
// Testing commands
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
} FBT_HCI_READ_LOOPBACK_MODE, *PFBT_HCI_READ_LOOPBACK_MODE;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
unsigned char LoopbackMode;
} FBT_HCI_WRITE_LOOPBACK_MODE, *PFBT_HCI_WRITE_LOOPBACK_MODE;
typedef struct
{
FBT_HCI_CMD_HEADER CommandHeader;
} FBT_HCI_ENABLE_DEVICE_UNDER_TEST_MODE, *PFBT_HCI_ENABLE_DEVICE_UNDER_TEST_MODE;
#pragma pack(pop)
#endif // _FBT_HCI_CMD_STRUCTS_H

View file

@ -0,0 +1,153 @@
#ifndef _FBT_HCI_COMMANDS_H
#define _FBT_HCI_COMMANDS_H
#include "fbtHciOpCodes.h"
#include "fbtHciSizes.h"
#include "fbtHciCmdStructs.h"
#include "fbtHciParms.h"
// Utility macro to build a command CMD from ints constituent OCF/OGF
#define FBT_HCI_CMD(nOCF, nOGF) ((unsigned short) nOCF + (unsigned short)(nOGF << 10))
// HCI Command CMDs
// Link control CMDs
#define FBT_HCI_CMD_INQUIRY FBT_HCI_CMD(FBT_HCI_OCF_INQUIRY, FBT_HCI_OGF_LINK_CONTROL)
#define FBT_HCI_CMD_INQUIRY_CANCEL FBT_HCI_CMD(FBT_HCI_OCF_INQUIRY_CANCEL, FBT_HCI_OGF_LINK_CONTROL)
#define FBT_HCI_CMD_PERIODIC_INQUIRY_MODE FBT_HCI_CMD(FBT_HCI_OCF_PERIODIC_INQUIRY_MODE, FBT_HCI_OGF_LINK_CONTROL)
#define FBT_HCI_CMD_EXIT_PERIODIC_INQUIRY_MODE FBT_HCI_CMD(FBT_HCI_OCF_EXIT_PERIODIC_INQUIRY_MODE, FBT_HCI_OGF_LINK_CONTROL)
#define FBT_HCI_CMD_CREATE_CONNECTION FBT_HCI_CMD(FBT_HCI_OCF_CREATE_CONNECTION, FBT_HCI_OGF_LINK_CONTROL)
#define FBT_HCI_CMD_DISCONNECT FBT_HCI_CMD(FBT_HCI_OCF_DISCONNECT, FBT_HCI_OGF_LINK_CONTROL)
#define FBT_HCI_CMD_ADD_SCO_CONNECTION FBT_HCI_CMD(FBT_HCI_OCF_ADD_SCO_CONNECTION, FBT_HCI_OGF_LINK_CONTROL)
#define FBT_HCI_CMD_ACCEPT_CONNECTION_REQUEST FBT_HCI_CMD(FBT_HCI_OCF_ACCEPT_CONNECTION_REQUEST, FBT_HCI_OGF_LINK_CONTROL)
#define FBT_HCI_CMD_REJECT_CONNECTION_REQUEST FBT_HCI_CMD(FBT_HCI_OCF_REJECT_CONNECTION_REQUEST, FBT_HCI_OGF_LINK_CONTROL)
#define FBT_HCI_CMD_LINK_KEY_REQUEST_REPLY FBT_HCI_CMD(FBT_HCI_OCF_LINK_KEY_REQUEST_REPLY, FBT_HCI_OGF_LINK_CONTROL)
#define FBT_HCI_CMD_LINK_KEY_REQUEST_NEGATIVE_REPLY FBT_HCI_CMD(FBT_HCI_OCF_LINK_KEY_REQUEST_NEGATIVE_REPLY, FBT_HCI_OGF_LINK_CONTROL)
#define FBT_HCI_CMD_PIN_CODE_REQUEST_REPLY FBT_HCI_CMD(FBT_HCI_OCF_PIN_CODE_REQUEST_REPLY, FBT_HCI_OGF_LINK_CONTROL)
#define FBT_HCI_CMD_PIN_CODE_REQUEST_NEGATIVE_REPLY FBT_HCI_CMD(FBT_HCI_OCF_PIN_CODE_REQUEST_NEGATIVE_REPLY, FBT_HCI_OGF_LINK_CONTROL)
#define FBT_HCI_CMD_CHANGE_CONNECTION_PACKET_TYPE FBT_HCI_CMD(FBT_HCI_OCF_CHANGE_CONNECTION_PACKET_TYPE, FBT_HCI_OGF_LINK_CONTROL)
#define FBT_HCI_CMD_AUTHENTICATION_REQUESTED FBT_HCI_CMD(FBT_HCI_OCF_AUTHENTICATION_REQUESTED, FBT_HCI_OGF_LINK_CONTROL)
#define FBT_HCI_CMD_SET_CONNECTION_ENCRYPTION FBT_HCI_CMD(FBT_HCI_OCF_SET_CONNECTION_ENCRYPTION, FBT_HCI_OGF_LINK_CONTROL)
#define FBT_HCI_CMD_CHANGE_CONNECTION_LINK_KEY FBT_HCI_CMD(FBT_HCI_OCF_CHANGE_CONNECTION_LINK_KEY, FBT_HCI_OGF_LINK_CONTROL)
#define FBT_HCI_CMD_MASTER_LINK_KEY FBT_HCI_CMD(FBT_HCI_OCF_MASTER_LINK_KEY, FBT_HCI_OGF_LINK_CONTROL)
#define FBT_HCI_CMD_REMOTE_NAME_REQUEST FBT_HCI_CMD(FBT_HCI_OCF_REMOTE_NAME_REQUEST, FBT_HCI_OGF_LINK_CONTROL)
#define FBT_HCI_CMD_READ_REMOTE_SUPPORTED_FEATURES FBT_HCI_CMD(FBT_HCI_OCF_READ_REMOTE_SUPPORTED_FEATURES, FBT_HCI_OGF_LINK_CONTROL)
#define FBT_HCI_CMD_READ_REMOTE_VERSION_INFORMATION FBT_HCI_CMD(FBT_HCI_OCF_READ_REMOTE_VERSION_INFORMATION, FBT_HCI_OGF_LINK_CONTROL)
#define FBT_HCI_CMD_READ_CLOCK_OFFSET FBT_HCI_CMD(FBT_HCI_OCF_READ_CLOCK_OFFSET, FBT_HCI_OGF_LINK_CONTROL)
// Link policy CMDs
#define FBT_HCI_CMD_HOLD_MODE FBT_HCI_CMD(FBT_HCI_OCF_HOLD_MODE, FBT_HCI_OGF_LINK_POLICY)
#define FBT_HCI_CMD_SNIFF_MODE FBT_HCI_CMD(FBT_HCI_OCF_SNIFF_MODE, FBT_HCI_OGF_LINK_POLICY)
#define FBT_HCI_CMD_EXIT_SNIFF_MODE FBT_HCI_CMD(FBT_HCI_OCF_EXIT_SNIFF_MODE, FBT_HCI_OGF_LINK_POLICY)
#define FBT_HCI_CMD_PARK_MODE FBT_HCI_CMD(FBT_HCI_OCF_PARK_MODE, FBT_HCI_OGF_LINK_POLICY)
#define FBT_HCI_CMD_EXIT_PARK_MODE FBT_HCI_CMD(FBT_HCI_OCF_EXIT_PARK_MODE, FBT_HCI_OGF_LINK_POLICY)
#define FBT_HCI_CMD_QOS_SETUP FBT_HCI_CMD(FBT_HCI_OCF_QOS_SETUP, FBT_HCI_OGF_LINK_POLICY)
#define FBT_HCI_CMD_ROLE_DISCOVERY FBT_HCI_CMD(FBT_HCI_OCF_ROLE_DISCOVERY, FBT_HCI_OGF_LINK_POLICY)
#define FBT_HCI_CMD_SWITCH_ROLE FBT_HCI_CMD(FBT_HCI_OCF_SWITCH_ROLE, FBT_HCI_OGF_LINK_POLICY)
#define FBT_HCI_CMD_READ_LINK_POLICY_SETTINGS FBT_HCI_CMD(FBT_HCI_OCF_READ_LINK_POLICY_SETTINGS, FBT_HCI_OGF_LINK_POLICY)
#define FBT_HCI_CMD_WRITE_LINK_POLICY_SETTINGS FBT_HCI_CMD(FBT_HCI_OCF_WRITE_LINK_POLICY_SETTINGS, FBT_HCI_OGF_LINK_POLICY)
// Host controller & baseband command CMDs
#define FBT_HCI_CMD_SET_EVENT_MASK FBT_HCI_CMD(FBT_HCI_OCF_SET_EVENT_MASK, FBT_HCI_OGF_CONTROL_BASEBAND)
#define FBT_HCI_CMD_RESET FBT_HCI_CMD(FBT_HCI_OCF_RESET, FBT_HCI_OGF_CONTROL_BASEBAND)
#define FBT_HCI_CMD_SET_EVENT_FILTER FBT_HCI_CMD(FBT_HCI_OCF_SET_EVENT_FILTER, FBT_HCI_OGF_CONTROL_BASEBAND)
#define FBT_HCI_CMD_FLUSH FBT_HCI_CMD(FBT_HCI_OCF_FLUSH, FBT_HCI_OGF_CONTROL_BASEBAND)
#define FBT_HCI_CMD_READ_PIN_TYPE FBT_HCI_CMD(FBT_HCI_OCF_READ_PIN_TYPE, FBT_HCI_OGF_CONTROL_BASEBAND)
#define FBT_HCI_CMD_WRITE_PIN_TYPE FBT_HCI_CMD(FBT_HCI_OCF_WRITE_PIN_TYPE, FBT_HCI_OGF_CONTROL_BASEBAND)
#define FBT_HCI_CMD_CREATE_NEW_UNIT_KEY FBT_HCI_CMD(FBT_HCI_OCF_CREATE_NEW_UNIT_KEY, FBT_HCI_OGF_CONTROL_BASEBAND)
#define FBT_HCI_CMD_READ_STORED_LINK_KEY FBT_HCI_CMD(FBT_HCI_OCF_READ_STORED_LINK_KEY, FBT_HCI_OGF_CONTROL_BASEBAND)
#define FBT_HCI_CMD_WRITE_STORED_LINK_KEY FBT_HCI_CMD(FBT_HCI_OCF_WRITE_STORED_LINK_KEY, FBT_HCI_OGF_CONTROL_BASEBAND)
#define FBT_HCI_CMD_DELETE_STORED_LINK_KEY FBT_HCI_CMD(FBT_HCI_OCF_DELETE_STORED_LINK_KEY, FBT_HCI_OGF_CONTROL_BASEBAND)
#define FBT_HCI_CMD_CHANGE_LOCAL_NAME FBT_HCI_CMD(FBT_HCI_OCF_CHANGE_LOCAL_NAME, FBT_HCI_OGF_CONTROL_BASEBAND)
#define FBT_HCI_CMD_READ_LOCAL_NAME FBT_HCI_CMD(FBT_HCI_OCF_READ_LOCAL_NAME, FBT_HCI_OGF_CONTROL_BASEBAND)
#define FBT_HCI_CMD_READ_CONNECTION_ACCEPT_TIMEOUT FBT_HCI_CMD(FBT_HCI_OCF_READ_CONNECTION_ACCEPT_TIMEOUT, FBT_HCI_OGF_CONTROL_BASEBAND)
#define FBT_HCI_CMD_WRITE_CONNECTION_ACCEPT_TIMEOUT FBT_HCI_CMD(FBT_HCI_OCF_WRITE_CONNECTION_ACCEPT_TIMEOUT, FBT_HCI_OGF_CONTROL_BASEBAND)
#define FBT_HCI_CMD_READ_PAGE_TIMEOUT FBT_HCI_CMD(FBT_HCI_OCF_READ_PAGE_TIMEOUT, FBT_HCI_OGF_CONTROL_BASEBAND)
#define FBT_HCI_CMD_WRITE_PAGE_TIMEOUT FBT_HCI_CMD(FBT_HCI_OCF_WRITE_PAGE_TIMEOUT, FBT_HCI_OGF_CONTROL_BASEBAND)
#define FBT_HCI_CMD_READ_SCAN_ENABLE FBT_HCI_CMD(FBT_HCI_OCF_READ_SCAN_ENABLE, FBT_HCI_OGF_CONTROL_BASEBAND)
#define FBT_HCI_CMD_WRITE_SCAN_ENABLE FBT_HCI_CMD(FBT_HCI_OCF_WRITE_SCAN_ENABLE, FBT_HCI_OGF_CONTROL_BASEBAND)
#define FBT_HCI_CMD_READ_PAGE_SCAN_ACTIVITY FBT_HCI_CMD(FBT_HCI_OCF_READ_PAGE_SCAN_ACTIVITY, FBT_HCI_OGF_CONTROL_BASEBAND)
#define FBT_HCI_CMD_WRITE_PAGE_SCAN_ACTIVITY FBT_HCI_CMD(FBT_HCI_OCF_WRITE_PAGE_SCAN_ACTIVITY, FBT_HCI_OGF_CONTROL_BASEBAND)
#define FBT_HCI_CMD_READ_INQUIRY_SCAN_ACTIVITY FBT_HCI_CMD(FBT_HCI_OCF_READ_INQUIRY_SCAN_ACTIVITY, FBT_HCI_OGF_CONTROL_BASEBAND)
#define FBT_HCI_CMD_WRITE_INQUIRY_SCAN_ACTIVITY FBT_HCI_CMD(FBT_HCI_OCF_WRITE_INQUIRY_SCAN_ACTIVITY, FBT_HCI_OGF_CONTROL_BASEBAND)
#define FBT_HCI_CMD_READ_AUTHENTICATION_ENABLE FBT_HCI_CMD(FBT_HCI_OCF_READ_AUTHENTICATION_ENABLE, FBT_HCI_OGF_CONTROL_BASEBAND)
#define FBT_HCI_CMD_WRITE_AUTHENTICATION_ENABLE FBT_HCI_CMD(FBT_HCI_OCF_WRITE_AUTHENTICATION_ENABLE, FBT_HCI_OGF_CONTROL_BASEBAND)
#define FBT_HCI_CMD_READ_ENCRYPTION_MODE FBT_HCI_CMD(FBT_HCI_OCF_READ_ENCRYPTION_MODE, FBT_HCI_OGF_CONTROL_BASEBAND)
#define FBT_HCI_CMD_WRITE_ENCRYPTION_MODE FBT_HCI_CMD(FBT_HCI_OCF_WRITE_ENCRYPTION_MODE, FBT_HCI_OGF_CONTROL_BASEBAND)
#define FBT_HCI_CMD_READ_CLASS_OF_DEVICE FBT_HCI_CMD(FBT_HCI_OCF_READ_CLASS_OF_DEVICE, FBT_HCI_OGF_CONTROL_BASEBAND)
#define FBT_HCI_CMD_WRITE_CLASS_OF_DEVICE FBT_HCI_CMD(FBT_HCI_OCF_WRITE_CLASS_OF_DEVICE, FBT_HCI_OGF_CONTROL_BASEBAND)
#define FBT_HCI_CMD_READ_VOICE_SETTING FBT_HCI_CMD(FBT_HCI_OCF_READ_VOICE_SETTING, FBT_HCI_OGF_CONTROL_BASEBAND)
#define FBT_HCI_CMD_WRITE_VOICE_SETTING FBT_HCI_CMD(FBT_HCI_OCF_WRITE_VOICE_SETTING, FBT_HCI_OGF_CONTROL_BASEBAND)
#define FBT_HCI_CMD_READ_AUTOMATIC_FLUSH_TIMEOUT FBT_HCI_CMD(FBT_HCI_OCF_READ_AUTOMATIC_FLUSH_TIMEOUT, FBT_HCI_OGF_CONTROL_BASEBAND)
#define FBT_HCI_CMD_WRITE_AUTOMATIC_FLUSH_TIMEOUT FBT_HCI_CMD(FBT_HCI_OCF_WRITE_AUTOMATIC_FLUSH_TIMEOUT, FBT_HCI_OGF_CONTROL_BASEBAND)
#define FBT_HCI_CMD_READ_NUM_BROADCAST_RETRANSMISSIONS FBT_HCI_CMD(FBT_HCI_OCF_READ_NUM_BROADCAST_RETRANSMISSIONS, FBT_HCI_OGF_CONTROL_BASEBAND)
#define FBT_HCI_CMD_WRITE_NUM_BROADCAST_RETRANSMISSIONS FBT_HCI_CMD(FBT_HCI_OCF_WRITE_NUM_BROADCAST_RETRANSMISSIONS, FBT_HCI_OGF_CONTROL_BASEBAND)
#define FBT_HCI_CMD_READ_HOLD_MODE_ACTIVITY FBT_HCI_CMD(FBT_HCI_OCF_READ_HOLD_MODE_ACTIVITY, FBT_HCI_OGF_CONTROL_BASEBAND)
#define FBT_HCI_CMD_WRITE_HOLD_MODE_ACTIVITY FBT_HCI_CMD(FBT_HCI_OCF_WRITE_HOLD_MODE_ACTIVITY, FBT_HCI_OGF_CONTROL_BASEBAND)
#define FBT_HCI_CMD_READ_TRANSMIT_POWER_LEVEL FBT_HCI_CMD(FBT_HCI_OCF_READ_TRANSMIT_POWER_LEVEL, FBT_HCI_OGF_CONTROL_BASEBAND)
#define FBT_HCI_CMD_READ_SCO_FLOW_CONTROL_ENABLE FBT_HCI_CMD(FBT_HCI_OCF_READ_SCO_FLOW_CONTROL_ENABLE, FBT_HCI_OGF_CONTROL_BASEBAND)
#define FBT_HCI_CMD_WRITE_SCO_FLOW_CONTROL_ENABLE FBT_HCI_CMD(FBT_HCI_OCF_WRITE_SCO_FLOW_CONTROL_ENABLE, FBT_HCI_OGF_CONTROL_BASEBAND)
#define FBT_HCI_CMD_SET_HOST_CONTROLLER_TO_HOST_FLOW_CONTROL FBT_HCI_CMD(FBT_HCI_OCF_SET_HOST_CONTROLLER_TO_HOST_FLOW_CONTROL, FBT_HCI_OGF_CONTROL_BASEBAND)
#define FBT_HCI_CMD_HOST_BUFFER_SIZE FBT_HCI_CMD(FBT_HCI_OCF_HOST_BUFFER_SIZE, FBT_HCI_OGF_CONTROL_BASEBAND)
#define FBT_HCI_CMD_HOST_NUMBER_OF_COMPLETED_PACKETS FBT_HCI_CMD(FBT_HCI_OCF_HOST_NUMBER_OF_COMPLETED_PACKETS, FBT_HCI_OGF_CONTROL_BASEBAND)
#define FBT_HCI_CMD_READ_LINK_SUPERVISION_TIMEOUT FBT_HCI_CMD(FBT_HCI_OCF_READ_LINK_SUPERVISION_TIMEOUT, FBT_HCI_OGF_CONTROL_BASEBAND)
#define FBT_HCI_CMD_WRITE_LINK_SUPERVISION_TIMEOUT FBT_HCI_CMD(FBT_HCI_OCF_WRITE_LINK_SUPERVISION_TIMEOUT, FBT_HCI_OGF_CONTROL_BASEBAND)
#define FBT_HCI_CMD_READ_NUMBER_OF_SUPPORTED_IAC FBT_HCI_CMD(FBT_HCI_OCF_READ_NUMBER_OF_SUPPORTED_IAC, FBT_HCI_OGF_CONTROL_BASEBAND)
#define FBT_HCI_CMD_READ_CURRENT_IAC_LAP FBT_HCI_CMD(FBT_HCI_OCF_READ_CURRENT_IAC_LAP, FBT_HCI_OGF_CONTROL_BASEBAND)
#define FBT_HCI_CMD_WRITE_CURRENT_IAC_LAP FBT_HCI_CMD(FBT_HCI_OCF_WRITE_CURRENT_IAC_LAP, FBT_HCI_OGF_CONTROL_BASEBAND)
#define FBT_HCI_CMD_READ_PAGE_SCAN_PERIOD_MODE FBT_HCI_CMD(FBT_HCI_OCF_READ_PAGE_SCAN_PERIOD_MODE, FBT_HCI_OGF_CONTROL_BASEBAND)
#define FBT_HCI_CMD_WRITE_PAGE_SCAN_PERIOD_MODE FBT_HCI_CMD(FBT_HCI_OCF_WRITE_PAGE_SCAN_PERIOD_MODE, FBT_HCI_OGF_CONTROL_BASEBAND)
#define FBT_HCI_CMD_READ_PAGE_SCAN_MODE FBT_HCI_CMD(FBT_HCI_OCF_READ_PAGE_SCAN_MODE, FBT_HCI_OGF_CONTROL_BASEBAND)
#define FBT_HCI_CMD_WRITE_PAGE_SCAN_MODE FBT_HCI_CMD(FBT_HCI_OCF_WRITE_PAGE_SCAN_MODE, FBT_HCI_OGF_CONTROL_BASEBAND)
// Informational parameters CMDs
#define FBT_HCI_CMD_READ_LOCAL_VERSION_INFORMATION FBT_HCI_CMD(FBT_HCI_OCF_READ_LOCAL_VERSION_INFORMATION, FBT_HCI_OGF_INFORMATIONAL_PARAMETERS)
#define FBT_HCI_CMD_LOCAL_SUPPPROTED_FEATURES FBT_HCI_CMD(FBT_HCI_OCF_LOCAL_SUPPPROTED_FEATURES, FBT_HCI_OGF_INFORMATIONAL_PARAMETERS)
#define FBT_HCI_CMD_READ_BUFFER_SIZE FBT_HCI_CMD(FBT_HCI_OCF_READ_BUFFER_SIZE, FBT_HCI_OGF_INFORMATIONAL_PARAMETERS)
#define FBT_HCI_CMD_READ_COUNTRY_CODE FBT_HCI_CMD(FBT_HCI_OCF_READ_COUNTRY_CODE, FBT_HCI_OGF_INFORMATIONAL_PARAMETERS)
#define FBT_HCI_CMD_READ_BD_ADDR FBT_HCI_CMD(FBT_HCI_OCF_READ_BD_ADDR, FBT_HCI_OGF_INFORMATIONAL_PARAMETERS)
// Status parameters CMDs
#define FBT_HCI_CMD_READ_FAILED_CONTACT_COUNTER FBT_HCI_CMD(FBT_HCI_OCF_READ_FAILED_CONTACT_COUNTER, FBT_HCI_OGF_STATUS_PARAMETERS)
#define FBT_HCI_CMD_RESET_FAILED_CONTACT_COUNTER FBT_HCI_CMD(FBT_HCI_OCF_RESET_FAILED_CONTACT_COUNTER, FBT_HCI_OGF_STATUS_PARAMETERS)
#define FBT_HCI_CMD_GET_LINK_QUALITY FBT_HCI_CMD(FBT_HCI_OCF_GET_LINK_QUALITY, FBT_HCI_OGF_STATUS_PARAMETERS)
#define FBT_HCI_CMD_READ_RSSI FBT_HCI_CMD(FBT_HCI_OCF_READ_RSSI, FBT_HCI_OGF_STATUS_PARAMETERS)
// Testing CMDs
#define FBT_HCI_CMD_READ_LOOPBACK_MODE FBT_HCI_CMD(FBT_HCI_OCF_READ_LOOPBACK_MODE, FBT_HCI_OGF_TESTING)
#define FBT_HCI_CMD_WRITE_LOOPBACK_MODE FBT_HCI_CMD(FBT_HCI_OCF_WRITE_LOOPBACK_MODE, FBT_HCI_OGF_TESTING)
#define FBT_HCI_CMD_ENABLE_DEVICE_UNDER_TEST_MODE FBT_HCI_CMD(FBT_HCI_OCF_ENABLE_DEVICE_UNDER_TEST_MODE, FBT_HCI_OGF_TESTING)
// Packet Boundry Flags (ORed into the upper 8 bits of the connection handle)
#define FBT_HCI_PACKET_BOUNDRY_FIRST 0x20
#define FBT_HCI_PACKET_BOUNDRY_NEXT 0x10
// HCI header types
#define FBT_HCI_SYNC_HCI_COMMAND_PACKET 0x01
#define FBT_HCI_SYNC_ACL_DATA_PACKET 0x02
#define FBT_HCI_SYNC_SCO_DATA_PACKET 0x03
#define FBT_HCI_SYNC_HCI_EVENT_PACKET 0x04
// Packet types for use in CreateConnection
#define FBT_HCI_PACKET_TYPE_DM1 0x0008 // 1 time slot, 1-18 bytes of data, FEC encoded
#define FBT_HCI_PACKET_TYPE_DH1 0x0010 // 1 time slot, 1-28 bytes of data, not FEC encoded
#define FBT_HCI_PACKET_TYPE_DM3 0x0400 // 3 time slots, 2-123 bytes of data, FEC encoded
#define FBT_HCI_PACKET_TYPE_DH3 0x0800 // 3 time slots, 2-185 bytes of data, not FEC encoded
#define FBT_HCI_PACKET_TYPE_DM5 0x4000 // 5 time slots, 2-226 bytes of data, FEC encoded
#define FBT_HCI_PACKET_TYPE_DH5 0x8000 // 3 time slots, 2-341 bytes of data, not FEC encoded
// LAP codes for use in Inquiry
#define FBT_HCI_LAP_GIAC 0x9E8B33
#define FBT_HCI_LAP_LIAC 0x9E8B00
// Link Types
#define FBT_HCI_LINK_TYPE_SCO 0x00
#define FBT_HCI_LINK_TYPE_ACL 0x01
// Maximum number of each type of handle
#define FBT_HCI_MAX_ALLOWED_ACL_HANDLES 32
#define FBT_HCI_MAX_ALLOWED_SCO_HANDLES 4
#endif // _FBT_HCI_COMMANDS_H

View file

@ -0,0 +1,8 @@
#ifndef _FBT_HCI_DEFS_H
#define _FBT_HCI_DEFS_H
#include "fbtHciCmds.h"
#include "fbtHciEvents.h"
#include "fbtHciErrors.h"
#endif // _FBT_HCI_DEFS_H

View file

@ -0,0 +1,58 @@
#ifndef _FBT_HCI_ERROR_H
#define _FBT_HCI_ERROR_H
#define FBT_HCI_ERROR_SUCCESS 0x00
#define FBT_HCI_UNKNOWN_HCI_COMMAND 0x01
#define FBT_HCI_UNKNOWN_CONNECTION_IDENTIFIER 0x02
#define FBT_HCI_HARDWARE_FAILURE 0x03
#define FBT_HCI_PAGE_TIMEOUT 0x04
#define FBT_HCI_AUTHENTICATION_FAILURE 0x05
#define FBT_HCI_PIN_MISSING 0x06
#define FBT_HCI_MEMORY_CAPACITY_EXCEEDED 0x07
#define FBT_HCI_CONNECTION_TIMEOUT 0x08
#define FBT_HCI_CONNECTION_LIMIT EXCEEDED 0x09
#define FBT_HCI_SYNCHRONOUS_CONNECTION_LIMIT_TO_A_DEVICE EXCEEDED 0x0a
#define FBT_HCI_ACL_CONNECTION_ALREADY_EXISTS 0x0b
#define FBT_HCI_COMMAND_DISALLOWED 0x0c
#define FBT_HCI_CONNECTION_REJECTED_DUE_TO_LIMITED RESOURCES 0x0d
#define FBT_HCI_CONNECTION_REJECTED_DUE_TO_SECURITY REASONS 0x0e
#define FBT_HCI_CONNECTION_REJECTED_DUE_TO_UNACCEPTABLE BD_ADDR 0x0f
#define FBT_HCI_CONNECTION_ACCEPT_TIMEOUT_EXCEEDED 0x10
#define FBT_HCI_UNSUPPORTED_FEATURE_OR_PARAMETER VALUE 0x11
#define FBT_HCI_INVALID_HCI_COMMAND_PARAMETERS 0x12
#define FBT_HCI_REMOTE_USER_TERMINATED_CONNECTION 0x13
#define FBT_HCI_REMOTE_DEVICE_TERMINATED_CONNECTION_DUE_TO_LOW_RESOURCES 0x14
#define FBT_HCI_REMOTE_DEVICE_TERMINATED_CONNECTION_DUE_TO_POWER OFF 0x15
#define FBT_HCI_CONNECTION_TERMINATED_BY_LOCAL_HOST 0x16
#define FBT_HCI_REPEATED_ATTEMPTS 0x17
#define FBT_HCI_PAIRING_NOT ALLOWED 0x18
#define FBT_HCI_UNKNOWN_LMP_PDU 0x19
#define FBT_HCI_UNSUPPORTED_REMOTE_FEATURE 0x1a
#define FBT_HCI_SCO_OFFSET_REJECTED 0x1b
#define FBT_HCI_SCO_INTERVAL_REJECTED 0x1c
#define FBT_HCI_SCO_AIR_MODE_REJECTED 0x1d
#define FBT_HCI_INVALID_LMP_PARAMETERS 0x1e
#define FBT_HCI_UNSPECIFIED_ERROR 0x1f
#define FBT_HCI_UNSUPPORTED_LMP_PARAMETER_VALUE 0x20
#define FBT_HCI_ROLE_CHANGE_NOT_ALLOWED 0x21
#define FBT_HCI_LMP_RESPONSE_TIMEOUT 0x22
#define FBT_HCI_LMP_ERROR_TRANSACTION_COLLISION 0x23
#define FBT_HCI_LMP_PDU_NOT_ALLOWED 0x24
#define FBT_HCI_ENCRYPTION_MODE_NOT_ACCEPTABLE 0x25
#define FBT_HCI_LINK_KEY_CAN_NOT_BE_CHANGED 0x26
#define FBT_HCI_REQUESTED_QOS_NOT_SUPPORTED 0x27
#define FBT_HCI_INSTANT_PASSED 0x28
#define FBT_HCI_PAIRING_WITH_UNIT_KEY_NOT_SUPPORTED 0x29
#define FBT_HCI_DIFFERENT_TRANSACTION_COLLISION 0x2a
#define FBT_HCI_QOS_UNACCEPTABLE PARAMETER 0x2c
#define FBT_HCI_QOS_REJECTED 0x2d
#define FBT_HCI_CHANNEL_CLASSIFICATION_NOT_SUPPORTED 0x2e
#define FBT_HCI_INSUFFICIENT_SECURITY 0x2f
#define FBT_HCI_PARAMETER_OUT_OF_MANDATORY_RANGE 0x30
#define FBT_HCI_ROLE_SWITCH_PENDING 0x32
#define FBT_HCI_RESERVED_SLOT_VIOLATION 0x34
#define FBT_HCI_ROLE_SWITCH_FAILED 0x35
#define FBT_HCI_SUCCESS(x) (x==FBT_HCI_ERROR_SUCCESS)
#endif // _FBT_HCI_ERROR_H

View file

@ -0,0 +1,319 @@
#ifndef _FBT_HCI_EVENT_STRUCTS_H
#define _FBT_HCI_EVENT_STRUCTS_H
// Pack structures to single unsigned char boundries
#pragma pack(push, 1)
typedef struct
{
unsigned char EventCode;
unsigned char ParameterLength;
} FBT_HCI_EVENT_HEADER, *PFBT_HCI_EVENT_HEADER;
typedef struct
{
FBT_HCI_EVENT_HEADER EventHeader;
unsigned char Status;
unsigned char NumResponses;
} FBT_HCI_INQUIRY_COMPLETE, *PFBT_HCI_INQUIRY_COMPLETE;
typedef struct
{
FBT_HCI_EVENT_HEADER EventHeader;
unsigned char NumResponses;
unsigned char BD_ADDR[FBT_HCI_VARIABLE_SIZE][FBT_HCI_BDADDR_SIZE];
unsigned char PageScanRepetitionMode[FBT_HCI_VARIABLE_SIZE];
unsigned char PageScanPeriodMode[FBT_HCI_VARIABLE_SIZE];
unsigned char PageScanMode[FBT_HCI_VARIABLE_SIZE];
unsigned char ClassOfDevice[FBT_HCI_VARIABLE_SIZE][FBT_HCI_DEVICE_CLASS_SIZE];
unsigned short ClockOffset[FBT_HCI_VARIABLE_SIZE];
} FBT_HCI_INQUIRY_RESULT, *PFBT_HCI_INQUIRY_RESULT;
typedef struct
{
FBT_HCI_EVENT_HEADER EventHeader;
unsigned char Status;
unsigned short ConnectionHandle;
unsigned char BD_ADDR[FBT_HCI_BDADDR_SIZE];
unsigned char LinkType;
unsigned char EncryptionMode;
} FBT_HCI_CONNECTION_COMPLETE, *PFBT_HCI_CONNECTION_COMPLETE;
typedef struct
{
FBT_HCI_EVENT_HEADER EventHeader;
unsigned char BD_ADDR[FBT_HCI_BDADDR_SIZE];
unsigned long ClassOfDevice[FBT_HCI_DEVICE_CLASS_SIZE];
unsigned char LinkType;
} FBT_HCI_CONNECTION_REQUEST, *PFBT_HCI_CONNECTION_REQUEST;
typedef struct
{
FBT_HCI_EVENT_HEADER EventHeader;
unsigned char Status;
unsigned short ConnectionHandle;
unsigned char Reason;
} FBT_HCI_DISCONNECTION_COMPLETE, *PFBT_HCI_DISCONNECTION_COMPLETE;
typedef struct
{
FBT_HCI_EVENT_HEADER EventHeader;
unsigned char Status;
unsigned short ConnectionHandle;
} FBT_HCI_AUTHENTICATION_COMPLETE, *PFBT_HCI_AUTHENTICATION_COMPLETE;
typedef struct
{
FBT_HCI_EVENT_HEADER EventHeader;
unsigned char Status;
unsigned char BD_ADDR[FBT_HCI_BDADDR_SIZE];
unsigned char RemoteName[FBT_HCI_NAME_SIZE];
} FBT_HCI_REMOTE_NAME_REQUEST_COMPLETE, *PFBT_HCI_REMOTE_NAME_REQUEST_COMPLETE;
typedef struct
{
FBT_HCI_EVENT_HEADER EventHeader;
unsigned char Status;
unsigned short ConnectionHandle;
unsigned char EncryptionEnable;
} FBT_HCI_ENCRYPTION_CHANGE, *PFBT_HCI_ENCRYPTION_CHANGE;
typedef struct
{
FBT_HCI_EVENT_HEADER EventHeader;
unsigned char Status;
unsigned short ConnectionHandle;
} FBT_HCI_CHANGE_CONNECTION_LINK_KEY_COMPLETE, *PFBT_HCI_CHANGE_CONNECTION_LINK_KEY_COMPLETE;
typedef struct
{
FBT_HCI_EVENT_HEADER EventHeader;
unsigned char Status;
unsigned short ConnectionHandle;
unsigned char KeyFlag;
} FBT_HCI_MASTER_LINK_KEY_COMPLETE, *PFBT_HCI_MASTER_LINK_KEY_COMPLETE;
typedef struct
{
FBT_HCI_EVENT_HEADER EventHeader;
unsigned char Status;
unsigned short ConnectionHandle;
unsigned char LmpFeatures[8];
} FBT_HCI_READ_REMOTE_SUPPORTED_FEATURES_COMPLETE, *PFBT_HCI_READ_REMOTE_SUPPORTED_FEATURES_COMPLETE;
typedef struct
{
FBT_HCI_EVENT_HEADER EventHeader;
unsigned char Status;
unsigned short ConnectionHandle;
unsigned char LmpVersion;
unsigned short ManufacturerName;
unsigned short LmpSubversion;
} FBT_HCI_READ_REMOTE_VERSION_INFORMATION_COMPLETE, *PFBT_HCI_READ_REMOTE_VERSION_INFORMATION_COMPLETE;
typedef struct
{
FBT_HCI_EVENT_HEADER EventHeader;
unsigned char Status;
unsigned short ConnectionHandle;
unsigned char Flags;
unsigned char ServiceType;
unsigned long TokenRate;
unsigned long PeakBandwidth;
unsigned long Latency;
unsigned long DelayVariation;
} FBT_HCI_QOS_SETUP_COMPLETE, *PFBT_HCI_QOS_SETUP_COMPLETE;
typedef struct
{
FBT_HCI_EVENT_HEADER EventHeader;
unsigned char NumHCICommandPackets;
unsigned short OpCode;
unsigned char Parameters[FBT_HCI_VARIABLE_SIZE];
} FBT_HCI_COMMAND_COMPLETE, *PFBT_HCI_COMMAND_COMPLETE;
typedef struct
{
FBT_HCI_EVENT_HEADER EventHeader;
unsigned char Status;
unsigned char NumHCICommandPackets;
unsigned short OpCode;
} FBT_HCI_COMMAND_STATUS, *PFBT_HCI_COMMAND_STATUS;
typedef struct
{
FBT_HCI_EVENT_HEADER EventHeader;
unsigned char HardwareCode;
} FBT_HCI_HARDWARE_ERROR, *PFBT_HCI_HARDWARE_ERROR;
typedef struct
{
FBT_HCI_EVENT_HEADER EventHeader;
unsigned short ConnectionHandle;
} FBT_HCI_FLUSH_OCCURRED, *PFBT_HCI_FLUSH_OCCURRED;
typedef struct
{
FBT_HCI_EVENT_HEADER EventHeader;
unsigned char Status;
unsigned char BD_ADDR[FBT_HCI_BDADDR_SIZE];
unsigned char NewRole;
} FBT_HCI_ROLE_CHANGE, *PFBT_HCI_ROLE_CHANGE;
typedef struct
{
FBT_HCI_EVENT_HEADER EventHeader;
unsigned char NumberOfHandles;
unsigned short ConnectionHandle[FBT_HCI_VARIABLE_SIZE];
unsigned short NumberOfCompletedPackets[FBT_HCI_VARIABLE_SIZE];
} FBT_HCI_NUMBER_OF_COMPLETED_PACKETS, *PFBT_HCI_NUMBER_OF_COMPLETED_PACKETS;
typedef struct
{
FBT_HCI_EVENT_HEADER EventHeader;
unsigned char Status;
unsigned short ConnectionHandle;
unsigned char CurrentMode;
unsigned short Interval;
} FBT_HCI_MODE_CHANGE, *PFBT_HCI_MODE_CHANGE;
typedef struct
{
FBT_HCI_EVENT_HEADER EventHeader;
unsigned char NumKeys;
unsigned char BD_ADDR[FBT_HCI_VARIABLE_SIZE][FBT_HCI_BDADDR_SIZE];
unsigned char LinkKey[FBT_HCI_VARIABLE_SIZE][FBT_HCI_LINK_KEY_SIZE];
} FBT_HCI_RETURN_LINK_KEYS, *PFBT_HCI_RETURN_LINK_KEYS;
typedef struct
{
FBT_HCI_EVENT_HEADER EventHeader;
unsigned char BD_ADDR[FBT_HCI_BDADDR_SIZE];
} FBT_HCI_PIN_CODE_REQUEST, *PFBT_HCI_PIN_CODE_REQUEST;
typedef struct
{
FBT_HCI_EVENT_HEADER EventHeader;
unsigned char BD_ADDR[FBT_HCI_BDADDR_SIZE];
} FBT_HCI_LINK_KEY_REQUEST, *PFBT_HCI_LINK_KEY_REQUEST;
typedef struct
{
FBT_HCI_EVENT_HEADER EventHeader;
unsigned char BD_ADDR[FBT_HCI_BDADDR_SIZE];
unsigned char LinkKey[FBT_HCI_LINK_KEY_SIZE];
} FBT_HCI_LINK_KEY_NOTIFICATION, *PFBT_HCI_LINK_KEY_NOTIFICATION;
typedef struct
{
FBT_HCI_EVENT_HEADER EventHeader;
unsigned char HCICommandPacket[FBT_HCI_CMD_MAX_SIZE];
} FBT_HCI_LOOPBACK_COMMAND, *PFBT_HCI_LOOPBACK_COMMAND;
typedef struct
{
FBT_HCI_EVENT_HEADER EventHeader;
unsigned char LinkType;
} FBT_HCI_DATA_BUFFER_OVERFLOW, *PFBT_HCI_DATA_BUFFER_OVERFLOW;
typedef struct
{
FBT_HCI_EVENT_HEADER EventHeader;
unsigned short ConnectionHandle;
unsigned char LmpMaxSlots;
} FBT_HCI_MAX_SLOTS_CHANGE, *PFBT_HCI_MAX_SLOTS_CHANGE;
typedef struct
{
FBT_HCI_EVENT_HEADER EventHeader;
unsigned char Status;
unsigned short ConnectionHandle;
unsigned short ClockOffset;
} FBT_HCI_READ_CLOCK_OFFSET_COMPLETE, *PFBT_HCI_READ_CLOCK_OFFSET_COMPLETE;
typedef struct
{
FBT_HCI_EVENT_HEADER EventHeader;
unsigned char Status;
unsigned short ConnectionHandle;
unsigned short PacketType;
} FBT_HCI_CONNECTION_PACKET_TYPE_CHANGED, *PFBT_HCI_CONNECTION_PACKET_TYPE_CHANGED;
typedef struct
{
FBT_HCI_EVENT_HEADER EventHeader;
unsigned short ConnectionHandle;
} FBT_HCI_QOS_VIOLATION, *PFBT_HCI_QOS_VIOLATION;
typedef struct
{
FBT_HCI_EVENT_HEADER EventHeader;
unsigned char BD_ADDR[FBT_HCI_BDADDR_SIZE];
unsigned char PageScanMode;
} FBT_HCI_PAGE_SCAN_MODE_CHANGE, *PFBT_HCI_PAGE_SCAN_MODE_CHANGE;
typedef struct
{
FBT_HCI_EVENT_HEADER EventHeader;
unsigned char BD_ADDR[FBT_HCI_BDADDR_SIZE];
unsigned char PageScanRepetitionMode;
} FBT_HCI_PAGE_SCAN_REPETITION_MODE_CHANGE, *PFBT_HCI_PAGE_SCAN_REPETITION_MODE_CHANGE;
typedef struct
{
unsigned char Status;
unsigned char HCIVersion;
unsigned short HCIRevision;
unsigned char LMPVersion;
unsigned short Manufacturer;
unsigned short LMPSubVersion;
} FBT_HCI_READ_LOCAL_VERSION_INFORMATION_COMPLETE;
// Data Packet Structure
typedef struct
{
unsigned short ConnectionHandle: 12;
unsigned short PacketBoundary: 2;
unsigned short Broadcast: 2;
unsigned short DataLength;
unsigned char Data[1];
} FBT_HCI_DATA_PACKET, *PFBT_HCI_DATA_PACKET;
#pragma pack(pop)
#endif // _FBT_HCI_EVENT_STRUCTS_H

View file

@ -0,0 +1,45 @@
#ifndef _FBT_HCI_EVENTS_H
#define _FBT_HCI_EVENTS_H
#include "fbtHciEventStructs.h"
#define FBT_HCI_EVENT_INVALID 0x00
#define FBT_HCI_EVENT_INQUIRY_COMPLETE 0x01
#define FBT_HCI_EVENT_INQUIRY_RESULT 0x02
#define FBT_HCI_EVENT_CONNECTION_COMPLETE 0x03
#define FBT_HCI_EVENT_CONNECTION_REQUEST 0x04
#define FBT_HCI_EVENT_DISCONNECTION_COMPLETE 0x05
#define FBT_HCI_EVENT_AUTHENTICATION_COMPLETE 0x06
#define FBT_HCI_EVENT_REMOTE_NAME_REQUEST_COMPLETE 0x07
#define FBT_HCI_EVENT_ENCRYPTION_CHANGE_EVENT 0x08
#define FBT_HCI_EVENT_CHANGE_CONNECTION_LINK_KEY_COMPLETE 0x09
#define FBT_HCI_EVENT_MASTER_LINK_KEY_COMPLETE 0x0a
#define FBT_HCI_EVENT_READ_REMOTE_SUPPORTED_FEATURES 0x0b
#define FBT_HCI_EVENT_READ_REMOTE_VERSION_INFORMATION 0x0c
#define FBT_HCI_EVENT_QOS_SETUP_COMPLETE 0x0d
#define FBT_HCI_EVENT_COMMAND_COMPLETE 0x0e
#define FBT_HCI_EVENT_COMMAND_STATUS 0x0f
#define FBT_HCI_EVENT_HARDWARE_ERROR 0x10
#define FBT_HCI_EVENT_FLUSH_OCCURRED 0x11
#define FBT_HCI_EVENT_ROLE_CHANGE 0x12
#define FBT_HCI_EVENT_NUMBER_OF_COMPLETED_PACKETS 0x13
#define FBT_HCI_EVENT_MODE_CHANGE 0x14
#define FBT_HCI_EVENT_RETURN_LINK_KEYS 0x15
#define FBT_HCI_EVENT_PIN_CODE_REQUEST 0x16
#define FBT_HCI_EVENT_LINK_KEY_REQUEST 0x17
#define FBT_HCI_EVENT_LINK_KEY_NOTIFICATION 0x18
#define FBT_HCI_EVENT_LOOPBACK_COMMAND 0x19
#define FBT_HCI_EVENT_DATA_BUFFER_OVERFLOW_EVENT 0x1a
#define FBT_HCI_EVENT_MAX_SLOTS_CHANGE 0x1b
#define FBT_HCI_EVENT_READ_CLOCK_OFFSET 0x1c
#define FBT_HCI_EVENT_CONNECTION_PACKET_TYPE_CHANGED 0x1d
#define FBT_HCI_EVENT_QOS_VIOLATION 0x1e
#define FBT_HCI_EVENT_PAGE_SCAN_MODE_CHANGE 0x1f
#define FBT_HCI_EVENT_PAGE_SCAN_REPETITION_MODE_CHANGE 0x20
#define FBT_HCI_EVENT_FLOW_SPECIFICATION_COMPLETE 0x21
#define FBT_HCI_EVENT_INQUIRY_RESULT_WITH_RSSI 0x22
#define FBT_HCI_EVENT_READ_REMOTE_EXTENDED_FEATURES_COMPLETE 0x23
#define FBT_HCI_EVENT_SYNCHRONOUS_CONNECTION_COMPLETE 0x24
#define FBT_HCI_EVENT_SYNCHRONOUS_CONNECTION_CHANGED 0x25
#endif // _FBT_HCI_EVENTS_H

View file

@ -0,0 +1,71 @@
#ifndef _LOCAL_HCI_H_
#define _LOCAL_HCI_H_
#include "fbtHci.h"
#define MAX_QUEUED_COMMANDS 100
typedef struct _QueuedCommand
{
USHORT nCommand;
BYTE *pResultBuffer;
DWORD dwBufferSize;
HANDLE hEvent;
} QueuedCommand, *PQueuedCommand;
// Local HCI command abstraction
// 1. Send Command
// 2. Wait for Command status / Command complete
class CHciLocal : public CHci
{
public:
CHciLocal(void);
virtual ~CHciLocal(void);
virtual int QueueCommand(USHORT nCommand, BYTE *pResultBuffer=NULL, DWORD dwBufferSize=0);
virtual int QueueCommandStatus(USHORT nCommand);
virtual void DeQueueCommand(int nSlot);
virtual DWORD ClearQueue(void);
virtual PQueuedCommand GetQueuedCommand(int nSlot);
virtual DWORD WaitForCommandComplete(int nSlot);
virtual DWORD WaitForCommandStatus(int nSlot, BYTE &nStatus);
virtual DWORD SendReset(void);
virtual DWORD SendWriteClassOfDevice(BYTE ClassOfDevice[FBT_HCI_DEVICE_CLASS_SIZE]);
virtual DWORD SendSetEventFilter(
BYTE nFilterType,
BYTE nFilterConditionType,
BYTE nCondition[FBT_HCI_MAX_CONDITION_SIZE],
BYTE nConditionBytes);
virtual DWORD SendInquiry(ULONG nLAP, BYTE nInquiryLength, BYTE nNumResponses);
virtual DWORD SendInquiryCancel(void);
virtual DWORD SendCreateConnection(BYTE BD_ADDR[FBT_HCI_BDADDR_SIZE],
USHORT nPacketType,
BYTE nPageScanRepetitionMode,
BYTE nPageScanMode,
USHORT nClockOffset,
BYTE nAllowRoleSwitch);
virtual DWORD SendDisconnect(USHORT nConnectionHandle, BYTE nReason);
virtual DWORD SendSwitchRole(BYTE BD_ADDR[FBT_HCI_BDADDR_SIZE], BYTE nRole);
virtual DWORD SendRemoteNameRequest(BYTE BD_ADDR[FBT_HCI_BDADDR_SIZE], BYTE nPageScanRepetitionMode, BYTE nPageScanMode, USHORT nClockOffset);
virtual DWORD SendReadLocalVersionInformation(FBT_HCI_READ_LOCAL_VERSION_INFORMATION_COMPLETE &CommandComplete);
virtual DWORD OnEvent(PFBT_HCI_EVENT_HEADER pEvent, DWORD dwLength);
virtual DWORD CommandCompleteHandler(USHORT nCommand, BYTE *pParameters, DWORD dwParameterLength);
virtual DWORD CommandStatusHandler(BYTE nStatus, USHORT nCommand);
protected:
virtual int FindCommandSlot(USHORT nCommand);
QueuedCommand m_QueuedCommands[MAX_QUEUED_COMMANDS];
CRITICAL_SECTION m_QueueCriticalSection;
};
#endif // _LOCAL_HCI_H_

View file

@ -0,0 +1,125 @@
#ifndef _FBT_HCI_OPCODES_H
#define _FBT_HCI_OPCODES_H
// Opcode Group Field (OGF) codes
#define FBT_HCI_OGF_LINK_CONTROL 0x01 // Link control group
#define FBT_HCI_OGF_LINK_POLICY 0x02 // Link polic group
#define FBT_HCI_OGF_CONTROL_BASEBAND 0x03 // Host Controller & Baseband group
#define FBT_HCI_OGF_INFORMATIONAL_PARAMETERS 0x04 // Information parameters group
#define FBT_HCI_OGF_STATUS_PARAMETERS 0x05 // Status parameters group
#define FBT_HCI_OGF_TESTING 0x06 // Test group
// Opcode Command Field (OCF) codes
// Link control commands
#define FBT_HCI_OCF_INQUIRY 0x0001
#define FBT_HCI_OCF_INQUIRY_CANCEL 0x0002
#define FBT_HCI_OCF_PERIODIC_INQUIRY_MODE 0x0003
#define FBT_HCI_OCF_EXIT_PERIODIC_INQUIRY_MODE 0x0004
#define FBT_HCI_OCF_CREATE_CONNECTION 0x0005
#define FBT_HCI_OCF_DISCONNECT 0x0006
#define FBT_HCI_OCF_ADD_SCO_CONNECTION 0x0007
#define FBT_HCI_OCF_ACCEPT_CONNECTION_REQUEST 0x0009
#define FBT_HCI_OCF_REJECT_CONNECTION_REQUEST 0x000A
#define FBT_HCI_OCF_LINK_KEY_REQUEST_REPLY 0x000B
#define FBT_HCI_OCF_LINK_KEY_REQUEST_NEGATIVE_REPLY 0x000C
#define FBT_HCI_OCF_PIN_CODE_REQUEST_REPLY 0x000D
#define FBT_HCI_OCF_PIN_CODE_REQUEST_NEGATIVE_REPLY 0x000E
#define FBT_HCI_OCF_CHANGE_CONNECTION_PACKET_TYPE 0x000F
#define FBT_HCI_OCF_AUTHENTICATION_REQUESTED 0x0011
#define FBT_HCI_OCF_SET_CONNECTION_ENCRYPTION 0x0013
#define FBT_HCI_OCF_CHANGE_CONNECTION_LINK_KEY 0x0015
#define FBT_HCI_OCF_MASTER_LINK_KEY 0x0017
#define FBT_HCI_OCF_REMOTE_NAME_REQUEST 0x0019
#define FBT_HCI_OCF_READ_REMOTE_SUPPORTED_FEATURES 0x001B
#define FBT_HCI_OCF_READ_REMOTE_VERSION_INFORMATION 0x001D
#define FBT_HCI_OCF_READ_CLOCK_OFFSET 0x001F
// Link policy commands
#define FBT_HCI_OCF_HOLD_MODE 0x0001
#define FBT_HCI_OCF_SNIFF_MODE 0x0003
#define FBT_HCI_OCF_EXIT_SNIFF_MODE 0x0004
#define FBT_HCI_OCF_PARK_MODE 0x0005
#define FBT_HCI_OCF_EXIT_PARK_MODE 0x0006
#define FBT_HCI_OCF_QOS_SETUP 0x0007
#define FBT_HCI_OCF_ROLE_DISCOVERY 0x0009
#define FBT_HCI_OCF_SWITCH_ROLE 0x000B
#define FBT_HCI_OCF_READ_LINK_POLICY_SETTINGS 0x000C
#define FBT_HCI_OCF_WRITE_LINK_POLICY_SETTINGS 0x000D
// Host controller & baseband commands
#define FBT_HCI_OCF_SET_EVENT_MASK 0x0001
#define FBT_HCI_OCF_RESET 0x0003
#define FBT_HCI_OCF_SET_EVENT_FILTER 0x0005
#define FBT_HCI_OCF_FLUSH 0x0008
#define FBT_HCI_OCF_READ_PIN_TYPE 0x0009
#define FBT_HCI_OCF_WRITE_PIN_TYPE 0x000A
#define FBT_HCI_OCF_CREATE_NEW_UNIT_KEY 0x000B
#define FBT_HCI_OCF_READ_STORED_LINK_KEY 0x000D
#define FBT_HCI_OCF_WRITE_STORED_LINK_KEY 0x0011
#define FBT_HCI_OCF_DELETE_STORED_LINK_KEY 0x0012
#define FBT_HCI_OCF_CHANGE_LOCAL_NAME 0x0013
#define FBT_HCI_OCF_READ_LOCAL_NAME 0x0014
#define FBT_HCI_OCF_READ_CONNECTION_ACCEPT_TIMEOUT 0x0015
#define FBT_HCI_OCF_WRITE_CONNECTION_ACCEPT_TIMEOUT 0x0016
#define FBT_HCI_OCF_READ_PAGE_TIMEOUT 0x0017
#define FBT_HCI_OCF_WRITE_PAGE_TIMEOUT 0x0018
#define FBT_HCI_OCF_READ_SCAN_ENABLE 0x0019
#define FBT_HCI_OCF_WRITE_SCAN_ENABLE 0x001A
#define FBT_HCI_OCF_READ_PAGE_SCAN_ACTIVITY 0x001B
#define FBT_HCI_OCF_WRITE_PAGE_SCAN_ACTIVITY 0x001C
#define FBT_HCI_OCF_READ_INQUIRY_SCAN_ACTIVITY 0x001D
#define FBT_HCI_OCF_WRITE_INQUIRY_SCAN_ACTIVITY 0x001E
#define FBT_HCI_OCF_READ_AUTHENTICATION_ENABLE 0x001F
#define FBT_HCI_OCF_WRITE_AUTHENTICATION_ENABLE 0x0020
#define FBT_HCI_OCF_READ_ENCRYPTION_MODE 0x0021
#define FBT_HCI_OCF_WRITE_ENCRYPTION_MODE 0x0022
#define FBT_HCI_OCF_READ_CLASS_OF_DEVICE 0x0023
#define FBT_HCI_OCF_WRITE_CLASS_OF_DEVICE 0x0024
#define FBT_HCI_OCF_READ_VOICE_SETTING 0x0025
#define FBT_HCI_OCF_WRITE_VOICE_SETTING 0x0026
#define FBT_HCI_OCF_READ_AUTOMATIC_FLUSH_TIMEOUT 0x0027
#define FBT_HCI_OCF_WRITE_AUTOMATIC_FLUSH_TIMEOUT 0x0028
#define FBT_HCI_OCF_READ_NUM_BROADCAST_RETRANSMISSIONS 0x0029
#define FBT_HCI_OCF_WRITE_NUM_BROADCAST_RETRANSMISSIONS 0x002A
#define FBT_HCI_OCF_READ_HOLD_MODE_ACTIVITY 0x002B
#define FBT_HCI_OCF_WRITE_HOLD_MODE_ACTIVITY 0x002C
#define FBT_HCI_OCF_READ_TRANSMIT_POWER_LEVEL 0x002D
#define FBT_HCI_OCF_READ_SCO_FLOW_CONTROL_ENABLE 0x002E
#define FBT_HCI_OCF_WRITE_SCO_FLOW_CONTROL_ENABLE 0x002F
#define FBT_HCI_OCF_SET_HOST_CONTROLLER_TO_HOST_FLOW_CONTROL 0x0031
#define FBT_HCI_OCF_HOST_BUFFER_SIZE 0x0033
#define FBT_HCI_OCF_HOST_NUMBER_OF_COMPLETED_PACKETS 0x0035
#define FBT_HCI_OCF_READ_LINK_SUPERVISION_TIMEOUT 0x0036
#define FBT_HCI_OCF_WRITE_LINK_SUPERVISION_TIMEOUT 0x0037
#define FBT_HCI_OCF_READ_NUMBER_OF_SUPPORTED_IAC 0x0038
#define FBT_HCI_OCF_READ_CURRENT_IAC_LAP 0x0039
#define FBT_HCI_OCF_WRITE_CURRENT_IAC_LAP 0x003A
#define FBT_HCI_OCF_READ_PAGE_SCAN_PERIOD_MODE 0x003B
#define FBT_HCI_OCF_WRITE_PAGE_SCAN_PERIOD_MODE 0x003C
#define FBT_HCI_OCF_READ_PAGE_SCAN_MODE 0x003D
#define FBT_HCI_OCF_WRITE_PAGE_SCAN_MODE 0x003E
// Informational parameter commands
#define FBT_HCI_OCF_READ_LOCAL_VERSION_INFORMATION 0x0001
#define FBT_HCI_OCF_LOCAL_SUPPPROTED_FEATURES 0x0003
#define FBT_HCI_OCF_READ_BUFFER_SIZE 0x0005
#define FBT_HCI_OCF_READ_COUNTRY_CODE 0x0007
#define FBT_HCI_OCF_READ_BD_ADDR 0x0009
// Status parameters commands
#define FBT_HCI_OCF_READ_FAILED_CONTACT_COUNTER 0x0001
#define FBT_HCI_OCF_RESET_FAILED_CONTACT_COUNTER 0x0002
#define FBT_HCI_OCF_GET_LINK_QUALITY 0x0003
#define FBT_HCI_OCF_READ_RSSI 0x0005
// Test commands
#define FBT_HCI_OCF_READ_LOOPBACK_MODE 0x0001
#define FBT_HCI_OCF_WRITE_LOOPBACK_MODE 0x0002
#define FBT_HCI_OCF_ENABLE_DEVICE_UNDER_TEST_MODE 0x0003
#define FBT_HCI_OGF_FROM_COMMAND(cmd) (cmd>>10)
#define FBT_HCI_OCF_FROM_COMMAND(cmd) (cmd&0x3FF)
#endif // _FBT_HCI_OPCODES_H

View file

@ -0,0 +1,51 @@
#ifndef _FBT_HCI_PARAMETERS_H
#define _FBT_HCI_PARAMETERS_H
// HCI header types
#define FBT_HCI_SYNC_HCI_COMMAND_PACKET 0x01
#define FBT_HCI_SYNC_ACL_DATA_PACKET 0x02
#define FBT_HCI_SYNC_SCO_DATA_PACKET 0x03
#define FBT_HCI_SYNC_HCI_EVENT_PACKET 0x04
// Packet types for use in CreateConnection
#define FBT_HCI_PACKET_TYPE_DM1 0x0008 // 1 time slot, 1-18 bytes of data, FEC encoded
#define FBT_HCI_PACKET_TYPE_DH1 0x0010 // 1 time slot, 1-28 bytes of data, not FEC encoded
#define FBT_HCI_PACKET_TYPE_DM3 0x0400 // 3 time slots, 2-123 bytes of data, FEC encoded
#define FBT_HCI_PACKET_TYPE_DH3 0x0800 // 3 time slots, 2-185 bytes of data, not FEC encoded
#define FBT_HCI_PACKET_TYPE_DM5 0x4000 // 5 time slots, 2-226 bytes of data, FEC encoded
#define FBT_HCI_PACKET_TYPE_DH5 0x8000 // 3 time slots, 2-341 bytes of data, not FEC encoded
#define FBT_HCI_PACKET_TYPE_ALL (FBT_HCI_PACKET_TYPE_DM1|FBT_HCI_PACKET_TYPE_DH1|FBT_HCI_PACKET_TYPE_DM3|FBT_HCI_PACKET_TYPE_DH3|FBT_HCI_PACKET_TYPE_DM5|FBT_HCI_PACKET_TYPE_DH5)
// LAP codes for use in Inquiry
#define FBT_HCI_LAP_GIAC 0x9E8B33
#define FBT_HCI_LAP_LIAC 0x9E8B00
// Link Types
#define FBT_HCI_LINK_TYPE_SCO 0x00
#define FBT_HCI_LINK_TYPE_ACL 0x01
// Roles
#define FBT_HCI_ROLE_MASTER 0x00
#define FBT_HCI_ROLE_SLAVE 0x01
// Event Filters
#define FBT_HCI_FILTER_NONE 0x00
#define FBT_HCI_FILTER_INQUIRY_RESULT 0x01
#define FBT_HCI_FILTER_CONNECTION_SETUP 0x02
#define FBT_HCI_FILTER_ALL 0x00
#define FBT_HCI_FILTER_CLASS_OF_DEVICE 0x01
#define FBT_HCI_FILTER_BDADDR 0x02
// Data packet parameters
#define FBT_HCI_PACKET_BOUNDARY_FRAGMENT 0x01
#define FBT_HCI_PACKET_BOUNDARY_START 0x02
#define FBT_HCI_BROADCAST_POINT_TO_POINT 0x00
#define FBT_HCI_BROADCAST_ACTIVE_SLAVE 0x01
#define FBT_HCI_BROADCAST_PARKED_SLAVE 0x02
#endif // _FBT_HCI_PARAMETERS_H

View file

@ -0,0 +1,51 @@
#ifndef _ROUND_TRIP_HCI_H_
#define _ROUND_TRIP_HCI_H_
#include "fbtHciLocal.h"
// Complete round trip HCI abstraction
// 1. Send Command
// 2. Wait for Command status / Command complete
// 3. Wait fo event
class CHciRoundTrip : public CHciLocal
{
public:
CHciRoundTrip();
virtual ~CHciRoundTrip();
virtual DWORD QueueEvent(BYTE EventCode, LPVOID pParameters, DWORD dwParameterLength);
virtual DWORD WaitForEvent();
virtual DWORD OnEvent(PFBT_HCI_EVENT_HEADER pEvent, DWORD Length);
virtual DWORD ReadBDADDR(BYTE *BDADDR);
virtual DWORD ReadClassOfDevice(BYTE *ClassOfDevice);
virtual DWORD ReadLocalName(BYTE *Name);
virtual DWORD CreateConnection(BYTE BD_ADDR[FBT_HCI_BDADDR_SIZE],
USHORT PacketType,
BYTE PageScanRepetitionMode,
BYTE PageScanMode,
USHORT ClockOffset,
BYTE AllowRoleSwitch,
USHORT &ConnectionHandle);
virtual DWORD Disconnect(USHORT ConnectionHandler, BYTE Reason);
virtual DWORD SwitchRole(BYTE BD_ADDR[FBT_HCI_BDADDR_SIZE], BYTE Role);
virtual DWORD RemoteNameRequest(BYTE BD_ADDR[FBT_HCI_BDADDR_SIZE],
BYTE PageScanRepetitionMode,
BYTE PageScanMode,
USHORT ClockOffset,
BYTE Name[FBT_HCI_NAME_SIZE]);
protected:
BYTE m_PendingEvent;
LPVOID m_pEventParameters;
DWORD m_dwEventParameterLength;
HANDLE m_hEventSignal;
};
#endif // _ROUND_TRIP_HCI_H_

View file

@ -0,0 +1,27 @@
#ifndef _FBT_HCI_SIZES_H
#define _FBT_HCI_SIZES_H
// Sizes
#define FBT_HCI_CMD_MIN_SIZE 3
#define FBT_HCI_CMD_MAX_SIZE 258
#define FBT_HCI_EVENT_MAX_SIZE 257
#define FBT_HCI_DATA_MIN_SIZE 5
#define FBT_HCI_DATA_MAX_SIZE 343
#define FBT_HCI_BDADDR_SIZE 6
#define FBT_HCI_NAME_SIZE 248
#define FBT_HCI_DEVICE_CLASS_SIZE 3
#define FBT_HCI_LAP_SIZE 3
#define FBT_HCI_MAX_CONDITION_SIZE 7
#define FBT_HCI_LINK_KEY_SIZE 16
#define FBT_HCI_PIN_CODE_SIZE 16
#define FBT_HCI_VARIABLE_SIZE 1
#endif // _FBT_HCI_SIZES_H

View file

@ -0,0 +1,22 @@
#ifndef __SEEXCEPTION_H__
#define __SEEXCEPTION_H__
#include <windows.h>
class fbtSeException
{
public:
fbtSeException(unsigned int nSeCode, _EXCEPTION_POINTERS* pExcPointers);
fbtSeException(fbtSeException & CseExc);
unsigned int GetSeCode(void);
private:
unsigned int m_nSeCode;
_EXCEPTION_POINTERS* m_pExcPointers;
};
void fbtXcptEnableSEHandling();
#endif //__SEEXCEPTION_H__

View file

@ -0,0 +1,61 @@
// Copyright (c) 2004, Antony C. Roberts
// Use of this file is subject to the terms
// described in the LICENSE.TXT file that
// accompanies this file.
//
// Your use of this file indicates your
// acceptance of the terms described in
// LICENSE.TXT.
//
// http://www.freebt.net
#ifndef _FREEBT_DEV_H
#define _FREEBT_DEV_H
#ifdef __cplusplus
extern "C" {
#endif
NTSTATUS FreeBT_DispatchCreate(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
NTSTATUS FreeBT_DispatchClose(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
NTSTATUS FreeBT_DispatchDevCtrl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
NTSTATUS FreeBT_ResetPipe(IN PDEVICE_OBJECT DeviceObject, IN USBD_PIPE_HANDLE PipeInfo);
NTSTATUS FreeBT_ResetDevice(IN PDEVICE_OBJECT DeviceObject);
NTSTATUS FreeBT_GetPortStatus(IN PDEVICE_OBJECT DeviceObject, IN PULONG PortStatus);
NTSTATUS FreeBT_ResetParentPort(IN IN PDEVICE_OBJECT DeviceObject);
NTSTATUS SubmitIdleRequestIrp(IN PDEVICE_EXTENSION DeviceExtension);
VOID IdleNotificationCallback(IN PDEVICE_EXTENSION DeviceExtension);
NTSTATUS IdleNotificationRequestComplete(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN PDEVICE_EXTENSION DeviceExtension);
VOID CancelSelectSuspend(IN PDEVICE_EXTENSION DeviceExtension);
VOID PoIrpCompletionFunc(
IN PDEVICE_OBJECT DeviceObject,
IN UCHAR MinorFunction,
IN POWER_STATE PowerState,
IN PVOID Context,
IN PIO_STATUS_BLOCK IoStatus);
VOID PoIrpAsyncCompletionFunc(
IN PDEVICE_OBJECT DeviceObject,
IN UCHAR MinorFunction,
IN POWER_STATE PowerState,
IN PVOID Context,
IN PIO_STATUS_BLOCK IoStatus);
VOID WWIrpCompletionFunc(
IN PDEVICE_OBJECT DeviceObject,
IN UCHAR MinorFunction,
IN POWER_STATE PowerState,
IN PVOID Context,
IN PIO_STATUS_BLOCK IoStatus);
#ifdef __cplusplus
};
#endif
#endif

View file

@ -0,0 +1,134 @@
#ifndef _HCI_H_
#define _HCI_H_
#include <windows.h>
#include "fbthw.h"
#include "fbtHciDefs.h"
// Number of overlapped requests to have pending in the driver
#define HCI_NUMBER_OF_OVERLAPPED_LISTENS MAXIMUM_WAIT_OBJECTS-1
// HCI Abstraction layer
class CHci;
typedef struct
{
PFBT_HCI_EVENT_HEADER pEvent;
DWORD dwLength;
CHci *pThis;
} HCI_EVENT, *PHCI_EVENT;
class CHci : public CBTHW
{
public:
CHci(void);
virtual ~CHci(void);
virtual DWORD StartEventListener(void);
virtual DWORD StopEventListener(void);
virtual DWORD OnEvent(PFBT_HCI_EVENT_HEADER pEvent, DWORD Length);
static LPCTSTR GetEventText(BYTE Event);
static LPCTSTR GetStatusText(BYTE Status);
static LPCTSTR GetManufacturerName(USHORT Company);
virtual DWORD OnCommandComplete(BYTE NumHCICommandPackets, USHORT CommandOpcode, BYTE *Parameters, DWORD ParameterLength);
virtual DWORD OnCommandStatus(BYTE Status, BYTE NumHCICommandPackets, USHORT CommandOpcode);
virtual DWORD OnConnectionRequest(BYTE BD_ADDR[FBT_HCI_BDADDR_SIZE], ULONG ClassOfDevice[FBT_HCI_DEVICE_CLASS_SIZE], BYTE LinkType);
virtual DWORD OnConnectionComplete(BYTE Status, USHORT ConnectionHandle, BYTE BD_ADDR[FBT_HCI_BDADDR_SIZE], BYTE LinkType, BYTE EncryptionMode);
virtual DWORD OnDisconnectionComplete(BYTE Status, USHORT ConnectionHandle, BYTE Reason);
virtual DWORD OnInquiryComplete(BYTE Status, BYTE NumResponses);
virtual DWORD OnInquiryResult(BYTE NumResponses, BYTE BD_ADDR[FBT_HCI_VARIABLE_SIZE][FBT_HCI_BDADDR_SIZE], BYTE PageScanRepetitionMode[FBT_HCI_VARIABLE_SIZE], BYTE PageScanPeriodMode[FBT_HCI_VARIABLE_SIZE], BYTE PageScanMode[FBT_HCI_VARIABLE_SIZE], BYTE ClassOfDevice[FBT_HCI_VARIABLE_SIZE][FBT_HCI_DEVICE_CLASS_SIZE], USHORT ClockOffset[FBT_HCI_VARIABLE_SIZE]);
virtual DWORD OnRemoteNameRequestComplete(BYTE Status, BYTE BD_ADDR[FBT_HCI_BDADDR_SIZE], BYTE RemoteName[FBT_HCI_NAME_SIZE]);
virtual DWORD OnRoleChange(BYTE Status, BYTE BD_ADDR[FBT_HCI_BDADDR_SIZE], BYTE Role);
virtual DWORD OnPINCodeRequest(BYTE BD_ADDR[FBT_HCI_BDADDR_SIZE]);
virtual DWORD OnLinkKeyNotification(BYTE BD_ADDR[FBT_HCI_BDADDR_SIZE], BYTE LinkKey[FBT_HCI_LINK_KEY_SIZE]);
virtual DWORD OnLinkKeyRequest(BYTE BD_ADDR[FBT_HCI_BDADDR_SIZE]);
virtual DWORD OnAuthenticationComplete(BYTE Status, USHORT ConnectionHandle);
virtual DWORD OnReadLocalNameComplete(BYTE Status, BYTE Name[FBT_HCI_NAME_SIZE]);
virtual DWORD OnUnknown(PFBT_HCI_EVENT_HEADER pEvent, DWORD Length);
virtual DWORD SendReset(void);
virtual DWORD SendInquiry(ULONG LAP, BYTE InquiryLength, BYTE NumResponses);
virtual DWORD SendInquiryCancel(void);
virtual DWORD SendReadBDADDR(void);
virtual DWORD SendWriteScanEnable(BYTE ScanEnable);
virtual DWORD SendWriteAuthenticationEnable(BYTE ScanEnable);
virtual DWORD SendSetEventFilter(BYTE FilterType,
BYTE FilterConditionType,
BYTE Condition[FBT_HCI_MAX_CONDITION_SIZE],
BYTE ConditionBytes);
virtual DWORD SendReadClassOfDevice(void);
virtual DWORD SendWriteClassOfDevice(BYTE ClassOfDevice[FBT_HCI_DEVICE_CLASS_SIZE]);
virtual DWORD SendCreateConnection(BYTE BD_ADDR[FBT_HCI_BDADDR_SIZE],
USHORT PacketType,
BYTE PageScanRepetitionMode,
BYTE PageScanMode,
USHORT ClockOffset,
BYTE AllowRoleSwitch);
virtual DWORD SendAcceptConnectionRequest(BYTE BD_ADDR[FBT_HCI_BDADDR_SIZE], BYTE RoleSwitch);
virtual DWORD SendDisconnect(USHORT ConnectionHandle, BYTE Reason);
virtual DWORD SendWriteLinkSupervisionTimeout(USHORT ConnectionHandle, USHORT LinkSupervisionTimeout);
virtual DWORD SendWritePageTimeout(USHORT PageTimeout);
virtual DWORD SendRemoteNameRequest(BYTE BD_ADDR[FBT_HCI_BDADDR_SIZE], BYTE PageScanRepetitionMode, BYTE PageScanMode, USHORT ClockOffset);
virtual DWORD SendReadLocalName(void);
virtual DWORD SendChangeLocalName(BYTE Name[FBT_HCI_NAME_SIZE]);
virtual DWORD SendSwitchRole(BYTE BD_ADDR[FBT_HCI_BDADDR_SIZE], BYTE Role);
virtual DWORD SendPINCodeRequestReply(BYTE BD_ADDR[FBT_HCI_BDADDR_SIZE], BYTE PINCodeLength, BYTE PINCode[FBT_HCI_PIN_CODE_SIZE]);
virtual DWORD SendPINCodeRequestNegativeReply(BYTE BD_ADDR[FBT_HCI_BDADDR_SIZE]);
virtual DWORD SendLinkKeyRequestReply(BYTE BD_ADDR[FBT_HCI_BDADDR_SIZE], BYTE LinkKey[FBT_HCI_LINK_KEY_SIZE]);
virtual DWORD SendLinkKeyRequestNegativeReply(BYTE BD_ADDR[FBT_HCI_BDADDR_SIZE]);
virtual DWORD SendReadLocalVersionInformation(void);
DWORD CompareBDADDRs(BYTE BD_ADDR1[FBT_HCI_BDADDR_SIZE], BYTE BD_ADDR2[FBT_HCI_BDADDR_SIZE]);
protected:
friend static DWORD CALLBACK Listener(LPVOID pContext);
friend static DWORD EventHandler(PFBT_HCI_EVENT_HEADER pEvent, DWORD Length);
virtual DWORD SendHciCommand(PFBT_HCI_CMD_HEADER lpCommand, DWORD dwBufferSize);
DWORD SendListenForEvent(OVERLAPPED *pOverlapped, BYTE *pEventBuffer);
HANDLE m_hStopListeningEvent;
HANDLE m_hListenerReadyEvent;
HANDLE m_hListenerThread;
DWORD m_dwListenerThreadId;
OVERLAPPED m_Overlappeds[HCI_NUMBER_OF_OVERLAPPED_LISTENS];
BYTE m_pEventBuffers[HCI_NUMBER_OF_OVERLAPPED_LISTENS][FBT_HCI_EVENT_MAX_SIZE];
};
#endif // _HCI_H_

View file

@ -0,0 +1,36 @@
#ifndef _FBT_HW_H_
#define _FBT_HW_H_
#include <winioctl.h>
// HW Driver Abstraction layer
class CBTHW
{
public:
// The driver is opened for OVERLAPPED I/O
CBTHW();
virtual ~CBTHW();
// Set the driver instances symbolic name
void SetDeviceName(LPCTSTR szDeviceName);
DWORD GetDeviceName(LPTSTR szBuffer, DWORD dwBufferSize);
// Open a handle to the driver instance
virtual DWORD Attach(LPCSTR szDeviceName);
virtual DWORD Detach();
HANDLE GetDriverHandle();
BOOL IsAttached() {return GetDriverHandle()!=INVALID_HANDLE_VALUE;}
// Send a command to the driver
DWORD SendCommand(DWORD dwCommand, LPVOID lpInBuffer=NULL, DWORD dwInBufferSize=0, LPVOID lpOutBuffer=NULL, DWORD dwOutBufferSize=0, OVERLAPPED *pOverlapped=NULL);
DWORD SendData(LPVOID lpBuffer, DWORD dwBufferSize, DWORD *dwBytesSent, OVERLAPPED *pOverlapped);
DWORD GetData(LPVOID lpBuffer, DWORD dwBufferSize, DWORD *dwBytesRead, OVERLAPPED *pOverlapped);
protected:
HANDLE m_hDriver;
TCHAR m_szDeviceName[1024];
};
#endif // _FBT_HW_H_

View file

@ -0,0 +1,26 @@
#ifndef _FBT_DEBUG
#define _FBT_DEBUG
#define fbtLog_None 0
#define fbtLog_Failure 1
#define fbtLog_Warning 2
#define fbtLog_Notice 3
#define fbtLog_Enter 4
#define fbtLog_Exit 4
#define fbtLog_Verbose 5
#define fbtLog_Exception 0
#ifdef __cplusplus
extern "C" {
#endif
void fbtLog(unsigned int nLevel, const char *szText, ...);
BOOL fbtLogSetFile(char *szDebugFile);
void fbtLogSetLevel(unsigned int nLevel);
unsigned int fbtLogGetLevel(void);
#ifdef __cplusplus
}
#endif
#endif

View file

@ -0,0 +1,61 @@
// Copyright (c) 2004, Antony C. Roberts
// Use of this file is subject to the terms
// described in the LICENSE.TXT file that
// accompanies this file.
//
// Your use of this file indicates your
// acceptance of the terms described in
// LICENSE.TXT.
//
// http://www.freebt.net
#ifndef _FREEBT_PNP_H
#define _FREEBT_PNP_H
#define REMOTE_WAKEUP_MASK 0x20
#ifdef __cplusplus
extern "C" {
#endif
NTSTATUS FreeBT_DispatchPnP(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
NTSTATUS HandleStartDevice(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
NTSTATUS HandleQueryStopDevice(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
NTSTATUS HandleQueryRemoveDevice(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
NTSTATUS HandleCancelRemoveDevice(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
NTSTATUS HandleSurpriseRemoval(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
NTSTATUS HandleRemoveDevice(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
NTSTATUS HandleCancelStopDevice(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
NTSTATUS HandleStopDevice(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
NTSTATUS HandleQueryCapabilities(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
NTSTATUS ReadandSelectDescriptors(IN PDEVICE_OBJECT DeviceObject);
NTSTATUS ConfigureDevice(IN PDEVICE_OBJECT DeviceObject);
NTSTATUS SelectInterfaces(IN PDEVICE_OBJECT DeviceObject, IN PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor);
NTSTATUS DeconfigureDevice(IN PDEVICE_OBJECT DeviceObject);
NTSTATUS CallUSBD(IN PDEVICE_OBJECT DeviceObject, IN PURB Urb);
VOID ProcessQueuedRequests(IN OUT PDEVICE_EXTENSION DeviceExtension);
NTSTATUS FreeBT_GetRegistryDword(IN PWCHAR RegPath, IN PWCHAR ValueName, IN OUT PULONG Value);
NTSTATUS FreeBT_DispatchClean(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
VOID DpcRoutine(
IN PKDPC Dpc,
IN PVOID DeferredContext,
IN PVOID SystemArgument1,
IN PVOID SystemArgument2);
VOID IdleRequestWorkerRoutine(IN PDEVICE_OBJECT DeviceObject, IN PVOID Context);
NTSTATUS FreeBT_AbortPipes(IN PDEVICE_OBJECT DeviceObject);
NTSTATUS IrpCompletionRoutine(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context);
NTSTATUS CanStopDevice(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
NTSTATUS CanRemoveDevice(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
NTSTATUS ReleaseMemory(IN PDEVICE_OBJECT DeviceObject);
LONG FreeBT_IoIncrement(IN OUT PDEVICE_EXTENSION DeviceExtension);
LONG FreeBT_IoDecrement(IN OUT PDEVICE_EXTENSION DeviceExtension);
BOOLEAN CanDeviceSuspend(IN PDEVICE_EXTENSION DeviceExtension);
PCHAR PnPMinorFunctionString (IN UCHAR MinorFunction);
#ifdef __cplusplus
};
#endif
#endif

View file

@ -0,0 +1,74 @@
// Copyright (c) 2004, Antony C. Roberts
// Use of this file is subject to the terms
// described in the LICENSE.TXT file that
// accompanies this file.
//
// Your use of this file indicates your
// acceptance of the terms described in
// LICENSE.TXT.
//
// http://www.freebt.net
#ifndef _FREEBT_POWER_H
#define _FREEBT_POWER_H
typedef struct _POWER_COMPLETION_CONTEXT
{
PDEVICE_OBJECT DeviceObject;
PIRP SIrp;
} POWER_COMPLETION_CONTEXT, *PPOWER_COMPLETION_CONTEXT;
typedef struct _WORKER_THREAD_CONTEXT
{
PDEVICE_OBJECT DeviceObject;
PIRP Irp;
PIO_WORKITEM WorkItem;
} WORKER_THREAD_CONTEXT, *PWORKER_THREAD_CONTEXT;
#ifdef __cplusplus
extern "C" {
#endif
NTSTATUS FreeBT_DispatchPower(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
NTSTATUS HandleSystemQueryPower(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
NTSTATUS HandleSystemSetPower(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
NTSTATUS HandleDeviceQueryPower(PDEVICE_OBJECT DeviceObject, PIRP Irp);
NTSTATUS SysPoCompletionRoutine(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PDEVICE_EXTENSION DeviceExtension);
VOID SendDeviceIrp(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
VOID DevPoCompletionRoutine(
IN PDEVICE_OBJECT DeviceObject,
IN UCHAR MinorFunction,
IN POWER_STATE PowerState,
IN PVOID Context,
IN PIO_STATUS_BLOCK IoStatus
);
NTSTATUS HandleDeviceSetPower(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
NTSTATUS FinishDevPoUpIrp(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PDEVICE_EXTENSION DeviceExtension);
NTSTATUS SetDeviceFunctional(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PDEVICE_EXTENSION DeviceExtension);
NTSTATUS FinishDevPoDnIrp(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PDEVICE_EXTENSION DeviceExtension);
NTSTATUS HoldIoRequests(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
VOID HoldIoRequestsWorkerRoutine(IN PDEVICE_OBJECT DeviceObject, IN PVOID Context);
NTSTATUS QueueRequest(IN OUT PDEVICE_EXTENSION DeviceExtension, IN PIRP Irp);
VOID CancelQueued(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
NTSTATUS WaitWakeCompletionRoutine(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PDEVICE_EXTENSION DeviceExtension);
NTSTATUS IssueWaitWake(IN PDEVICE_EXTENSION DeviceExtension);
VOID CancelWaitWake(IN PDEVICE_EXTENSION DeviceExtension);
VOID WaitWakeCallback(
IN PDEVICE_OBJECT DeviceObject,
IN UCHAR MinorFunction,
IN POWER_STATE PowerState,
IN PVOID Context,
IN PIO_STATUS_BLOCK IoStatus
);
PCHAR PowerMinorFunctionString(IN UCHAR MinorFunction);
#ifdef __cplusplus
};
#endif
#endif

Some files were not shown because too many files have changed in this diff Show more