mirror of
https://github.com/reactos/reactos.git
synced 2025-08-04 02:36:13 +00:00
Sync with trunk r64509.
svn path=/branches/shell-experiments/; revision=64510
This commit is contained in:
commit
db5b0c31c4
340 changed files with 17144 additions and 8600 deletions
|
@ -242,7 +242,7 @@ BEGIN
|
|||
LTEXT "Husûsî Sürücü", IDC_DRIVER_EXCLUSIVE, 72, 240, 54, 8, WS_DISABLED
|
||||
RTEXT "Arayüz Türü:", IDC_STATIC, 144, 220, 58, 8
|
||||
LTEXT "", IDC_INTERFACETYPE, 205, 220, 66, 8
|
||||
RTEXT "Veri Yolu Numarası:", IDC_STATIC, 151, 230, 51, 8
|
||||
RTEXT "Veriyolu Numarası:", IDC_STATIC, 151, 230, 51, 8
|
||||
LTEXT "", IDC_BUSNUMBER, 205, 230, 66, 8
|
||||
RTEXT "Sürüm:", IDC_STATIC, 151, 240, 51, 8
|
||||
LTEXT "", IDC_VERSION, 205, 240, 66, 8
|
||||
|
@ -404,7 +404,7 @@ END
|
|||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_BUSNUMBER "Veri Yolu Numarası"
|
||||
IDS_BUSNUMBER "Veriyolu Numarası"
|
||||
IDS_INTERFACE "Arayüz"
|
||||
IDS_DMA_CHANNEL "Yol"
|
||||
IDS_DMA_PORT "Giriş"
|
||||
|
@ -444,15 +444,15 @@ BEGIN
|
|||
IDS_BUS_TURBOCHANNEL "TURBOChannel"
|
||||
IDS_BUS_PCIBUS "PCI"
|
||||
IDS_BUS_VMEBUS "VME"
|
||||
IDS_BUS_NUBUS "Nu Veri Yolu"
|
||||
IDS_BUS_NUBUS "Nu Veriyolu"
|
||||
IDS_BUS_PCMCIABUS "PCMCIA"
|
||||
IDS_BUS_CBUS "C Veri Yolu"
|
||||
IDS_BUS_MPIBUS "MPI Veri Yolu"
|
||||
IDS_BUS_MPSABUS "MPSA Veri Yolu"
|
||||
IDS_BUS_CBUS "C Veriyolu"
|
||||
IDS_BUS_MPIBUS "MPI Veriyolu"
|
||||
IDS_BUS_MPSABUS "MPSA Veriyolu"
|
||||
IDS_BUS_PROCESSORINTERNAL "İç İşlemci"
|
||||
IDS_BUS_INTERNALPOWERBUS "İç Güç Veri Yolu"
|
||||
IDS_BUS_PNPISABUS "PnP-ISA Veri Yolu"
|
||||
IDS_BUS_PNPBUS "PnP Veri Yolu"
|
||||
IDS_BUS_INTERNALPOWERBUS "İç Güç Veriyolu"
|
||||
IDS_BUS_PNPISABUS "PnP-ISA Veriyolu"
|
||||
IDS_BUS_PNPBUS "PnP Veriyolu"
|
||||
IDS_BUS_UNKNOWNTYPE "Bilinmeyen Arayüz Türü"
|
||||
END
|
||||
|
||||
|
|
|
@ -32,14 +32,13 @@ list(APPEND SOURCE
|
|||
settings.c
|
||||
usetup.h)
|
||||
|
||||
if(CMAKE_C_COMPILER_ID STREQUAL "Clang")
|
||||
#FIXME: Investigate Clang "illegal character encoding in string literal" warning
|
||||
set_property(SOURCE mui.c APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-invalid-source-encoding")
|
||||
endif()
|
||||
|
||||
add_executable(usetup ${SOURCE} usetup.rc)
|
||||
|
||||
target_link_libraries(usetup
|
||||
zlib
|
||||
inflib
|
||||
ext2lib
|
||||
vfatlib)
|
||||
|
||||
target_link_libraries(usetup zlib inflib ext2lib vfatlib)
|
||||
set_module_type(usetup nativecui)
|
||||
add_importlibs(usetup ntdll)
|
||||
add_pch(usetup usetup.h SOURCE)
|
||||
|
|
|
@ -67,12 +67,8 @@ typedef enum
|
|||
ERROR_ADDING_KBLAYOUTS,
|
||||
ERROR_UPDATE_GEOID,
|
||||
ERROR_INSUFFICIENT_DISKSPACE,
|
||||
|
||||
ERROR_PARTITION_TABLE_FULL,
|
||||
ERROR_ONLY_ONE_EXTENDED,
|
||||
ERROR_NOT_BEHIND_EXTENDED,
|
||||
ERROR_EXTENDED_NOT_LAST,
|
||||
|
||||
|
||||
ERROR_LAST_ERROR_CODE
|
||||
}ERROR_NUMBER;
|
||||
|
|
|
@ -1524,19 +1524,6 @@ MUI_ERROR bgBGErrorEntries[] =
|
|||
"\n"
|
||||
" * Press any key to continue."
|
||||
},
|
||||
{
|
||||
//ERROR_NOT_BEHIND_EXTENDED,
|
||||
"You can not create a partition behind an extended partition.\n"
|
||||
"\n"
|
||||
" * Press any key to continue."
|
||||
},
|
||||
{
|
||||
//ERROR_EXTENDED_NOT_LAST,
|
||||
"An extended partition must always be the last\n"
|
||||
"partition in a partition table.\n"
|
||||
"\n"
|
||||
" * Press any key to continue."
|
||||
},
|
||||
{
|
||||
NULL,
|
||||
NULL
|
||||
|
|
|
@ -1519,19 +1519,6 @@ MUI_ERROR csCZErrorEntries[] =
|
|||
"\n"
|
||||
" * PokraŸujte stisknut¡m libovoln‚ kl vesy."
|
||||
},
|
||||
{
|
||||
//ERROR_NOT_BEHIND_EXTENDED,
|
||||
"Nenˇ mo§n‚ vytvoýit oddˇl za rozçˇýeněm oddˇlem.\n"
|
||||
"\n"
|
||||
" * Pokraźujte stisknutˇm libovoln‚ kl vesy."
|
||||
},
|
||||
{
|
||||
//ERROR_EXTENDED_NOT_LAST,
|
||||
"Rozçˇýeně oddˇl musˇ bět v§dy poslednˇ oddˇl\n"
|
||||
"v tabulce oddˇl….\n"
|
||||
"\n"
|
||||
" * Pokraźujte stisknutˇm libovoln‚ kl vesy."
|
||||
},
|
||||
{
|
||||
NULL,
|
||||
NULL
|
||||
|
|
|
@ -1516,19 +1516,6 @@ MUI_ERROR deDEErrorEntries[] =
|
|||
"\n"
|
||||
" * Eine beliebige Taste zum Fortsetzen dr<64>cken."
|
||||
},
|
||||
{
|
||||
//ERROR_NOT_BEHIND_EXTENDED,
|
||||
"Sie k”nnen hinter einer erweiterten Partition keine weitere Partition anlegen.\n"
|
||||
"\n"
|
||||
" * Eine beliebige Taste zum Fortsetzen dr<64>cken."
|
||||
},
|
||||
{
|
||||
//ERROR_EXTENDED_NOT_LAST,
|
||||
"Eine erweiterte Partition muss immer die letzte Partition in \n"
|
||||
"einer Partitionstabelle sein.\n"
|
||||
"\n"
|
||||
" * Eine beliebige Taste zum Fortsetzen dr<64>cken."
|
||||
},
|
||||
{
|
||||
NULL,
|
||||
NULL
|
||||
|
|
|
@ -1536,19 +1536,6 @@ MUI_ERROR elGRErrorEntries[] =
|
|||
"\n"
|
||||
" * Press any key to continue."
|
||||
},
|
||||
{
|
||||
//ERROR_NOT_BEHIND_EXTENDED,
|
||||
"You can not create a partition behind an extended partition.\n"
|
||||
"\n"
|
||||
" * Press any key to continue."
|
||||
},
|
||||
{
|
||||
//ERROR_EXTENDED_NOT_LAST,
|
||||
"An extended partition must always be the last\n"
|
||||
"partition in a partition table.\n"
|
||||
"\n"
|
||||
" * Press any key to continue."
|
||||
},
|
||||
{
|
||||
NULL,
|
||||
NULL
|
||||
|
|
|
@ -1511,19 +1511,6 @@ MUI_ERROR enUSErrorEntries[] =
|
|||
"\n"
|
||||
" * Press any key to continue."
|
||||
},
|
||||
{
|
||||
//ERROR_NOT_BEHIND_EXTENDED,
|
||||
"You can not create a partition behind an extended partition.\n"
|
||||
"\n"
|
||||
" * Press any key to continue."
|
||||
},
|
||||
{
|
||||
//ERROR_EXTENDED_NOT_LAST,
|
||||
"An extended partition must always be the last\n"
|
||||
"partition in a partition table.\n"
|
||||
"\n"
|
||||
" * Press any key to continue."
|
||||
},
|
||||
{
|
||||
NULL,
|
||||
NULL
|
||||
|
|
|
@ -1519,19 +1519,6 @@ MUI_ERROR esESErrorEntries[] =
|
|||
"\n"
|
||||
" * Press any key to continue."
|
||||
},
|
||||
{
|
||||
//ERROR_NOT_BEHIND_EXTENDED,
|
||||
"You can not create a partition behind an extended partition.\n"
|
||||
"\n"
|
||||
" * Press any key to continue."
|
||||
},
|
||||
{
|
||||
//ERROR_EXTENDED_NOT_LAST,
|
||||
"An extended partition must always be the last\n"
|
||||
"partition in a partition table.\n"
|
||||
"\n"
|
||||
" * Press any key to continue."
|
||||
},
|
||||
{
|
||||
NULL,
|
||||
NULL
|
||||
|
|
|
@ -1509,19 +1509,6 @@ MUI_ERROR etEEErrorEntries[] =
|
|||
"\n"
|
||||
" * Press any key to continue."
|
||||
},
|
||||
{
|
||||
//ERROR_NOT_BEHIND_EXTENDED,
|
||||
"You can not create a partition behind an extended partition.\n"
|
||||
"\n"
|
||||
" * Press any key to continue."
|
||||
},
|
||||
{
|
||||
//ERROR_EXTENDED_NOT_LAST,
|
||||
"An extended partition must always be the last\n"
|
||||
"partition in a partition table.\n"
|
||||
"\n"
|
||||
" * Press any key to continue."
|
||||
},
|
||||
{
|
||||
NULL,
|
||||
NULL
|
||||
|
|
|
@ -1524,19 +1524,6 @@ MUI_ERROR frFRErrorEntries[] =
|
|||
"\n"
|
||||
" * Appuyer sur une touche pour continuer."
|
||||
},
|
||||
{
|
||||
//ERROR_NOT_BEHIND_EXTENDED,
|
||||
"Impossible de cr‚er une partition pr‚c‚dant une partition ‚tendue.\n"
|
||||
"\n"
|
||||
" * Appuyer sur une touche pour continuer."
|
||||
},
|
||||
{
|
||||
//ERROR_EXTENDED_NOT_LAST,
|
||||
"Une partition ‚tendue doit toujours ˆtre plac‚e en dernier\n"
|
||||
"dans la table de partition.\n"
|
||||
"\n"
|
||||
" * Appuyer sur une touche pour continuer."
|
||||
},
|
||||
{
|
||||
NULL,
|
||||
NULL
|
||||
|
|
|
@ -1512,19 +1512,6 @@ MUI_ERROR heILErrorEntries[] =
|
|||
"\n"
|
||||
" * Press any key to continue."
|
||||
},
|
||||
{
|
||||
//ERROR_NOT_BEHIND_EXTENDED,
|
||||
"You can not create a partition behind an extended partition.\n"
|
||||
"\n"
|
||||
" * Press any key to continue."
|
||||
},
|
||||
{
|
||||
//ERROR_EXTENDED_NOT_LAST,
|
||||
"An extended partition must always be the last\n"
|
||||
"partition in a partition table.\n"
|
||||
"\n"
|
||||
" * Press any key to continue."
|
||||
},
|
||||
{
|
||||
NULL,
|
||||
NULL
|
||||
|
|
|
@ -1513,19 +1513,6 @@ MUI_ERROR itITErrorEntries[] =
|
|||
"\n"
|
||||
" * Press any key to continue."
|
||||
},
|
||||
{
|
||||
//ERROR_NOT_BEHIND_EXTENDED,
|
||||
"You can not create a partition behind an extended partition.\n"
|
||||
"\n"
|
||||
" * Press any key to continue."
|
||||
},
|
||||
{
|
||||
//ERROR_EXTENDED_NOT_LAST,
|
||||
"An extended partition must always be the last\n"
|
||||
"partition in a partition table.\n"
|
||||
"\n"
|
||||
" * Press any key to continue."
|
||||
},
|
||||
{
|
||||
NULL,
|
||||
NULL
|
||||
|
|
|
@ -1513,19 +1513,6 @@ MUI_ERROR jaJPErrorEntries[] =
|
|||
"\n"
|
||||
" * Press any key to continue."
|
||||
},
|
||||
{
|
||||
//ERROR_NOT_BEHIND_EXTENDED,
|
||||
"You can not create a partition behind an extended partition.\n"
|
||||
"\n"
|
||||
" * Press any key to continue."
|
||||
},
|
||||
{
|
||||
//ERROR_EXTENDED_NOT_LAST,
|
||||
"An extended partition must always be the last\n"
|
||||
"partition in a partition table.\n"
|
||||
"\n"
|
||||
" * Press any key to continue."
|
||||
},
|
||||
{
|
||||
NULL,
|
||||
NULL
|
||||
|
|
|
@ -1521,19 +1521,6 @@ MUI_ERROR ltLTErrorEntries[] =
|
|||
"\n"
|
||||
" * Press any key to continue."
|
||||
},
|
||||
{
|
||||
//ERROR_NOT_BEHIND_EXTENDED,
|
||||
"You can not create a partition behind an extended partition.\n"
|
||||
"\n"
|
||||
" * Press any key to continue."
|
||||
},
|
||||
{
|
||||
//ERROR_EXTENDED_NOT_LAST,
|
||||
"An extended partition must always be the last\n"
|
||||
"partition in a partition table.\n"
|
||||
"\n"
|
||||
" * Press any key to continue."
|
||||
},
|
||||
{
|
||||
NULL,
|
||||
NULL
|
||||
|
|
|
@ -1557,19 +1557,6 @@ MUI_ERROR nlNLErrorEntries[] =
|
|||
"\n"
|
||||
" * Press any key to continue."
|
||||
},
|
||||
{
|
||||
//ERROR_NOT_BEHIND_EXTENDED,
|
||||
"You can not create a partition behind an extended partition.\n"
|
||||
"\n"
|
||||
" * Press any key to continue."
|
||||
},
|
||||
{
|
||||
//ERROR_EXTENDED_NOT_LAST,
|
||||
"An extended partition must always be the last\n"
|
||||
"partition in a partition table.\n"
|
||||
"\n"
|
||||
" * Press any key to continue."
|
||||
},
|
||||
{
|
||||
NULL,
|
||||
NULL
|
||||
|
|
|
@ -1521,19 +1521,6 @@ MUI_ERROR plPLErrorEntries[] =
|
|||
"\n"
|
||||
" * Naci<63>nij dowolny klawisz, aby kontynuowa†."
|
||||
},
|
||||
{
|
||||
//ERROR_NOT_BEHIND_EXTENDED,
|
||||
"Nie moľesz utworzy† partycji za partycjĄ rozszerzonĄ.\n"
|
||||
"\n"
|
||||
" * Naci<63>nij dowolny klawisz, aby kontynuowa†."
|
||||
},
|
||||
{
|
||||
//ERROR_EXTENDED_NOT_LAST,
|
||||
"Partycja rozszerzona musi by† zawsze ostatniĄ\n"
|
||||
"partycjĄ w tabeli partycji.\n"
|
||||
"\n"
|
||||
" * Naci<63>nij dowolny klawisz, aby kontynuowa†."
|
||||
},
|
||||
{
|
||||
NULL,
|
||||
NULL
|
||||
|
|
|
@ -1549,19 +1549,6 @@ MUI_ERROR ptBRErrorEntries[] =
|
|||
"\n"
|
||||
" * Press any key to continue."
|
||||
},
|
||||
{
|
||||
//ERROR_NOT_BEHIND_EXTENDED,
|
||||
"You can not create a partition behind an extended partition.\n"
|
||||
"\n"
|
||||
" * Press any key to continue."
|
||||
},
|
||||
{
|
||||
//ERROR_EXTENDED_NOT_LAST,
|
||||
"An extended partition must always be the last\n"
|
||||
"partition in a partition table.\n"
|
||||
"\n"
|
||||
" * Press any key to continue."
|
||||
},
|
||||
{
|
||||
NULL,
|
||||
NULL
|
||||
|
|
|
@ -1529,7 +1529,7 @@ MUI_ERROR roROErrorEntries[] =
|
|||
{
|
||||
//ERROR_CABINET_SECTION,
|
||||
"Nu se poate gÇsi secîiunea de directoare\n"
|
||||
"Śn fiierul cabinet.",
|
||||
"Śn fiierul cabinet.",
|
||||
"ENTER = Repornire calculator"
|
||||
},
|
||||
{
|
||||
|
@ -1540,7 +1540,7 @@ MUI_ERROR roROErrorEntries[] =
|
|||
{
|
||||
//ERROR_FIND_SETUPDATA,
|
||||
"Nu se poate gÇsi secîiunea pentru date de\n"
|
||||
"instalare din fiierul TXTSETUP.SIF.",
|
||||
"instalare din fiierul TXTSETUP.SIF.",
|
||||
"ENTER = Repornire calculator"
|
||||
},
|
||||
{
|
||||
|
@ -1561,7 +1561,7 @@ MUI_ERROR roROErrorEntries[] =
|
|||
{
|
||||
//ERROR_ADDING_KBLAYOUTS,
|
||||
"A euat includerea Śn registre a configuraîiei\n"
|
||||
"de tastaturÇ.",
|
||||
"de tastaturÇ.",
|
||||
"ENTER = Repornire calculator"
|
||||
},
|
||||
{
|
||||
|
@ -1572,7 +1572,7 @@ MUI_ERROR roROErrorEntries[] =
|
|||
{
|
||||
//ERROR_INSUFFICIENT_DISKSPACE,
|
||||
"Pe partiîia selectatÇ nu existÇ suficient\n"
|
||||
"spaîiu liber."
|
||||
"spaîiu liber."
|
||||
" * Tastaîi pentru a continua.",
|
||||
NULL
|
||||
},
|
||||
|
@ -1589,19 +1589,6 @@ MUI_ERROR roROErrorEntries[] =
|
|||
"\n"
|
||||
" * Tastaîi pentru a continua."
|
||||
},
|
||||
{
|
||||
//ERROR_NOT_BEHIND_EXTENDED,
|
||||
"Nu se poate crea o partiîie dupÇ o partiîie extinsÇ.\n"
|
||||
"\n"
|
||||
" * Tastaîi pentru a continua."
|
||||
},
|
||||
{
|
||||
//ERROR_EXTENDED_NOT_LAST,
|
||||
"O partiîie extinsÇ trebuie sÇ fie Śntotdeauna\n"
|
||||
"ultima partiîie din tabela de partiîii.\n"
|
||||
"\n"
|
||||
" * Tastaîi pentru a continua."
|
||||
},
|
||||
{
|
||||
NULL,
|
||||
NULL
|
||||
|
|
|
@ -1513,19 +1513,6 @@ MUI_ERROR ruRUErrorEntries[] =
|
|||
"\n"
|
||||
" * Press any key to continue."
|
||||
},
|
||||
{
|
||||
//ERROR_NOT_BEHIND_EXTENDED,
|
||||
"You can not create a partition behind an extended partition.\n"
|
||||
"\n"
|
||||
" * Press any key to continue."
|
||||
},
|
||||
{
|
||||
//ERROR_EXTENDED_NOT_LAST,
|
||||
"An extended partition must always be the last\n"
|
||||
"partition in a partition table.\n"
|
||||
"\n"
|
||||
" * Press any key to continue."
|
||||
},
|
||||
{
|
||||
NULL,
|
||||
NULL
|
||||
|
|
|
@ -1523,19 +1523,6 @@ MUI_ERROR skSKErrorEntries[] =
|
|||
"\n"
|
||||
" * Press any key to continue."
|
||||
},
|
||||
{
|
||||
//ERROR_NOT_BEHIND_EXTENDED,
|
||||
"You can not create a partition behind an extended partition.\n"
|
||||
"\n"
|
||||
" * Press any key to continue."
|
||||
},
|
||||
{
|
||||
//ERROR_EXTENDED_NOT_LAST,
|
||||
"An extended partition must always be the last\n"
|
||||
"partition in a partition table.\n"
|
||||
"\n"
|
||||
" * Press any key to continue."
|
||||
},
|
||||
{
|
||||
NULL,
|
||||
NULL
|
||||
|
|
|
@ -1516,19 +1516,6 @@ MUI_ERROR sqALErrorEntries[] =
|
|||
"\n"
|
||||
" * Press any key to continue."
|
||||
},
|
||||
{
|
||||
//ERROR_NOT_BEHIND_EXTENDED,
|
||||
"You can not create a partition behind an extended partition.\n"
|
||||
"\n"
|
||||
" * Press any key to continue."
|
||||
},
|
||||
{
|
||||
//ERROR_EXTENDED_NOT_LAST,
|
||||
"An extended partition must always be the last\n"
|
||||
"partition in a partition table.\n"
|
||||
"\n"
|
||||
" * Press any key to continue."
|
||||
},
|
||||
{
|
||||
NULL,
|
||||
NULL
|
||||
|
|
|
@ -1519,19 +1519,6 @@ MUI_ERROR svSEErrorEntries[] =
|
|||
"\n"
|
||||
" * Press any key to continue."
|
||||
},
|
||||
{
|
||||
//ERROR_NOT_BEHIND_EXTENDED,
|
||||
"You can not create a partition behind an extended partition.\n"
|
||||
"\n"
|
||||
" * Press any key to continue."
|
||||
},
|
||||
{
|
||||
//ERROR_EXTENDED_NOT_LAST,
|
||||
"An extended partition must always be the last\n"
|
||||
"partition in a partition table.\n"
|
||||
"\n"
|
||||
" * Press any key to continue."
|
||||
},
|
||||
{
|
||||
NULL,
|
||||
NULL
|
||||
|
|
|
@ -1499,19 +1499,6 @@ MUI_ERROR trTRErrorEntries[] =
|
|||
"\n"
|
||||
" * S<>rd<72>rmek i‡in bir d<>§meye bas<61>n<EFBFBD>z."
|
||||
},
|
||||
{
|
||||
//ERROR_NOT_BEHIND_EXTENDED,
|
||||
"Bir geniŸletilmiŸ b”l<E2809D>m arkas<61>nda bir b”l<E2809D>m oluŸturamazs<7A>n<EFBFBD>z.\n"
|
||||
"\n"
|
||||
" * S<>rd<72>rmek i‡in bir d<>§meye bas<61>n<EFBFBD>z."
|
||||
},
|
||||
{
|
||||
//ERROR_EXTENDED_NOT_LAST,
|
||||
"Bir geniŸletilmiŸ b”l<E2809D>m, her zaman bir b”l<E2809D>m\n"
|
||||
"tablosunda son b”l<E2809D>m olmal<61>d<EFBFBD>r.\n"
|
||||
"\n"
|
||||
" * S<>rd<72>rmek i‡in bir d<>§meye bas<61>n<EFBFBD>z."
|
||||
},
|
||||
{
|
||||
NULL,
|
||||
NULL
|
||||
|
|
|
@ -1519,19 +1519,6 @@ MUI_ERROR ukUAErrorEntries[] =
|
|||
"\n"
|
||||
" * Press any key to continue."
|
||||
},
|
||||
{
|
||||
//ERROR_NOT_BEHIND_EXTENDED,
|
||||
"You can not create a partition behind an extended partition.\n"
|
||||
"\n"
|
||||
" * Press any key to continue."
|
||||
},
|
||||
{
|
||||
//ERROR_EXTENDED_NOT_LAST,
|
||||
"An extended partition must always be the last\n"
|
||||
"partition in a partition table.\n"
|
||||
"\n"
|
||||
" * Press any key to continue."
|
||||
},
|
||||
{
|
||||
NULL,
|
||||
NULL
|
||||
|
|
|
@ -2054,7 +2054,8 @@ ScrollDownPartitionList(
|
|||
{
|
||||
/* Primary or extended partition */
|
||||
|
||||
if (IsContainerPartition(List->CurrentPartition->PartitionType))
|
||||
if (List->CurrentPartition->IsPartitioned == TRUE &&
|
||||
IsContainerPartition(List->CurrentPartition->PartitionType))
|
||||
{
|
||||
/* First logical partition */
|
||||
PartListEntry = List->CurrentDisk->LogicalPartListHead.Flink;
|
||||
|
@ -2147,7 +2148,8 @@ ScrollUpPartitionList(
|
|||
{
|
||||
PartEntry = CONTAINING_RECORD(PartListEntry, PARTENTRY, ListEntry);
|
||||
|
||||
if (IsContainerPartition(PartEntry->PartitionType))
|
||||
if (PartEntry->IsPartitioned == TRUE &&
|
||||
IsContainerPartition(PartEntry->PartitionType))
|
||||
{
|
||||
PartListEntry = List->CurrentDisk->LogicalPartListHead.Blink;
|
||||
PartEntry = CONTAINING_RECORD(PartListEntry, PARTENTRY, ListEntry);
|
||||
|
@ -2171,7 +2173,8 @@ ScrollUpPartitionList(
|
|||
{
|
||||
PartEntry = CONTAINING_RECORD(PartListEntry, PARTENTRY, ListEntry);
|
||||
|
||||
if (IsContainerPartition(PartEntry->PartitionType))
|
||||
if (PartEntry->IsPartitioned == TRUE &&
|
||||
IsContainerPartition(PartEntry->PartitionType))
|
||||
{
|
||||
PartListEntry = DiskEntry->LogicalPartListHead.Blink;
|
||||
if (PartListEntry != &DiskEntry->LogicalPartListHead)
|
||||
|
@ -2697,6 +2700,7 @@ DeleteCurrentPartition(
|
|||
{
|
||||
/* Nothing to merge but change current entry */
|
||||
PartEntry->IsPartitioned = FALSE;
|
||||
PartEntry->PartitionType = PARTITION_ENTRY_UNUSED;
|
||||
PartEntry->FormatState = Unformatted;
|
||||
PartEntry->DriveLetter = 0;
|
||||
}
|
||||
|
@ -2999,41 +3003,6 @@ SetMountedDeviceValues(
|
|||
}
|
||||
|
||||
|
||||
static
|
||||
BOOLEAN
|
||||
IsLastPrimaryPartiton(
|
||||
IN PPARTENTRY PartEntry)
|
||||
{
|
||||
return (PartEntry->ListEntry.Flink == &PartEntry->DiskEntry->PrimaryPartListHead);
|
||||
}
|
||||
|
||||
|
||||
static
|
||||
BOOLEAN
|
||||
IsPreviousPartitionExtended(
|
||||
IN PPARTENTRY PartEntry,
|
||||
IN PDISKENTRY DiskEntry)
|
||||
{
|
||||
PPARTENTRY PrevPartEntry;
|
||||
PLIST_ENTRY Entry;
|
||||
|
||||
Entry = PartEntry->ListEntry.Blink;
|
||||
|
||||
while (Entry != &DiskEntry->PrimaryPartListHead)
|
||||
{
|
||||
PrevPartEntry = CONTAINING_RECORD(Entry, PARTENTRY, ListEntry);
|
||||
|
||||
if (IsContainerPartition(PrevPartEntry->PartitionType))
|
||||
return TRUE;
|
||||
|
||||
Entry = Entry->Blink;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
|
||||
}
|
||||
|
||||
|
||||
static
|
||||
ULONG
|
||||
GetPrimaryPartitionCount(
|
||||
|
@ -3075,10 +3044,6 @@ PrimaryPartitionCreationChecks(
|
|||
if (GetPrimaryPartitionCount(DiskEntry) > 4)
|
||||
return ERROR_PARTITION_TABLE_FULL;
|
||||
|
||||
/* Fail if this partiton is located behind an extended partition */
|
||||
if (IsPreviousPartitionExtended(PartEntry, DiskEntry))
|
||||
return ERROR_NOT_BEHIND_EXTENDED;
|
||||
|
||||
return ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -3105,10 +3070,6 @@ ExtendedPartitionCreationChecks(
|
|||
if (DiskEntry->ExtendedPartition != NULL)
|
||||
return ERROR_ONLY_ONE_EXTENDED;
|
||||
|
||||
/* Fail if the partition is not the last list entry */
|
||||
if (!IsLastPrimaryPartiton(PartEntry))
|
||||
return ERROR_EXTENDED_NOT_LAST;
|
||||
|
||||
return ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
|
|
|
@ -1339,6 +1339,11 @@ ScmWaitForServiceConnect(PSERVICE Service)
|
|||
#ifdef USE_ASYNCHRONOUS_IO
|
||||
OVERLAPPED Overlapped = {0};
|
||||
#endif
|
||||
#if 0
|
||||
LPCWSTR lpErrorStrings[3];
|
||||
WCHAR szBuffer1[20];
|
||||
WCHAR szBuffer2[20];
|
||||
#endif
|
||||
|
||||
DPRINT("ScmWaitForServiceConnect()\n");
|
||||
|
||||
|
@ -1370,6 +1375,18 @@ ScmWaitForServiceConnect(PSERVICE Service)
|
|||
DPRINT1("CancelIo() failed (Error: %lu)\n", GetLastError());
|
||||
}
|
||||
|
||||
#if 0
|
||||
_ultow(PipeTimeout, szBuffer1, 10);
|
||||
lpErrorStrings[0] = Service->lpDisplayName;
|
||||
lpErrorStrings[1] = szBuffer1;
|
||||
|
||||
ScmLogEvent(EVENT_CONNECTION_TIMEOUT,
|
||||
EVENTLOG_ERROR_TYPE,
|
||||
2,
|
||||
lpErrorStrings);
|
||||
#endif
|
||||
DPRINT1("Log EVENT_CONNECTION_TIMEOUT by %S\n", Service->lpDisplayName);
|
||||
|
||||
return ERROR_SERVICE_REQUEST_TIMEOUT;
|
||||
}
|
||||
else if (dwError == WAIT_OBJECT_0)
|
||||
|
@ -1425,6 +1442,17 @@ ScmWaitForServiceConnect(PSERVICE Service)
|
|||
DPRINT1("CancelIo() failed (Error: %lu)\n", GetLastError());
|
||||
}
|
||||
|
||||
#if 0
|
||||
_ultow(PipeTimeout, szBuffer1, 10);
|
||||
lpErrorStrings[0] = szBuffer1;
|
||||
|
||||
ScmLogEvent(EVENT_READFILE_TIMEOUT,
|
||||
EVENTLOG_ERROR_TYPE,
|
||||
1,
|
||||
lpErrorStrings);
|
||||
#endif
|
||||
DPRINT1("Log EVENT_READFILE_TIMEOUT by %S\n", Service->lpDisplayName);
|
||||
|
||||
return ERROR_SERVICE_REQUEST_TIMEOUT;
|
||||
}
|
||||
else if (dwError == WAIT_OBJECT_0)
|
||||
|
@ -1456,18 +1484,24 @@ ScmWaitForServiceConnect(PSERVICE Service)
|
|||
return dwError;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (dwProcessId != Service->lpImage->dwProcessId)
|
||||
{
|
||||
/*
|
||||
LPWSTR Strings[3]
|
||||
|
||||
ScmLogError(EVENT_SERVICE_DIFFERENT_PID_CONNECTED,
|
||||
3,
|
||||
lpStrings);
|
||||
*/
|
||||
}
|
||||
if (dwProcessId != Service->lpImage->dwProcessId)
|
||||
{
|
||||
#if 0
|
||||
_ultow(Service->lpImage->dwProcessId, szBuffer1, 10);
|
||||
_ultow(dwProcessId, szBuffer2, 10);
|
||||
|
||||
lpErrorStrings[0] = Service->lpDisplayName;
|
||||
lpErrorStrings[1] = szBuffer1;
|
||||
lpErrorStrings[2] = szBuffer2;
|
||||
|
||||
ScmLogEvent(EVENT_SERVICE_DIFFERENT_PID_CONNECTED,
|
||||
EVENTLOG_WARNING_TYPE,
|
||||
3,
|
||||
lpErrorStrings);
|
||||
#endif
|
||||
|
||||
DPRINT1("Log EVENT_SERVICE_DIFFERENT_PID_CONNECTED by %S\n", Service->lpDisplayName);
|
||||
}
|
||||
|
||||
DPRINT("ScmWaitForServiceConnect() done\n");
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
#define _SERVICES_H
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#define WIN32_NO_STATUS
|
||||
#define _INC_WINDOWS
|
||||
|
|
|
@ -1,16 +1,24 @@
|
|||
|
||||
include_directories(
|
||||
${REACTOS_SOURCE_DIR}/include/reactos/idl
|
||||
${CMAKE_CURRENT_BINARY_DIR})
|
||||
|
||||
add_rpc_files(server ${REACTOS_SOURCE_DIR}/include/reactos/idl/winreg.idl)
|
||||
|
||||
list(APPEND SOURCE
|
||||
environment.c
|
||||
rpcserver.c
|
||||
sas.c
|
||||
screensaver.c
|
||||
setup.c
|
||||
winlogon.c
|
||||
wlx.c
|
||||
winlogon.h)
|
||||
winlogon.h
|
||||
${CMAKE_CURRENT_BINARY_DIR}/winreg_s.c)
|
||||
|
||||
add_executable(winlogon ${SOURCE} winlogon.rc)
|
||||
target_link_libraries(winlogon wine)
|
||||
set_module_type(winlogon win32gui)
|
||||
add_importlibs(winlogon user32 advapi32 userenv secur32 msvcrt kernel32 ntdll)
|
||||
add_importlibs(winlogon user32 advapi32 userenv secur32 rpcrt4 msvcrt kernel32 ntdll)
|
||||
add_pch(winlogon winlogon.h SOURCE)
|
||||
add_cd_file(TARGET winlogon DESTINATION reactos/system32 FOR all)
|
||||
|
|
570
base/system/winlogon/rpcserver.c
Normal file
570
base/system/winlogon/rpcserver.c
Normal file
|
@ -0,0 +1,570 @@
|
|||
/*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS Winlogon
|
||||
* FILE: base/system/winlogon/rpcserver.c
|
||||
* PURPOSE: RPC server interface for the remote registry calls
|
||||
* PROGRAMMERS: Eric Kohl
|
||||
*/
|
||||
|
||||
/* INCLUDES *****************************************************************/
|
||||
|
||||
#include "winlogon.h"
|
||||
|
||||
#include <rpc.h>
|
||||
#include <winreg_s.h>
|
||||
|
||||
|
||||
/* FUNCTIONS *****************************************************************/
|
||||
|
||||
BOOL
|
||||
StartRpcServer(VOID)
|
||||
{
|
||||
RPC_STATUS Status;
|
||||
|
||||
TRACE("ScmStartRpcServer() called\n");
|
||||
|
||||
Status = RpcServerUseProtseqEpW(L"ncacn_np",
|
||||
10,
|
||||
L"\\pipe\\winreg",
|
||||
NULL);
|
||||
if (Status != RPC_S_OK)
|
||||
{
|
||||
ERR("RpcServerUseProtseqEpW() failed (Status %lx)\n", Status);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
Status = RpcServerRegisterIf(winreg_v1_0_s_ifspec,
|
||||
NULL,
|
||||
NULL);
|
||||
if (Status != RPC_S_OK)
|
||||
{
|
||||
ERR("RpcServerRegisterIf() failed (Status %lx)\n", Status);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
Status = RpcServerListen(1, 20, TRUE);
|
||||
if (Status != RPC_S_OK)
|
||||
{
|
||||
ERR("RpcServerListen() failed (Status %lx)\n", Status);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
TRACE("StartRpcServer() done\n");
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
void __RPC_FAR * __RPC_USER MIDL_user_allocate(SIZE_T len)
|
||||
{
|
||||
return HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, len);
|
||||
}
|
||||
|
||||
|
||||
void __RPC_USER MIDL_user_free(void __RPC_FAR * ptr)
|
||||
{
|
||||
HeapFree(GetProcessHeap(), 0, ptr);
|
||||
}
|
||||
|
||||
|
||||
void __RPC_USER RPC_HKEY_rundown(RPC_HKEY hSCObject)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
/* Function 0 */
|
||||
error_status_t
|
||||
WINAPI
|
||||
OpenClassesRoot(
|
||||
PREGISTRY_SERVER_NAME ServerName,
|
||||
REGSAM samDesired,
|
||||
PRPC_HKEY phKey)
|
||||
{
|
||||
TRACE("\n");
|
||||
return ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
/* Function 1 */
|
||||
error_status_t
|
||||
WINAPI
|
||||
OpenCurrentUser(
|
||||
PREGISTRY_SERVER_NAME ServerName,
|
||||
REGSAM samDesired,
|
||||
PRPC_HKEY phKey)
|
||||
{
|
||||
TRACE("\n");
|
||||
return ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
/* Function 2 */
|
||||
error_status_t
|
||||
WINAPI
|
||||
OpenLocalMachine(
|
||||
PREGISTRY_SERVER_NAME ServerName,
|
||||
REGSAM samDesired,
|
||||
PRPC_HKEY phKey)
|
||||
{
|
||||
TRACE("\n");
|
||||
return ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
/* Function 3 */
|
||||
error_status_t
|
||||
WINAPI
|
||||
OpenPerformanceData(
|
||||
PREGISTRY_SERVER_NAME ServerName,
|
||||
REGSAM samDesired,
|
||||
PRPC_HKEY phKey)
|
||||
{
|
||||
TRACE("\n");
|
||||
return ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
/* Function 4 */
|
||||
error_status_t
|
||||
WINAPI
|
||||
OpenUsers(
|
||||
PREGISTRY_SERVER_NAME ServerName,
|
||||
REGSAM samDesired,
|
||||
PRPC_HKEY phKey)
|
||||
{
|
||||
TRACE("\n");
|
||||
return ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
/* Function 5 */
|
||||
error_status_t
|
||||
WINAPI
|
||||
BaseRegCloseKey(
|
||||
PRPC_HKEY hKey)
|
||||
{
|
||||
TRACE("\n");
|
||||
return ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
/* Function 6 */
|
||||
error_status_t
|
||||
WINAPI
|
||||
BaseRegCreateKey(
|
||||
RPC_HKEY hKey,
|
||||
PRPC_UNICODE_STRING lpSubKey,
|
||||
PRPC_UNICODE_STRING lpClass,
|
||||
DWORD dwOptions,
|
||||
REGSAM samDesired,
|
||||
PRPC_SECURITY_ATTRIBUTES lpSecurityAttributes,
|
||||
PRPC_HKEY phkResult,
|
||||
LPDWORD lpdwDisposition)
|
||||
{
|
||||
TRACE("\n");
|
||||
return ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
/* Function 7 */
|
||||
error_status_t
|
||||
WINAPI
|
||||
BaseRegDeleteKey(
|
||||
RPC_HKEY hKey,
|
||||
PRPC_UNICODE_STRING lpSubKey)
|
||||
{
|
||||
TRACE("\n");
|
||||
return ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
/* Function 8 */
|
||||
error_status_t
|
||||
WINAPI
|
||||
BaseRegDeleteValue(
|
||||
RPC_HKEY hKey,
|
||||
PRPC_UNICODE_STRING lpValueName)
|
||||
{
|
||||
TRACE("\n");
|
||||
return ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
/* Function 9 */
|
||||
error_status_t
|
||||
WINAPI
|
||||
BaseRegEnumKey(
|
||||
RPC_HKEY hKey,
|
||||
DWORD dwIndex,
|
||||
PRPC_UNICODE_STRING lpNameIn,
|
||||
PRPC_UNICODE_STRING lpNameOut,
|
||||
PRPC_UNICODE_STRING lpClassIn,
|
||||
PRPC_UNICODE_STRING *lplpClassOut,
|
||||
PFILETIME lpftLastWriteTime)
|
||||
{
|
||||
TRACE("\n");
|
||||
return ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
/* Function 10 */
|
||||
error_status_t
|
||||
WINAPI
|
||||
BaseRegEnumValue(
|
||||
RPC_HKEY hKey,
|
||||
DWORD dwIndex,
|
||||
PRPC_UNICODE_STRING lpValueNameIn,
|
||||
PRPC_UNICODE_STRING lpValueNameOut,
|
||||
LPDWORD lpType,
|
||||
LPBYTE lpData,
|
||||
LPDWORD lpcbData,
|
||||
LPDWORD lpcbLen)
|
||||
{
|
||||
TRACE("\n");
|
||||
return ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
/* Function 11 */
|
||||
error_status_t
|
||||
__stdcall
|
||||
BaseRegFlushKey(
|
||||
RPC_HKEY hKey)
|
||||
{
|
||||
TRACE("\n");
|
||||
return ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
/* Function 12 */
|
||||
error_status_t
|
||||
__stdcall
|
||||
BaseRegGetKeySecurity(
|
||||
RPC_HKEY hKey,
|
||||
SECURITY_INFORMATION SecurityInformation,
|
||||
PRPC_SECURITY_DESCRIPTOR pRpcSecurityDescriptorIn,
|
||||
PRPC_SECURITY_DESCRIPTOR pRpcSecurityDescriptorOut)
|
||||
{
|
||||
TRACE("\n");
|
||||
return ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
/* Function 13 */
|
||||
error_status_t
|
||||
__stdcall
|
||||
BaseRegLoadKey(
|
||||
RPC_HKEY hKey,
|
||||
PRPC_UNICODE_STRING lpSubKey,
|
||||
PRPC_UNICODE_STRING lpFile)
|
||||
{
|
||||
TRACE("\n");
|
||||
return ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
/* Function 14 */
|
||||
void
|
||||
__stdcall
|
||||
Opnum14NotImplemented(
|
||||
handle_t IDL_handle)
|
||||
{
|
||||
TRACE("\n");
|
||||
}
|
||||
|
||||
|
||||
/* Function 15 */
|
||||
error_status_t
|
||||
__stdcall
|
||||
BaseRegOpenKey(
|
||||
RPC_HKEY hKey,
|
||||
PRPC_UNICODE_STRING lpSubKey,
|
||||
DWORD dwOptions,
|
||||
REGSAM samDesired,
|
||||
PRPC_HKEY phkResult)
|
||||
{
|
||||
TRACE("\n");
|
||||
return ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
/* Function 16 */
|
||||
error_status_t
|
||||
__stdcall
|
||||
BaseRegQueryInfoKey(
|
||||
RPC_HKEY hKey,
|
||||
PRPC_UNICODE_STRING lpClassIn,
|
||||
PRPC_UNICODE_STRING lpClassOut,
|
||||
LPDWORD lpcSubKeys,
|
||||
LPDWORD lpcbMaxSubKeyLen,
|
||||
LPDWORD lpcbMaxClassLen,
|
||||
LPDWORD lpcValues,
|
||||
LPDWORD lpcbMaxValueNameLen,
|
||||
LPDWORD lpcbMaxValueLen,
|
||||
LPDWORD lpcbSecurityDescriptor,
|
||||
PFILETIME lpftLastWriteTime)
|
||||
{
|
||||
TRACE("\n");
|
||||
return ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
/* Function 17 */
|
||||
error_status_t
|
||||
__stdcall
|
||||
BaseRegQueryValue(
|
||||
RPC_HKEY hKey,
|
||||
PRPC_UNICODE_STRING lpValueName,
|
||||
LPDWORD lpType,
|
||||
LPBYTE lpData,
|
||||
LPDWORD lpcbData,
|
||||
LPDWORD lpcbLen)
|
||||
{
|
||||
TRACE("\n");
|
||||
return ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
/* Function 18 */
|
||||
error_status_t
|
||||
__stdcall
|
||||
BaseRegReplaceKey(
|
||||
RPC_HKEY hKey,
|
||||
PRPC_UNICODE_STRING lpSubKey,
|
||||
PRPC_UNICODE_STRING lpNewFile,
|
||||
PRPC_UNICODE_STRING lpOldFile)
|
||||
{
|
||||
TRACE("\n");
|
||||
return ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
/* Function 19 */
|
||||
error_status_t
|
||||
__stdcall
|
||||
BaseRegRestoreKey(
|
||||
RPC_HKEY hKey,
|
||||
PRPC_UNICODE_STRING lpFile,
|
||||
DWORD Flags)
|
||||
{
|
||||
TRACE("\n");
|
||||
return ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
/* Function 20 */
|
||||
error_status_t
|
||||
__stdcall
|
||||
BaseRegSaveKey(
|
||||
RPC_HKEY hKey,
|
||||
PRPC_UNICODE_STRING lpFile,
|
||||
PRPC_SECURITY_ATTRIBUTES pSecurityAttributes)
|
||||
{
|
||||
TRACE("\n");
|
||||
return ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
/* Function 21 */
|
||||
error_status_t
|
||||
__stdcall
|
||||
BaseRegSetKeySecurity(
|
||||
RPC_HKEY hKey,
|
||||
SECURITY_INFORMATION SecurityInformation,
|
||||
PRPC_SECURITY_DESCRIPTOR pRpcSecurityDescriptor)
|
||||
{
|
||||
TRACE("\n");
|
||||
return ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
/* Function 22 */
|
||||
error_status_t
|
||||
__stdcall
|
||||
BaseRegSetValue(
|
||||
RPC_HKEY hKey,
|
||||
PRPC_UNICODE_STRING lpValueName,
|
||||
DWORD dwType,
|
||||
LPBYTE lpData,
|
||||
DWORD cbData)
|
||||
{
|
||||
TRACE("\n");
|
||||
return ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
/* Function 23 */
|
||||
error_status_t
|
||||
__stdcall
|
||||
BaseRegUnLoadKey(
|
||||
RPC_HKEY hKey,
|
||||
PRPC_UNICODE_STRING lpSubKey)
|
||||
{
|
||||
TRACE("\n");
|
||||
return ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
/* Function 24 */
|
||||
ULONG
|
||||
__stdcall
|
||||
BaseInitiateSystemShutdown(
|
||||
PREGISTRY_SERVER_NAME ServerName,
|
||||
PRPC_UNICODE_STRING lpMessage,
|
||||
ULONG dwTimeout,
|
||||
BOOLEAN bForceAppsClosed,
|
||||
BOOLEAN bRebootAfterShutdown)
|
||||
{
|
||||
TRACE("BaseInitiateSystemShutdown()\n");
|
||||
return ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
/* Function 25 */
|
||||
ULONG
|
||||
__stdcall
|
||||
BaseAbortSystemShutdown(
|
||||
PREGISTRY_SERVER_NAME ServerName)
|
||||
{
|
||||
TRACE("\n");
|
||||
return ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
/* Function 26 */
|
||||
error_status_t
|
||||
__stdcall
|
||||
BaseRegGetVersion(
|
||||
RPC_HKEY hKey,
|
||||
LPDWORD lpdwVersion)
|
||||
{
|
||||
TRACE("\n");
|
||||
return ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
/* Function 27 */
|
||||
error_status_t
|
||||
__stdcall
|
||||
OpenCurrentConfig(
|
||||
PREGISTRY_SERVER_NAME ServerName,
|
||||
REGSAM samDesired,
|
||||
PRPC_HKEY phKey)
|
||||
{
|
||||
TRACE("\n");
|
||||
return ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
/* Function 28 */
|
||||
void
|
||||
__stdcall
|
||||
Opnum28NotImplemented(
|
||||
handle_t IDL_handle)
|
||||
{
|
||||
TRACE("\n");
|
||||
}
|
||||
|
||||
|
||||
/* Function 29 */
|
||||
error_status_t
|
||||
__stdcall
|
||||
BaseRegQueryMultipleValues(
|
||||
RPC_HKEY hKey,
|
||||
PRVALENT val_listIn,
|
||||
PRVALENT val_listOut,
|
||||
DWORD num_vals,
|
||||
char *lpvalueBuf,
|
||||
LPDWORD ldwTotsize)
|
||||
{
|
||||
TRACE("\n");
|
||||
return ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
/* Function 30 */
|
||||
ULONG
|
||||
__stdcall
|
||||
BaseInitiateSystemShutdownEx(
|
||||
PREGISTRY_SERVER_NAME ServerName,
|
||||
PRPC_UNICODE_STRING lpMessage,
|
||||
ULONG dwTimeout,
|
||||
BOOLEAN bForceAppsClosed,
|
||||
BOOLEAN bRebootAfterShutdown,
|
||||
ULONG dwReason)
|
||||
{
|
||||
TRACE("\n");
|
||||
return ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
/* Function 31 */
|
||||
error_status_t
|
||||
__stdcall
|
||||
BaseRegSaveKeyEx(
|
||||
RPC_HKEY hKey,
|
||||
PRPC_UNICODE_STRING lpFile,
|
||||
PRPC_SECURITY_ATTRIBUTES pSecurityAttributes,
|
||||
DWORD Flags)
|
||||
{
|
||||
TRACE("\n");
|
||||
return ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
/* Function 32 */
|
||||
error_status_t
|
||||
__stdcall
|
||||
OpenPerformanceText(
|
||||
PREGISTRY_SERVER_NAME ServerName,
|
||||
REGSAM samDesired,
|
||||
PRPC_HKEY phKey)
|
||||
{
|
||||
TRACE("\n");
|
||||
return ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
/* Function 33 */
|
||||
error_status_t
|
||||
__stdcall
|
||||
OpenPerformanceNlsText(
|
||||
PREGISTRY_SERVER_NAME ServerName,
|
||||
REGSAM samDesired,
|
||||
PRPC_HKEY phKey)
|
||||
{
|
||||
TRACE("\n");
|
||||
return ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
/* Function 34 */
|
||||
error_status_t
|
||||
__stdcall
|
||||
BaseRegQueryMultipleValues2(
|
||||
RPC_HKEY hKey,
|
||||
PRVALENT val_listIn,
|
||||
PRVALENT val_listOut,
|
||||
DWORD num_vals,
|
||||
char *lpvalueBuf,
|
||||
LPDWORD ldwTotsize,
|
||||
LPDWORD ldwRequiredSize)
|
||||
{
|
||||
TRACE("\n");
|
||||
return ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
/* Function 35 */
|
||||
error_status_t
|
||||
__stdcall
|
||||
BaseRegDeleteKeyEx(
|
||||
RPC_HKEY hKey,
|
||||
PRPC_UNICODE_STRING lpSubKey,
|
||||
REGSAM AccessMask,
|
||||
DWORD Reserved)
|
||||
{
|
||||
TRACE("\n");
|
||||
return ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
/* EOF */
|
|
@ -356,6 +356,13 @@ WinMain(
|
|||
ExitProcess(1);
|
||||
}
|
||||
|
||||
if (!StartRpcServer())
|
||||
{
|
||||
ERR("WL: Could not start the RPC server\n");
|
||||
NtRaiseHardError(STATUS_SYSTEM_PROCESS_TERMINATED, 0, 0, NULL, OptionOk, &HardErrorResponse);
|
||||
ExitProcess(1);
|
||||
}
|
||||
|
||||
if (!StartServicesManager())
|
||||
{
|
||||
ERR("WL: Could not start services.exe\n");
|
||||
|
|
|
@ -259,6 +259,10 @@ extern PWLSESSION WLSession;
|
|||
BOOL
|
||||
CreateUserEnvironment(IN PWLSESSION Session);
|
||||
|
||||
/* rpcserver.c */
|
||||
BOOL
|
||||
StartRpcServer(VOID);
|
||||
|
||||
/* sas.c */
|
||||
BOOL
|
||||
SetDefaultLanguage(IN BOOL UserProfile);
|
||||
|
|
|
@ -1645,7 +1645,7 @@ HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon","Shell",0x00020000,
|
|||
|
||||
HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Policies",,0x00000012
|
||||
HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Run",,0x00000012
|
||||
HKCU,"Software\Microsoft\Windows\CurrentVersion\Telephony",,0x00000012
|
||||
HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony",,0x00000012
|
||||
HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall",,0x00000012
|
||||
|
||||
HKCU,"SOFTWARE\Microsoft\Windows NT",,0x00000012
|
||||
|
@ -1711,8 +1711,8 @@ HKCU,"SOFTWARE\ReactOS\Debug","SpyInclude",0x00020000,"INCLUDEALL"
|
|||
;HKCU,"SOFTWARE\ReactOS\Debug","SpyExcludeDWP",0x00020000,""
|
||||
|
||||
; Internet Explorer
|
||||
HKCU,Software\Wine\MSHTML,"GeckoUrl",,"http://source.winehq.org/winegecko.php"
|
||||
HKCU,Software\Wine\MSHTML,"GeckoCabDir",0x00020000,"%SystemRoot%\"
|
||||
HKCU,"SOFTWARE\Wine\MSHTML","GeckoUrl",,"http://source.winehq.org/winegecko.php"
|
||||
HKCU,"SOFTWARE\Wine\MSHTML","GeckoCabDir",0x00020000,"%SystemRoot%\"
|
||||
|
||||
HKCU,"SOFTWARE\Microsoft\Internet Explorer\Main","Start Page",0x00000000,"http://www.reactos.org"
|
||||
|
||||
|
|
|
@ -1982,7 +1982,7 @@ HKLM,"SYSTEM\CurrentControlSet\Services\Vga","ImagePath",0x00020000,"system32\dr
|
|||
HKLM,"SYSTEM\CurrentControlSet\Services\Vga","Start",0x00010001,0x00000004
|
||||
HKLM,"SYSTEM\CurrentControlSet\Services\Vga","Type",0x00010001,0x00000001
|
||||
HKLM,"SYSTEM\CurrentControlSet\Services\Vga","Tag",0x00010001,0x00000002
|
||||
HKLM,"SYSTEM\CurrentControlSet\Hardware Profiles\Current\System\CurrentControlSet\Services\VGA\Device0","VgaCompatible",0x00010001,1
|
||||
HKLM,"SYSTEM\CurrentControlSet\Hardware Profiles\Current\System\CurrentControlSet\Services\Vga\Device0","VgaCompatible",0x00010001,1
|
||||
|
||||
HKLM,"SYSTEM\CurrentControlSet\Hardware Profiles\Current\System\CurrentControlSet\Services\Vga\Device0","InstalledDisplayDrivers",0x00010000,"vgaddi"
|
||||
HKLM,"SYSTEM\CurrentControlSet\Hardware Profiles\Current\System\CurrentControlSet\Services\Vga\Device0","DefaultSettings.VRefresh",0x00010001,1
|
||||
|
|
|
@ -9,6 +9,11 @@ if(NOT DEFINED SEPARATE_DBG)
|
|||
set(SEPARATE_DBG FALSE)
|
||||
endif()
|
||||
|
||||
# Dwarf based builds (no rsym)
|
||||
if(NOT DEFINED NO_ROSSYM)
|
||||
set(NO_ROSSYM FALSE)
|
||||
endif()
|
||||
|
||||
if(NOT DEFINED USE_PSEH3)
|
||||
set(USE_PSEH3 1)
|
||||
endif()
|
||||
|
@ -194,6 +199,14 @@ if(SEPARATE_DBG)
|
|||
"<CMAKE_C_COMPILER> <CMAKE_SHARED_LIBRARY_C_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>"
|
||||
"${OBJCOPY} --only-keep-debug <TARGET> ${REACTOS_BINARY_DIR}/symbols/${SYMBOL_FILE}"
|
||||
"${OBJCOPY} --strip-debug <TARGET>")
|
||||
elseif(NO_ROSSYM)
|
||||
# Dwarf-based build
|
||||
message(STATUS "Generating a dwarf-based build (no rsym)")
|
||||
set(CMAKE_C_LINK_EXECUTABLE "<CMAKE_C_COMPILER> ${CMAKE_C_FLAGS} <CMAKE_C_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>")
|
||||
set(CMAKE_CXX_LINK_EXECUTABLE "<CMAKE_CXX_COMPILER> ${CMAKE_CXX_FLAGS} <CMAKE_CXX_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>")
|
||||
set(CMAKE_C_CREATE_SHARED_LIBRARY "<CMAKE_C_COMPILER> ${CMAKE_C_FLAGS} <CMAKE_SHARED_LIBRARY_C_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
|
||||
set(CMAKE_CXX_CREATE_SHARED_LIBRARY "<CMAKE_CXX_COMPILER> ${CMAKE_CXX_FLAGS} <CMAKE_SHARED_LIBRARY_CXX_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
|
||||
set(CMAKE_RC_CREATE_SHARED_LIBRARY "<CMAKE_C_COMPILER> ${CMAKE_C_FLAGS} <CMAKE_SHARED_LIBRARY_C_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
|
||||
else()
|
||||
# Normal rsym build
|
||||
get_target_property(RSYM native-rsym IMPORTED_LOCATION_NOCONFIG)
|
||||
|
|
|
@ -28,6 +28,7 @@ list(APPEND SOURCE
|
|||
misc/msi.c
|
||||
misc/shutdown.c
|
||||
misc/sysfunc.c
|
||||
reg/hkcr.c
|
||||
reg/reg.c
|
||||
sec/ac.c
|
||||
sec/audit.c
|
||||
|
|
801
dll/win32/advapi32/reg/hkcr.c
Normal file
801
dll/win32/advapi32/reg/hkcr.c
Normal file
|
@ -0,0 +1,801 @@
|
|||
/*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS system libraries
|
||||
* FILE: lib/advapi32/reg/hkcr.c
|
||||
* PURPOSE: Registry functions - HKEY_CLASSES_ROOT abstraction
|
||||
* PROGRAMMER: Jerôme Gardou (jerome.gardou@reactos.org)
|
||||
*/
|
||||
|
||||
#include <advapi32.h>
|
||||
|
||||
#include <ndk/cmfuncs.h>
|
||||
#include <pseh/pseh2.h>
|
||||
|
||||
#include "reg.h"
|
||||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(reg);
|
||||
|
||||
static const UNICODE_STRING HKLM_ClassesPath = RTL_CONSTANT_STRING(L"\\Registry\\Machine\\Software\\Classes");
|
||||
|
||||
static
|
||||
LONG
|
||||
GetKeyName(HKEY hKey, PUNICODE_STRING KeyName)
|
||||
{
|
||||
UNICODE_STRING InfoName;
|
||||
PKEY_NAME_INFORMATION NameInformation;
|
||||
ULONG InfoLength;
|
||||
NTSTATUS Status;
|
||||
|
||||
/* Get info length */
|
||||
InfoLength = 0;
|
||||
Status = NtQueryKey(hKey, KeyNameInformation, NULL, 0, &InfoLength);
|
||||
if (Status != STATUS_BUFFER_TOO_SMALL)
|
||||
{
|
||||
ERR("NtQueryKey returned unexpected Status: 0x%08x\n", Status);
|
||||
return RtlNtStatusToDosError(Status);
|
||||
}
|
||||
|
||||
/* Get it for real */
|
||||
NameInformation = RtlAllocateHeap(RtlGetProcessHeap(), 0, InfoLength);
|
||||
if (NameInformation == NULL)
|
||||
{
|
||||
ERR("Failed to allocate %lu bytes", InfoLength);
|
||||
return ERROR_NOT_ENOUGH_MEMORY;
|
||||
}
|
||||
|
||||
Status = NtQueryKey(hKey, KeyNameInformation, NameInformation, InfoLength, &InfoLength);
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
RtlFreeHeap(RtlGetProcessHeap(), 0, NameInformation);
|
||||
ERR("NtQueryKey failed: 0x%08x\n", Status);
|
||||
return RtlNtStatusToDosError(Status);
|
||||
}
|
||||
|
||||
/* Make it a proper UNICODE_STRING */
|
||||
InfoName.Length = NameInformation->NameLength;
|
||||
InfoName.MaximumLength = NameInformation->NameLength;
|
||||
InfoName.Buffer = NameInformation->Name;
|
||||
|
||||
Status = RtlDuplicateUnicodeString(RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE, &InfoName, KeyName);
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
RtlFreeHeap(RtlGetProcessHeap(), 0, NameInformation);
|
||||
ERR("RtlDuplicateUnicodeString failed: 0x%08x\n", Status);
|
||||
return RtlNtStatusToDosError(Status);
|
||||
}
|
||||
|
||||
RtlFreeHeap(RtlGetProcessHeap(), 0, NameInformation);
|
||||
|
||||
return ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
static
|
||||
LONG
|
||||
GetKeySam(
|
||||
_In_ HKEY hKey,
|
||||
_Out_ REGSAM* RegSam)
|
||||
{
|
||||
NTSTATUS Status;
|
||||
OBJECT_BASIC_INFORMATION ObjectInfo;
|
||||
|
||||
Status = NtQueryObject(hKey, ObjectBasicInformation, &ObjectInfo, sizeof(ObjectInfo), NULL);
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
ERR("NtQueryObject failed, Status %x08x\n", Status);
|
||||
return RtlNtStatusToDosError(Status);
|
||||
}
|
||||
|
||||
*RegSam = ObjectInfo.GrantedAccess;
|
||||
return ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
/*
|
||||
* Gets a HKLM key from an HKCU key.
|
||||
*/
|
||||
static
|
||||
LONG
|
||||
GetFallbackHKCRKey(
|
||||
_In_ HKEY hKey,
|
||||
_Out_ HKEY* MachineKey,
|
||||
_In_ BOOL MustCreate)
|
||||
{
|
||||
UNICODE_STRING KeyName;
|
||||
LPWSTR SubKeyName;
|
||||
LONG ErrorCode;
|
||||
REGSAM SamDesired;
|
||||
|
||||
/* Get the key name */
|
||||
ErrorCode = GetKeyName(hKey, &KeyName);
|
||||
if (ErrorCode != ERROR_SUCCESS)
|
||||
return ErrorCode;
|
||||
|
||||
/* See if we really need a conversion */
|
||||
if (RtlPrefixUnicodeString(&HKLM_ClassesPath, &KeyName, TRUE))
|
||||
{
|
||||
RtlFreeUnicodeString(&KeyName);
|
||||
*MachineKey = hKey;
|
||||
return ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
SubKeyName = KeyName.Buffer + 15; /* 15 == wcslen(L"\\Registry\\User\\") */
|
||||
/* Skip the user token */
|
||||
while (*SubKeyName++ != L'\\')
|
||||
{
|
||||
if (!*SubKeyName)
|
||||
{
|
||||
ERR("Key name %S is invalid!\n", KeyName.Buffer);
|
||||
return ERROR_INTERNAL_ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
/* Use the same access mask than the original key */
|
||||
ErrorCode = GetKeySam(hKey, &SamDesired);
|
||||
if (ErrorCode != ERROR_SUCCESS)
|
||||
{
|
||||
RtlFreeUnicodeString(&KeyName);
|
||||
return ErrorCode;
|
||||
}
|
||||
|
||||
if (MustCreate)
|
||||
{
|
||||
ErrorCode = RegCreateKeyExW(
|
||||
HKEY_LOCAL_MACHINE,
|
||||
SubKeyName,
|
||||
0,
|
||||
NULL,
|
||||
0,
|
||||
SamDesired,
|
||||
NULL,
|
||||
MachineKey,
|
||||
NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Open the key. */
|
||||
ErrorCode = RegOpenKeyExW(
|
||||
HKEY_LOCAL_MACHINE,
|
||||
SubKeyName,
|
||||
0,
|
||||
SamDesired,
|
||||
MachineKey);
|
||||
}
|
||||
|
||||
RtlFreeUnicodeString(&KeyName);
|
||||
|
||||
return ErrorCode;
|
||||
}
|
||||
|
||||
/* Get the HKCU key (if it exists) from an HKCR key */
|
||||
static
|
||||
LONG
|
||||
GetPreferredHKCRKey(
|
||||
_In_ HKEY hKey,
|
||||
_Out_ HKEY* PreferredKey)
|
||||
{
|
||||
UNICODE_STRING KeyName;
|
||||
LPWSTR SubKeyName;
|
||||
LONG ErrorCode;
|
||||
REGSAM SamDesired;
|
||||
|
||||
/* Get the key name */
|
||||
ErrorCode = GetKeyName(hKey, &KeyName);
|
||||
if (ErrorCode != ERROR_SUCCESS)
|
||||
return ErrorCode;
|
||||
|
||||
/* See if we really need a conversion */
|
||||
if (!RtlPrefixUnicodeString(&HKLM_ClassesPath, &KeyName, TRUE))
|
||||
{
|
||||
RtlFreeUnicodeString(&KeyName);
|
||||
*PreferredKey = hKey;
|
||||
return ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
/* 18 == wcslen(L"\\Registry\\Machine\\") */
|
||||
SubKeyName = KeyName.Buffer + 18;
|
||||
|
||||
/* Use the same access mask than the original key */
|
||||
ErrorCode = GetKeySam(hKey, &SamDesired);
|
||||
if (ErrorCode != ERROR_SUCCESS)
|
||||
{
|
||||
RtlFreeUnicodeString(&KeyName);
|
||||
return ErrorCode;
|
||||
}
|
||||
|
||||
/* Open the key. */
|
||||
ErrorCode = RegOpenKeyExW(
|
||||
HKEY_CURRENT_USER,
|
||||
SubKeyName,
|
||||
0,
|
||||
SamDesired,
|
||||
PreferredKey);
|
||||
|
||||
RtlFreeUnicodeString(&KeyName);
|
||||
|
||||
return ErrorCode;
|
||||
}
|
||||
|
||||
/* HKCR version of RegCreateKeyExW. */
|
||||
LONG
|
||||
WINAPI
|
||||
CreateHKCRKey(
|
||||
_In_ HKEY hKey,
|
||||
_In_ LPCWSTR lpSubKey,
|
||||
_In_ DWORD Reserved,
|
||||
_In_opt_ LPWSTR lpClass,
|
||||
_In_ DWORD dwOptions,
|
||||
_In_ REGSAM samDesired,
|
||||
_In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes,
|
||||
_Out_ PHKEY phkResult,
|
||||
_Out_opt_ LPDWORD lpdwDisposition)
|
||||
{
|
||||
LONG ErrorCode;
|
||||
HKEY QueriedKey, TestKey;
|
||||
|
||||
ASSERT(IsHKCRKey(hKey));
|
||||
|
||||
/* Remove the HKCR flag while we're working */
|
||||
hKey = (HKEY)(((ULONG_PTR)hKey) & ~0x2);
|
||||
|
||||
ErrorCode = GetPreferredHKCRKey(hKey, &QueriedKey);
|
||||
|
||||
if (ErrorCode == ERROR_FILE_NOT_FOUND)
|
||||
{
|
||||
/* The current key doesn't exist on HKCU side, so we can only create it in HKLM */
|
||||
ErrorCode = RegCreateKeyExW(
|
||||
hKey,
|
||||
lpSubKey,
|
||||
Reserved,
|
||||
lpClass,
|
||||
dwOptions,
|
||||
samDesired,
|
||||
lpSecurityAttributes,
|
||||
phkResult,
|
||||
lpdwDisposition);
|
||||
if (ErrorCode == ERROR_SUCCESS)
|
||||
MakeHKCRKey(phkResult);
|
||||
return ErrorCode;
|
||||
}
|
||||
|
||||
if (ErrorCode != ERROR_SUCCESS)
|
||||
{
|
||||
/* Somehow we failed for another reason (maybe deleted key or whatever) */
|
||||
return ErrorCode;
|
||||
}
|
||||
|
||||
/* See if the subkey already exists in HKCU. */
|
||||
ErrorCode = RegOpenKeyExW(QueriedKey, lpSubKey, 0, 0, &TestKey);
|
||||
if (ErrorCode != ERROR_FILE_NOT_FOUND)
|
||||
{
|
||||
if (ErrorCode == ERROR_SUCCESS)
|
||||
{
|
||||
/* Great. Close the test one and do the real create operation */
|
||||
RegCloseKey(TestKey);
|
||||
ErrorCode = RegCreateKeyExW(
|
||||
QueriedKey,
|
||||
lpSubKey,
|
||||
Reserved,
|
||||
lpClass,
|
||||
dwOptions,
|
||||
samDesired,
|
||||
lpSecurityAttributes,
|
||||
phkResult,
|
||||
lpdwDisposition);
|
||||
if (ErrorCode == ERROR_SUCCESS)
|
||||
MakeHKCRKey(phkResult);
|
||||
}
|
||||
if (QueriedKey != hKey)
|
||||
RegCloseKey(QueriedKey);
|
||||
|
||||
return ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
if (QueriedKey != hKey)
|
||||
RegCloseKey(QueriedKey);
|
||||
|
||||
/* So we must do the create operation in HKLM, creating the missing parent keys if needed. */
|
||||
ErrorCode = GetFallbackHKCRKey(hKey, &QueriedKey, TRUE);
|
||||
if (ErrorCode != ERROR_SUCCESS)
|
||||
return ErrorCode;
|
||||
|
||||
/* Do the key creation */
|
||||
ErrorCode = RegCreateKeyEx(
|
||||
QueriedKey,
|
||||
lpSubKey,
|
||||
Reserved,
|
||||
lpClass,
|
||||
dwOptions,
|
||||
samDesired,
|
||||
lpSecurityAttributes,
|
||||
phkResult,
|
||||
lpdwDisposition);
|
||||
|
||||
if (QueriedKey != hKey)
|
||||
RegCloseKey(QueriedKey);
|
||||
|
||||
if (ErrorCode == ERROR_SUCCESS)
|
||||
MakeHKCRKey(phkResult);
|
||||
|
||||
return ErrorCode;
|
||||
}
|
||||
|
||||
/* Same as RegOpenKeyExW, but for HKEY_CLASSES_ROOT subkeys */
|
||||
LONG
|
||||
WINAPI
|
||||
OpenHKCRKey(
|
||||
_In_ HKEY hKey,
|
||||
_In_ LPCWSTR lpSubKey,
|
||||
_In_ DWORD ulOptions,
|
||||
_In_ REGSAM samDesired,
|
||||
_In_ PHKEY phkResult)
|
||||
{
|
||||
HKEY QueriedKey;
|
||||
LONG ErrorCode;
|
||||
|
||||
ASSERT(IsHKCRKey(hKey));
|
||||
|
||||
/* Remove the HKCR flag while we're working */
|
||||
hKey = (HKEY)(((ULONG_PTR)hKey) & ~0x2);
|
||||
|
||||
ErrorCode = GetPreferredHKCRKey(hKey, &QueriedKey);
|
||||
|
||||
if (ErrorCode == ERROR_FILE_NOT_FOUND)
|
||||
{
|
||||
/* The key doesn't exist on HKCU side, no chance for a subkey */
|
||||
ErrorCode = RegOpenKeyExW(hKey, lpSubKey, ulOptions, samDesired, phkResult);
|
||||
if (ErrorCode == ERROR_SUCCESS)
|
||||
MakeHKCRKey(phkResult);
|
||||
return ErrorCode;
|
||||
}
|
||||
|
||||
if (ErrorCode != ERROR_SUCCESS)
|
||||
{
|
||||
/* Somehow we failed for another reason (maybe deleted key or whatever) */
|
||||
return ErrorCode;
|
||||
}
|
||||
|
||||
/* Try on the HKCU side */
|
||||
ErrorCode = RegOpenKeyExW(QueriedKey, lpSubKey, ulOptions, samDesired, phkResult);
|
||||
if (ErrorCode == ERROR_SUCCESS)
|
||||
MakeHKCRKey(phkResult);
|
||||
|
||||
/* Close it if we must */
|
||||
if (QueriedKey != hKey)
|
||||
{
|
||||
RegCloseKey(QueriedKey);
|
||||
}
|
||||
|
||||
/* Anything else than ERROR_FILE_NOT_FOUND means that we found it, even if it is with failures. */
|
||||
if (ErrorCode != ERROR_FILE_NOT_FOUND)
|
||||
return ErrorCode;
|
||||
|
||||
/* If we're here, we must open from HKLM key. */
|
||||
ErrorCode = GetFallbackHKCRKey(hKey, &QueriedKey, FALSE);
|
||||
if (ErrorCode != ERROR_SUCCESS)
|
||||
{
|
||||
/* Maybe the key doesn't exist in the HKLM view */
|
||||
return ErrorCode;
|
||||
}
|
||||
|
||||
ErrorCode = RegOpenKeyExW(QueriedKey, lpSubKey, ulOptions, samDesired, phkResult);
|
||||
if (ErrorCode == ERROR_SUCCESS)
|
||||
MakeHKCRKey(phkResult);
|
||||
|
||||
/* Close it if we must */
|
||||
if (QueriedKey != hKey)
|
||||
{
|
||||
RegCloseKey(QueriedKey);
|
||||
}
|
||||
|
||||
return ErrorCode;
|
||||
}
|
||||
|
||||
/* HKCR version of RegDeleteKeyExW */
|
||||
LONG
|
||||
WINAPI
|
||||
DeleteHKCRKey(
|
||||
_In_ HKEY hKey,
|
||||
_In_ LPCWSTR lpSubKey,
|
||||
_In_ REGSAM RegSam,
|
||||
_In_ DWORD Reserved)
|
||||
{
|
||||
HKEY QueriedKey;
|
||||
LONG ErrorCode;
|
||||
|
||||
ASSERT(IsHKCRKey(hKey));
|
||||
|
||||
/* Remove the HKCR flag while we're working */
|
||||
hKey = (HKEY)(((ULONG_PTR)hKey) & ~0x2);
|
||||
|
||||
ErrorCode = GetPreferredHKCRKey(hKey, &QueriedKey);
|
||||
|
||||
if (ErrorCode == ERROR_FILE_NOT_FOUND)
|
||||
{
|
||||
/* The key doesn't exist on HKCU side, no chance for a subkey */
|
||||
return RegDeleteKeyExW(hKey, lpSubKey, RegSam, Reserved);
|
||||
}
|
||||
|
||||
if (ErrorCode != ERROR_SUCCESS)
|
||||
{
|
||||
/* Somehow we failed for another reason (maybe deleted key or whatever) */
|
||||
return ErrorCode;
|
||||
}
|
||||
|
||||
ErrorCode = RegDeleteKeyExW(QueriedKey, lpSubKey, RegSam, Reserved);
|
||||
|
||||
/* Close it if we must */
|
||||
if (QueriedKey != hKey)
|
||||
{
|
||||
/* The original key is on the machine view */
|
||||
RegCloseKey(QueriedKey);
|
||||
}
|
||||
|
||||
/* Anything else than ERROR_FILE_NOT_FOUND means that we found it, even if it is with failures. */
|
||||
if (ErrorCode != ERROR_FILE_NOT_FOUND)
|
||||
return ErrorCode;
|
||||
|
||||
/* If we're here, we must open from HKLM key. */
|
||||
ErrorCode = GetFallbackHKCRKey(hKey, &QueriedKey, FALSE);
|
||||
if (ErrorCode != ERROR_SUCCESS)
|
||||
{
|
||||
/* Maybe the key doesn't exist in the HKLM view */
|
||||
return ErrorCode;
|
||||
}
|
||||
|
||||
ErrorCode = RegDeleteKeyExW(QueriedKey, lpSubKey, RegSam, Reserved);
|
||||
|
||||
/* Close it if we must */
|
||||
if (QueriedKey != hKey)
|
||||
{
|
||||
RegCloseKey(QueriedKey);
|
||||
}
|
||||
|
||||
return ErrorCode;
|
||||
}
|
||||
|
||||
/* HKCR version of RegQueryValueExW */
|
||||
LONG
|
||||
WINAPI
|
||||
QueryHKCRValue(
|
||||
_In_ HKEY hKey,
|
||||
_In_ LPCWSTR Name,
|
||||
_In_ LPDWORD Reserved,
|
||||
_In_ LPDWORD Type,
|
||||
_In_ LPBYTE Data,
|
||||
_In_ LPDWORD Count)
|
||||
{
|
||||
HKEY QueriedKey;
|
||||
LONG ErrorCode;
|
||||
|
||||
ASSERT(IsHKCRKey(hKey));
|
||||
|
||||
/* Remove the HKCR flag while we're working */
|
||||
hKey = (HKEY)(((ULONG_PTR)hKey) & ~0x2);
|
||||
|
||||
ErrorCode = GetPreferredHKCRKey(hKey, &QueriedKey);
|
||||
|
||||
if (ErrorCode == ERROR_FILE_NOT_FOUND)
|
||||
{
|
||||
/* The key doesn't exist on HKCU side, no chance for a value in it */
|
||||
return RegQueryValueExW(hKey, Name, Reserved, Type, Data, Count);
|
||||
}
|
||||
|
||||
if (ErrorCode != ERROR_SUCCESS)
|
||||
{
|
||||
/* Somehow we failed for another reason (maybe deleted key or whatever) */
|
||||
return ErrorCode;
|
||||
}
|
||||
|
||||
ErrorCode = RegQueryValueExW(QueriedKey, Name, Reserved, Type, Data, Count);
|
||||
|
||||
/* Close it if we must */
|
||||
if (QueriedKey != hKey)
|
||||
{
|
||||
/* The original key is on the machine view */
|
||||
RegCloseKey(QueriedKey);
|
||||
}
|
||||
|
||||
/* Anything else than ERROR_FILE_NOT_FOUND means that we found it, even if it is with failures. */
|
||||
if (ErrorCode != ERROR_FILE_NOT_FOUND)
|
||||
return ErrorCode;
|
||||
|
||||
/* If we're here, we must open from HKLM key. */
|
||||
ErrorCode = GetFallbackHKCRKey(hKey, &QueriedKey, FALSE);
|
||||
if (ErrorCode != ERROR_SUCCESS)
|
||||
{
|
||||
/* Maybe the key doesn't exist in the HKLM view */
|
||||
return ErrorCode;
|
||||
}
|
||||
|
||||
ErrorCode = RegQueryValueExW(QueriedKey, Name, Reserved, Type, Data, Count);
|
||||
|
||||
/* Close it if we must */
|
||||
if (QueriedKey != hKey)
|
||||
{
|
||||
RegCloseKey(QueriedKey);
|
||||
}
|
||||
|
||||
return ErrorCode;
|
||||
}
|
||||
|
||||
/* HKCR version of RegSetValueExW */
|
||||
LONG
|
||||
WINAPI
|
||||
SetHKCRValue(
|
||||
_In_ HKEY hKey,
|
||||
_In_ LPCWSTR Name,
|
||||
_In_ DWORD Reserved,
|
||||
_In_ DWORD Type,
|
||||
_In_ CONST BYTE* Data,
|
||||
_In_ DWORD DataSize)
|
||||
{
|
||||
HKEY QueriedKey;
|
||||
LONG ErrorCode;
|
||||
|
||||
ASSERT(IsHKCRKey(hKey));
|
||||
|
||||
/* Remove the HKCR flag while we're working */
|
||||
hKey = (HKEY)(((ULONG_PTR)hKey) & ~0x2);
|
||||
|
||||
ErrorCode = GetPreferredHKCRKey(hKey, &QueriedKey);
|
||||
|
||||
if (ErrorCode == ERROR_FILE_NOT_FOUND)
|
||||
{
|
||||
/* The key doesn't exist on HKCU side, no chance to put a value in it */
|
||||
return RegSetValueExW(hKey, Name, Reserved, Type, Data, DataSize);
|
||||
}
|
||||
|
||||
if (ErrorCode != ERROR_SUCCESS)
|
||||
{
|
||||
/* Somehow we failed for another reason (maybe deleted key or whatever) */
|
||||
return ErrorCode;
|
||||
}
|
||||
|
||||
/* Check if the value already exists in the preferred key */
|
||||
ErrorCode = RegQueryValueExW(QueriedKey, Name, NULL, NULL, NULL, NULL);
|
||||
if (ErrorCode != ERROR_FILE_NOT_FOUND)
|
||||
{
|
||||
if (ErrorCode == ERROR_SUCCESS)
|
||||
{
|
||||
/* Yes, so we have the right to modify it */
|
||||
ErrorCode = RegSetValueExW(QueriedKey, Name, Reserved, Type, Data, DataSize);
|
||||
}
|
||||
if (QueriedKey != hKey)
|
||||
RegCloseKey(QueriedKey);
|
||||
return ErrorCode;
|
||||
}
|
||||
if (QueriedKey != hKey)
|
||||
RegCloseKey(QueriedKey);
|
||||
|
||||
/* So we must set the value in the HKLM version */
|
||||
ErrorCode = GetPreferredHKCRKey(hKey, &QueriedKey);
|
||||
if (ErrorCode == ERROR_FILE_NOT_FOUND)
|
||||
{
|
||||
/* No choice: put this in HKCU */
|
||||
return RegSetValueExW(hKey, Name, Reserved, Type, Data, DataSize);
|
||||
}
|
||||
else if (ErrorCode != ERROR_SUCCESS)
|
||||
{
|
||||
return ErrorCode;
|
||||
}
|
||||
|
||||
ErrorCode = RegSetValueExW(QueriedKey, Name, Reserved, Type, Data, DataSize);
|
||||
|
||||
if (QueriedKey != hKey)
|
||||
RegCloseKey(QueriedKey);
|
||||
|
||||
return ErrorCode;
|
||||
}
|
||||
|
||||
/* HKCR version of RegEnumKeyExW */
|
||||
LONG
|
||||
WINAPI
|
||||
EnumHKCRKey(
|
||||
_In_ HKEY hKey,
|
||||
_In_ DWORD dwIndex,
|
||||
_Out_ LPWSTR lpName,
|
||||
_Inout_ LPDWORD lpcbName,
|
||||
_Reserved_ LPDWORD lpReserved,
|
||||
_Out_opt_ LPWSTR lpClass,
|
||||
_Inout_opt_ LPDWORD lpcbClass,
|
||||
_Out_opt_ PFILETIME lpftLastWriteTime)
|
||||
{
|
||||
HKEY PreferredKey, FallbackKey;
|
||||
DWORD NumPreferredSubKeys;
|
||||
DWORD MaxFallbackSubKeyLen;
|
||||
DWORD FallbackIndex;
|
||||
WCHAR* FallbackSubKeyName = NULL;
|
||||
LONG ErrorCode;
|
||||
|
||||
ASSERT(IsHKCRKey(hKey));
|
||||
|
||||
/* Remove the HKCR flag while we're working */
|
||||
hKey = (HKEY)(((ULONG_PTR)hKey) & ~0x2);
|
||||
|
||||
/* Get the preferred key */
|
||||
ErrorCode = GetPreferredHKCRKey(hKey, &PreferredKey);
|
||||
if (ErrorCode != ERROR_SUCCESS)
|
||||
{
|
||||
if (ErrorCode == ERROR_FILE_NOT_FOUND)
|
||||
{
|
||||
/* Only the HKLM key exists */
|
||||
return RegEnumKeyExW(
|
||||
hKey,
|
||||
dwIndex,
|
||||
lpName,
|
||||
lpcbName,
|
||||
lpReserved,
|
||||
lpClass,
|
||||
lpcbClass,
|
||||
lpftLastWriteTime);
|
||||
}
|
||||
return ErrorCode;
|
||||
}
|
||||
|
||||
/* Get the fallback key */
|
||||
ErrorCode = GetFallbackHKCRKey(hKey, &FallbackKey, FALSE);
|
||||
if (ErrorCode != ERROR_SUCCESS)
|
||||
{
|
||||
if (PreferredKey != hKey)
|
||||
RegCloseKey(PreferredKey);
|
||||
if (ErrorCode == ERROR_FILE_NOT_FOUND)
|
||||
{
|
||||
/* Only the HKCU key exists */
|
||||
return RegEnumKeyExW(
|
||||
hKey,
|
||||
dwIndex,
|
||||
lpName,
|
||||
lpcbName,
|
||||
lpReserved,
|
||||
lpClass,
|
||||
lpcbClass,
|
||||
lpftLastWriteTime);
|
||||
}
|
||||
return ErrorCode;
|
||||
}
|
||||
|
||||
/* Get some info on the HKCU side */
|
||||
ErrorCode = RegQueryInfoKeyW(
|
||||
PreferredKey,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
&NumPreferredSubKeys,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL);
|
||||
if (ErrorCode != ERROR_SUCCESS)
|
||||
goto Exit;
|
||||
|
||||
if (dwIndex < NumPreferredSubKeys)
|
||||
{
|
||||
/* HKCU side takes precedence */
|
||||
ErrorCode = RegEnumKeyExW(
|
||||
PreferredKey,
|
||||
dwIndex,
|
||||
lpName,
|
||||
lpcbName,
|
||||
lpReserved,
|
||||
lpClass,
|
||||
lpcbClass,
|
||||
lpftLastWriteTime);
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
/* Here it gets tricky. We must enumerate the values from the HKLM side,
|
||||
* without reporting those which are present on the HKCU side */
|
||||
|
||||
/* Squash out the indices from HKCU */
|
||||
dwIndex -= NumPreferredSubKeys;
|
||||
|
||||
/* Get some info */
|
||||
ErrorCode = RegQueryInfoKeyW(
|
||||
FallbackKey,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
&MaxFallbackSubKeyLen,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL);
|
||||
if (ErrorCode != ERROR_SUCCESS)
|
||||
{
|
||||
ERR("Could not query info of key %p (Err: %d)\n", FallbackKey, ErrorCode);
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
ERR("Maxfallbacksubkeylen: %d\n", MaxFallbackSubKeyLen);
|
||||
|
||||
/* Allocate our buffer */
|
||||
FallbackSubKeyName = RtlAllocateHeap(
|
||||
RtlGetProcessHeap(), 0, (MaxFallbackSubKeyLen + 1) * sizeof(WCHAR));
|
||||
if (!FallbackSubKeyName)
|
||||
{
|
||||
ErrorCode = ERROR_NOT_ENOUGH_MEMORY;
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
/* We must begin at the very first subkey of the fallback key,
|
||||
* and then see if we meet keys that already are in the preferred key.
|
||||
* In that case, we must bump dwIndex, as otherwise we would enumerate a key we already
|
||||
* saw in a previous call.
|
||||
*/
|
||||
FallbackIndex = 0;
|
||||
while (TRUE)
|
||||
{
|
||||
HKEY PreferredSubKey;
|
||||
DWORD FallbackSubkeyLen = MaxFallbackSubKeyLen;
|
||||
|
||||
/* Try enumerating */
|
||||
ErrorCode = RegEnumKeyExW(
|
||||
FallbackKey,
|
||||
FallbackIndex,
|
||||
FallbackSubKeyName,
|
||||
&FallbackSubkeyLen,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL);
|
||||
if (ErrorCode != ERROR_SUCCESS)
|
||||
{
|
||||
/* Most likely ERROR_NO_MORE_ITEMS */
|
||||
ERR("Returning %d.\n", ErrorCode);
|
||||
goto Exit;
|
||||
}
|
||||
FallbackSubKeyName[FallbackSubkeyLen] = L'\0';
|
||||
|
||||
/* See if there is such a value on HKCU side */
|
||||
ErrorCode = RegOpenKeyExW(
|
||||
PreferredKey,
|
||||
FallbackSubKeyName,
|
||||
0,
|
||||
0,
|
||||
&PreferredSubKey);
|
||||
|
||||
if (ErrorCode == ERROR_SUCCESS)
|
||||
{
|
||||
RegCloseKey(PreferredSubKey);
|
||||
/* So we already enumerated it on HKCU side. */
|
||||
dwIndex++;
|
||||
}
|
||||
else if (ErrorCode != ERROR_FILE_NOT_FOUND)
|
||||
{
|
||||
ERR("Got error %d while querying for %s on HKCU side.\n", ErrorCode, FallbackSubKeyName);
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
/* See if we caught up */
|
||||
if (FallbackIndex == dwIndex)
|
||||
break;
|
||||
|
||||
FallbackIndex++;
|
||||
}
|
||||
|
||||
/* We can finally enumerate on the fallback side */
|
||||
ErrorCode = RegEnumKeyExW(
|
||||
FallbackKey,
|
||||
dwIndex,
|
||||
lpName,
|
||||
lpcbName,
|
||||
lpReserved,
|
||||
lpClass,
|
||||
lpcbClass,
|
||||
lpftLastWriteTime);
|
||||
|
||||
Exit:
|
||||
if (PreferredKey != hKey)
|
||||
RegCloseKey(PreferredKey);
|
||||
if (FallbackKey != hKey)
|
||||
RegCloseKey(FallbackKey);
|
||||
if (FallbackSubKeyName)
|
||||
RtlFreeHeap(RtlGetProcessHeap(), 0, FallbackSubKeyName);
|
||||
|
||||
return ErrorCode;
|
||||
}
|
File diff suppressed because it is too large
Load diff
86
dll/win32/advapi32/reg/reg.h
Normal file
86
dll/win32/advapi32/reg/reg.h
Normal file
|
@ -0,0 +1,86 @@
|
|||
/*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS system libraries
|
||||
* FILE: lib/advapi32/reg/reg.c
|
||||
* PURPOSE: Registry functions
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
/* FUNCTIONS ****************************************************************/
|
||||
FORCEINLINE
|
||||
BOOL
|
||||
IsHKCRKey(_In_ HKEY hKey)
|
||||
{
|
||||
return ((ULONG_PTR)hKey & 0x2) != 0;
|
||||
}
|
||||
|
||||
FORCEINLINE
|
||||
void
|
||||
MakeHKCRKey(_Inout_ HKEY* hKey)
|
||||
{
|
||||
*hKey = (HKEY)((ULONG_PTR)(*hKey) | 0x2);
|
||||
}
|
||||
|
||||
LONG
|
||||
WINAPI
|
||||
CreateHKCRKey(
|
||||
_In_ HKEY hKey,
|
||||
_In_ LPCWSTR lpSubKey,
|
||||
_In_ DWORD Reserved,
|
||||
_In_opt_ LPWSTR lpClass,
|
||||
_In_ DWORD dwOptions,
|
||||
_In_ REGSAM samDesired,
|
||||
_In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes,
|
||||
_Out_ PHKEY phkResult,
|
||||
_Out_opt_ LPDWORD lpdwDisposition);
|
||||
|
||||
LONG
|
||||
WINAPI
|
||||
OpenHKCRKey(
|
||||
_In_ HKEY hKey,
|
||||
_In_ LPCWSTR lpSubKey,
|
||||
_In_ DWORD ulOptions,
|
||||
_In_ REGSAM samDesired,
|
||||
_In_ PHKEY phkResult);
|
||||
|
||||
LONG
|
||||
WINAPI
|
||||
DeleteHKCRKey(
|
||||
_In_ HKEY hKey,
|
||||
_In_ LPCWSTR lpSubKey,
|
||||
_In_ REGSAM RegSam,
|
||||
_In_ DWORD Reserved);
|
||||
|
||||
LONG
|
||||
WINAPI
|
||||
QueryHKCRValue(
|
||||
_In_ HKEY hKey,
|
||||
_In_ LPCWSTR Name,
|
||||
_In_ LPDWORD Reserved,
|
||||
_In_ LPDWORD Type,
|
||||
_In_ LPBYTE Data,
|
||||
_In_ LPDWORD Count);
|
||||
|
||||
LONG
|
||||
WINAPI
|
||||
SetHKCRValue(
|
||||
_In_ HKEY hKey,
|
||||
_In_ LPCWSTR Name,
|
||||
_In_ DWORD Reserved,
|
||||
_In_ DWORD Type,
|
||||
_In_ CONST BYTE* Data,
|
||||
_In_ DWORD DataSize);
|
||||
|
||||
LONG
|
||||
WINAPI
|
||||
EnumHKCRKey(
|
||||
_In_ HKEY hKey,
|
||||
_In_ DWORD dwIndex,
|
||||
_Out_ LPWSTR lpName,
|
||||
_Inout_ LPDWORD lpcbName,
|
||||
_Reserved_ LPDWORD lpReserved,
|
||||
_Out_opt_ LPWSTR lpClass,
|
||||
_Inout_opt_ LPDWORD lpcbClass,
|
||||
_Out_opt_ PFILETIME lpftLastWriteTime);
|
||||
|
|
@ -33,7 +33,7 @@ Onu değiştirmek ister misiniz?"
|
|||
/ : < > |"
|
||||
IDS_PATHNOTEXISTING "Kütük yolu yok."
|
||||
IDS_FILENOTEXISTING "Kütük yok."
|
||||
IDS_INVALID_FOLDERNAME "The selection contains a non-folder object"
|
||||
IDS_INVALID_FOLDERNAME "Seçim dizin olmayan bir nesne içeriyor."
|
||||
}
|
||||
|
||||
STRINGTABLE
|
||||
|
@ -136,7 +136,7 @@ STRINGTABLE
|
|||
IDS_SAVE "Sakla"
|
||||
IDS_SAVE_AS "Ayrı Sakla"
|
||||
IDS_OPEN_FILE "Kütük Aç"
|
||||
IDS_SELECT_FOLDER "Select Folder"
|
||||
IDS_SELECT_FOLDER "Dizin Seç"
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -148,7 +148,7 @@ STRINGTABLE
|
|||
IDS_KEY_PACK_LICENSES "Anahtar Paketi Rusatları"
|
||||
IDS_LICENSE_SERVER "Ruhsat Sunucusu Doğrulaması"
|
||||
IDS_SMART_CARD_LOGON "Akıllı Kartla Oturum Açma"
|
||||
IDS_DIGITAL_RIGHTS "Sayılık Hakları"
|
||||
IDS_DIGITAL_RIGHTS "Sayılık Yetkileri"
|
||||
IDS_QUALIFIED_SUBORDINATION "Nitelikli Bağlılık"
|
||||
IDS_KEY_RECOVERY "Anahtar Kurtarma"
|
||||
IDS_DOCUMENT_SIGNING "Belge İmzâlama"
|
||||
|
|
|
@ -136,7 +136,7 @@ STRINGTABLE
|
|||
IDS_PURPOSE_KEY_RECOVERY "Anahtar Kurtarma"
|
||||
IDS_PURPOSE_DOCUMENT_SIGNING "Belge İmzâlama"
|
||||
IDS_PURPOSE_LIFETIME_SIGNING "Yaşam Boyu İmzâlama"
|
||||
IDS_PURPOSE_DRM "Sayılık Hakları"
|
||||
IDS_PURPOSE_DRM "Sayılık Yetkileri"
|
||||
IDS_PURPOSE_LICENSES "Anahtar Paketi Ruhsatları"
|
||||
IDS_PURPOSE_LICENSE_SERVER "Ruhsat Sunucusu Doğrulaması"
|
||||
IDS_PURPOSE_ENROLLMENT_AGENT "Onay Belgesi İstek Yardımcısı"
|
||||
|
|
|
@ -40,7 +40,7 @@ STRINGTABLE
|
|||
BEGIN
|
||||
IDS_DEV_NO_PROBLEM "Bu aygıt düzgün çalışıyor."
|
||||
IDS_DEV_NOT_CONFIGURED "Bu aygıt doğru yapılandırılmamış."
|
||||
IDS_DEV_DEVLOADER_FAILED "Bilgisayar, iki %1 veri yolu türü bildirdiğinden dolayı ReactOS bu aygıt için sürücüyü yükleyemedi."
|
||||
IDS_DEV_DEVLOADER_FAILED "Bilgisayar, iki %1 veriyolu türü bildirdiğinden dolayı ReactOS bu aygıt için sürücüyü yükleyemedi."
|
||||
IDS_DEV_DEVLOADER_FAILED2 "Bu aygıt için %1 aygıt yükleyicisi/yükleyicileri aygıt sürücüsünü yükleyemedi."
|
||||
IDS_DEV_OUT_OF_MEMORY "Bu aygıt için sürücü kötü olabilir veyâ dizgeniz, bellekte veyâ başka kaynaklarda yavaş çalışıyor olabilir."
|
||||
IDS_DEV_ENTRY_IS_WRONG_TYPE "Sürücülerinin kötü olabilmesinden veyâ değer defterinizin bozuk olabilmesinden dolayı bu aygıt düzgün çalışmıyor."
|
||||
|
@ -111,7 +111,7 @@ BEGIN
|
|||
IDS_PROP_CSCONFIGFLAGS "CSConfig İmleri"
|
||||
IDS_PROP_EJECTIONRELATIONS "Çıkarma İlişkileri"
|
||||
IDS_PROP_REMOVALRELATIONS "Kaldırma İlişkileri"
|
||||
IDS_PROP_BUSRELATIONS "Veri Yolu İlişkileri"
|
||||
IDS_PROP_BUSRELATIONS "Veriyolu İlişkileri"
|
||||
IDS_PROP_DEVUPPERFILTERS "Üst Aygıt Süzgeçleri"
|
||||
IDS_PROP_DEVLOWERFILTERS "Alt Aygıt Süzgeçleri"
|
||||
IDS_PROP_CLASSUPPERFILTERS "Üst Sınıf Süzgeçleri"
|
||||
|
|
|
@ -1,11 +1,7 @@
|
|||
|
||||
set_cpp(WITH_RUNTIME WITH_EXCEPTIONS)
|
||||
|
||||
if(NOT MSVC)
|
||||
spec2def(framedyn.dll framedyn_gcc.spec ADD_IMPORTLIB)
|
||||
else()
|
||||
spec2def(framedyn.dll framedyn_msvc.spec ADD_IMPORTLIB)
|
||||
endif()
|
||||
spec2def(framedyn.dll framedyn.spec ADD_IMPORTLIB)
|
||||
|
||||
list(APPEND SOURCE
|
||||
main.c
|
||||
|
@ -13,18 +9,16 @@ list(APPEND SOURCE
|
|||
${CMAKE_CURRENT_BINARY_DIR}/framedyn.def)
|
||||
|
||||
if(MSVC)
|
||||
add_asm_files(framedyn_asm fix_exports_msvc.s)
|
||||
add_compile_flags("/Zc:wchar_t-")
|
||||
endif()
|
||||
|
||||
add_library(framedyn SHARED ${SOURCE} ${framedyn_asm})
|
||||
add_library(framedyn SHARED ${SOURCE})
|
||||
set_module_type(framedyn win32dll UNICODE)
|
||||
add_importlibs(framedyn oleaut32 msvcrt kernel32 ntdll)
|
||||
|
||||
add_cd_file(TARGET framedyn DESTINATION reactos/system32/wbem FOR all)
|
||||
|
||||
if(MSVC)
|
||||
add_asm_files(framedynex_asm alias_msvc.s)
|
||||
else()
|
||||
if(NOT MSVC)
|
||||
add_asm_files(framedynex_asm alias_gcc.s)
|
||||
endif()
|
||||
add_library(framedynex ${framedynex_asm})
|
||||
|
|
|
@ -24,6 +24,7 @@ DEFINE_ALIAS(__ZN8CHStringC1EPKw, ??0CHString@@QAE@PBG@Z)
|
|||
DEFINE_ALIAS(__ZN8CHStringC1EPKwi, ??0CHString@@QAE@PBGH@Z)
|
||||
DEFINE_ALIAS(__ZN8CHStringC1Ewi, ??0CHString@@QAE@GH@Z)
|
||||
DEFINE_ALIAS(__ZN8CHStringC1Ev, ??0CHString@@QAE@XZ)
|
||||
DEFINE_ALIAS(__ZN8CHStringC2Ev, ??0CHString@@QAE@XZ) // CHString::CHString(void)
|
||||
DEFINE_ALIAS(__ZNK8CHString7CollateEPKw, ?Collate@CHString@@QBEHPBG@Z)
|
||||
DEFINE_ALIAS(__ZNK8CHString7CompareEPKw, ?Compare@CHString@@QBEHPBG@Z)
|
||||
DEFINE_ALIAS(__ZNK8CHString13CompareNoCaseEPKw, ?CompareNoCase@CHString@@QBEHPBG@Z)
|
||||
|
@ -62,7 +63,7 @@ DEFINE_ALIAS(__ZN8CHString7ReleaseEv, ?Release@CHString@@IAEXXZ)
|
|||
DEFINE_ALIAS(__ZN8CHString13ReleaseBufferEi, ?ReleaseBuffer@CHString@@QAEXH@Z)
|
||||
DEFINE_ALIAS(__ZNK8CHString11ReverseFindEw, ?ReverseFind@CHString@@QBEHG@Z)
|
||||
DEFINE_ALIAS(__ZNK8CHString5RightEi, ?Right@CHString@@QBE?AV1@H@Z)
|
||||
DEFINE_ALIAS(__ZN8CHString10SafeStrlenEPKw, ?SafeStrlen@CHString@@KGHPBG@Z)
|
||||
DEFINE_ALIAS(__ZN8CHString10SafeStrlenEPKw@4, ?SafeStrlen@CHString@@KGHPBG@Z)
|
||||
DEFINE_ALIAS(__ZN8CHString5SetAtEiw, ?SetAt@CHString@@QAEXHG@Z)
|
||||
DEFINE_ALIAS(__ZNK8CHString13SpanExcludingEPKw, ?SpanExcluding@CHString@@QBE?AV1@PBG@Z)
|
||||
DEFINE_ALIAS(__ZNK8CHString13SpanIncludingEPKw, ?SpanIncluding@CHString@@QBE?AV1@PBG@Z)
|
||||
|
@ -82,7 +83,8 @@ DEFINE_ALIAS(__ZN8CHStringaSEPKh, ??4CHString@@QAEABV0@PBE@Z)
|
|||
DEFINE_ALIAS(__ZN8CHStringaSEPKw, ??4CHString@@QAEABV0@PBG@Z)
|
||||
DEFINE_ALIAS(__ZN8CHStringaSEw, ??4CHString@@QAEABV0@G@Z)
|
||||
DEFINE_ALIAS(__ZNK8CHStringixEi, ??ACHString@@QBEGH@Z)
|
||||
DEFINE_ALIAS(__ZN8CHStringD1Ev, ??1CHString@@QAE@XZ)
|
||||
DEFINE_ALIAS(__ZN8CHStringD1Ev, ??1CHString@@QAE@XZ) // CHString::~CHString() complete object destructor
|
||||
DEFINE_ALIAS(__ZN8CHStringD2Ev, ??1CHString@@QAE@XZ) // CHString::~CHString() base object destructor
|
||||
DEFINE_ALIAS(__ZplwRK8CHString, ??H@YG?AVCHString@@GABV0@@Z)
|
||||
DEFINE_ALIAS(__ZplRK8CHStringw, ??H@YG?AVCHString@@ABV0@G@Z)
|
||||
DEFINE_ALIAS(__ZplRK8CHStringPKw, ??H@YG?AVCHString@@ABV0@PBG@Z)
|
||||
|
|
|
@ -1,48 +0,0 @@
|
|||
#include <asm.inc>
|
||||
|
||||
.code64
|
||||
.align 4
|
||||
|
||||
MACRO(DEFINE_ALIAS, alias, orig)
|
||||
EXTERN &orig:ABS
|
||||
ALIAS <&alias> = <&orig>
|
||||
ENDM
|
||||
|
||||
DEFINE_ALIAS ?AllocSysString@CHString@@QBEPA_WXZ, ?AllocSysString@CHString@@QBEPAGXZ
|
||||
DEFINE_ALIAS ?AssignCopy@CHString@@IAEXHPB_W@Z, ?AssignCopy@CHString@@IAEXHPBG@Z
|
||||
DEFINE_ALIAS ??0CHString@@QAE@PB_W@Z, ??0CHString@@QAE@PBG@Z
|
||||
DEFINE_ALIAS ??0CHString@@QAE@PB_WH@Z, ??0CHString@@QAE@PBGH@Z
|
||||
DEFINE_ALIAS ??0CHString@@QAE@_WH@Z, ??0CHString@@QAE@GH@Z
|
||||
DEFINE_ALIAS ?Collate@CHString@@QBEHPB_W@Z, ?Collate@CHString@@QBEHPBG@Z
|
||||
DEFINE_ALIAS ?Compare@CHString@@QBEHPB_W@Z, ?Compare@CHString@@QBEHPBG@Z
|
||||
DEFINE_ALIAS ?CompareNoCase@CHString@@QBEHPB_W@Z, ?CompareNoCase@CHString@@QBEHPBG@Z
|
||||
DEFINE_ALIAS ?ConcatCopy@CHString@@IAEXHPB_WH0@Z, ?ConcatCopy@CHString@@IAEXHPBGH0@Z
|
||||
DEFINE_ALIAS ?ConcatInPlace@CHString@@IAEXHPB_W@Z, ?ConcatInPlace@CHString@@IAEXHPBG@Z
|
||||
DEFINE_ALIAS ?Find@CHString@@QBEHPB_W@Z, ?Find@CHString@@QBEHPBG@Z
|
||||
DEFINE_ALIAS ?Find@CHString@@QBEH_W@Z, ?Find@CHString@@QBEHG@Z
|
||||
DEFINE_ALIAS ?FindOneOf@CHString@@QBEHPB_W@Z, ?FindOneOf@CHString@@QBEHPBG@Z
|
||||
DEFINE_ALIAS ?Format@CHString@@QAAXPB_WZZ, ?Format@CHString@@QAAXPBGZZ
|
||||
DEFINE_ALIAS ?FormatMessageW@CHString@@QAAXPB_WZZ, ?FormatMessageW@CHString@@QAAXPBGZZ
|
||||
DEFINE_ALIAS ?FormatV@CHString@@QAEXPB_WPAD@Z, ?FormatV@CHString@@QAEXPBGPAD@Z
|
||||
DEFINE_ALIAS ?GetAt@CHString@@QBE_WH@Z, ?GetAt@CHString@@QBEGH@Z
|
||||
DEFINE_ALIAS ?GetBuffer@CHString@@QAEPA_WH@Z, ?GetBuffer@CHString@@QAEPAGH@Z
|
||||
DEFINE_ALIAS ?GetBufferSetLength@CHString@@QAEPA_WH@Z, ?GetBufferSetLength@CHString@@QAEPAGH@Z
|
||||
DEFINE_ALIAS ?LoadStringW@CHString@@IAEHIPA_WI@Z, ?LoadStringW@CHString@@IAEHIPAGI@Z
|
||||
DEFINE_ALIAS ?LockBuffer@CHString@@QAEPA_WXZ, ?LockBuffer@CHString@@QAEPAGXZ
|
||||
DEFINE_ALIAS ?ReverseFind@CHString@@QBEH_W@Z, ?ReverseFind@CHString@@QBEHG@Z
|
||||
DEFINE_ALIAS ?SafeStrlen@CHString@@KGHPB_W@Z, ?SafeStrlen@CHString@@KGHPBG@Z
|
||||
DEFINE_ALIAS ?SetAt@CHString@@QAEXH_W@Z, ?SetAt@CHString@@QAEXHG@Z
|
||||
DEFINE_ALIAS ?SpanExcluding@CHString@@QBE?AV1@PB_W@Z, ?SpanExcluding@CHString@@QBE?AV1@PBG@Z
|
||||
DEFINE_ALIAS ?SpanIncluding@CHString@@QBE?AV1@PB_W@Z, ?SpanIncluding@CHString@@QBE?AV1@PBG@Z
|
||||
DEFINE_ALIAS ??BCHString@@QBEPB_WXZ, ??BCHString@@QBEPBGXZ
|
||||
DEFINE_ALIAS ??YCHString@@QAEABV0@PB_W@Z, ??YCHString@@QAEABV0@PBG@Z
|
||||
DEFINE_ALIAS ??YCHString@@QAEABV0@_W@Z, ??YCHString@@QAEABV0@G@Z
|
||||
DEFINE_ALIAS ??4CHString@@QAEABV0@PB_W@Z, ??4CHString@@QAEABV0@PBG@Z
|
||||
DEFINE_ALIAS ??4CHString@@QAEABV0@_W@Z, ??4CHString@@QAEABV0@G@Z
|
||||
DEFINE_ALIAS ??ACHString@@QBE_WH@Z, ??ACHString@@QBEGH@Z
|
||||
DEFINE_ALIAS ??H@YG?AVCHString@@_WABV0@@Z, ??H@YG?AVCHString@@GABV0@@Z
|
||||
DEFINE_ALIAS ??H@YG?AVCHString@@ABV0@_W@Z, ??H@YG?AVCHString@@ABV0@G@Z
|
||||
DEFINE_ALIAS ??H@YG?AVCHString@@ABV0@PB_W@Z, ??H@YG?AVCHString@@ABV0@PBG@Z
|
||||
DEFINE_ALIAS ??H@YG?AVCHString@@PB_WABV0@@Z, ??H@YG?AVCHString@@PBGABV0@@Z
|
||||
|
||||
END
|
|
@ -1,48 +0,0 @@
|
|||
#include <asm.inc>
|
||||
|
||||
.code64
|
||||
.align 4
|
||||
|
||||
MACRO(DEFINE_ALIAS, alias, orig)
|
||||
EXTERN &orig:ABS
|
||||
ALIAS <&alias> = <&orig>
|
||||
ENDM
|
||||
|
||||
DEFINE_ALIAS ?AllocSysString@CHString@@QBEPAGXZ, ?AllocSysString@CHString@@QBEPA_WXZ
|
||||
DEFINE_ALIAS ?AssignCopy@CHString@@IAEXHPBG@Z, ?AssignCopy@CHString@@IAEXHPB_W@Z
|
||||
DEFINE_ALIAS ??0CHString@@QAE@PBG@Z, ??0CHString@@QAE@PB_W@Z
|
||||
DEFINE_ALIAS ??0CHString@@QAE@PBGH@Z, ??0CHString@@QAE@PB_WH@Z
|
||||
DEFINE_ALIAS ??0CHString@@QAE@GH@Z, ??0CHString@@QAE@_WH@Z
|
||||
DEFINE_ALIAS ?Collate@CHString@@QBEHPBG@Z, ?Collate@CHString@@QBEHPB_W@Z
|
||||
DEFINE_ALIAS ?Compare@CHString@@QBEHPBG@Z, ?Compare@CHString@@QBEHPB_W@Z
|
||||
DEFINE_ALIAS ?CompareNoCase@CHString@@QBEHPBG@Z, ?CompareNoCase@CHString@@QBEHPB_W@Z
|
||||
DEFINE_ALIAS ?ConcatCopy@CHString@@IAEXHPBGH0@Z, ?ConcatCopy@CHString@@IAEXHPB_WH0@Z
|
||||
DEFINE_ALIAS ?ConcatInPlace@CHString@@IAEXHPBG@Z, ?ConcatInPlace@CHString@@IAEXHPB_W@Z
|
||||
DEFINE_ALIAS ?Find@CHString@@QBEHPBG@Z, ?Find@CHString@@QBEHPB_W@Z
|
||||
DEFINE_ALIAS ?Find@CHString@@QBEHG@Z, ?Find@CHString@@QBEH_W@Z
|
||||
DEFINE_ALIAS ?FindOneOf@CHString@@QBEHPBG@Z, ?FindOneOf@CHString@@QBEHPB_W@Z
|
||||
DEFINE_ALIAS ?Format@CHString@@QAAXPBGZZ, ?Format@CHString@@QAAXPB_WZZ
|
||||
DEFINE_ALIAS ?FormatMessageW@CHString@@QAAXPBGZZ, ?FormatMessageW@CHString@@QAAXPB_WZZ
|
||||
DEFINE_ALIAS ?FormatV@CHString@@QAEXPBGPAD@Z, ?FormatV@CHString@@QAEXPB_WPAD@Z
|
||||
DEFINE_ALIAS ?GetAt@CHString@@QBEGH@Z, ?GetAt@CHString@@QBE_WH@Z
|
||||
DEFINE_ALIAS ?GetBuffer@CHString@@QAEPAGH@Z, ?GetBuffer@CHString@@QAEPA_WH@Z
|
||||
DEFINE_ALIAS ?GetBufferSetLength@CHString@@QAEPAGH@Z, ?GetBufferSetLength@CHString@@QAEPA_WH@Z
|
||||
DEFINE_ALIAS ?LoadStringW@CHString@@IAEHIPAGI@Z, ?LoadStringW@CHString@@IAEHIPA_WI@Z
|
||||
DEFINE_ALIAS ?LockBuffer@CHString@@QAEPAGXZ, ?LockBuffer@CHString@@QAEPA_WXZ
|
||||
DEFINE_ALIAS ?ReverseFind@CHString@@QBEHG@Z, ?ReverseFind@CHString@@QBEH_W@Z
|
||||
DEFINE_ALIAS ?SafeStrlen@CHString@@KGHPBG@Z, ?SafeStrlen@CHString@@KGHPB_W@Z
|
||||
DEFINE_ALIAS ?SetAt@CHString@@QAEXHG@Z, ?SetAt@CHString@@QAEXH_W@Z
|
||||
DEFINE_ALIAS ?SpanExcluding@CHString@@QBE?AV1@PBG@Z, ?SpanExcluding@CHString@@QBE?AV1@PB_W@Z
|
||||
DEFINE_ALIAS ?SpanIncluding@CHString@@QBE?AV1@PBG@Z, ?SpanIncluding@CHString@@QBE?AV1@PB_W@Z
|
||||
DEFINE_ALIAS ??BCHString@@QBEPBGXZ, ??BCHString@@QBEPB_WXZ
|
||||
DEFINE_ALIAS ??YCHString@@QAEABV0@PBG@Z, ??YCHString@@QAEABV0@PB_W@Z
|
||||
DEFINE_ALIAS ??YCHString@@QAEABV0@G@Z, ??YCHString@@QAEABV0@_W@Z
|
||||
DEFINE_ALIAS ??4CHString@@QAEABV0@PBG@Z, ??4CHString@@QAEABV0@PB_W@Z
|
||||
DEFINE_ALIAS ??4CHString@@QAEABV0@G@Z, ??4CHString@@QAEABV0@_W@Z
|
||||
DEFINE_ALIAS ??ACHString@@QBEGH@Z, ??ACHString@@QBE_WH@Z
|
||||
DEFINE_ALIAS ??H@YG?AVCHString@@GABV0@@Z, ??H@YG?AVCHString@@_WABV0@@Z
|
||||
DEFINE_ALIAS ??H@YG?AVCHString@@ABV0@G@Z, ??H@YG?AVCHString@@ABV0@_W@Z
|
||||
DEFINE_ALIAS ??H@YG?AVCHString@@ABV0@PBG@Z, ??H@YG?AVCHString@@ABV0@PB_W@Z
|
||||
DEFINE_ALIAS ??H@YG?AVCHString@@PBGABV0@@Z, ??H@YG?AVCHString@@PB_WABV0@@Z
|
||||
|
||||
END
|
|
@ -68,7 +68,7 @@
|
|||
@ thiscall ??4CHString@@QAEABV0@PBG@Z(wstr) _ZN8CHStringaSEPKw
|
||||
@ thiscall ??4CHString@@QAEABV0@G@Z(long) _ZN8CHStringaSEw
|
||||
@ thiscall ??ACHString@@QBEGH@Z(long) _ZNK8CHStringixEi
|
||||
@ thiscall ??1CHString@@QAE@XZ() _ZN8CHStringD1Ev
|
||||
@ thiscall ??1CHString@@QAE@XZ() _ZN8CHStringD1Ev # complete object destructor, identical to _ZN8CHStringD2Ev aka base object destructor
|
||||
@ stdcall ??H@YG?AVCHString@@GABV0@@Z(long ptr) _ZplwRK8CHString
|
||||
@ stdcall ??H@YG?AVCHString@@ABV0@G@Z(ptr long) _ZplRK8CHStringw
|
||||
@ stdcall ??H@YG?AVCHString@@ABV0@PBG@Z(ptr wstr) _ZplRK8CHStringPKw
|
|
@ -1,76 +0,0 @@
|
|||
@ thiscall ?AllocBeforeWrite@CHString@@IAEXH@Z(long)
|
||||
@ thiscall ?AllocBuffer@CHString@@IAEXH@Z(long)
|
||||
@ thiscall ?AllocCopy@CHString@@IBEXAAV1@HHH@Z(ptr long long long)
|
||||
@ thiscall ?AllocSysString@CHString@@QBEPAGXZ()
|
||||
@ thiscall ?AssignCopy@CHString@@IAEXHPBG@Z(long wstr)
|
||||
@ thiscall ??0CHString@@QAE@ABV0@@Z(ptr)
|
||||
@ thiscall ??0CHString@@QAE@PBD@Z(str)
|
||||
@ thiscall ??0CHString@@QAE@PBE@Z(str)
|
||||
@ thiscall ??0CHString@@QAE@PBG@Z(wstr)
|
||||
@ thiscall ??0CHString@@QAE@PBGH@Z(wstr long)
|
||||
@ thiscall ??0CHString@@QAE@GH@Z(long long)
|
||||
@ thiscall ??0CHString@@QAE@XZ()
|
||||
@ thiscall ?Collate@CHString@@QBEHPBG@Z(wstr)
|
||||
@ thiscall ?Compare@CHString@@QBEHPBG@Z(wstr)
|
||||
@ thiscall ?CompareNoCase@CHString@@QBEHPBG@Z(wstr)
|
||||
@ thiscall ?ConcatCopy@CHString@@IAEXHPBGH0@Z(long wstr long wstr)
|
||||
@ thiscall ?ConcatInPlace@CHString@@IAEXHPBG@Z(long wstr)
|
||||
@ thiscall ?CopyBeforeWrite@CHString@@IAEXXZ()
|
||||
@ thiscall ?Empty@CHString@@QAEXXZ()
|
||||
@ thiscall ?Find@CHString@@QBEHPBG@Z(wstr)
|
||||
@ thiscall ?Find@CHString@@QBEHG@Z(long)
|
||||
@ thiscall ?FindOneOf@CHString@@QBEHPBG@Z(wstr)
|
||||
@ thiscall ?Format@CHString@@QAAXIZZ(long long long)
|
||||
@ thiscall ?Format@CHString@@QAAXPBGZZ(long wstr long)
|
||||
@ thiscall ?FormatMessageW@CHString@@QAAXIZZ(long long long)
|
||||
@ thiscall ?FormatMessageW@CHString@@QAAXPBGZZ(long ptr long)
|
||||
@ thiscall ?FormatV@CHString@@QAEXPBGPAD@Z(wstr long)
|
||||
@ thiscall ?FreeExtra@CHString@@QAEXXZ()
|
||||
@ thiscall ?GetAllocLength@CHString@@QBEHXZ()
|
||||
@ thiscall ?GetAt@CHString@@QBEGH@Z(long)
|
||||
@ thiscall ?GetBuffer@CHString@@QAEPAGH@Z(long)
|
||||
@ thiscall ?GetBufferSetLength@CHString@@QAEPAGH@Z(long)
|
||||
@ thiscall ?GetData@CHString@@IBEPAUCHStringData@@XZ()
|
||||
@ thiscall ?GetLength@CHString@@QBEHXZ()
|
||||
@ thiscall ?Init@CHString@@IAEXXZ()
|
||||
@ thiscall ?IsEmpty@CHString@@QBEHXZ()
|
||||
@ thiscall ?Left@CHString@@QBE?AV1@H@Z(long)
|
||||
@ thiscall ?LoadStringW@CHString@@QAEHI@Z(long)
|
||||
@ thiscall ?LoadStringW@CHString@@IAEHIPAGI@Z(long wstr long)
|
||||
@ thiscall ?LockBuffer@CHString@@QAEPAGXZ()
|
||||
@ thiscall ?MakeLower@CHString@@QAEXXZ()
|
||||
@ thiscall ?MakeReverse@CHString@@QAEXXZ()
|
||||
@ thiscall ?MakeUpper@CHString@@QAEXXZ()
|
||||
@ thiscall ?Mid@CHString@@QBE?AV1@H@Z(long)
|
||||
@ thiscall ?Mid@CHString@@QBE?AV1@HH@Z(long long)
|
||||
@ thiscall ?Release@CHString@@KGXPAUCHStringData@@@Z(ptr)
|
||||
@ thiscall ?Release@CHString@@IAEXXZ()
|
||||
@ thiscall ?ReleaseBuffer@CHString@@QAEXH@Z(long)
|
||||
@ thiscall ?ReverseFind@CHString@@QBEHG@Z(long)
|
||||
@ thiscall ?Right@CHString@@QBE?AV1@H@Z(long)
|
||||
@ stdcall ?SafeStrlen@CHString@@KGHPBG@Z(wstr)
|
||||
@ thiscall ?SetAt@CHString@@QAEXHG@Z(long long)
|
||||
@ thiscall ?SpanExcluding@CHString@@QBE?AV1@PBG@Z(long wstr)
|
||||
@ thiscall ?SpanIncluding@CHString@@QBE?AV1@PBG@Z(long wstr)
|
||||
@ thiscall ?TrimLeft@CHString@@QAEXXZ()
|
||||
@ thiscall ?TrimRight@CHString@@QAEXXZ()
|
||||
@ thiscall ?UnlockBuffer@CHString@@QAEXXZ()
|
||||
@ thiscall ??BCHString@@QBEPBGXZ(ptr)
|
||||
@ thiscall ??YCHString@@QAEABV0@ABV0@@Z(ptr)
|
||||
@ thiscall ??YCHString@@QAEABV0@D@Z(long)
|
||||
@ thiscall ??YCHString@@QAEABV0@PBG@Z(wstr)
|
||||
@ thiscall ??YCHString@@QAEABV0@G@Z(long)
|
||||
@ thiscall ??4CHString@@QAEABV0@PAV0@@Z(ptr)
|
||||
@ thiscall ??4CHString@@QAEABV0@ABV0@@Z(ptr)
|
||||
@ thiscall ??4CHString@@QAEABV0@PBD@Z(str)
|
||||
@ thiscall ??4CHString@@QAEABV0@D@Z(long)
|
||||
@ thiscall ??4CHString@@QAEABV0@PBE@Z(str)
|
||||
@ thiscall ??4CHString@@QAEABV0@PBG@Z(wstr)
|
||||
@ thiscall ??4CHString@@QAEABV0@G@Z(long)
|
||||
@ thiscall ??ACHString@@QBEGH@Z(long)
|
||||
@ thiscall ??1CHString@@QAE@XZ()
|
||||
@ stdcall ??H@YG?AVCHString@@GABV0@@Z(long ptr)
|
||||
@ stdcall ??H@YG?AVCHString@@ABV0@G@Z(ptr long)
|
||||
@ stdcall ??H@YG?AVCHString@@ABV0@PBG@Z(ptr wstr)
|
||||
@ stdcall ??H@YG?AVCHString@@PBGABV0@@Z(wstr ptr)
|
||||
@ stdcall ??H@YG?AVCHString@@ABV0@0@Z(ptr ptr)
|
|
@ -28,8 +28,8 @@ BEGIN
|
|||
IDS_SEARCH "&Ara"
|
||||
IDS_FAVORITES "&Yer İmleri"
|
||||
|
||||
IDS_HIDETABS "Hide &Tabs"
|
||||
IDS_SHOWTABS "Show &Tabs"
|
||||
IDS_HIDETABS "&Sekmeleri Gizle"
|
||||
IDS_SHOWTABS "&Sekmeleri Göster"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
|
@ -51,12 +51,12 @@ MENU_POPUP MENU
|
|||
POPUP "" /* Options */
|
||||
{
|
||||
MENUITEM "", IDTB_EXPAND
|
||||
MENUITEM "S&ync", IDTB_SYNC
|
||||
MENUITEM "&Back", IDTB_BACK
|
||||
MENUITEM "&Forward", IDTB_FORWARD
|
||||
MENUITEM "&Home", IDTB_HOME
|
||||
MENUITEM "&Stop", IDTB_STOP
|
||||
MENUITEM "&Refresh", IDTB_REFRESH
|
||||
MENUITEM "&Print...", IDTB_PRINT
|
||||
MENUITEM "&Eşitle", IDTB_SYNC
|
||||
MENUITEM "&Geri", IDTB_BACK
|
||||
MENUITEM "&İleri", IDTB_FORWARD
|
||||
MENUITEM "E&v", IDTB_HOME
|
||||
MENUITEM "&Dur", IDTB_STOP
|
||||
MENUITEM "&Yenile", IDTB_REFRESH
|
||||
MENUITEM "Y&azdır...", IDTB_PRINT
|
||||
}
|
||||
}
|
||||
|
|
|
@ -27,6 +27,7 @@ list(APPEND hnetcfg_rc_deps
|
|||
|
||||
set_source_files_properties(hnetcfg.rc PROPERTIES OBJECT_DEPENDS "${hnetcfg_rc_deps}")
|
||||
set_module_type(hnetcfg win32dll)
|
||||
add_dependencies(hnetcfg stdole2)
|
||||
target_link_libraries(hnetcfg wine uuid)
|
||||
add_importlibs(hnetcfg ole32 oleaut32 advapi32 msvcrt kernel32 ntdll)
|
||||
add_pch(hnetcfg hnetcfg_private.h SOURCE)
|
||||
|
|
|
@ -24,4 +24,5 @@ set_module_type(itss win32dll)
|
|||
target_link_libraries(itss uuid wine)
|
||||
add_importlibs(itss urlmon shlwapi ole32 msvcrt kernel32 ntdll)
|
||||
add_pch(itss precomp.h SOURCE)
|
||||
add_dependencies(itss wineheaders)
|
||||
add_cd_file(TARGET itss DESTINATION reactos/system32 FOR all)
|
||||
|
|
|
@ -22,24 +22,24 @@ STRINGTABLE
|
|||
{
|
||||
IDS_TO_PRIMITIVE "Nesneyi ilk türe dönüştürmede yanlışlık."
|
||||
IDS_INVALID_CALL_ARG "Geçersiz yordam çağrısı ya da geçersiz yordam değiştirgeni."
|
||||
IDS_SUBSCRIPT_OUT_OF_RANGE "Subscript out of range"
|
||||
IDS_OBJECT_REQUIRED "Object required"
|
||||
IDS_SUBSCRIPT_OUT_OF_RANGE "Alt indis aralık dışında."
|
||||
IDS_OBJECT_REQUIRED "Nesne gerekli."
|
||||
IDS_CREATE_OBJ_ERROR "Öz devinim sunucusu nesne oluşturamıyor."
|
||||
IDS_NO_PROPERTY "Nesne bu husûsiyeti/yöntemi desteklemiyor."
|
||||
IDS_UNSUPPORTED_ACTION "Object doesn't support this action"
|
||||
IDS_UNSUPPORTED_ACTION "Nesne bu işlemi desteklemiyor."
|
||||
IDS_ARG_NOT_OPT "Değiştirgen seçimlik değil."
|
||||
IDS_SYNTAX_ERROR "Söz dizimi yanlışlığı."
|
||||
IDS_SEMICOLON """;"" bekleniyordu."
|
||||
IDS_LBRACKET """("" bekleniyordu."
|
||||
IDS_RBRACKET """)"" bekleniyordu."
|
||||
IDS_INVALID_CHAR "Invalid character"
|
||||
IDS_INVALID_CHAR "Geçersiz damga."
|
||||
IDS_UNTERMINATED_STR "Sonlandırılmamış dizgi değişmezi."
|
||||
IDS_MISPLACED_RETURN "'return' statement outside of function"
|
||||
IDS_INVALID_BREAK "Can't have 'break' outside of loop"
|
||||
IDS_INVALID_CONTINUE "Can't have 'continue' outside of loop"
|
||||
IDS_LABEL_REDEFINED "Label redefined"
|
||||
IDS_LABEL_NOT_FOUND "Label not found"
|
||||
IDS_DISABLED_CC "Conditional compilation is turned off"
|
||||
IDS_MISPLACED_RETURN """return"" deyişi işlecin dışında."
|
||||
IDS_INVALID_BREAK "Döngü dışında ""break"" olamaz."
|
||||
IDS_INVALID_CONTINUE "Döngü dışında ""continue"" olamaz."
|
||||
IDS_LABEL_REDEFINED "Etiket yeniden tanımlandı."
|
||||
IDS_LABEL_NOT_FOUND "Etiket bulunamadı."
|
||||
IDS_DISABLED_CC "Koşullu derleme kapalı."
|
||||
IDS_NOT_FUNC "İşleç bekleniyordu."
|
||||
IDS_NOT_DATE """[nesne]"" bir zaman nesnesi değil."
|
||||
IDS_NOT_NUM "Sayı bekleniyordu."
|
||||
|
@ -47,14 +47,14 @@ STRINGTABLE
|
|||
IDS_ILLEGAL_ASSIGN "Geçersiz atama."
|
||||
IDS_UNDEFINED """|"" tanımlı değil."
|
||||
IDS_NOT_BOOL "Boole nesnesi bekleniyordu."
|
||||
IDS_INVALID_DELETE "Cannot delete '|'"
|
||||
IDS_NOT_VBARRAY "VBArray object expected"
|
||||
IDS_INVALID_DELETE """|"" silinemez."
|
||||
IDS_NOT_VBARRAY "VBArray nesnesi bekleniyordu."
|
||||
IDS_JSCRIPT_EXPECTED "JScript nesnesi bekleniyordu."
|
||||
IDS_REGEXP_SYNTAX_ERROR "Düzenli deyişte söz dizimi yanlışlığı."
|
||||
IDS_URI_INVALID_CODING "URI to be decoded is incorrect"
|
||||
IDS_URI_INVALID_CODING "Çözülecek URI geçersiz."
|
||||
IDS_URI_INVALID_CHAR "Kodlanacak URI geçersiz damgalar içeriyor."
|
||||
IDS_FRACTION_DIGITS_OUT_OF_RANGE "Number of fraction digits is out of range"
|
||||
IDS_PRECISION_OUT_OF_RANGE "Precision is out of range"
|
||||
IDS_FRACTION_DIGITS_OUT_OF_RANGE "Kesir basamaklarının sayısı aralık dışında."
|
||||
IDS_PRECISION_OUT_OF_RANGE "Duyarlılık aralık dışında."
|
||||
IDS_INVALID_LENGTH "Dizi büyüklüğü bir sonlu artı tam sayı olmalı."
|
||||
IDS_ARRAY_EXPECTED "Dizi nesnesi bekleniyordu."
|
||||
}
|
||||
|
|
|
@ -314,8 +314,6 @@ LsapGetLogonSessionData(IN OUT PLSA_API_MSG RequestMsg)
|
|||
goto done;
|
||||
}
|
||||
|
||||
//TRACE("MemSize: %lu\n", MemSize);
|
||||
|
||||
MemSize = Length;
|
||||
Status = NtAllocateVirtualMemory(ProcessHandle,
|
||||
&ClientBaseAddress,
|
||||
|
|
|
@ -15,6 +15,7 @@ list(APPEND SOURCE
|
|||
|
||||
add_library(msacm32 SHARED
|
||||
${SOURCE}
|
||||
msacm.rc
|
||||
${CMAKE_CURRENT_BINARY_DIR}/msacm32.def)
|
||||
|
||||
set_module_type(msacm32 win32dll ENTRYPOINT DllMain 12 UNICODE)
|
||||
|
|
|
@ -1,12 +0,0 @@
|
|||
TOPSRCDIR = @top_srcdir@
|
||||
TOPOBJDIR = ../../..
|
||||
SRCDIR = @srcdir@
|
||||
VPATH = @srcdir@
|
||||
MODULE = imaadp32.acm
|
||||
IMPORTS = winmm user32 kernel32
|
||||
|
||||
C_SRCS = imaadp32.c
|
||||
|
||||
@MAKE_DLL_RULES@
|
||||
|
||||
### Dependencies:
|
|
@ -1 +0,0 @@
|
|||
@ stdcall DriverProc (long long long long long) ADPCM_DriverProc
|
|
@ -1,938 +0,0 @@
|
|||
/*
|
||||
* IMA ADPCM handling
|
||||
*
|
||||
* Copyright (C) 2001,2002 Eric Pouech
|
||||
*
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdarg.h>
|
||||
#include <string.h>
|
||||
#include "windef.h"
|
||||
#include "winbase.h"
|
||||
#include "wingdi.h"
|
||||
#include "winuser.h"
|
||||
#include "winnls.h"
|
||||
#include "mmsystem.h"
|
||||
#include "mmreg.h"
|
||||
#include "msacm.h"
|
||||
#include "msacmdrv.h"
|
||||
#include "wine/debug.h"
|
||||
|
||||
/* see http://www.pcisys.net/~melanson/codecs/adpcm.txt for the details */
|
||||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(adpcm);
|
||||
|
||||
/***********************************************************************
|
||||
* ADPCM_drvOpen
|
||||
*/
|
||||
static DWORD ADPCM_drvOpen(LPCSTR str)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* ADPCM_drvClose
|
||||
*/
|
||||
static DWORD ADPCM_drvClose(DWORD dwDevID)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
typedef struct tagAcmAdpcmData
|
||||
{
|
||||
void (*convert)(PACMDRVSTREAMINSTANCE adsi,
|
||||
const unsigned char*, LPDWORD, unsigned char*, LPDWORD);
|
||||
/* IMA encoding only */
|
||||
BYTE stepIndexL;
|
||||
BYTE stepIndexR;
|
||||
/* short sample; */
|
||||
} AcmAdpcmData;
|
||||
|
||||
/* table to list all supported formats... those are the basic ones. this
|
||||
* also helps given a unique index to each of the supported formats
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
int nChannels;
|
||||
int nBits;
|
||||
int rate;
|
||||
} Format;
|
||||
|
||||
static Format PCM_Formats[] =
|
||||
{
|
||||
{1, 8, 8000}, {2, 8, 8000}, {1, 16, 8000}, {2, 16, 8000},
|
||||
{1, 8, 11025}, {2, 8, 11025}, {1, 16, 11025}, {2, 16, 11025},
|
||||
{1, 8, 22050}, {2, 8, 22050}, {1, 16, 22050}, {2, 16, 22050},
|
||||
{1, 8, 44100}, {2, 8, 44100}, {1, 16, 44100}, {2, 16, 44100},
|
||||
};
|
||||
|
||||
static Format ADPCM_Formats[] =
|
||||
{
|
||||
{1, 4, 8000}, {2, 4, 8000}, {1, 4, 11025}, {2, 4, 11025},
|
||||
{1, 4, 22050}, {2, 4, 22050}, {1, 4, 44100}, {2, 4, 44100},
|
||||
};
|
||||
|
||||
#define NUM_PCM_FORMATS (sizeof(PCM_Formats) / sizeof(PCM_Formats[0]))
|
||||
#define NUM_ADPCM_FORMATS (sizeof(ADPCM_Formats) / sizeof(ADPCM_Formats[0]))
|
||||
|
||||
/***********************************************************************
|
||||
* ADPCM_GetFormatIndex
|
||||
*/
|
||||
static DWORD ADPCM_GetFormatIndex(LPWAVEFORMATEX wfx)
|
||||
{
|
||||
int i, hi;
|
||||
Format* fmts;
|
||||
|
||||
switch (wfx->wFormatTag)
|
||||
{
|
||||
case WAVE_FORMAT_PCM:
|
||||
hi = NUM_PCM_FORMATS;
|
||||
fmts = PCM_Formats;
|
||||
break;
|
||||
case WAVE_FORMAT_IMA_ADPCM:
|
||||
hi = NUM_ADPCM_FORMATS;
|
||||
fmts = ADPCM_Formats;
|
||||
break;
|
||||
default:
|
||||
return 0xFFFFFFFF;
|
||||
}
|
||||
|
||||
for (i = 0; i < hi; i++)
|
||||
{
|
||||
if (wfx->nChannels == fmts[i].nChannels &&
|
||||
wfx->nSamplesPerSec == fmts[i].rate &&
|
||||
wfx->wBitsPerSample == fmts[i].nBits)
|
||||
return i;
|
||||
}
|
||||
|
||||
return 0xFFFFFFFF;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* R16
|
||||
*
|
||||
* Read a 16 bit sample (correctly handles endianess)
|
||||
*/
|
||||
static inline short R16(const unsigned char* src)
|
||||
{
|
||||
return (short)((unsigned short)src[0] | ((unsigned short)src[1] << 8));
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* W16
|
||||
*
|
||||
* Write a 16 bit sample (correctly handles endianess)
|
||||
*/
|
||||
static inline void W16(unsigned char* dst, short s)
|
||||
{
|
||||
dst[0] = LOBYTE(s);
|
||||
dst[1] = HIBYTE(s);
|
||||
}
|
||||
|
||||
/* IMA (or DVI) APDCM codec routines */
|
||||
|
||||
static const unsigned IMA_StepTable[89] =
|
||||
{
|
||||
7, 8, 9, 10, 11, 12, 13, 14,
|
||||
16, 17, 19, 21, 23, 25, 28, 31,
|
||||
34, 37, 41, 45, 50, 55, 60, 66,
|
||||
73, 80, 88, 97, 107, 118, 130, 143,
|
||||
157, 173, 190, 209, 230, 253, 279, 307,
|
||||
337, 371, 408, 449, 494, 544, 598, 658,
|
||||
724, 796, 876, 963, 1060, 1166, 1282, 1411,
|
||||
1552, 1707, 1878, 2066, 2272, 2499, 2749, 3024,
|
||||
3327, 3660, 4026, 4428, 4871, 5358, 5894, 6484,
|
||||
7132, 7845, 8630, 9493, 10442, 11487, 12635, 13899,
|
||||
15289, 16818, 18500, 20350, 22385, 24623, 27086, 29794,
|
||||
32767
|
||||
};
|
||||
|
||||
static const int IMA_IndexTable[16] =
|
||||
{
|
||||
-1, -1, -1, -1, 2, 4, 6, 8,
|
||||
-1, -1, -1, -1, 2, 4, 6, 8
|
||||
};
|
||||
|
||||
static inline void clamp_step_index(int* stepIndex)
|
||||
{
|
||||
if (*stepIndex < 0 ) *stepIndex = 0;
|
||||
if (*stepIndex > 88) *stepIndex = 88;
|
||||
}
|
||||
|
||||
static inline void clamp_sample(int* sample)
|
||||
{
|
||||
if (*sample < -32768) *sample = -32768;
|
||||
if (*sample > 32767) *sample = 32767;
|
||||
}
|
||||
|
||||
static inline void process_nibble(unsigned char code, int* stepIndex, int* sample)
|
||||
{
|
||||
unsigned step;
|
||||
int diff;
|
||||
|
||||
code &= 0x0F;
|
||||
|
||||
step = IMA_StepTable[*stepIndex];
|
||||
diff = step >> 3;
|
||||
if (code & 1) diff += step >> 2;
|
||||
if (code & 2) diff += step >> 1;
|
||||
if (code & 4) diff += step;
|
||||
if (code & 8) *sample -= diff;
|
||||
else *sample += diff;
|
||||
clamp_sample(sample);
|
||||
*stepIndex += IMA_IndexTable[code];
|
||||
clamp_step_index(stepIndex);
|
||||
}
|
||||
|
||||
static inline unsigned char generate_nibble(int in, int* stepIndex, int* sample)
|
||||
{
|
||||
int effdiff, diff = in - *sample;
|
||||
unsigned step;
|
||||
unsigned char code;
|
||||
|
||||
if (diff < 0)
|
||||
{
|
||||
diff = -diff;
|
||||
code = 8;
|
||||
}
|
||||
else
|
||||
{
|
||||
code = 0;
|
||||
}
|
||||
|
||||
step = IMA_StepTable[*stepIndex];
|
||||
effdiff = (step >> 3);
|
||||
if (diff >= step)
|
||||
{
|
||||
code |= 4;
|
||||
diff -= step;
|
||||
effdiff += step;
|
||||
}
|
||||
step >>= 1;
|
||||
if (diff >= step)
|
||||
{
|
||||
code |= 2;
|
||||
diff -= step;
|
||||
effdiff += step;
|
||||
}
|
||||
step >>= 1;
|
||||
if (diff >= step)
|
||||
{
|
||||
code |= 1;
|
||||
effdiff += step;
|
||||
}
|
||||
if (code & 8) *sample -= effdiff;
|
||||
else *sample += effdiff;
|
||||
clamp_sample(sample);
|
||||
*stepIndex += IMA_IndexTable[code];
|
||||
clamp_step_index(stepIndex);
|
||||
return code;
|
||||
}
|
||||
|
||||
static void cvtSSima16K(PACMDRVSTREAMINSTANCE adsi,
|
||||
const unsigned char* src, LPDWORD nsrc,
|
||||
unsigned char* dst, LPDWORD ndst)
|
||||
{
|
||||
int i;
|
||||
int sampleL, sampleR;
|
||||
int stepIndexL, stepIndexR;
|
||||
int nsamp_blk = ((LPIMAADPCMWAVEFORMAT)adsi->pwfxSrc)->wSamplesPerBlock;
|
||||
int nsamp;
|
||||
/* compute the number of entire blocks we can decode...
|
||||
* it's the min of the number of entire blocks in source buffer and the number
|
||||
* of entire blocks in destination buffer
|
||||
*/
|
||||
DWORD nblock = min(*nsrc / adsi->pwfxSrc->nBlockAlign,
|
||||
*ndst / (nsamp_blk * 2 * 2));
|
||||
|
||||
*nsrc = nblock * adsi->pwfxSrc->nBlockAlign;
|
||||
*ndst = nblock * (nsamp_blk * 2 * 2);
|
||||
|
||||
nsamp_blk--; /* remove the sample in block header */
|
||||
for (; nblock > 0; nblock--)
|
||||
{
|
||||
const unsigned char* in_src = src;
|
||||
|
||||
/* handle headers first */
|
||||
sampleL = R16(src);
|
||||
stepIndexL = (unsigned)*(src + 2);
|
||||
clamp_step_index(&stepIndexL);
|
||||
src += 4;
|
||||
W16(dst, sampleL); dst += 2;
|
||||
|
||||
sampleR = R16(src);
|
||||
stepIndexR = (unsigned)*(src + 2);
|
||||
clamp_step_index(&stepIndexR);
|
||||
src += 4;
|
||||
W16(dst, sampleR); dst += 2;
|
||||
|
||||
for (nsamp = nsamp_blk; nsamp > 0; nsamp -= 8)
|
||||
{
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
process_nibble(*src, &stepIndexL, &sampleL);
|
||||
W16(dst + (2 * i + 0) * 4 + 0, sampleL);
|
||||
process_nibble(*src++ >> 4, &stepIndexL, &sampleL);
|
||||
W16(dst + (2 * i + 1) * 4 + 0, sampleL);
|
||||
}
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
process_nibble(*src , &stepIndexR, &sampleR);
|
||||
W16(dst + (2 * i + 0) * 4 + 2, sampleR);
|
||||
process_nibble(*src++ >>4, &stepIndexR, &sampleR);
|
||||
W16(dst + (2 * i + 1) * 4 + 2, sampleR);
|
||||
}
|
||||
dst += 32;
|
||||
}
|
||||
/* we have now to realign the source pointer on block */
|
||||
src = in_src + adsi->pwfxSrc->nBlockAlign;
|
||||
}
|
||||
}
|
||||
|
||||
static void cvtMMima16K(PACMDRVSTREAMINSTANCE adsi,
|
||||
const unsigned char* src, LPDWORD nsrc,
|
||||
unsigned char* dst, LPDWORD ndst)
|
||||
{
|
||||
int sample;
|
||||
int stepIndex;
|
||||
int nsamp_blk = ((LPIMAADPCMWAVEFORMAT)adsi->pwfxSrc)->wSamplesPerBlock;
|
||||
int nsamp;
|
||||
/* compute the number of entire blocks we can decode...
|
||||
* it's the min of the number of entire blocks in source buffer and the number
|
||||
* of entire blocks in destination buffer
|
||||
*/
|
||||
DWORD nblock = min(*nsrc / adsi->pwfxSrc->nBlockAlign,
|
||||
*ndst / (nsamp_blk * 2));
|
||||
|
||||
*nsrc = nblock * adsi->pwfxSrc->nBlockAlign;
|
||||
*ndst = nblock * nsamp_blk * 2;
|
||||
|
||||
nsamp_blk--; /* remove the sample in block header */
|
||||
for (; nblock > 0; nblock--)
|
||||
{
|
||||
const unsigned char* in_src = src;
|
||||
|
||||
/* handle header first */
|
||||
sample = R16(src);
|
||||
stepIndex = (unsigned)*(src + 2);
|
||||
clamp_step_index(&stepIndex);
|
||||
src += 4;
|
||||
W16(dst, sample); dst += 2;
|
||||
|
||||
for (nsamp = nsamp_blk; nsamp > 0; nsamp -= 2)
|
||||
{
|
||||
process_nibble(*src, &stepIndex, &sample);
|
||||
W16(dst, sample); dst += 2;
|
||||
process_nibble(*src++ >> 4, &stepIndex, &sample);
|
||||
W16(dst, sample); dst += 2;
|
||||
}
|
||||
/* we have now to realign the source pointer on block */
|
||||
src = in_src + adsi->pwfxSrc->nBlockAlign;
|
||||
}
|
||||
}
|
||||
|
||||
static void cvtSS16imaK(PACMDRVSTREAMINSTANCE adsi,
|
||||
const unsigned char* src, LPDWORD nsrc,
|
||||
unsigned char* dst, LPDWORD ndst)
|
||||
{
|
||||
int stepIndexL, stepIndexR;
|
||||
int sampleL, sampleR;
|
||||
BYTE code1, code2;
|
||||
int nsamp_blk = ((LPIMAADPCMWAVEFORMAT)adsi->pwfxDst)->wSamplesPerBlock;
|
||||
int i, nsamp;
|
||||
/* compute the number of entire blocks we can decode...
|
||||
* it's the min of the number of entire blocks in source buffer and the number
|
||||
* of entire blocks in destination buffer
|
||||
*/
|
||||
DWORD nblock = min(*nsrc / (nsamp_blk * 2 * 2),
|
||||
*ndst / adsi->pwfxDst->nBlockAlign);
|
||||
|
||||
*nsrc = nblock * (nsamp_blk * 2 * 2);
|
||||
*ndst = nblock * adsi->pwfxDst->nBlockAlign;
|
||||
|
||||
stepIndexL = ((AcmAdpcmData*)adsi->dwDriver)->stepIndexL;
|
||||
stepIndexR = ((AcmAdpcmData*)adsi->dwDriver)->stepIndexR;
|
||||
|
||||
nsamp_blk--; /* so that we won't count the sample in header while filling the block */
|
||||
|
||||
for (; nblock > 0; nblock--)
|
||||
{
|
||||
char* in_dst = dst;
|
||||
|
||||
/* generate header */
|
||||
sampleL = R16(src); src += 2;
|
||||
W16(dst, sampleL); dst += 2;
|
||||
*dst = (unsigned char)(unsigned)stepIndexL;
|
||||
dst += 2;
|
||||
|
||||
sampleR = R16(src); src += 2;
|
||||
W16(dst, sampleR); dst += 2;
|
||||
*dst = (unsigned char)(unsigned)stepIndexR;
|
||||
dst += 2;
|
||||
|
||||
for (nsamp = nsamp_blk; nsamp > 0; nsamp -= 8)
|
||||
{
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
code1 = generate_nibble(R16(src + (2 * i + 0) * 2 + 0),
|
||||
&stepIndexL, &sampleL);
|
||||
code2 = generate_nibble(R16(src + (2 * i + 1) * 2 + 0),
|
||||
&stepIndexL, &sampleL);
|
||||
*dst++ = (code1 << 4) | code2;
|
||||
}
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
code1 = generate_nibble(R16(src + (2 * i + 0) * 2 + 1),
|
||||
&stepIndexR, &sampleR);
|
||||
code2 = generate_nibble(R16(src + (2 * i + 1) * 2 + 1),
|
||||
&stepIndexR, &sampleR);
|
||||
*dst++ = (code1 << 4) | code2;
|
||||
}
|
||||
src += 32;
|
||||
}
|
||||
dst = in_dst + adsi->pwfxDst->nBlockAlign;
|
||||
}
|
||||
((AcmAdpcmData*)adsi->dwDriver)->stepIndexL = stepIndexL;
|
||||
((AcmAdpcmData*)adsi->dwDriver)->stepIndexR = stepIndexR;
|
||||
}
|
||||
|
||||
static void cvtMM16imaK(PACMDRVSTREAMINSTANCE adsi,
|
||||
const unsigned char* src, LPDWORD nsrc,
|
||||
unsigned char* dst, LPDWORD ndst)
|
||||
{
|
||||
int stepIndex;
|
||||
int sample;
|
||||
BYTE code1, code2;
|
||||
int nsamp_blk = ((LPIMAADPCMWAVEFORMAT)adsi->pwfxDst)->wSamplesPerBlock;
|
||||
int nsamp;
|
||||
/* compute the number of entire blocks we can decode...
|
||||
* it's the min of the number of entire blocks in source buffer and the number
|
||||
* of entire blocks in destination buffer
|
||||
*/
|
||||
DWORD nblock = min(*nsrc / (nsamp_blk * 2),
|
||||
*ndst / adsi->pwfxDst->nBlockAlign);
|
||||
|
||||
*nsrc = nblock * (nsamp_blk * 2);
|
||||
*ndst = nblock * adsi->pwfxDst->nBlockAlign;
|
||||
|
||||
stepIndex = ((AcmAdpcmData*)adsi->dwDriver)->stepIndexL;
|
||||
nsamp_blk--; /* so that we won't count the sample in header while filling the block */
|
||||
|
||||
for (; nblock > 0; nblock--)
|
||||
{
|
||||
char* in_dst = dst;
|
||||
|
||||
/* generate header */
|
||||
/* FIXME: what about the last effective sample from previous block ??? */
|
||||
/* perhaps something like:
|
||||
* sample += R16(src);
|
||||
* clamp_sample(sample);
|
||||
* and with :
|
||||
* + saving the sample in adsi->dwDriver when all blocks are done
|
||||
+ + reset should set the field in adsi->dwDriver to 0 too
|
||||
*/
|
||||
sample = R16(src); src += 2;
|
||||
W16(dst, sample); dst += 2;
|
||||
*dst = (unsigned char)(unsigned)stepIndex;
|
||||
dst += 2;
|
||||
|
||||
for (nsamp = nsamp_blk; nsamp > 0; nsamp -= 2)
|
||||
{
|
||||
code1 = generate_nibble(R16(src), &stepIndex, &sample);
|
||||
src += 2;
|
||||
code2 = generate_nibble(R16(src), &stepIndex, &sample);
|
||||
src += 2;
|
||||
*dst++ = (code1 << 4) | code2;
|
||||
}
|
||||
dst = in_dst + adsi->pwfxDst->nBlockAlign;
|
||||
}
|
||||
((AcmAdpcmData*)adsi->dwDriver)->stepIndexL = stepIndex;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* ADPCM_DriverDetails
|
||||
*
|
||||
*/
|
||||
static LRESULT ADPCM_DriverDetails(PACMDRIVERDETAILSW add)
|
||||
{
|
||||
add->fccType = ACMDRIVERDETAILS_FCCTYPE_AUDIOCODEC;
|
||||
add->fccComp = ACMDRIVERDETAILS_FCCCOMP_UNDEFINED;
|
||||
add->wMid = 0xFF;
|
||||
add->wPid = 0x00;
|
||||
add->vdwACM = 0x01000000;
|
||||
add->vdwDriver = 0x01000000;
|
||||
add->fdwSupport = ACMDRIVERDETAILS_SUPPORTF_CODEC;
|
||||
add->cFormatTags = 2; /* PCM, IMA ADPCM */
|
||||
add->cFilterTags = 0;
|
||||
add->hicon = NULL;
|
||||
MultiByteToWideChar( CP_ACP, 0, "WINE-ADPCM", -1,
|
||||
add->szShortName, sizeof(add->szShortName)/sizeof(WCHAR) );
|
||||
MultiByteToWideChar( CP_ACP, 0, "Wine IMA ADPCM converter", -1,
|
||||
add->szLongName, sizeof(add->szLongName)/sizeof(WCHAR) );
|
||||
MultiByteToWideChar( CP_ACP, 0, "Brought to you by the Wine team...", -1,
|
||||
add->szCopyright, sizeof(add->szCopyright)/sizeof(WCHAR) );
|
||||
MultiByteToWideChar( CP_ACP, 0, "Refer to LICENSE file", -1,
|
||||
add->szLicensing, sizeof(add->szLicensing)/sizeof(WCHAR) );
|
||||
add->szFeatures[0] = 0;
|
||||
|
||||
return MMSYSERR_NOERROR;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* ADPCM_FormatTagDetails
|
||||
*
|
||||
*/
|
||||
static LRESULT ADPCM_FormatTagDetails(PACMFORMATTAGDETAILSW aftd, DWORD dwQuery)
|
||||
{
|
||||
static WCHAR szPcm[]={'P','C','M',0};
|
||||
static WCHAR szImaAdPcm[]={'I','M','A',' ','A','d','P','C','M',0};
|
||||
|
||||
switch (dwQuery)
|
||||
{
|
||||
case ACM_FORMATTAGDETAILSF_INDEX:
|
||||
if (aftd->dwFormatTagIndex >= 2) return ACMERR_NOTPOSSIBLE;
|
||||
break;
|
||||
case ACM_FORMATTAGDETAILSF_LARGESTSIZE:
|
||||
if (aftd->dwFormatTag == WAVE_FORMAT_UNKNOWN)
|
||||
{
|
||||
aftd->dwFormatTagIndex = 1; /* WAVE_FORMAT_IMA_ADPCM is bigger than PCM */
|
||||
break;
|
||||
}
|
||||
/* fall thru */
|
||||
case ACM_FORMATTAGDETAILSF_FORMATTAG:
|
||||
switch (aftd->dwFormatTag)
|
||||
{
|
||||
case WAVE_FORMAT_PCM: aftd->dwFormatTagIndex = 0; break;
|
||||
case WAVE_FORMAT_IMA_ADPCM: aftd->dwFormatTagIndex = 1; break;
|
||||
default: return ACMERR_NOTPOSSIBLE;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
WARN("Unsupported query %08lx\n", dwQuery);
|
||||
return MMSYSERR_NOTSUPPORTED;
|
||||
}
|
||||
|
||||
aftd->fdwSupport = ACMDRIVERDETAILS_SUPPORTF_CODEC;
|
||||
switch (aftd->dwFormatTagIndex)
|
||||
{
|
||||
case 0:
|
||||
aftd->dwFormatTag = WAVE_FORMAT_PCM;
|
||||
aftd->cbFormatSize = sizeof(PCMWAVEFORMAT);
|
||||
aftd->cStandardFormats = NUM_PCM_FORMATS;
|
||||
lstrcpyW(aftd->szFormatTag, szPcm);
|
||||
break;
|
||||
case 1:
|
||||
aftd->dwFormatTag = WAVE_FORMAT_IMA_ADPCM;
|
||||
aftd->cbFormatSize = sizeof(IMAADPCMWAVEFORMAT);
|
||||
aftd->cStandardFormats = NUM_ADPCM_FORMATS;
|
||||
lstrcpyW(aftd->szFormatTag, szImaAdPcm);
|
||||
break;
|
||||
}
|
||||
return MMSYSERR_NOERROR;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* ADPCM_FormatDetails
|
||||
*
|
||||
*/
|
||||
static LRESULT ADPCM_FormatDetails(PACMFORMATDETAILSW afd, DWORD dwQuery)
|
||||
{
|
||||
switch (dwQuery)
|
||||
{
|
||||
case ACM_FORMATDETAILSF_FORMAT:
|
||||
if (ADPCM_GetFormatIndex(afd->pwfx) == 0xFFFFFFFF) return ACMERR_NOTPOSSIBLE;
|
||||
break;
|
||||
case ACM_FORMATDETAILSF_INDEX:
|
||||
afd->pwfx->wFormatTag = afd->dwFormatTag;
|
||||
switch (afd->dwFormatTag)
|
||||
{
|
||||
case WAVE_FORMAT_PCM:
|
||||
if (afd->dwFormatIndex >= NUM_PCM_FORMATS) return ACMERR_NOTPOSSIBLE;
|
||||
afd->pwfx->nChannels = PCM_Formats[afd->dwFormatIndex].nChannels;
|
||||
afd->pwfx->nSamplesPerSec = PCM_Formats[afd->dwFormatIndex].rate;
|
||||
afd->pwfx->wBitsPerSample = PCM_Formats[afd->dwFormatIndex].nBits;
|
||||
/* native MSACM uses a PCMWAVEFORMAT structure, so cbSize is not accessible
|
||||
* afd->pwfx->cbSize = 0;
|
||||
*/
|
||||
afd->pwfx->nBlockAlign =
|
||||
(afd->pwfx->nChannels * afd->pwfx->wBitsPerSample) / 8;
|
||||
afd->pwfx->nAvgBytesPerSec =
|
||||
afd->pwfx->nSamplesPerSec * afd->pwfx->nBlockAlign;
|
||||
break;
|
||||
case WAVE_FORMAT_IMA_ADPCM:
|
||||
if (afd->dwFormatIndex >= NUM_ADPCM_FORMATS) return ACMERR_NOTPOSSIBLE;
|
||||
afd->pwfx->nChannels = ADPCM_Formats[afd->dwFormatIndex].nChannels;
|
||||
afd->pwfx->nSamplesPerSec = ADPCM_Formats[afd->dwFormatIndex].rate;
|
||||
afd->pwfx->wBitsPerSample = ADPCM_Formats[afd->dwFormatIndex].nBits;
|
||||
afd->pwfx->nBlockAlign = 1024;
|
||||
/* we got 4 bits per sample */
|
||||
afd->pwfx->nAvgBytesPerSec =
|
||||
(afd->pwfx->nSamplesPerSec * 4) / 8;
|
||||
if (afd->cbwfx >= sizeof(WAVEFORMATEX))
|
||||
afd->pwfx->cbSize = sizeof(WORD);
|
||||
if (afd->cbwfx >= sizeof(IMAADPCMWAVEFORMAT))
|
||||
((IMAADPCMWAVEFORMAT*)afd->pwfx)->wSamplesPerBlock = (1024 - 4 * afd->pwfx->nChannels) * (2 / afd->pwfx->nChannels) + 1;
|
||||
break;
|
||||
default:
|
||||
WARN("Unsupported tag %08lx\n", afd->dwFormatTag);
|
||||
return MMSYSERR_INVALPARAM;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
WARN("Unsupported query %08lx\n", dwQuery);
|
||||
return MMSYSERR_NOTSUPPORTED;
|
||||
}
|
||||
afd->fdwSupport = ACMDRIVERDETAILS_SUPPORTF_CODEC;
|
||||
afd->szFormat[0] = 0; /* let MSACM format this for us... */
|
||||
|
||||
return MMSYSERR_NOERROR;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* ADPCM_FormatSuggest
|
||||
*
|
||||
*/
|
||||
static LRESULT ADPCM_FormatSuggest(PACMDRVFORMATSUGGEST adfs)
|
||||
{
|
||||
/* some tests ... */
|
||||
if (adfs->cbwfxSrc < sizeof(PCMWAVEFORMAT) ||
|
||||
adfs->cbwfxDst < sizeof(PCMWAVEFORMAT) ||
|
||||
ADPCM_GetFormatIndex(adfs->pwfxSrc) == 0xFFFFFFFF) return ACMERR_NOTPOSSIBLE;
|
||||
/* FIXME: should do those tests against the real size (according to format tag */
|
||||
|
||||
/* If no suggestion for destination, then copy source value */
|
||||
if (!(adfs->fdwSuggest & ACM_FORMATSUGGESTF_NCHANNELS))
|
||||
adfs->pwfxDst->nChannels = adfs->pwfxSrc->nChannels;
|
||||
if (!(adfs->fdwSuggest & ACM_FORMATSUGGESTF_NSAMPLESPERSEC))
|
||||
adfs->pwfxDst->nSamplesPerSec = adfs->pwfxSrc->nSamplesPerSec;
|
||||
|
||||
if (!(adfs->fdwSuggest & ACM_FORMATSUGGESTF_WBITSPERSAMPLE))
|
||||
{
|
||||
if (adfs->pwfxSrc->wFormatTag == WAVE_FORMAT_PCM)
|
||||
adfs->pwfxDst->wBitsPerSample = 4;
|
||||
else
|
||||
adfs->pwfxDst->wBitsPerSample = 16;
|
||||
}
|
||||
if (!(adfs->fdwSuggest & ACM_FORMATSUGGESTF_WFORMATTAG))
|
||||
{
|
||||
if (adfs->pwfxSrc->wFormatTag == WAVE_FORMAT_PCM)
|
||||
adfs->pwfxDst->wFormatTag = WAVE_FORMAT_IMA_ADPCM;
|
||||
else
|
||||
adfs->pwfxDst->wFormatTag = WAVE_FORMAT_PCM;
|
||||
}
|
||||
|
||||
/* check if result is ok */
|
||||
if (ADPCM_GetFormatIndex(adfs->pwfxDst) == 0xFFFFFFFF) return ACMERR_NOTPOSSIBLE;
|
||||
|
||||
/* recompute other values */
|
||||
switch (adfs->pwfxDst->wFormatTag)
|
||||
{
|
||||
case WAVE_FORMAT_PCM:
|
||||
adfs->pwfxDst->nBlockAlign = (adfs->pwfxDst->nChannels * adfs->pwfxDst->wBitsPerSample) / 8;
|
||||
adfs->pwfxDst->nAvgBytesPerSec = adfs->pwfxDst->nSamplesPerSec * adfs->pwfxDst->nBlockAlign;
|
||||
break;
|
||||
case WAVE_FORMAT_IMA_ADPCM:
|
||||
adfs->pwfxDst->nBlockAlign = 1024;
|
||||
/* FIXME: not handling header overhead */
|
||||
adfs->pwfxDst->nAvgBytesPerSec = ((adfs->pwfxDst->nSamplesPerSec * 4) / 8) * adfs->pwfxSrc->nChannels;
|
||||
((IMAADPCMWAVEFORMAT*)adfs->pwfxDst)->wSamplesPerBlock = (1024 - 4 * adfs->pwfxSrc->nChannels) * (2 / adfs->pwfxSrc->nChannels) + 1;
|
||||
TRACE("setting spb=%u\n", ((IMAADPCMWAVEFORMAT*)adfs->pwfxDst)->wSamplesPerBlock);
|
||||
break;
|
||||
default:
|
||||
FIXME("\n");
|
||||
break;
|
||||
}
|
||||
|
||||
return MMSYSERR_NOERROR;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* ADPCM_Reset
|
||||
*
|
||||
*/
|
||||
static void ADPCM_Reset(PACMDRVSTREAMINSTANCE adsi, AcmAdpcmData* aad)
|
||||
{
|
||||
aad->stepIndexL = aad->stepIndexR = 0;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* ADPCM_StreamOpen
|
||||
*
|
||||
*/
|
||||
static LRESULT ADPCM_StreamOpen(PACMDRVSTREAMINSTANCE adsi)
|
||||
{
|
||||
AcmAdpcmData* aad;
|
||||
unsigned nspb;
|
||||
|
||||
assert(!(adsi->fdwOpen & ACM_STREAMOPENF_ASYNC));
|
||||
|
||||
if (ADPCM_GetFormatIndex(adsi->pwfxSrc) == 0xFFFFFFFF ||
|
||||
ADPCM_GetFormatIndex(adsi->pwfxDst) == 0xFFFFFFFF)
|
||||
return ACMERR_NOTPOSSIBLE;
|
||||
|
||||
aad = HeapAlloc(GetProcessHeap(), 0, sizeof(AcmAdpcmData));
|
||||
if (aad == 0) return MMSYSERR_NOMEM;
|
||||
|
||||
adsi->dwDriver = (DWORD)aad;
|
||||
|
||||
if (adsi->pwfxSrc->wFormatTag == WAVE_FORMAT_PCM &&
|
||||
adsi->pwfxDst->wFormatTag == WAVE_FORMAT_PCM)
|
||||
{
|
||||
goto theEnd;
|
||||
}
|
||||
else if (adsi->pwfxSrc->wFormatTag == WAVE_FORMAT_IMA_ADPCM &&
|
||||
adsi->pwfxDst->wFormatTag == WAVE_FORMAT_PCM)
|
||||
{
|
||||
/* resampling or mono <=> stereo not available
|
||||
* ADPCM algo only define 16 bit per sample output
|
||||
*/
|
||||
if (adsi->pwfxSrc->nSamplesPerSec != adsi->pwfxDst->nSamplesPerSec ||
|
||||
adsi->pwfxSrc->nChannels != adsi->pwfxDst->nChannels ||
|
||||
adsi->pwfxDst->wBitsPerSample != 16)
|
||||
goto theEnd;
|
||||
|
||||
nspb = ((LPIMAADPCMWAVEFORMAT)adsi->pwfxSrc)->wSamplesPerBlock;
|
||||
TRACE("spb=%u\n", nspb);
|
||||
|
||||
/* we check that in a block, after the header, samples are present on
|
||||
* 4-sample packet pattern
|
||||
* we also check that the block alignement is bigger than the expected size
|
||||
*/
|
||||
if (((nspb - 1) & 3) != 0) goto theEnd;
|
||||
if ((((nspb - 1) / 2) + 4) * adsi->pwfxSrc->nChannels < adsi->pwfxSrc->nBlockAlign)
|
||||
goto theEnd;
|
||||
|
||||
/* adpcm decoding... */
|
||||
if (adsi->pwfxDst->wBitsPerSample == 16 && adsi->pwfxDst->nChannels == 2)
|
||||
aad->convert = cvtSSima16K;
|
||||
if (adsi->pwfxDst->wBitsPerSample == 16 && adsi->pwfxDst->nChannels == 1)
|
||||
aad->convert = cvtMMima16K;
|
||||
}
|
||||
else if (adsi->pwfxSrc->wFormatTag == WAVE_FORMAT_PCM &&
|
||||
adsi->pwfxDst->wFormatTag == WAVE_FORMAT_IMA_ADPCM)
|
||||
{
|
||||
if (adsi->pwfxSrc->nSamplesPerSec != adsi->pwfxDst->nSamplesPerSec ||
|
||||
adsi->pwfxSrc->nChannels != adsi->pwfxDst->nChannels ||
|
||||
adsi->pwfxSrc->wBitsPerSample != 16)
|
||||
goto theEnd;
|
||||
|
||||
nspb = ((LPIMAADPCMWAVEFORMAT)adsi->pwfxDst)->wSamplesPerBlock;
|
||||
TRACE("spb=%u\n", nspb);
|
||||
|
||||
/* we check that in a block, after the header, samples are present on
|
||||
* 4-sample packet pattern
|
||||
* we also check that the block alignement is bigger than the expected size
|
||||
*/
|
||||
if (((nspb - 1) & 3) != 0) goto theEnd;
|
||||
if ((((nspb - 1) / 2) + 4) * adsi->pwfxDst->nChannels < adsi->pwfxDst->nBlockAlign)
|
||||
goto theEnd;
|
||||
|
||||
/* adpcm coding... */
|
||||
if (adsi->pwfxSrc->wBitsPerSample == 16 && adsi->pwfxSrc->nChannels == 2)
|
||||
aad->convert = cvtSS16imaK;
|
||||
if (adsi->pwfxSrc->wBitsPerSample == 16 && adsi->pwfxSrc->nChannels == 1)
|
||||
aad->convert = cvtMM16imaK;
|
||||
}
|
||||
else goto theEnd;
|
||||
ADPCM_Reset(adsi, aad);
|
||||
|
||||
return MMSYSERR_NOERROR;
|
||||
|
||||
theEnd:
|
||||
HeapFree(GetProcessHeap(), 0, aad);
|
||||
adsi->dwDriver = 0L;
|
||||
return MMSYSERR_NOTSUPPORTED;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* ADPCM_StreamClose
|
||||
*
|
||||
*/
|
||||
static LRESULT ADPCM_StreamClose(PACMDRVSTREAMINSTANCE adsi)
|
||||
{
|
||||
HeapFree(GetProcessHeap(), 0, (void*)adsi->dwDriver);
|
||||
return MMSYSERR_NOERROR;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* ADPCM_round
|
||||
*
|
||||
*/
|
||||
static inline DWORD ADPCM_round(DWORD a, DWORD b, DWORD c)
|
||||
{
|
||||
assert(a && b && c);
|
||||
/* to be sure, always return an entire number of c... */
|
||||
return ((double)a * (double)b + (double)c - 1) / (double)c;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* ADPCM_StreamSize
|
||||
*
|
||||
*/
|
||||
static LRESULT ADPCM_StreamSize(PACMDRVSTREAMINSTANCE adsi, PACMDRVSTREAMSIZE adss)
|
||||
{
|
||||
switch (adss->fdwSize)
|
||||
{
|
||||
case ACM_STREAMSIZEF_DESTINATION:
|
||||
/* cbDstLength => cbSrcLength */
|
||||
if (adsi->pwfxSrc->wFormatTag == WAVE_FORMAT_PCM &&
|
||||
adsi->pwfxDst->wFormatTag == WAVE_FORMAT_IMA_ADPCM)
|
||||
{
|
||||
/* don't take block overhead into account, doesn't matter too much */
|
||||
adss->cbSrcLength = adss->cbDstLength * 4;
|
||||
}
|
||||
else if (adsi->pwfxSrc->wFormatTag == WAVE_FORMAT_IMA_ADPCM &&
|
||||
adsi->pwfxDst->wFormatTag == WAVE_FORMAT_PCM)
|
||||
{
|
||||
FIXME("misses the block header overhead\n");
|
||||
adss->cbSrcLength = 256 + adss->cbDstLength / 4;
|
||||
}
|
||||
else
|
||||
{
|
||||
return MMSYSERR_NOTSUPPORTED;
|
||||
}
|
||||
break;
|
||||
case ACM_STREAMSIZEF_SOURCE:
|
||||
/* cbSrcLength => cbDstLength */
|
||||
if (adsi->pwfxSrc->wFormatTag == WAVE_FORMAT_PCM &&
|
||||
adsi->pwfxDst->wFormatTag == WAVE_FORMAT_IMA_ADPCM)
|
||||
{
|
||||
FIXME("misses the block header overhead\n");
|
||||
adss->cbDstLength = 256 + adss->cbSrcLength / 4;
|
||||
}
|
||||
else if (adsi->pwfxSrc->wFormatTag == WAVE_FORMAT_IMA_ADPCM &&
|
||||
adsi->pwfxDst->wFormatTag == WAVE_FORMAT_PCM)
|
||||
{
|
||||
/* don't take block overhead into account, doesn't matter too much */
|
||||
adss->cbDstLength = adss->cbSrcLength * 4;
|
||||
}
|
||||
else
|
||||
{
|
||||
return MMSYSERR_NOTSUPPORTED;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
WARN("Unsupported query %08lx\n", adss->fdwSize);
|
||||
return MMSYSERR_NOTSUPPORTED;
|
||||
}
|
||||
return MMSYSERR_NOERROR;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* ADPCM_StreamConvert
|
||||
*
|
||||
*/
|
||||
static LRESULT ADPCM_StreamConvert(PACMDRVSTREAMINSTANCE adsi, PACMDRVSTREAMHEADER adsh)
|
||||
{
|
||||
AcmAdpcmData* aad = (AcmAdpcmData*)adsi->dwDriver;
|
||||
DWORD nsrc = adsh->cbSrcLength;
|
||||
DWORD ndst = adsh->cbDstLength;
|
||||
|
||||
if (adsh->fdwConvert &
|
||||
~(ACM_STREAMCONVERTF_BLOCKALIGN|
|
||||
ACM_STREAMCONVERTF_END|
|
||||
ACM_STREAMCONVERTF_START))
|
||||
{
|
||||
FIXME("Unsupported fdwConvert (%08lx), ignoring it\n", adsh->fdwConvert);
|
||||
}
|
||||
/* ACM_STREAMCONVERTF_BLOCKALIGN
|
||||
* currently all conversions are block aligned, so do nothing for this flag
|
||||
* ACM_STREAMCONVERTF_END
|
||||
* no pending data, so do nothing for this flag
|
||||
*/
|
||||
if ((adsh->fdwConvert & ACM_STREAMCONVERTF_START))
|
||||
{
|
||||
ADPCM_Reset(adsi, aad);
|
||||
}
|
||||
|
||||
aad->convert(adsi, adsh->pbSrc, &nsrc, adsh->pbDst, &ndst);
|
||||
adsh->cbSrcLengthUsed = nsrc;
|
||||
adsh->cbDstLengthUsed = ndst;
|
||||
|
||||
return MMSYSERR_NOERROR;
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* ADPCM_DriverProc [exported]
|
||||
*/
|
||||
LRESULT CALLBACK ADPCM_DriverProc(DWORD dwDevID, HDRVR hDriv, UINT wMsg,
|
||||
LPARAM dwParam1, LPARAM dwParam2)
|
||||
{
|
||||
TRACE("(%08lx %08lx %04x %08lx %08lx);\n",
|
||||
dwDevID, (DWORD)hDriv, wMsg, dwParam1, dwParam2);
|
||||
|
||||
switch (wMsg)
|
||||
{
|
||||
case DRV_LOAD: return 1;
|
||||
case DRV_FREE: return 1;
|
||||
case DRV_OPEN: return ADPCM_drvOpen((LPSTR)dwParam1);
|
||||
case DRV_CLOSE: return ADPCM_drvClose(dwDevID);
|
||||
case DRV_ENABLE: return 1;
|
||||
case DRV_DISABLE: return 1;
|
||||
case DRV_QUERYCONFIGURE: return 1;
|
||||
case DRV_CONFIGURE: MessageBoxA(0, "MSACM IMA ADPCM filter !", "Wine Driver", MB_OK); return 1;
|
||||
case DRV_INSTALL: return DRVCNF_RESTART;
|
||||
case DRV_REMOVE: return DRVCNF_RESTART;
|
||||
|
||||
case ACMDM_DRIVER_NOTIFY:
|
||||
/* no caching from other ACM drivers is done so far */
|
||||
return MMSYSERR_NOERROR;
|
||||
|
||||
case ACMDM_DRIVER_DETAILS:
|
||||
return ADPCM_DriverDetails((PACMDRIVERDETAILSW)dwParam1);
|
||||
|
||||
case ACMDM_FORMATTAG_DETAILS:
|
||||
return ADPCM_FormatTagDetails((PACMFORMATTAGDETAILSW)dwParam1, dwParam2);
|
||||
|
||||
case ACMDM_FORMAT_DETAILS:
|
||||
return ADPCM_FormatDetails((PACMFORMATDETAILSW)dwParam1, dwParam2);
|
||||
|
||||
case ACMDM_FORMAT_SUGGEST:
|
||||
return ADPCM_FormatSuggest((PACMDRVFORMATSUGGEST)dwParam1);
|
||||
|
||||
case ACMDM_STREAM_OPEN:
|
||||
return ADPCM_StreamOpen((PACMDRVSTREAMINSTANCE)dwParam1);
|
||||
|
||||
case ACMDM_STREAM_CLOSE:
|
||||
return ADPCM_StreamClose((PACMDRVSTREAMINSTANCE)dwParam1);
|
||||
|
||||
case ACMDM_STREAM_SIZE:
|
||||
return ADPCM_StreamSize((PACMDRVSTREAMINSTANCE)dwParam1, (PACMDRVSTREAMSIZE)dwParam2);
|
||||
|
||||
case ACMDM_STREAM_CONVERT:
|
||||
return ADPCM_StreamConvert((PACMDRVSTREAMINSTANCE)dwParam1, (PACMDRVSTREAMHEADER)dwParam2);
|
||||
|
||||
case ACMDM_HARDWARE_WAVE_CAPS_INPUT:
|
||||
case ACMDM_HARDWARE_WAVE_CAPS_OUTPUT:
|
||||
/* this converter is not a hardware driver */
|
||||
case ACMDM_FILTERTAG_DETAILS:
|
||||
case ACMDM_FILTER_DETAILS:
|
||||
/* this converter is not a filter */
|
||||
case ACMDM_STREAM_RESET:
|
||||
/* only needed for asynchronous driver... we aren't, so just say it */
|
||||
return MMSYSERR_NOTSUPPORTED;
|
||||
case ACMDM_STREAM_PREPARE:
|
||||
case ACMDM_STREAM_UNPREPARE:
|
||||
/* nothing special to do here... so don't do anything */
|
||||
return MMSYSERR_NOERROR;
|
||||
|
||||
default:
|
||||
return DefDriverProc(dwDevID, hDriv, wMsg, dwParam1, dwParam2);
|
||||
}
|
||||
return 0;
|
||||
}
|
|
@ -18,9 +18,9 @@
|
|||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT
|
||||
LANGUAGE LANG_BULGARIAN, SUBLANG_DEFAULT
|
||||
|
||||
DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 100
|
||||
DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 118
|
||||
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Èçáîð íà çâóê"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
|
@ -28,29 +28,24 @@ BEGIN
|
|||
|
||||
LTEXT "&Èìå:", -1, 5, 5, 115, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 115, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 135, 60,
|
||||
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
PUSHBUTTON "&Ñúõðàíÿâàíå êàòî...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 125, 14, 45, 14
|
||||
PUSHBUTTON "Ïðå&ìàõâàíå", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 175, 14, 45, 14
|
||||
PUSHBUTTON "&Ñúõðàíÿâàíå êàòî...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 150, 14, 70, 14
|
||||
PUSHBUTTON "Ïðå&ìàõâàíå", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 150, 32, 70, 14
|
||||
|
||||
LTEXT "&Ôîðìàò:", -1, 5, 41, 44, 8, NOT WS_GROUP
|
||||
LTEXT "&Ôîðìàò:", -1, 5, 56, 44, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 39, 170, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 54, 170, 60,
|
||||
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
LTEXT "&Ïðèíàäëåæíîñòè", -1, 5, 59, 44, 8, NOT WS_GROUP
|
||||
LTEXT "&Ïðèíàäëåæíîñòè", -1, 5, 76, 44, 8, NOT WS_GROUP
|
||||
|
||||
#if 0
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 57, 170, 60,
|
||||
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP |
|
||||
CBS_OWNERDRAWFIXED | CBS_HASSTRINGS
|
||||
#else
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 57, 170, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 74, 170, 60,
|
||||
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
#endif
|
||||
DEFPUSHBUTTON "Äîáðå", IDOK, 48, 80, 40, 14
|
||||
PUSHBUTTON "Îòêàç", IDCANCEL, 92, 80, 40, 14
|
||||
PUSHBUTTON "Ïîìî&ù", IDD_ACMFORMATCHOOSE_BTN_HELP, 136, 80, 40, 14
|
||||
|
||||
PUSHBUTTON "Ïîìî&ù", IDD_ACMFORMATCHOOSE_BTN_HELP, 5, 100, 50, 14
|
||||
DEFPUSHBUTTON "Äîáðå", IDOK, 115, 100, 50, 14
|
||||
PUSHBUTTON "Îòêàç", IDCANCEL, 170, 100, 50, 14
|
||||
|
||||
END
|
||||
|
|
|
@ -24,7 +24,7 @@ LANGUAGE LANG_CZECH, SUBLANG_DEFAULT
|
|||
|
||||
/* Czech strings in CP1250 */
|
||||
|
||||
DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 100
|
||||
DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 118
|
||||
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Výbìr zvuku"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
|
@ -32,24 +32,24 @@ BEGIN
|
|||
|
||||
LTEXT "&Název:", -1, 5, 5, 115, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 115, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 135, 60,
|
||||
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
PUSHBUTTON "&Uložit jako", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 125, 14, 45, 14
|
||||
PUSHBUTTON "Odeb&rat", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 175, 14, 45, 14
|
||||
PUSHBUTTON "&Uložit jako", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 150, 14, 70, 14
|
||||
PUSHBUTTON "Odeb&rat", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 150, 32, 70, 14
|
||||
|
||||
LTEXT "&Formát:", -1, 5, 41, 44, 8, NOT WS_GROUP
|
||||
LTEXT "&Formát:", -1, 5, 56, 44, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 39, 170, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 54, 170, 60,
|
||||
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
LTEXT "&Atributy:", -1, 5, 59, 44, 8, NOT WS_GROUP
|
||||
LTEXT "&Atributy:", -1, 5, 76, 44, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 57, 170, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 74, 170, 60,
|
||||
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
DEFPUSHBUTTON "OK", IDOK, 48, 80, 40, 14
|
||||
PUSHBUTTON "Storno", IDCANCEL, 92, 80, 40, 14
|
||||
PUSHBUTTON "P&omoc", IDD_ACMFORMATCHOOSE_BTN_HELP, 136, 80, 40, 14
|
||||
PUSHBUTTON "P&omoc", IDD_ACMFORMATCHOOSE_BTN_HELP, 5, 100, 50, 14
|
||||
DEFPUSHBUTTON "OK", IDOK, 115, 100, 50, 14
|
||||
PUSHBUTTON "Storno", IDCANCEL, 170, 100, 50, 14
|
||||
|
||||
END
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
|
||||
LANGUAGE LANG_DANISH, SUBLANG_DEFAULT
|
||||
|
||||
DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 100
|
||||
DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 118
|
||||
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Lyd valg"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
|
@ -28,24 +28,24 @@ BEGIN
|
|||
|
||||
LTEXT "&Navn:", -1, 5, 5, 115, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 115, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 135, 60,
|
||||
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
PUSHBUTTON "Gem &som...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 125, 14, 45, 14
|
||||
PUSHBUTTON "Fje&rn", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 175, 14, 45, 14
|
||||
PUSHBUTTON "Gem &som...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 150, 14, 70, 14
|
||||
PUSHBUTTON "Fje&rn", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 150, 32, 70, 14
|
||||
|
||||
LTEXT "&Format:", -1, 5, 41, 44, 8, NOT WS_GROUP
|
||||
LTEXT "&Format:", -1, 5, 56, 44, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 39, 170, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 54, 170, 60,
|
||||
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
LTEXT "&Attributter:", -1, 5, 59, 44, 8, NOT WS_GROUP
|
||||
LTEXT "&Attributter:", -1, 5, 76, 44, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 57, 170, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 74, 170, 60,
|
||||
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
DEFPUSHBUTTON "OK", IDOK, 48, 80, 40, 14
|
||||
PUSHBUTTON "Annuller", IDCANCEL, 92, 80, 40, 14
|
||||
PUSHBUTTON "&Hjælp", IDD_ACMFORMATCHOOSE_BTN_HELP, 136, 80, 40, 14
|
||||
PUSHBUTTON "&Hjælp", IDD_ACMFORMATCHOOSE_BTN_HELP, 5, 100, 50, 14
|
||||
DEFPUSHBUTTON "OK", IDOK, 115, 100, 50, 14
|
||||
PUSHBUTTON "Annuller", IDCANCEL, 170, 100, 50, 14
|
||||
|
||||
END
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
|
||||
LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL
|
||||
|
||||
DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 100
|
||||
DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 118
|
||||
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Soundauswahl"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
|
@ -30,24 +30,24 @@ BEGIN
|
|||
|
||||
LTEXT "&Name:", -1, 5, 5, 115, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 115, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 135, 60,
|
||||
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
PUSHBUTTON "Speichern &unter...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 125, 14, 45, 14
|
||||
PUSHBUTTON "&Entfernen", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 175, 14, 45, 14
|
||||
PUSHBUTTON "Speichern &unter...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 150, 14, 70, 14
|
||||
PUSHBUTTON "&Entfernen", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 150, 32, 70, 14
|
||||
|
||||
LTEXT "&Format:", -1, 5, 41, 44, 8, NOT WS_GROUP
|
||||
LTEXT "&Format:", -1, 5, 56, 44, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 39, 170, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 54, 170, 60,
|
||||
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
LTEXT "&Attribute:", -1, 5, 59, 44, 8, NOT WS_GROUP
|
||||
LTEXT "&Attribute:", -1, 5, 76, 44, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 57, 170, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 74, 170, 60,
|
||||
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
DEFPUSHBUTTON "OK", IDOK, 48, 80, 40, 14
|
||||
PUSHBUTTON "Abbrechen", IDCANCEL, 92, 80, 40, 14
|
||||
PUSHBUTTON "&Hilfe", IDD_ACMFORMATCHOOSE_BTN_HELP, 136, 80, 40, 14
|
||||
PUSHBUTTON "&Hilfe", IDD_ACMFORMATCHOOSE_BTN_HELP, 5, 100, 50, 14
|
||||
DEFPUSHBUTTON "OK", IDOK, 115, 100, 50, 14
|
||||
PUSHBUTTON "Abbrechen", IDCANCEL, 170, 100, 50, 14
|
||||
|
||||
END
|
||||
|
|
|
@ -15,12 +15,12 @@
|
|||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
LANGUAGE LANG_GREEK, SUBLANG_DEFAULT
|
||||
|
||||
DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 100
|
||||
DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 118
|
||||
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "ÅðéëïãÞ Þ÷ïõ"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
|
@ -28,29 +28,24 @@ BEGIN
|
|||
|
||||
LTEXT "&¼íïìá:", -1, 5, 5, 115, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 115, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 135, 60,
|
||||
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
PUSHBUTTON "&ÁðïèÞêåõóç ùò...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 125, 14, 45, 14
|
||||
PUSHBUTTON "&Áöáßñåóç", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 175, 14, 45, 14
|
||||
PUSHBUTTON "&ÁðïèÞêåõóç ùò...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 150, 14, 70, 14
|
||||
PUSHBUTTON "&Áöáßñåóç", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 150, 32, 70, 14
|
||||
|
||||
LTEXT "&ÖïñìÜ:", -1, 5, 41, 44, 8, NOT WS_GROUP
|
||||
LTEXT "&ÖïñìÜ:", -1, 5, 56, 44, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 39, 170, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 54, 170, 60,
|
||||
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
LTEXT "&Éäéüôçôåò:", -1, 5, 59, 44, 8, NOT WS_GROUP
|
||||
LTEXT "&Éäéüôçôåò:", -1, 5, 76, 44, 8, NOT WS_GROUP
|
||||
|
||||
#if 0
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 57, 170, 60,
|
||||
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP |
|
||||
CBS_OWNERDRAWFIXED | CBS_HASSTRINGS
|
||||
#else
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 57, 170, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 74, 170, 60,
|
||||
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
#endif
|
||||
DEFPUSHBUTTON "OK", IDOK, 48, 80, 40, 14
|
||||
PUSHBUTTON "¢êõñï", IDCANCEL, 92, 80, 40, 14
|
||||
PUSHBUTTON "&ÂïÞèåéá", IDD_ACMFORMATCHOOSE_BTN_HELP, 136, 80, 40, 14
|
||||
|
||||
PUSHBUTTON "&ÂïÞèåéá", IDD_ACMFORMATCHOOSE_BTN_HELP, 5, 100, 50, 14
|
||||
DEFPUSHBUTTON "OK", IDOK, 115, 100, 50, 14
|
||||
PUSHBUTTON "¢êõñï", IDCANCEL, 170, 100, 50, 14
|
||||
|
||||
END
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
|
||||
LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT
|
||||
|
||||
DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 100
|
||||
DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 118
|
||||
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Sound Selection"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
|
@ -28,24 +28,24 @@ BEGIN
|
|||
|
||||
LTEXT "&Name:", -1, 5, 5, 115, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 115, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 135, 60,
|
||||
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
PUSHBUTTON "&Save As...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 125, 14, 45, 14
|
||||
PUSHBUTTON "&Remove", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 175, 14, 45, 14
|
||||
PUSHBUTTON "&Save As...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 150, 14, 70, 14
|
||||
PUSHBUTTON "&Remove", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 150, 32, 70, 14
|
||||
|
||||
LTEXT "&Format:", -1, 5, 41, 44, 8, NOT WS_GROUP
|
||||
LTEXT "&Format:", -1, 5, 56, 44, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 39, 170, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 54, 170, 60,
|
||||
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
LTEXT "&Attributes:", -1, 5, 59, 44, 8, NOT WS_GROUP
|
||||
LTEXT "&Attributes:", -1, 5, 76, 44, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 57, 170, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 74, 170, 60,
|
||||
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
DEFPUSHBUTTON "OK", IDOK, 48, 80, 40, 14
|
||||
PUSHBUTTON "Cancel", IDCANCEL, 92, 80, 40, 14
|
||||
PUSHBUTTON "&Help", IDD_ACMFORMATCHOOSE_BTN_HELP, 136, 80, 40, 14
|
||||
PUSHBUTTON "&Help", IDD_ACMFORMATCHOOSE_BTN_HELP, 5, 100, 50, 14
|
||||
DEFPUSHBUTTON "OK", IDOK, 115, 100, 50, 14
|
||||
PUSHBUTTON "Cancel", IDCANCEL, 170, 100, 50, 14
|
||||
|
||||
END
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
|
||||
LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL
|
||||
|
||||
DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 100
|
||||
DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 118
|
||||
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Selección de sonido"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
|
@ -28,24 +28,24 @@ BEGIN
|
|||
|
||||
LTEXT "&Nombre:", -1, 5, 5, 115, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 115, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 135, 60,
|
||||
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
PUSHBUTTON "&Guardar como...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 125, 14, 45, 14
|
||||
PUSHBUTTON "&Eliminar", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 175, 14, 45, 14
|
||||
PUSHBUTTON "&Guardar como...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 150, 14, 70, 14
|
||||
PUSHBUTTON "&Eliminar", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 150, 32, 70, 14
|
||||
|
||||
LTEXT "&Formato:", -1, 5, 41, 44, 8, NOT WS_GROUP
|
||||
LTEXT "&Formato:", -1, 5, 56, 44, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 39, 170, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 54, 170, 60,
|
||||
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
LTEXT "A&tributos:", -1, 5, 59, 44, 8, NOT WS_GROUP
|
||||
LTEXT "A&tributos:", -1, 5, 76, 44, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 57, 170, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 74, 170, 60,
|
||||
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
DEFPUSHBUTTON "Aceptar", IDOK, 48, 80, 40, 14
|
||||
PUSHBUTTON "Cancelar", IDCANCEL, 92, 80, 40, 14
|
||||
PUSHBUTTON "&Ayuda", IDD_ACMFORMATCHOOSE_BTN_HELP, 136, 80, 40, 14
|
||||
PUSHBUTTON "&Ayuda", IDD_ACMFORMATCHOOSE_BTN_HELP, 5, 100, 50, 14
|
||||
DEFPUSHBUTTON "Aceptar", IDOK, 115, 100, 50, 14
|
||||
PUSHBUTTON "Cancelar", IDCANCEL, 170, 100, 50, 14
|
||||
|
||||
END
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
|
||||
LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL
|
||||
|
||||
DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 250, 100
|
||||
DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 118
|
||||
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Sélection du son"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
|
@ -33,24 +33,24 @@ BEGIN
|
|||
|
||||
LTEXT "&Nom :", -1, 5, 5, 115, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 115, 15,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 135, 60,
|
||||
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
PUSHBUTTON "&Enregistrer sous...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 125, 14, 70, 14
|
||||
PUSHBUTTON "&Supprimer", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 199, 14, 45, 14
|
||||
PUSHBUTTON "&Enregistrer sous...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 150, 14, 70, 14
|
||||
PUSHBUTTON "&Supprimer", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 150, 32, 70, 14
|
||||
|
||||
LTEXT "&Format :", -1, 5, 41, 44, 8, NOT WS_GROUP
|
||||
LTEXT "&Format :", -1, 5, 56, 44, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 48, 39, 197, 15,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 54, 170, 60,
|
||||
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
LTEXT "&Attributs :", -1, 5, 59, 44, 8, NOT WS_GROUP
|
||||
LTEXT "&Attributs :", -1, 5, 76, 44, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 48, 57, 197, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 74, 170, 60,
|
||||
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
DEFPUSHBUTTON "OK", IDOK, 48, 80, 40, 14
|
||||
PUSHBUTTON "Annuler", IDCANCEL, 92, 80, 40, 14
|
||||
PUSHBUTTON "Aid&e", IDD_ACMFORMATCHOOSE_BTN_HELP, 136, 80, 40, 14
|
||||
PUSHBUTTON "Aid&e", IDD_ACMFORMATCHOOSE_BTN_HELP, 5, 100, 50, 14
|
||||
DEFPUSHBUTTON "OK", IDOK, 115, 100, 50, 14
|
||||
PUSHBUTTON "Annuler", IDCANCEL, 170, 100, 50, 14
|
||||
|
||||
END
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
|
||||
LANGUAGE LANG_HEBREW, SUBLANG_DEFAULT
|
||||
|
||||
DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 100
|
||||
DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 118
|
||||
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "בחירת שמע"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
|
@ -33,24 +33,24 @@ BEGIN
|
|||
|
||||
LTEXT "שם:", -1, 5, 5, 115, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 115, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 135, 60,
|
||||
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
PUSHBUTTON "שמירה בשם...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 125, 14, 45, 14
|
||||
PUSHBUTTON "הסר", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 175, 14, 45, 14
|
||||
PUSHBUTTON "שמירה בשם...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 150, 14, 70, 14
|
||||
PUSHBUTTON "הסר", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 150, 32, 70, 14
|
||||
|
||||
LTEXT "פורמט:", -1, 5, 41, 44, 8, NOT WS_GROUP
|
||||
LTEXT "פורמט:", -1, 5, 56, 44, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 39, 170, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 54, 170, 60,
|
||||
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
LTEXT "מאפיינים:", -1, 5, 59, 44, 8, NOT WS_GROUP
|
||||
LTEXT "מאפיינים:", -1, 5, 76, 44, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 57, 170, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 74, 170, 60,
|
||||
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
DEFPUSHBUTTON "אישור", IDOK, 48, 80, 40, 14
|
||||
PUSHBUTTON "ביטול", IDCANCEL, 92, 80, 40, 14
|
||||
PUSHBUTTON "עזרה", IDD_ACMFORMATCHOOSE_BTN_HELP, 136, 80, 40, 14
|
||||
PUSHBUTTON "עזרה", IDD_ACMFORMATCHOOSE_BTN_HELP, 5, 100, 50, 14
|
||||
DEFPUSHBUTTON "אישור", IDOK, 115, 100, 50, 14
|
||||
PUSHBUTTON "ביטול", IDCANCEL, 170, 100, 50, 14
|
||||
|
||||
END
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
|
||||
LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT
|
||||
|
||||
DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 100
|
||||
DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 118
|
||||
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Hang kiválasztás"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
|
@ -28,24 +28,24 @@ BEGIN
|
|||
|
||||
LTEXT "&Név:", -1, 5, 5, 115, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 115, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 135, 60,
|
||||
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
PUSHBUTTON "&Mentés másként...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 125, 14, 45, 14
|
||||
PUSHBUTTON "&Eltávolítás", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 175, 14, 45, 14
|
||||
PUSHBUTTON "&Mentés másként...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 150, 14, 70, 14
|
||||
PUSHBUTTON "&Eltávolítás", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 150, 32, 70, 14
|
||||
|
||||
LTEXT "&Formátum:", -1, 5, 41, 44, 8, NOT WS_GROUP
|
||||
LTEXT "&Formátum:", -1, 5, 56, 44, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 39, 170, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 54, 170, 60,
|
||||
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
LTEXT "&Attribútumok:", -1, 5, 59, 44, 8, NOT WS_GROUP
|
||||
LTEXT "&Attribútumok:", -1, 5, 76, 44, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 57, 170, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 74, 170, 60,
|
||||
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
DEFPUSHBUTTON "OK", IDOK, 48, 80, 40, 14
|
||||
PUSHBUTTON "Mégse", IDCANCEL, 92, 80, 40, 14
|
||||
PUSHBUTTON "&Súgó", IDD_ACMFORMATCHOOSE_BTN_HELP, 136, 80, 40, 14
|
||||
PUSHBUTTON "&Súgó", IDD_ACMFORMATCHOOSE_BTN_HELP, 5, 100, 50, 14
|
||||
DEFPUSHBUTTON "OK", IDOK, 115, 100, 50, 14
|
||||
PUSHBUTTON "Mégse", IDCANCEL, 170, 100, 50, 14
|
||||
|
||||
END
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
|
||||
LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL
|
||||
|
||||
DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 100
|
||||
DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 118
|
||||
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Selezione dell'audio"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
|
@ -29,24 +29,24 @@ BEGIN
|
|||
|
||||
LTEXT "&Nome:", -1, 5, 5, 115, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 115, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 135, 60,
|
||||
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
PUSHBUTTON "&Salva con nome...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 125, 14, 45, 14
|
||||
PUSHBUTTON "&Rimuovi", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 175, 14, 45, 14
|
||||
PUSHBUTTON "&Salva con nome...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 150, 14, 70, 14
|
||||
PUSHBUTTON "&Rimuovi", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 150, 32, 70, 14
|
||||
|
||||
LTEXT "&Formato:", -1, 5, 41, 44, 8, NOT WS_GROUP
|
||||
LTEXT "&Formato:", -1, 5, 56, 44, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 39, 170, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 54, 170, 60,
|
||||
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
LTEXT "&Attributi:", -1, 5, 59, 44, 8, NOT WS_GROUP
|
||||
LTEXT "&Attributi:", -1, 5, 76, 44, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 57, 170, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 74, 170, 60,
|
||||
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
DEFPUSHBUTTON "OK", IDOK, 48, 80, 40, 14
|
||||
PUSHBUTTON "Annulla", IDCANCEL, 92, 80, 40, 14
|
||||
PUSHBUTTON "&Aiuto", IDD_ACMFORMATCHOOSE_BTN_HELP, 136, 80, 40, 14
|
||||
PUSHBUTTON "&Aiuto", IDD_ACMFORMATCHOOSE_BTN_HELP, 5, 100, 50, 14
|
||||
DEFPUSHBUTTON "OK", IDOK, 115, 100, 50, 14
|
||||
PUSHBUTTON "Annulla", IDCANCEL, 170, 100, 50, 14
|
||||
|
||||
END
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
|
||||
LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
|
||||
|
||||
DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 100
|
||||
DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 118
|
||||
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "サウンドの選択"
|
||||
FONT 9, "MS Shell Dlg"
|
||||
|
@ -31,24 +31,24 @@ BEGIN
|
|||
|
||||
LTEXT "名前(&N):", -1, 5, 5, 115, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 115, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 135, 60,
|
||||
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
PUSHBUTTON "名前を付けて保存(&S)...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 125, 14, 45, 14
|
||||
PUSHBUTTON "削除(&R)", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 175, 14, 45, 14
|
||||
PUSHBUTTON "名前を付けて保存(&S)...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 150, 14, 70, 14
|
||||
PUSHBUTTON "削除(&R)", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 150, 32, 70, 14
|
||||
|
||||
LTEXT "フォーマット(&F):", -1, 5, 41, 44, 8, NOT WS_GROUP
|
||||
LTEXT "フォーマット(&F):", -1, 5, 56, 44, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 39, 170, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 54, 170, 60,
|
||||
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
LTEXT "属性(&A):", -1, 5, 59, 44, 8, NOT WS_GROUP
|
||||
LTEXT "属性(&A):", -1, 5, 76, 44, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 57, 170, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 74, 170, 60,
|
||||
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
DEFPUSHBUTTON "OK", IDOK, 48, 80, 40, 14
|
||||
PUSHBUTTON "キャンセル", IDCANCEL, 92, 80, 40, 14
|
||||
PUSHBUTTON "ヘルプ(&H)", IDD_ACMFORMATCHOOSE_BTN_HELP, 136, 80, 40, 14
|
||||
PUSHBUTTON "ヘルプ(&H)", IDD_ACMFORMATCHOOSE_BTN_HELP, 5, 100, 50, 14
|
||||
DEFPUSHBUTTON "OK", IDOK, 115, 100, 50, 14
|
||||
PUSHBUTTON "キャンセル", IDCANCEL, 170, 100, 50, 14
|
||||
|
||||
END
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
|
||||
LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT
|
||||
|
||||
DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 100
|
||||
DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 118
|
||||
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "사운드 선택"
|
||||
FONT 9, "MS Shell Dlg"
|
||||
|
@ -28,24 +28,24 @@ BEGIN
|
|||
|
||||
LTEXT "이름(&N):", -1, 5, 5, 115, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 97, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 135, 60,
|
||||
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
PUSHBUTTON "다른 이름으로 저장(&S)...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 103, 14, 70, 14
|
||||
PUSHBUTTON "제거(&R)", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 175, 14, 45, 14
|
||||
PUSHBUTTON "다른 이름으로 저장(&S)...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 150, 14, 70, 14
|
||||
PUSHBUTTON "제거(&R)", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 150, 32, 70, 14
|
||||
|
||||
LTEXT "형식(&F):", -1, 5, 41, 44, 8, NOT WS_GROUP
|
||||
LTEXT "형식(&F):", -1, 5, 56, 44, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 39, 170, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 54, 170, 60,
|
||||
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
LTEXT "속성(&A):", -1, 5, 59, 44, 8, NOT WS_GROUP
|
||||
LTEXT "속성(&A):", -1, 5, 76, 44, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 57, 170, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 74, 170, 60,
|
||||
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
DEFPUSHBUTTON "확인", IDOK, 48, 80, 40, 14
|
||||
PUSHBUTTON "취소", IDCANCEL, 92, 80, 40, 14
|
||||
PUSHBUTTON "도움말(&H)", IDD_ACMFORMATCHOOSE_BTN_HELP, 136, 80, 40, 14
|
||||
PUSHBUTTON "도움말(&H)", IDD_ACMFORMATCHOOSE_BTN_HELP, 5, 100, 50, 14
|
||||
DEFPUSHBUTTON "확인", IDOK, 115, 100, 50, 14
|
||||
PUSHBUTTON "취소", IDCANCEL, 170, 100, 50, 14
|
||||
|
||||
END
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
|
||||
LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL
|
||||
|
||||
DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 100
|
||||
DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 118
|
||||
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Garso parinkimas"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
|
@ -31,24 +31,24 @@ BEGIN
|
|||
|
||||
LTEXT "&Pavadinimas:", -1, 5, 5, 115, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 100, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 135, 60,
|
||||
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
PUSHBUTTON "Išsaugoti k&aip...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 110, 14, 60, 14
|
||||
PUSHBUTTON "Pa&šalinti", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 175, 14, 45, 14
|
||||
PUSHBUTTON "Išsaugoti k&aip...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 150, 14, 70, 14
|
||||
PUSHBUTTON "Pa&šalinti", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 150, 32, 70, 14
|
||||
|
||||
LTEXT "&Formatas:", -1, 5, 41, 44, 8, NOT WS_GROUP
|
||||
LTEXT "&Formatas:", -1, 5, 56, 44, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 39, 170, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 54, 170, 60,
|
||||
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
LTEXT "A&tributai:", -1, 5, 59, 44, 8, NOT WS_GROUP
|
||||
LTEXT "A&tributai:", -1, 5, 76, 44, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 57, 170, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 74, 170, 60,
|
||||
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
DEFPUSHBUTTON "Gerai", IDOK, 48, 80, 40, 14
|
||||
PUSHBUTTON "Atsisakyti", IDCANCEL, 92, 80, 40, 14
|
||||
PUSHBUTTON "&Žinynas", IDD_ACMFORMATCHOOSE_BTN_HELP, 136, 80, 40, 14
|
||||
PUSHBUTTON "&Žinynas", IDD_ACMFORMATCHOOSE_BTN_HELP, 5, 100, 50, 14
|
||||
DEFPUSHBUTTON "Gerai", IDOK, 115, 100, 50, 14
|
||||
PUSHBUTTON "Atsisakyti", IDCANCEL, 170, 100, 50, 14
|
||||
|
||||
END
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
|
||||
LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL
|
||||
|
||||
DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 100
|
||||
DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 118
|
||||
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Geluidskeuze"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
|
@ -28,24 +28,24 @@ BEGIN
|
|||
|
||||
LTEXT "&Naam:", -1, 5, 5, 115, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 115, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 135, 60,
|
||||
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
PUSHBUTTON "&Opslaan als...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 125, 14, 45, 14
|
||||
PUSHBUTTON "&Verwijderen", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 175, 14, 45, 14
|
||||
PUSHBUTTON "&Opslaan als...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 150, 14, 70, 14
|
||||
PUSHBUTTON "&Verwijderen", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 150, 32, 70, 14
|
||||
|
||||
LTEXT "&Formaat:", -1, 5, 41, 44, 8, NOT WS_GROUP
|
||||
LTEXT "&Formaat:", -1, 5, 56, 44, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 39, 170, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 54, 170, 60,
|
||||
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
LTEXT "&Attributen:", -1, 5, 59, 44, 8, NOT WS_GROUP
|
||||
LTEXT "&Attributen:", -1, 5, 76, 44, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 57, 170, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 74, 170, 60,
|
||||
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
DEFPUSHBUTTON "OK", IDOK, 48, 80, 40, 14
|
||||
PUSHBUTTON "Annuleren", IDCANCEL, 92, 80, 40, 14
|
||||
PUSHBUTTON "&Help", IDD_ACMFORMATCHOOSE_BTN_HELP, 136, 80, 40, 14
|
||||
PUSHBUTTON "&Help", IDD_ACMFORMATCHOOSE_BTN_HELP, 5, 100, 50, 14
|
||||
DEFPUSHBUTTON "OK", IDOK, 115, 100, 50, 14
|
||||
PUSHBUTTON "Annuleren", IDCANCEL, 170, 100, 50, 14
|
||||
|
||||
END
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
|
||||
LANGUAGE LANG_NORWEGIAN, SUBLANG_NORWEGIAN_BOKMAL
|
||||
|
||||
DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 100
|
||||
DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 118
|
||||
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Lydutvalg"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
|
@ -28,24 +28,24 @@ BEGIN
|
|||
|
||||
LTEXT "&Navn:", -1, 5, 5, 115, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 115, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 135, 60,
|
||||
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
PUSHBUTTON "Lagre &som...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 125, 14, 45, 14
|
||||
PUSHBUTTON "Fje&rn", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 175, 14, 45, 14
|
||||
PUSHBUTTON "Lagre &som...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 150, 14, 70, 14
|
||||
PUSHBUTTON "Fje&rn", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 150, 32, 70, 14
|
||||
|
||||
LTEXT "&Format:", -1, 5, 41, 44, 8, NOT WS_GROUP
|
||||
LTEXT "&Format:", -1, 5, 56, 44, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 39, 170, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 54, 170, 60,
|
||||
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
LTEXT "&Attributter:", -1, 5, 59, 44, 8, NOT WS_GROUP
|
||||
LTEXT "&Attributter:", -1, 5, 76, 44, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 57, 170, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 74, 170, 60,
|
||||
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
DEFPUSHBUTTON "OK", IDOK, 48, 80, 40, 14
|
||||
PUSHBUTTON "Avbryt", IDCANCEL, 92, 80, 40, 14
|
||||
PUSHBUTTON "&Hjelp", IDD_ACMFORMATCHOOSE_BTN_HELP, 136, 80, 40, 14
|
||||
PUSHBUTTON "&Hjelp", IDD_ACMFORMATCHOOSE_BTN_HELP, 5, 100, 50, 14
|
||||
DEFPUSHBUTTON "OK", IDOK, 115, 100, 50, 14
|
||||
PUSHBUTTON "Avbryt", IDCANCEL, 170, 100, 50, 14
|
||||
|
||||
END
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
|
||||
LANGUAGE LANG_POLISH, SUBLANG_DEFAULT
|
||||
|
||||
DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 235, 100
|
||||
DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 118
|
||||
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Wybór d¿wiêku"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
|
@ -29,24 +29,24 @@ BEGIN
|
|||
|
||||
LTEXT "&Nazwa:", -1, 5, 5, 115, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 115, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 135, 60,
|
||||
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
PUSHBUTTON "&Zapisz jako...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 125, 14, 50, 14
|
||||
PUSHBUTTON "&Usuñ", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 180, 14, 50, 14
|
||||
PUSHBUTTON "&Zapisz jako...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 150, 14, 70, 14
|
||||
PUSHBUTTON "&Usuñ", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 150, 32, 70, 14
|
||||
|
||||
LTEXT "&Format:", -1, 5, 41, 44, 8, NOT WS_GROUP
|
||||
LTEXT "&Format:", -1, 5, 56, 44, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 39, 180, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 54, 170, 60,
|
||||
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
LTEXT "&Atrybuty:", -1, 5, 59, 44, 8, NOT WS_GROUP
|
||||
LTEXT "&Atrybuty:", -1, 5, 76, 44, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 57, 180, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 74, 170, 60,
|
||||
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
DEFPUSHBUTTON "OK", IDOK, 53, 80, 40, 14
|
||||
PUSHBUTTON "Anuluj", IDCANCEL, 97, 80, 40, 14
|
||||
PUSHBUTTON "&Pomoc", IDD_ACMFORMATCHOOSE_BTN_HELP, 141, 80, 40, 14
|
||||
PUSHBUTTON "&Pomoc", IDD_ACMFORMATCHOOSE_BTN_HELP, 5, 100, 50, 14
|
||||
DEFPUSHBUTTON "OK", IDOK, 115, 100, 50, 14
|
||||
PUSHBUTTON "Anuluj", IDCANCEL, 170, 100, 50, 14
|
||||
|
||||
END
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
|
||||
LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN
|
||||
|
||||
DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 100
|
||||
DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 118
|
||||
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Seleção de som"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
|
@ -32,31 +32,31 @@ BEGIN
|
|||
|
||||
LTEXT "&Nome:", -1, 5, 5, 115, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 115, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 135, 60,
|
||||
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
PUSHBUTTON "&Salvar como...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 125, 14, 45, 14
|
||||
PUSHBUTTON "&Remover", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 175, 14, 45, 14
|
||||
PUSHBUTTON "&Salvar como...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 150, 14, 70, 14
|
||||
PUSHBUTTON "&Remover", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 150, 32, 70, 14
|
||||
|
||||
LTEXT "&Formato:", -1, 5, 41, 44, 8, NOT WS_GROUP
|
||||
LTEXT "&Formato:", -1, 5, 56, 44, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 39, 170, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 54, 170, 60,
|
||||
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
LTEXT "&Atributos:", -1, 5, 59, 44, 8, NOT WS_GROUP
|
||||
LTEXT "&Atributos:", -1, 5, 76, 44, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 57, 170, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 74, 170, 60,
|
||||
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
DEFPUSHBUTTON "OK", IDOK, 48, 80, 40, 14
|
||||
PUSHBUTTON "Cancelar", IDCANCEL, 92, 80, 40, 14
|
||||
PUSHBUTTON "Aj&uda", IDD_ACMFORMATCHOOSE_BTN_HELP, 136, 80, 40, 14
|
||||
PUSHBUTTON "Aj&uda", IDD_ACMFORMATCHOOSE_BTN_HELP, 5, 100, 50, 14
|
||||
DEFPUSHBUTTON "OK", IDOK, 115, 100, 50, 14
|
||||
PUSHBUTTON "Cancelar", IDCANCEL, 170, 100, 50, 14
|
||||
|
||||
END
|
||||
|
||||
LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE
|
||||
|
||||
DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 100
|
||||
DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 118
|
||||
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Selecção de som"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
|
@ -64,24 +64,24 @@ BEGIN
|
|||
|
||||
LTEXT "&Nome:", -1, 5, 5, 115, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 115, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 135, 60,
|
||||
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
PUSHBUTTON "&Gravar como...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 125, 14, 45, 14
|
||||
PUSHBUTTON "&Remover", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 175, 14, 45, 14
|
||||
PUSHBUTTON "&Gravar como...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 150, 14, 70, 14
|
||||
PUSHBUTTON "&Remover", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 150, 32, 70, 14
|
||||
|
||||
LTEXT "&Formato:", -1, 5, 41, 44, 8, NOT WS_GROUP
|
||||
LTEXT "&Formato:", -1, 5, 56, 44, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 39, 170, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 54, 170, 60,
|
||||
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
LTEXT "&Atributos:", -1, 5, 59, 44, 8, NOT WS_GROUP
|
||||
LTEXT "&Atributos:", -1, 5, 76, 44, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 57, 170, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 74, 170, 60,
|
||||
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
DEFPUSHBUTTON "OK", IDOK, 48, 80, 40, 14
|
||||
PUSHBUTTON "Cancelar", IDCANCEL, 92, 80, 40, 14
|
||||
PUSHBUTTON "Aj&uda", IDD_ACMFORMATCHOOSE_BTN_HELP, 136, 80, 40, 14
|
||||
PUSHBUTTON "Aj&uda", IDD_ACMFORMATCHOOSE_BTN_HELP, 5, 100, 50, 14
|
||||
DEFPUSHBUTTON "OK", IDOK, 115, 100, 50, 14
|
||||
PUSHBUTTON "Cancelar", IDCANCEL, 170, 100, 50, 14
|
||||
|
||||
END
|
||||
|
|
|
@ -22,32 +22,32 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL
|
|||
|
||||
#pragma code_page(65001)
|
||||
|
||||
DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 100
|
||||
DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 118
|
||||
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Selecție sunet"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
|
||||
LTEXT "N&ume:", -1, 5, 5, 115, 8, NOT WS_GROUP
|
||||
LTEXT "N&ume:", -1, 5, 5, 115, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 115, 60,
|
||||
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 135, 60,
|
||||
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
PUSHBUTTON "Pă&strare ca…", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 125, 14, 45, 14
|
||||
PUSHBUTTON "&Elimină", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 175, 14, 45, 14
|
||||
PUSHBUTTON "Pă&strare ca…", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 150, 14, 70, 14
|
||||
PUSHBUTTON "&Elimină", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 150, 32, 70, 14
|
||||
|
||||
LTEXT "F&ormat:", -1, 5, 41, 44, 8, NOT WS_GROUP
|
||||
LTEXT "F&ormat:", -1, 5, 56, 44, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 39, 170, 60,
|
||||
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 54, 170, 60,
|
||||
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
LTEXT "&Atribute:", -1, 5, 59, 44, 8, NOT WS_GROUP
|
||||
LTEXT "&Atribute:", -1, 5, 76, 44, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 57, 170, 60,
|
||||
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 74, 170, 60,
|
||||
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
DEFPUSHBUTTON "Con&firmă", IDOK, 48, 80, 40, 14
|
||||
PUSHBUTTON "A&nulează", IDCANCEL, 92, 80, 40, 14
|
||||
PUSHBUTTON "&Manual…", IDD_ACMFORMATCHOOSE_BTN_HELP, 136, 80, 40, 14
|
||||
PUSHBUTTON "&Manual…", IDD_ACMFORMATCHOOSE_BTN_HELP, 5, 100, 50, 14
|
||||
DEFPUSHBUTTON "Con&firmă", IDOK, 115, 100, 50, 14
|
||||
PUSHBUTTON "A&nulează", IDCANCEL, 170, 100, 50, 14
|
||||
|
||||
END
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
|
||||
LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
|
||||
|
||||
DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 100
|
||||
DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 118
|
||||
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Выбор звука"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
|
@ -31,24 +31,24 @@ BEGIN
|
|||
|
||||
LTEXT "&Имя:", -1, 5, 5, 115, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 115, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 135, 60,
|
||||
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
PUSHBUTTON "&Сохранить как...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 125, 14, 45, 14
|
||||
PUSHBUTTON "&Удалить", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 175, 14, 45, 14
|
||||
PUSHBUTTON "&Сохранить как...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 150, 14, 70, 14
|
||||
PUSHBUTTON "&Удалить", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 150, 32, 70, 14
|
||||
|
||||
LTEXT "&Формат:", -1, 5, 41, 44, 8, NOT WS_GROUP
|
||||
LTEXT "&Формат:", -1, 5, 56, 44, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 39, 170, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 54, 170, 60,
|
||||
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
LTEXT "&Свойства:", -1, 5, 59, 44, 8, NOT WS_GROUP
|
||||
LTEXT "&Свойства:", -1, 5, 76, 44, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 57, 170, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 74, 170, 60,
|
||||
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
DEFPUSHBUTTON "OK", IDOK, 48, 80, 40, 14
|
||||
PUSHBUTTON "Отмена", IDCANCEL, 92, 80, 40, 14
|
||||
PUSHBUTTON "&Помощь", IDD_ACMFORMATCHOOSE_BTN_HELP, 136, 80, 40, 14
|
||||
PUSHBUTTON "&Помощь", IDD_ACMFORMATCHOOSE_BTN_HELP, 5, 100, 50, 14
|
||||
DEFPUSHBUTTON "OK", IDOK, 115, 100, 50, 14
|
||||
PUSHBUTTON "Отмена", IDCANCEL, 170, 100, 50, 14
|
||||
|
||||
END
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
|
||||
LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT
|
||||
|
||||
DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 100
|
||||
DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 118
|
||||
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Izbira zvoka"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
|
@ -30,24 +30,24 @@ BEGIN
|
|||
|
||||
LTEXT "&Ime:", -1, 5, 5, 115, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 115, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 135, 60,
|
||||
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
PUSHBUTTON "&Shrani kot ...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 125, 14, 45, 14
|
||||
PUSHBUTTON "&Odstrani", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 175, 14, 45, 14
|
||||
PUSHBUTTON "&Shrani kot ...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 150, 14, 70, 14
|
||||
PUSHBUTTON "&Odstrani", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 150, 32, 70, 14
|
||||
|
||||
LTEXT "&Format:", -1, 5, 41, 44, 8, NOT WS_GROUP
|
||||
LTEXT "&Format:", -1, 5, 56, 44, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 39, 170, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 54, 170, 60,
|
||||
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
LTEXT "&Lastnosti:", -1, 5, 59, 44, 8, NOT WS_GROUP
|
||||
LTEXT "&Lastnosti:", -1, 5, 76, 44, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 57, 170, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 74, 170, 60,
|
||||
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
DEFPUSHBUTTON "V redu", IDOK, 48, 80, 40, 14
|
||||
PUSHBUTTON "Prekliči", IDCANCEL, 92, 80, 40, 14
|
||||
PUSHBUTTON "&Pomoč", IDD_ACMFORMATCHOOSE_BTN_HELP, 136, 80, 40, 14
|
||||
PUSHBUTTON "&Pomoč", IDD_ACMFORMATCHOOSE_BTN_HELP, 5, 100, 50, 14
|
||||
DEFPUSHBUTTON "V redu", IDOK, 115, 100, 50, 14
|
||||
PUSHBUTTON "Prekliči", IDCANCEL, 170, 100, 50, 14
|
||||
|
||||
END
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
|
||||
LANGUAGE LANG_ALBANIAN, SUBLANG_NEUTRAL
|
||||
|
||||
DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 100
|
||||
DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 118
|
||||
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Përzgjedhja Zërit"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
|
@ -28,24 +28,24 @@ BEGIN
|
|||
|
||||
LTEXT "&Emri:", -1, 5, 5, 115, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 115, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 135, 60,
|
||||
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
PUSHBUTTON "&Ruaj Si...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 125, 14, 45, 14
|
||||
PUSHBUTTON "&Hiq", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 175, 14, 45, 14
|
||||
PUSHBUTTON "&Ruaj Si...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 150, 14, 70, 14
|
||||
PUSHBUTTON "&Hiq", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 150, 32, 70, 14
|
||||
|
||||
LTEXT "&Formati:", -1, 5, 41, 44, 8, NOT WS_GROUP
|
||||
LTEXT "&Formati:", -1, 5, 56, 44, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 39, 170, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 54, 170, 60,
|
||||
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
LTEXT "&Atributet:", -1, 5, 59, 44, 8, NOT WS_GROUP
|
||||
LTEXT "&Atributet:", -1, 5, 76, 44, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 57, 170, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 74, 170, 60,
|
||||
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
DEFPUSHBUTTON "OK", IDOK, 48, 80, 40, 14
|
||||
PUSHBUTTON "Anulo", IDCANCEL, 92, 80, 40, 14
|
||||
PUSHBUTTON "&Ndihmë", IDD_ACMFORMATCHOOSE_BTN_HELP, 136, 80, 40, 14
|
||||
PUSHBUTTON "&Ndihmë", IDD_ACMFORMATCHOOSE_BTN_HELP, 5, 100, 50, 14
|
||||
DEFPUSHBUTTON "OK", IDOK, 115, 100, 50, 14
|
||||
PUSHBUTTON "Anulo", IDCANCEL, 170, 100, 50, 14
|
||||
|
||||
END
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
|
||||
LANGUAGE LANG_SWEDISH, SUBLANG_NEUTRAL
|
||||
|
||||
DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 100
|
||||
DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 118
|
||||
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Ljudval"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
|
@ -28,24 +28,24 @@ BEGIN
|
|||
|
||||
LTEXT "&Namn:", -1, 5, 5, 115, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 115, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 135, 60,
|
||||
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
PUSHBUTTON "&Spara som...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 125, 14, 45, 14
|
||||
PUSHBUTTON "&Ta bort", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 175, 14, 45, 14
|
||||
PUSHBUTTON "&Spara som...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 150, 14, 70, 14
|
||||
PUSHBUTTON "&Ta bort", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 150, 32, 70, 14
|
||||
|
||||
LTEXT "&Format:", -1, 5, 41, 44, 8, NOT WS_GROUP
|
||||
LTEXT "&Format:", -1, 5, 56, 44, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 39, 170, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 54, 170, 60,
|
||||
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
LTEXT "&Attribut:", -1, 5, 59, 44, 8, NOT WS_GROUP
|
||||
LTEXT "&Attribut:", -1, 5, 76, 44, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 57, 170, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 74, 170, 60,
|
||||
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
DEFPUSHBUTTON "OK", IDOK, 48, 80, 40, 14
|
||||
PUSHBUTTON "Avbryt", IDCANCEL, 92, 80, 40, 14
|
||||
PUSHBUTTON "&Hjälp", IDD_ACMFORMATCHOOSE_BTN_HELP, 136, 80, 40, 14
|
||||
PUSHBUTTON "&Hjälp", IDD_ACMFORMATCHOOSE_BTN_HELP, 5, 100, 50, 14
|
||||
DEFPUSHBUTTON "OK", IDOK, 115, 100, 50, 14
|
||||
PUSHBUTTON "Avbryt", IDCANCEL, 170, 100, 50, 14
|
||||
|
||||
END
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
|
||||
LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT
|
||||
|
||||
DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 100
|
||||
DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 118
|
||||
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Ses Seçme"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
|
@ -28,24 +28,24 @@ BEGIN
|
|||
|
||||
LTEXT "&Ad:", -1, 5, 5, 115, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 115, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 135, 60,
|
||||
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
PUSHBUTTON "Ay&rı Sakla...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 125, 14, 45, 14
|
||||
PUSHBUTTON "&Kaldır", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 175, 14, 45, 14
|
||||
PUSHBUTTON "Ay&rı Sakla...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 150, 14, 70, 14
|
||||
PUSHBUTTON "&Kaldır", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 150, 32, 70, 14
|
||||
|
||||
LTEXT "&Biçim:", -1, 5, 41, 44, 8, NOT WS_GROUP
|
||||
LTEXT "&Biçim:", -1, 5, 56, 44, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 39, 170, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 54, 170, 60,
|
||||
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
LTEXT "&Öz Nitelikler:", -1, 5, 59, 44, 8, NOT WS_GROUP
|
||||
LTEXT "&Öz Nitelikler:", -1, 5, 76, 44, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 57, 170, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 74, 170, 60,
|
||||
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
DEFPUSHBUTTON "Tamam", IDOK, 48, 80, 40, 14
|
||||
PUSHBUTTON "İptal", IDCANCEL, 92, 80, 40, 14
|
||||
PUSHBUTTON "&Yardım", IDD_ACMFORMATCHOOSE_BTN_HELP, 136, 80, 40, 14
|
||||
PUSHBUTTON "&Yardım", IDD_ACMFORMATCHOOSE_BTN_HELP, 5, 100, 50, 14
|
||||
DEFPUSHBUTTON "Tamam", IDOK, 115, 100, 50, 14
|
||||
PUSHBUTTON "İptal", IDCANCEL, 170, 100, 50, 14
|
||||
|
||||
END
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
|
||||
LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT
|
||||
|
||||
DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 100
|
||||
DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 118
|
||||
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Sound Selection"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
|
@ -31,24 +31,24 @@ BEGIN
|
|||
|
||||
LTEXT "&Ім'я:", -1, 5, 5, 115, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 115, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 135, 60,
|
||||
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
PUSHBUTTON "Зберегти &як...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 125, 14, 45, 14
|
||||
PUSHBUTTON "&Видалити", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 175, 14, 45, 14
|
||||
PUSHBUTTON "Зберегти &як...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 150, 14, 70, 14
|
||||
PUSHBUTTON "&Видалити", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 150, 32, 70, 14
|
||||
|
||||
LTEXT "&Формат:", -1, 5, 41, 44, 8, NOT WS_GROUP
|
||||
LTEXT "&Формат:", -1, 5, 56, 44, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 39, 170, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 54, 170, 60,
|
||||
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
LTEXT "&Властивості:", -1, 5, 59, 44, 8, NOT WS_GROUP
|
||||
LTEXT "&Властивості:", -1, 5, 76, 44, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 57, 170, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 74, 170, 60,
|
||||
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
DEFPUSHBUTTON "OK", IDOK, 48, 80, 40, 14
|
||||
PUSHBUTTON "Скасувати", IDCANCEL, 92, 80, 40, 14
|
||||
PUSHBUTTON "&Довідка", IDD_ACMFORMATCHOOSE_BTN_HELP, 136, 80, 40, 14
|
||||
PUSHBUTTON "&Довідка", IDD_ACMFORMATCHOOSE_BTN_HELP, 5, 100, 50, 14
|
||||
DEFPUSHBUTTON "OK", IDOK, 115, 100, 50, 14
|
||||
PUSHBUTTON "Скасувати", IDCANCEL, 170, 100, 50, 14
|
||||
|
||||
END
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
|
||||
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
|
||||
|
||||
DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 100
|
||||
DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 118
|
||||
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "声音选择"
|
||||
FONT 9, "MS Shell Dlg"
|
||||
|
@ -31,31 +31,31 @@ BEGIN
|
|||
|
||||
LTEXT "名称(&N):", -1, 5, 5, 115, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 115, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 135, 60,
|
||||
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
PUSHBUTTON "保存为(&S)...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 125, 14, 45, 14
|
||||
PUSHBUTTON "删除(&R)", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 175, 14, 45, 14
|
||||
PUSHBUTTON "保存为(&S)...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 150, 14, 70, 14
|
||||
PUSHBUTTON "删除(&R)", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 150, 32, 70, 14
|
||||
|
||||
LTEXT "格式(&F):", -1, 5, 41, 44, 8, NOT WS_GROUP
|
||||
LTEXT "格式(&F):", -1, 5, 56, 44, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 39, 170, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 54, 170, 60,
|
||||
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
LTEXT "属性(&A):", -1, 5, 59, 44, 8, NOT WS_GROUP
|
||||
LTEXT "属性(&A):", -1, 5, 76, 44, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 57, 170, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 74, 170, 60,
|
||||
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
DEFPUSHBUTTON "确定", IDOK, 48, 80, 40, 14
|
||||
PUSHBUTTON "取消", IDCANCEL, 92, 80, 40, 14
|
||||
PUSHBUTTON "帮助(&H)", IDD_ACMFORMATCHOOSE_BTN_HELP, 136, 80, 40, 14
|
||||
PUSHBUTTON "帮助(&H)", IDD_ACMFORMATCHOOSE_BTN_HELP, 5, 100, 50, 14
|
||||
DEFPUSHBUTTON "确定", IDOK, 115, 100, 50, 14
|
||||
PUSHBUTTON "取消", IDCANCEL, 170, 100, 50, 14
|
||||
|
||||
END
|
||||
|
||||
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL
|
||||
|
||||
DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 100
|
||||
DLG_ACMFORMATCHOOSE_ID DIALOG 10, 20, 225, 118
|
||||
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "聲音選擇"
|
||||
FONT 9, "MS Shell Dlg"
|
||||
|
@ -63,24 +63,24 @@ BEGIN
|
|||
|
||||
LTEXT "名稱(&N):", -1, 5, 5, 115, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 115, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 135, 60,
|
||||
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
PUSHBUTTON "儲存為(&S)...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 125, 14, 45, 14
|
||||
PUSHBUTTON "刪除(&R)", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 175, 14, 45, 14
|
||||
PUSHBUTTON "儲存為(&S)...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 150, 14, 70, 14
|
||||
PUSHBUTTON "刪除(&R)", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 150, 32, 70, 14
|
||||
|
||||
LTEXT "格式(&F):", -1, 5, 41, 44, 8, NOT WS_GROUP
|
||||
LTEXT "格式(&F):", -1, 5, 56, 44, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 39, 170, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 54, 170, 60,
|
||||
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
LTEXT "屬性(&A):", -1, 5, 59, 44, 8, NOT WS_GROUP
|
||||
LTEXT "屬性(&A):", -1, 5, 76, 44, 8, NOT WS_GROUP
|
||||
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 57, 170, 60,
|
||||
COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 74, 170, 60,
|
||||
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
|
||||
DEFPUSHBUTTON "確定", IDOK, 48, 80, 40, 14
|
||||
PUSHBUTTON "取消", IDCANCEL, 92, 80, 40, 14
|
||||
PUSHBUTTON "幫助(&H)", IDD_ACMFORMATCHOOSE_BTN_HELP, 136, 80, 40, 14
|
||||
PUSHBUTTON "幫助(&H)", IDD_ACMFORMATCHOOSE_BTN_HELP, 5, 100, 50, 14
|
||||
DEFPUSHBUTTON "確定", IDOK, 115, 100, 50, 14
|
||||
PUSHBUTTON "取消", IDCANCEL, 170, 100, 50, 14
|
||||
|
||||
END
|
||||
|
|
|
@ -18,10 +18,9 @@
|
|||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#include "windef.h"
|
||||
#include "winbase.h"
|
||||
#include "winuser.h"
|
||||
#include "wineacm.h"
|
||||
#include <windef.h>
|
||||
#include <winuser.h>
|
||||
#include <msacmdlg.h>
|
||||
|
||||
#ifdef LANGUAGE_BG_BG
|
||||
#include "lang/msacm_Bg.rc"
|
||||
|
|
|
@ -1,12 +0,0 @@
|
|||
TOPSRCDIR = @top_srcdir@
|
||||
TOPOBJDIR = ../../..
|
||||
SRCDIR = @srcdir@
|
||||
VPATH = @srcdir@
|
||||
MODULE = msadp32.acm
|
||||
IMPORTS = winmm user32 kernel32
|
||||
|
||||
C_SRCS = msadp32.c
|
||||
|
||||
@MAKE_DLL_RULES@
|
||||
|
||||
### Dependencies:
|
|
@ -1 +0,0 @@
|
|||
@ stdcall DriverProc (long long long long long) ADPCM_DriverProc
|
|
@ -1,781 +0,0 @@
|
|||
/*
|
||||
* MS ADPCM handling
|
||||
*
|
||||
* Copyright (C) 2002 Eric Pouech
|
||||
*
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdarg.h>
|
||||
#include <string.h>
|
||||
#include "windef.h"
|
||||
#include "winbase.h"
|
||||
#include "wingdi.h"
|
||||
#include "winuser.h"
|
||||
#include "winnls.h"
|
||||
#include "mmsystem.h"
|
||||
#include "mmreg.h"
|
||||
#include "msacm.h"
|
||||
#include "msacmdrv.h"
|
||||
#include "wine/debug.h"
|
||||
|
||||
/* see http://www.pcisys.net/~melanson/codecs/adpcm.txt for the details */
|
||||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(adpcm);
|
||||
|
||||
/***********************************************************************
|
||||
* ADPCM_drvOpen
|
||||
*/
|
||||
static DWORD ADPCM_drvOpen(LPCSTR str)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* ADPCM_drvClose
|
||||
*/
|
||||
static DWORD ADPCM_drvClose(DWORD dwDevID)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
typedef struct tagAcmAdpcmData
|
||||
{
|
||||
void (*convert)(PACMDRVSTREAMINSTANCE adsi,
|
||||
const unsigned char*, LPDWORD, unsigned char*, LPDWORD);
|
||||
} AcmAdpcmData;
|
||||
|
||||
/* table to list all supported formats... those are the basic ones. this
|
||||
* also helps given a unique index to each of the supported formats
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
int nChannels;
|
||||
int nBits;
|
||||
int rate;
|
||||
} Format;
|
||||
|
||||
static Format PCM_Formats[] =
|
||||
{
|
||||
{1, 8, 8000}, {2, 8, 8000}, {1, 16, 8000}, {2, 16, 8000},
|
||||
{1, 8, 11025}, {2, 8, 11025}, {1, 16, 11025}, {2, 16, 11025},
|
||||
{1, 8, 22050}, {2, 8, 22050}, {1, 16, 22050}, {2, 16, 22050},
|
||||
{1, 8, 44100}, {2, 8, 44100}, {1, 16, 44100}, {2, 16, 44100},
|
||||
};
|
||||
|
||||
static Format ADPCM_Formats[] =
|
||||
{
|
||||
{1, 4, 8000}, {2, 4, 8000}, {1, 4, 11025}, {2, 4, 11025},
|
||||
{1, 4, 22050}, {2, 4, 22050}, {1, 4, 44100}, {2, 4, 44100},
|
||||
};
|
||||
|
||||
#define NUM_PCM_FORMATS (sizeof(PCM_Formats) / sizeof(PCM_Formats[0]))
|
||||
#define NUM_ADPCM_FORMATS (sizeof(ADPCM_Formats) / sizeof(ADPCM_Formats[0]))
|
||||
|
||||
static int MS_Delta[] =
|
||||
{
|
||||
230, 230, 230, 230, 307, 409, 512, 614,
|
||||
768, 614, 512, 409, 307, 230, 230, 230
|
||||
};
|
||||
|
||||
|
||||
static ADPCMCOEFSET MSADPCM_CoeffSet[] =
|
||||
{
|
||||
{256, 0}, {512, -256}, {0, 0}, {192, 64}, {240, 0}, {460, -208}, {392, -232}
|
||||
};
|
||||
|
||||
/***********************************************************************
|
||||
* ADPCM_GetFormatIndex
|
||||
*/
|
||||
static DWORD ADPCM_GetFormatIndex(WAVEFORMATEX* wfx)
|
||||
{
|
||||
int i, hi;
|
||||
Format* fmts;
|
||||
|
||||
switch (wfx->wFormatTag)
|
||||
{
|
||||
case WAVE_FORMAT_PCM:
|
||||
hi = NUM_PCM_FORMATS;
|
||||
fmts = PCM_Formats;
|
||||
break;
|
||||
case WAVE_FORMAT_ADPCM:
|
||||
hi = NUM_ADPCM_FORMATS;
|
||||
fmts = ADPCM_Formats;
|
||||
break;
|
||||
default:
|
||||
return 0xFFFFFFFF;
|
||||
}
|
||||
|
||||
for (i = 0; i < hi; i++)
|
||||
{
|
||||
if (wfx->nChannels == fmts[i].nChannels &&
|
||||
wfx->nSamplesPerSec == fmts[i].rate &&
|
||||
wfx->wBitsPerSample == fmts[i].nBits)
|
||||
return i;
|
||||
}
|
||||
|
||||
return 0xFFFFFFFF;
|
||||
}
|
||||
|
||||
static void init_wfx_adpcm(ADPCMWAVEFORMAT* awfx)
|
||||
{
|
||||
register WAVEFORMATEX* pwfx = &awfx->wfx;
|
||||
|
||||
/* we assume wFormatTag, nChannels, nSamplesPerSec and wBitsPerSample
|
||||
* have been initialized... */
|
||||
|
||||
if (pwfx->wFormatTag != WAVE_FORMAT_ADPCM) {FIXME("wrong FT\n"); return;}
|
||||
if (ADPCM_GetFormatIndex(pwfx) == 0xFFFFFFFF) {FIXME("wrong fmt\n"); return;}
|
||||
|
||||
switch (pwfx->nSamplesPerSec)
|
||||
{
|
||||
case 8000: pwfx->nBlockAlign = 256; break;
|
||||
case 11025: pwfx->nBlockAlign = 256; break;
|
||||
case 22050: pwfx->nBlockAlign = 512; break;
|
||||
default:
|
||||
case 44100: pwfx->nBlockAlign = 1024; break;
|
||||
}
|
||||
pwfx->cbSize = 2 * sizeof(WORD) + 7 * sizeof(ADPCMCOEFSET);
|
||||
/* 7 is the size of the block head (which contains two samples) */
|
||||
|
||||
awfx->wSamplesPerBlock = (pwfx->nBlockAlign - (7 * pwfx->nChannels)) * (2 / pwfx->nChannels) + 2;
|
||||
pwfx->nAvgBytesPerSec = (pwfx->nSamplesPerSec * pwfx->nBlockAlign) / awfx->wSamplesPerBlock;
|
||||
awfx->wNumCoef = 7;
|
||||
memcpy(awfx->aCoef, MSADPCM_CoeffSet, 7 * sizeof(ADPCMCOEFSET));
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* R16
|
||||
*
|
||||
* Read a 16 bit sample (correctly handles endianess)
|
||||
*/
|
||||
static inline short R16(const unsigned char* src)
|
||||
{
|
||||
return (short)((unsigned short)src[0] | ((unsigned short)src[1] << 8));
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* W16
|
||||
*
|
||||
* Write a 16 bit sample (correctly handles endianess)
|
||||
*/
|
||||
static inline void W16(unsigned char* dst, short s)
|
||||
{
|
||||
dst[0] = LOBYTE(s);
|
||||
dst[1] = HIBYTE(s);
|
||||
}
|
||||
|
||||
static inline void clamp_sample(int* sample)
|
||||
{
|
||||
if (*sample < -32768) *sample = -32768;
|
||||
if (*sample > 32767) *sample = 32767;
|
||||
}
|
||||
|
||||
static inline void process_nibble(unsigned nibble, int* idelta,
|
||||
int* sample1, int* sample2,
|
||||
const ADPCMCOEFSET* coeff)
|
||||
{
|
||||
int sample;
|
||||
int snibble;
|
||||
|
||||
/* nibble is in fact a signed 4 bit integer => propagate sign if needed */
|
||||
snibble = (nibble & 0x08) ? (nibble - 16) : nibble;
|
||||
sample = ((*sample1 * coeff->iCoef1) + (*sample2 * coeff->iCoef2)) / 256 +
|
||||
snibble * *idelta;
|
||||
clamp_sample(&sample);
|
||||
|
||||
*sample2 = *sample1;
|
||||
*sample1 = sample;
|
||||
*idelta = ((MS_Delta[nibble] * *idelta) / 256);
|
||||
if (*idelta < 16) *idelta = 16;
|
||||
}
|
||||
|
||||
static void cvtSSms16K(PACMDRVSTREAMINSTANCE adsi,
|
||||
const unsigned char* src, LPDWORD nsrc,
|
||||
unsigned char* dst, LPDWORD ndst)
|
||||
{
|
||||
int ideltaL, ideltaR;
|
||||
int sample1L, sample2L;
|
||||
int sample1R, sample2R;
|
||||
ADPCMCOEFSET coeffL, coeffR;
|
||||
int nsamp;
|
||||
int nsamp_blk = ((ADPCMWAVEFORMAT*)adsi->pwfxSrc)->wSamplesPerBlock;
|
||||
DWORD nblock = min(*nsrc / adsi->pwfxSrc->nBlockAlign,
|
||||
*ndst / (nsamp_blk * 2 * 2));
|
||||
|
||||
*nsrc = nblock * adsi->pwfxSrc->nBlockAlign;
|
||||
*ndst = nblock * nsamp_blk * 2 * 2;
|
||||
|
||||
nsamp_blk -= 2; /* see below for samples from block head */
|
||||
for (; nblock > 0; nblock--)
|
||||
{
|
||||
const unsigned char* in_src = src;
|
||||
|
||||
assert(*src <= 6);
|
||||
coeffL = MSADPCM_CoeffSet[*src++];
|
||||
assert(*src <= 6);
|
||||
coeffR = MSADPCM_CoeffSet[*src++];
|
||||
|
||||
ideltaL = R16(src); src += 2;
|
||||
ideltaR = R16(src); src += 2;
|
||||
sample1L = R16(src); src += 2;
|
||||
sample1R = R16(src); src += 2;
|
||||
sample2L = R16(src); src += 2;
|
||||
sample2R = R16(src); src += 2;
|
||||
|
||||
/* store samples from block head */
|
||||
W16(dst, sample2L); dst += 2;
|
||||
W16(dst, sample2R); dst += 2;
|
||||
W16(dst, sample1L); dst += 2;
|
||||
W16(dst, sample1R); dst += 2;
|
||||
|
||||
for (nsamp = nsamp_blk; nsamp > 0; nsamp--)
|
||||
{
|
||||
process_nibble(*src >> 4, &ideltaL, &sample1L, &sample2L, &coeffL);
|
||||
W16(dst, sample1L); dst += 2;
|
||||
process_nibble(*src++ & 0x0F, &ideltaR, &sample1R, &sample2R, &coeffR);
|
||||
W16(dst, sample1R); dst += 2;
|
||||
}
|
||||
src = in_src + adsi->pwfxSrc->nBlockAlign;
|
||||
}
|
||||
}
|
||||
|
||||
static void cvtMMms16K(PACMDRVSTREAMINSTANCE adsi,
|
||||
const unsigned char* src, LPDWORD nsrc,
|
||||
unsigned char* dst, LPDWORD ndst)
|
||||
{
|
||||
int idelta;
|
||||
int sample1, sample2;
|
||||
ADPCMCOEFSET coeff;
|
||||
int nsamp;
|
||||
int nsamp_blk = ((ADPCMWAVEFORMAT*)adsi->pwfxSrc)->wSamplesPerBlock;
|
||||
DWORD nblock = min(*nsrc / adsi->pwfxSrc->nBlockAlign,
|
||||
*ndst / (nsamp_blk * 2));
|
||||
|
||||
*nsrc = nblock * adsi->pwfxSrc->nBlockAlign;
|
||||
*ndst = nblock * nsamp_blk * 2;
|
||||
|
||||
nsamp_blk -= 2; /* see below for samples from block head */
|
||||
for (; nblock > 0; nblock--)
|
||||
{
|
||||
const unsigned char* in_src = src;
|
||||
|
||||
assert(*src <= 6);
|
||||
coeff = MSADPCM_CoeffSet[*src++];
|
||||
|
||||
idelta = R16(src); src += 2;
|
||||
sample1 = R16(src); src += 2;
|
||||
sample2 = R16(src); src += 2;
|
||||
|
||||
/* store samples from block head */
|
||||
W16(dst, sample2); dst += 2;
|
||||
W16(dst, sample1); dst += 2;
|
||||
|
||||
for (nsamp = nsamp_blk; nsamp > 0; nsamp -= 2)
|
||||
{
|
||||
process_nibble(*src >> 4, &idelta, &sample1, &sample2, &coeff);
|
||||
W16(dst, sample1); dst += 2;
|
||||
process_nibble(*src++ & 0x0F, &idelta, &sample1, &sample2, &coeff);
|
||||
W16(dst, sample1); dst += 2;
|
||||
}
|
||||
src = in_src + adsi->pwfxSrc->nBlockAlign;
|
||||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
static void cvtSS16msK(PACMDRVSTREAMINSTANCE adsi,
|
||||
const unsigned char* src, LPDWORD nsrc,
|
||||
unsigned char* dst, LPDWORD ndst)
|
||||
{
|
||||
}
|
||||
|
||||
static void cvtMM16msK(PACMDRVSTREAMINSTANCE adsi,
|
||||
const unsigned char* src, LPDWORD nsrc,
|
||||
unsigned char* dst, LPDWORD ndst)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
/***********************************************************************
|
||||
* ADPCM_DriverDetails
|
||||
*
|
||||
*/
|
||||
static LRESULT ADPCM_DriverDetails(PACMDRIVERDETAILSW add)
|
||||
{
|
||||
add->fccType = ACMDRIVERDETAILS_FCCTYPE_AUDIOCODEC;
|
||||
add->fccComp = ACMDRIVERDETAILS_FCCCOMP_UNDEFINED;
|
||||
add->wMid = 0xFF;
|
||||
add->wPid = 0x00;
|
||||
add->vdwACM = 0x01000000;
|
||||
add->vdwDriver = 0x01000000;
|
||||
add->fdwSupport = ACMDRIVERDETAILS_SUPPORTF_CODEC;
|
||||
add->cFormatTags = 2; /* PCM, MS ADPCM */
|
||||
add->cFilterTags = 0;
|
||||
add->hicon = NULL;
|
||||
MultiByteToWideChar( CP_ACP, 0, "WINE-MS ADPCM", -1,
|
||||
add->szShortName, sizeof(add->szShortName)/sizeof(WCHAR) );
|
||||
MultiByteToWideChar( CP_ACP, 0, "Wine MS ADPCM converter", -1,
|
||||
add->szLongName, sizeof(add->szLongName)/sizeof(WCHAR) );
|
||||
MultiByteToWideChar( CP_ACP, 0, "Brought to you by the Wine team...", -1,
|
||||
add->szCopyright, sizeof(add->szCopyright)/sizeof(WCHAR) );
|
||||
MultiByteToWideChar( CP_ACP, 0, "Refer to LICENSE file", -1,
|
||||
add->szLicensing, sizeof(add->szLicensing)/sizeof(WCHAR) );
|
||||
add->szFeatures[0] = 0;
|
||||
|
||||
return MMSYSERR_NOERROR;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* ADPCM_FormatTagDetails
|
||||
*
|
||||
*/
|
||||
static LRESULT ADPCM_FormatTagDetails(PACMFORMATTAGDETAILSW aftd, DWORD dwQuery)
|
||||
{
|
||||
static WCHAR szPcm[]={'P','C','M',0};
|
||||
static WCHAR szMsAdPcm[]={'M','S',' ','A','d','P','C','M',0};
|
||||
|
||||
switch (dwQuery)
|
||||
{
|
||||
case ACM_FORMATTAGDETAILSF_INDEX:
|
||||
if (aftd->dwFormatTagIndex >= 2) return ACMERR_NOTPOSSIBLE;
|
||||
break;
|
||||
case ACM_FORMATTAGDETAILSF_LARGESTSIZE:
|
||||
if (aftd->dwFormatTag == WAVE_FORMAT_UNKNOWN)
|
||||
{
|
||||
aftd->dwFormatTagIndex = 1; /* WAVE_FORMAT_ADPCM is bigger than PCM */
|
||||
break;
|
||||
}
|
||||
/* fall thru */
|
||||
case ACM_FORMATTAGDETAILSF_FORMATTAG:
|
||||
switch (aftd->dwFormatTag)
|
||||
{
|
||||
case WAVE_FORMAT_PCM: aftd->dwFormatTagIndex = 0; break;
|
||||
case WAVE_FORMAT_ADPCM: aftd->dwFormatTagIndex = 1; break;
|
||||
default: return ACMERR_NOTPOSSIBLE;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
WARN("Unsupported query %08lx\n", dwQuery);
|
||||
return MMSYSERR_NOTSUPPORTED;
|
||||
}
|
||||
|
||||
aftd->fdwSupport = ACMDRIVERDETAILS_SUPPORTF_CODEC;
|
||||
switch (aftd->dwFormatTagIndex)
|
||||
{
|
||||
case 0:
|
||||
aftd->dwFormatTag = WAVE_FORMAT_PCM;
|
||||
aftd->cbFormatSize = sizeof(PCMWAVEFORMAT);
|
||||
aftd->cStandardFormats = NUM_PCM_FORMATS;
|
||||
lstrcpyW(aftd->szFormatTag, szPcm);
|
||||
break;
|
||||
case 1:
|
||||
aftd->dwFormatTag = WAVE_FORMAT_ADPCM;
|
||||
aftd->cbFormatSize = sizeof(ADPCMWAVEFORMAT) + (7 - 1) * sizeof(ADPCMCOEFSET);
|
||||
aftd->cStandardFormats = NUM_ADPCM_FORMATS;
|
||||
lstrcpyW(aftd->szFormatTag, szMsAdPcm);
|
||||
break;
|
||||
}
|
||||
return MMSYSERR_NOERROR;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* ADPCM_FormatDetails
|
||||
*
|
||||
*/
|
||||
static LRESULT ADPCM_FormatDetails(PACMFORMATDETAILSW afd, DWORD dwQuery)
|
||||
{
|
||||
switch (dwQuery)
|
||||
{
|
||||
case ACM_FORMATDETAILSF_FORMAT:
|
||||
if (ADPCM_GetFormatIndex(afd->pwfx) == 0xFFFFFFFF) return ACMERR_NOTPOSSIBLE;
|
||||
break;
|
||||
case ACM_FORMATDETAILSF_INDEX:
|
||||
afd->pwfx->wFormatTag = afd->dwFormatTag;
|
||||
switch (afd->dwFormatTag)
|
||||
{
|
||||
case WAVE_FORMAT_PCM:
|
||||
if (afd->dwFormatIndex >= NUM_PCM_FORMATS) return ACMERR_NOTPOSSIBLE;
|
||||
afd->pwfx->nChannels = PCM_Formats[afd->dwFormatIndex].nChannels;
|
||||
afd->pwfx->nSamplesPerSec = PCM_Formats[afd->dwFormatIndex].rate;
|
||||
afd->pwfx->wBitsPerSample = PCM_Formats[afd->dwFormatIndex].nBits;
|
||||
/* native MSACM uses a PCMWAVEFORMAT structure, so cbSize is not accessible
|
||||
* afd->pwfx->cbSize = 0;
|
||||
*/
|
||||
afd->pwfx->nBlockAlign =
|
||||
(afd->pwfx->nChannels * afd->pwfx->wBitsPerSample) / 8;
|
||||
afd->pwfx->nAvgBytesPerSec =
|
||||
afd->pwfx->nSamplesPerSec * afd->pwfx->nBlockAlign;
|
||||
break;
|
||||
case WAVE_FORMAT_ADPCM:
|
||||
if (afd->dwFormatIndex >= NUM_ADPCM_FORMATS) return ACMERR_NOTPOSSIBLE;
|
||||
if (afd->cbwfx < sizeof(ADPCMWAVEFORMAT) + (7 - 1) * sizeof(ADPCMCOEFSET))
|
||||
return ACMERR_NOTPOSSIBLE;
|
||||
afd->pwfx->nChannels = ADPCM_Formats[afd->dwFormatIndex].nChannels;
|
||||
afd->pwfx->nSamplesPerSec = ADPCM_Formats[afd->dwFormatIndex].rate;
|
||||
afd->pwfx->wBitsPerSample = ADPCM_Formats[afd->dwFormatIndex].nBits;
|
||||
init_wfx_adpcm((ADPCMWAVEFORMAT*)afd->pwfx);
|
||||
break;
|
||||
default:
|
||||
WARN("Unsupported tag %08lx\n", afd->dwFormatTag);
|
||||
return MMSYSERR_INVALPARAM;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
WARN("Unsupported query %08lx\n", dwQuery);
|
||||
return MMSYSERR_NOTSUPPORTED;
|
||||
}
|
||||
afd->fdwSupport = ACMDRIVERDETAILS_SUPPORTF_CODEC;
|
||||
afd->szFormat[0] = 0; /* let MSACM format this for us... */
|
||||
|
||||
return MMSYSERR_NOERROR;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* ADPCM_FormatSuggest
|
||||
*
|
||||
*/
|
||||
static LRESULT ADPCM_FormatSuggest(PACMDRVFORMATSUGGEST adfs)
|
||||
{
|
||||
/* some tests ... */
|
||||
if (adfs->cbwfxSrc < sizeof(PCMWAVEFORMAT) ||
|
||||
adfs->cbwfxDst < sizeof(PCMWAVEFORMAT) ||
|
||||
ADPCM_GetFormatIndex(adfs->pwfxSrc) == 0xFFFFFFFF) return ACMERR_NOTPOSSIBLE;
|
||||
/* FIXME: should do those tests against the real size (according to format tag */
|
||||
|
||||
/* If no suggestion for destination, then copy source value */
|
||||
if (!(adfs->fdwSuggest & ACM_FORMATSUGGESTF_NCHANNELS))
|
||||
adfs->pwfxDst->nChannels = adfs->pwfxSrc->nChannels;
|
||||
if (!(adfs->fdwSuggest & ACM_FORMATSUGGESTF_NSAMPLESPERSEC))
|
||||
adfs->pwfxDst->nSamplesPerSec = adfs->pwfxSrc->nSamplesPerSec;
|
||||
|
||||
if (!(adfs->fdwSuggest & ACM_FORMATSUGGESTF_WBITSPERSAMPLE))
|
||||
{
|
||||
if (adfs->pwfxSrc->wFormatTag == WAVE_FORMAT_PCM)
|
||||
adfs->pwfxDst->wBitsPerSample = 4;
|
||||
else
|
||||
adfs->pwfxDst->wBitsPerSample = 16;
|
||||
}
|
||||
if (!(adfs->fdwSuggest & ACM_FORMATSUGGESTF_WFORMATTAG))
|
||||
{
|
||||
if (adfs->pwfxSrc->wFormatTag == WAVE_FORMAT_PCM)
|
||||
adfs->pwfxDst->wFormatTag = WAVE_FORMAT_ADPCM;
|
||||
else
|
||||
adfs->pwfxDst->wFormatTag = WAVE_FORMAT_PCM;
|
||||
}
|
||||
|
||||
/* check if result is ok */
|
||||
if (ADPCM_GetFormatIndex(adfs->pwfxDst) == 0xFFFFFFFF) return ACMERR_NOTPOSSIBLE;
|
||||
|
||||
/* recompute other values */
|
||||
switch (adfs->pwfxDst->wFormatTag)
|
||||
{
|
||||
case WAVE_FORMAT_PCM:
|
||||
adfs->pwfxDst->nBlockAlign = (adfs->pwfxDst->nChannels * adfs->pwfxDst->wBitsPerSample) / 8;
|
||||
adfs->pwfxDst->nAvgBytesPerSec = adfs->pwfxDst->nSamplesPerSec * adfs->pwfxDst->nBlockAlign;
|
||||
break;
|
||||
case WAVE_FORMAT_ADPCM:
|
||||
init_wfx_adpcm((ADPCMWAVEFORMAT*)adfs->pwfxDst);
|
||||
break;
|
||||
default:
|
||||
FIXME("\n");
|
||||
break;
|
||||
}
|
||||
|
||||
return MMSYSERR_NOERROR;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* ADPCM_Reset
|
||||
*
|
||||
*/
|
||||
static void ADPCM_Reset(PACMDRVSTREAMINSTANCE adsi, AcmAdpcmData* aad)
|
||||
{
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* ADPCM_StreamOpen
|
||||
*
|
||||
*/
|
||||
static LRESULT ADPCM_StreamOpen(PACMDRVSTREAMINSTANCE adsi)
|
||||
{
|
||||
AcmAdpcmData* aad;
|
||||
|
||||
assert(!(adsi->fdwOpen & ACM_STREAMOPENF_ASYNC));
|
||||
|
||||
if (ADPCM_GetFormatIndex(adsi->pwfxSrc) == 0xFFFFFFFF ||
|
||||
ADPCM_GetFormatIndex(adsi->pwfxDst) == 0xFFFFFFFF)
|
||||
return ACMERR_NOTPOSSIBLE;
|
||||
|
||||
aad = HeapAlloc(GetProcessHeap(), 0, sizeof(AcmAdpcmData));
|
||||
if (aad == 0) return MMSYSERR_NOMEM;
|
||||
|
||||
adsi->dwDriver = (DWORD)aad;
|
||||
|
||||
if (adsi->pwfxSrc->wFormatTag == WAVE_FORMAT_PCM &&
|
||||
adsi->pwfxDst->wFormatTag == WAVE_FORMAT_PCM)
|
||||
{
|
||||
goto theEnd;
|
||||
}
|
||||
else if (adsi->pwfxSrc->wFormatTag == WAVE_FORMAT_ADPCM &&
|
||||
adsi->pwfxDst->wFormatTag == WAVE_FORMAT_PCM)
|
||||
{
|
||||
/* resampling or mono <=> stereo not available
|
||||
* ADPCM algo only define 16 bit per sample output
|
||||
*/
|
||||
if (adsi->pwfxSrc->nSamplesPerSec != adsi->pwfxDst->nSamplesPerSec ||
|
||||
adsi->pwfxSrc->nChannels != adsi->pwfxDst->nChannels ||
|
||||
adsi->pwfxDst->wBitsPerSample != 16)
|
||||
goto theEnd;
|
||||
|
||||
#if 0
|
||||
{
|
||||
unsigned int nspb = ((IMAADPCMWAVEFORMAT*)adsi->pwfxSrc)->wSamplesPerBlock;
|
||||
FIXME("spb=%u\n", nspb);
|
||||
|
||||
/* we check that in a block, after the header, samples are present on
|
||||
* 4-sample packet pattern
|
||||
* we also check that the block alignement is bigger than the expected size
|
||||
*/
|
||||
if (((nspb - 1) & 3) != 0) goto theEnd;
|
||||
if ((((nspb - 1) / 2) + 4) * adsi->pwfxSrc->nChannels < adsi->pwfxSrc->nBlockAlign)
|
||||
goto theEnd;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* adpcm decoding... */
|
||||
if (adsi->pwfxDst->wBitsPerSample == 16 && adsi->pwfxDst->nChannels == 2)
|
||||
aad->convert = cvtSSms16K;
|
||||
if (adsi->pwfxDst->wBitsPerSample == 16 && adsi->pwfxDst->nChannels == 1)
|
||||
aad->convert = cvtMMms16K;
|
||||
}
|
||||
else if (adsi->pwfxSrc->wFormatTag == WAVE_FORMAT_PCM &&
|
||||
adsi->pwfxDst->wFormatTag == WAVE_FORMAT_ADPCM)
|
||||
{
|
||||
if (adsi->pwfxSrc->nSamplesPerSec != adsi->pwfxDst->nSamplesPerSec ||
|
||||
adsi->pwfxSrc->nChannels != adsi->pwfxDst->nChannels ||
|
||||
adsi->pwfxSrc->wBitsPerSample != 16)
|
||||
goto theEnd;
|
||||
#if 0
|
||||
nspb = ((IMAADPCMWAVEFORMAT*)adsi->pwfxDst)->wSamplesPerBlock;
|
||||
FIXME("spb=%u\n", nspb);
|
||||
|
||||
/* we check that in a block, after the header, samples are present on
|
||||
* 4-sample packet pattern
|
||||
* we also check that the block alignement is bigger than the expected size
|
||||
*/
|
||||
if (((nspb - 1) & 3) != 0) goto theEnd;
|
||||
if ((((nspb - 1) / 2) + 4) * adsi->pwfxDst->nChannels < adsi->pwfxDst->nBlockAlign)
|
||||
goto theEnd;
|
||||
#endif
|
||||
#if 0
|
||||
/* adpcm coding... */
|
||||
if (adsi->pwfxSrc->wBitsPerSample == 16 && adsi->pwfxSrc->nChannels == 2)
|
||||
aad->convert = cvtSS16msK;
|
||||
if (adsi->pwfxSrc->wBitsPerSample == 16 && adsi->pwfxSrc->nChannels == 1)
|
||||
aad->convert = cvtMM16msK;
|
||||
#endif
|
||||
FIXME("We don't support encoding yet\n");
|
||||
goto theEnd;
|
||||
}
|
||||
else goto theEnd;
|
||||
ADPCM_Reset(adsi, aad);
|
||||
|
||||
return MMSYSERR_NOERROR;
|
||||
|
||||
theEnd:
|
||||
HeapFree(GetProcessHeap(), 0, aad);
|
||||
adsi->dwDriver = 0L;
|
||||
return MMSYSERR_NOTSUPPORTED;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* ADPCM_StreamClose
|
||||
*
|
||||
*/
|
||||
static LRESULT ADPCM_StreamClose(PACMDRVSTREAMINSTANCE adsi)
|
||||
{
|
||||
HeapFree(GetProcessHeap(), 0, (void*)adsi->dwDriver);
|
||||
return MMSYSERR_NOERROR;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* ADPCM_round
|
||||
*
|
||||
*/
|
||||
static inline DWORD ADPCM_round(DWORD a, DWORD b, DWORD c)
|
||||
{
|
||||
assert(a && b && c);
|
||||
/* to be sure, always return an entire number of c... */
|
||||
return ((double)a * (double)b + (double)c - 1) / (double)c;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* ADPCM_StreamSize
|
||||
*
|
||||
*/
|
||||
static LRESULT ADPCM_StreamSize(PACMDRVSTREAMINSTANCE adsi, PACMDRVSTREAMSIZE adss)
|
||||
{
|
||||
switch (adss->fdwSize)
|
||||
{
|
||||
case ACM_STREAMSIZEF_DESTINATION:
|
||||
/* cbDstLength => cbSrcLength */
|
||||
if (adsi->pwfxSrc->wFormatTag == WAVE_FORMAT_PCM &&
|
||||
adsi->pwfxDst->wFormatTag == WAVE_FORMAT_ADPCM)
|
||||
{
|
||||
/* don't take block overhead into account, doesn't matter too much */
|
||||
adss->cbSrcLength = adss->cbDstLength * 4;
|
||||
}
|
||||
else if (adsi->pwfxSrc->wFormatTag == WAVE_FORMAT_ADPCM &&
|
||||
adsi->pwfxDst->wFormatTag == WAVE_FORMAT_PCM)
|
||||
{
|
||||
FIXME("misses the block header overhead\n");
|
||||
adss->cbSrcLength = 256 + adss->cbDstLength / 4;
|
||||
}
|
||||
else
|
||||
{
|
||||
return MMSYSERR_NOTSUPPORTED;
|
||||
}
|
||||
break;
|
||||
case ACM_STREAMSIZEF_SOURCE:
|
||||
/* cbSrcLength => cbDstLength */
|
||||
if (adsi->pwfxSrc->wFormatTag == WAVE_FORMAT_PCM &&
|
||||
adsi->pwfxDst->wFormatTag == WAVE_FORMAT_ADPCM)
|
||||
{
|
||||
FIXME("misses the block header overhead\n");
|
||||
adss->cbDstLength = 256 + adss->cbSrcLength / 4;
|
||||
}
|
||||
else if (adsi->pwfxSrc->wFormatTag == WAVE_FORMAT_ADPCM &&
|
||||
adsi->pwfxDst->wFormatTag == WAVE_FORMAT_PCM)
|
||||
{
|
||||
/* don't take block overhead into account, doesn't matter too much */
|
||||
adss->cbDstLength = adss->cbSrcLength * 4;
|
||||
}
|
||||
else
|
||||
{
|
||||
return MMSYSERR_NOTSUPPORTED;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
WARN("Unsupported query %08lx\n", adss->fdwSize);
|
||||
return MMSYSERR_NOTSUPPORTED;
|
||||
}
|
||||
return MMSYSERR_NOERROR;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* ADPCM_StreamConvert
|
||||
*
|
||||
*/
|
||||
static LRESULT ADPCM_StreamConvert(PACMDRVSTREAMINSTANCE adsi, PACMDRVSTREAMHEADER adsh)
|
||||
{
|
||||
AcmAdpcmData* aad = (AcmAdpcmData*)adsi->dwDriver;
|
||||
DWORD nsrc = adsh->cbSrcLength;
|
||||
DWORD ndst = adsh->cbDstLength;
|
||||
|
||||
if (adsh->fdwConvert &
|
||||
~(ACM_STREAMCONVERTF_BLOCKALIGN|
|
||||
ACM_STREAMCONVERTF_END|
|
||||
ACM_STREAMCONVERTF_START))
|
||||
{
|
||||
FIXME("Unsupported fdwConvert (%08lx), ignoring it\n", adsh->fdwConvert);
|
||||
}
|
||||
/* ACM_STREAMCONVERTF_BLOCKALIGN
|
||||
* currently all conversions are block aligned, so do nothing for this flag
|
||||
* ACM_STREAMCONVERTF_END
|
||||
* no pending data, so do nothing for this flag
|
||||
*/
|
||||
if ((adsh->fdwConvert & ACM_STREAMCONVERTF_START))
|
||||
{
|
||||
ADPCM_Reset(adsi, aad);
|
||||
}
|
||||
|
||||
aad->convert(adsi, adsh->pbSrc, &nsrc, adsh->pbDst, &ndst);
|
||||
adsh->cbSrcLengthUsed = nsrc;
|
||||
adsh->cbDstLengthUsed = ndst;
|
||||
|
||||
return MMSYSERR_NOERROR;
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* ADPCM_DriverProc [exported]
|
||||
*/
|
||||
LRESULT CALLBACK ADPCM_DriverProc(DWORD dwDevID, HDRVR hDriv, UINT wMsg,
|
||||
LPARAM dwParam1, LPARAM dwParam2)
|
||||
{
|
||||
TRACE("(%08lx %08lx %04x %08lx %08lx);\n",
|
||||
dwDevID, (DWORD)hDriv, wMsg, dwParam1, dwParam2);
|
||||
|
||||
switch (wMsg)
|
||||
{
|
||||
case DRV_LOAD: return 1;
|
||||
case DRV_FREE: return 1;
|
||||
case DRV_OPEN: return ADPCM_drvOpen((LPSTR)dwParam1);
|
||||
case DRV_CLOSE: return ADPCM_drvClose(dwDevID);
|
||||
case DRV_ENABLE: return 1;
|
||||
case DRV_DISABLE: return 1;
|
||||
case DRV_QUERYCONFIGURE: return 1;
|
||||
case DRV_CONFIGURE: MessageBoxA(0, "MSACM MS ADPCM filter !", "Wine Driver", MB_OK); return 1;
|
||||
case DRV_INSTALL: return DRVCNF_RESTART;
|
||||
case DRV_REMOVE: return DRVCNF_RESTART;
|
||||
|
||||
case ACMDM_DRIVER_NOTIFY:
|
||||
/* no caching from other ACM drivers is done so far */
|
||||
return MMSYSERR_NOERROR;
|
||||
|
||||
case ACMDM_DRIVER_DETAILS:
|
||||
return ADPCM_DriverDetails((PACMDRIVERDETAILSW)dwParam1);
|
||||
|
||||
case ACMDM_FORMATTAG_DETAILS:
|
||||
return ADPCM_FormatTagDetails((PACMFORMATTAGDETAILSW)dwParam1, dwParam2);
|
||||
|
||||
case ACMDM_FORMAT_DETAILS:
|
||||
return ADPCM_FormatDetails((PACMFORMATDETAILSW)dwParam1, dwParam2);
|
||||
|
||||
case ACMDM_FORMAT_SUGGEST:
|
||||
return ADPCM_FormatSuggest((PACMDRVFORMATSUGGEST)dwParam1);
|
||||
|
||||
case ACMDM_STREAM_OPEN:
|
||||
return ADPCM_StreamOpen((PACMDRVSTREAMINSTANCE)dwParam1);
|
||||
|
||||
case ACMDM_STREAM_CLOSE:
|
||||
return ADPCM_StreamClose((PACMDRVSTREAMINSTANCE)dwParam1);
|
||||
|
||||
case ACMDM_STREAM_SIZE:
|
||||
return ADPCM_StreamSize((PACMDRVSTREAMINSTANCE)dwParam1, (PACMDRVSTREAMSIZE)dwParam2);
|
||||
|
||||
case ACMDM_STREAM_CONVERT:
|
||||
return ADPCM_StreamConvert((PACMDRVSTREAMINSTANCE)dwParam1, (PACMDRVSTREAMHEADER)dwParam2);
|
||||
|
||||
case ACMDM_HARDWARE_WAVE_CAPS_INPUT:
|
||||
case ACMDM_HARDWARE_WAVE_CAPS_OUTPUT:
|
||||
/* this converter is not a hardware driver */
|
||||
case ACMDM_FILTERTAG_DETAILS:
|
||||
case ACMDM_FILTER_DETAILS:
|
||||
/* this converter is not a filter */
|
||||
case ACMDM_STREAM_RESET:
|
||||
/* only needed for asynchronous driver... we aren't, so just say it */
|
||||
return MMSYSERR_NOTSUPPORTED;
|
||||
case ACMDM_STREAM_PREPARE:
|
||||
case ACMDM_STREAM_UNPREPARE:
|
||||
/* nothing special to do here... so don't do anything */
|
||||
return MMSYSERR_NOERROR;
|
||||
|
||||
default:
|
||||
return DefDriverProc(dwDevID, hDriv, wMsg, dwParam1, dwParam2);
|
||||
}
|
||||
return 0;
|
||||
}
|
|
@ -357,8 +357,6 @@ BOOL WINAPI GetColorProfileElement( HPROFILE handle, TAGTYPE type, DWORD offset,
|
|||
ret = get_tag_data( profile, type, offset, buffer, size );
|
||||
*ref = cmsTagLinkedTo( profile->cmsprofile, type ) != 0;
|
||||
release_profile( profile );
|
||||
return ret;
|
||||
|
||||
#endif /* HAVE_LCMS2 */
|
||||
return ret;
|
||||
}
|
||||
|
@ -1235,8 +1233,6 @@ BOOL WINAPI SetColorProfileElement( HPROFILE handle, TAGTYPE type, DWORD offset,
|
|||
}
|
||||
ret = set_tag_data( profile, type, offset, buffer, size );
|
||||
release_profile( profile );
|
||||
return ret;
|
||||
|
||||
#endif /* HAVE_LCMS2 */
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -42,7 +42,7 @@ typedef struct tagInputProcessorProfilesSink {
|
|||
typedef struct tagInputProcessorProfiles {
|
||||
ITfInputProcessorProfiles ITfInputProcessorProfiles_iface;
|
||||
ITfSource ITfSource_iface;
|
||||
/* const ITfInputProcessorProfileMgrVtbl *InputProcessorProfileMgrVtbl; */
|
||||
ITfInputProcessorProfileMgr ITfInputProcessorProfileMgr_iface;
|
||||
/* const ITfInputProcessorProfilesExVtbl *InputProcessorProfilesExVtbl; */
|
||||
/* const ITfInputProcessorProfileSubstituteLayoutVtbl *InputProcessorProfileSubstituteLayoutVtbl; */
|
||||
LONG refCount;
|
||||
|
@ -75,9 +75,107 @@ typedef struct tagEnumTfLanguageProfiles {
|
|||
ITfCategoryMgr *catmgr;
|
||||
} EnumTfLanguageProfiles;
|
||||
|
||||
typedef struct {
|
||||
IEnumTfInputProcessorProfiles IEnumTfInputProcessorProfiles_iface;
|
||||
LONG ref;
|
||||
} EnumTfInputProcessorProfiles;
|
||||
|
||||
static HRESULT ProfilesEnumGuid_Constructor(IEnumGUID **ppOut);
|
||||
static HRESULT EnumTfLanguageProfiles_Constructor(LANGID langid, IEnumTfLanguageProfiles **ppOut);
|
||||
|
||||
static inline EnumTfInputProcessorProfiles *impl_from_IEnumTfInputProcessorProfiles(IEnumTfInputProcessorProfiles *iface)
|
||||
{
|
||||
return CONTAINING_RECORD(iface, EnumTfInputProcessorProfiles, IEnumTfInputProcessorProfiles_iface);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI EnumTfInputProcessorProfiles_QueryInterface(IEnumTfInputProcessorProfiles *iface,
|
||||
REFIID riid, void **ppv)
|
||||
{
|
||||
EnumTfInputProcessorProfiles *This = impl_from_IEnumTfInputProcessorProfiles(iface);
|
||||
|
||||
if(IsEqualGUID(riid, &IID_IUnknown)) {
|
||||
TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
|
||||
*ppv = &This->IEnumTfInputProcessorProfiles_iface;
|
||||
}else if(IsEqualGUID(riid, &IID_IEnumTfInputProcessorProfiles)) {
|
||||
TRACE("(%p)->(IID_IEnumTfInputProcessorProfiles %p)\n", This, ppv);
|
||||
*ppv = &This->IEnumTfInputProcessorProfiles_iface;
|
||||
}else {
|
||||
*ppv = NULL;
|
||||
WARN("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
|
||||
IUnknown_AddRef((IUnknown*)*ppv);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static ULONG WINAPI EnumTfInputProcessorProfiles_AddRef(IEnumTfInputProcessorProfiles *iface)
|
||||
{
|
||||
EnumTfInputProcessorProfiles *This = impl_from_IEnumTfInputProcessorProfiles(iface);
|
||||
LONG ref = InterlockedIncrement(&This->ref);
|
||||
|
||||
TRACE("(%p) ref=%d\n", This, ref);
|
||||
|
||||
return ref;
|
||||
}
|
||||
|
||||
static ULONG WINAPI EnumTfInputProcessorProfiles_Release(IEnumTfInputProcessorProfiles *iface)
|
||||
{
|
||||
EnumTfInputProcessorProfiles *This = impl_from_IEnumTfInputProcessorProfiles(iface);
|
||||
LONG ref = InterlockedDecrement(&This->ref);
|
||||
|
||||
TRACE("(%p) ref=%d\n", This, ref);
|
||||
|
||||
if(!ref)
|
||||
HeapFree(GetProcessHeap(), 0, This);
|
||||
|
||||
return ref;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI EnumTfInputProcessorProfiles_Clone(IEnumTfInputProcessorProfiles *iface,
|
||||
IEnumTfInputProcessorProfiles **ret)
|
||||
{
|
||||
EnumTfInputProcessorProfiles *This = impl_from_IEnumTfInputProcessorProfiles(iface);
|
||||
FIXME("(%p)->(%p)\n", This, ret);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI EnumTfInputProcessorProfiles_Next(IEnumTfInputProcessorProfiles *iface, ULONG count,
|
||||
TF_INPUTPROCESSORPROFILE *profile, ULONG *fetch)
|
||||
{
|
||||
EnumTfInputProcessorProfiles *This = impl_from_IEnumTfInputProcessorProfiles(iface);
|
||||
|
||||
FIXME("(%p)->(%u %p %p)\n", This, count, profile, fetch);
|
||||
|
||||
if(fetch)
|
||||
*fetch = 0;
|
||||
return S_FALSE;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI EnumTfInputProcessorProfiles_Reset(IEnumTfInputProcessorProfiles *iface)
|
||||
{
|
||||
EnumTfInputProcessorProfiles *This = impl_from_IEnumTfInputProcessorProfiles(iface);
|
||||
FIXME("(%p)\n", This);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI EnumTfInputProcessorProfiles_Skip(IEnumTfInputProcessorProfiles *iface, ULONG count)
|
||||
{
|
||||
EnumTfInputProcessorProfiles *This = impl_from_IEnumTfInputProcessorProfiles(iface);
|
||||
FIXME("(%p)->(%u)\n", This, count);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static const IEnumTfInputProcessorProfilesVtbl EnumTfInputProcessorProfilesVtbl = {
|
||||
EnumTfInputProcessorProfiles_QueryInterface,
|
||||
EnumTfInputProcessorProfiles_AddRef,
|
||||
EnumTfInputProcessorProfiles_Release,
|
||||
EnumTfInputProcessorProfiles_Clone,
|
||||
EnumTfInputProcessorProfiles_Next,
|
||||
EnumTfInputProcessorProfiles_Reset,
|
||||
EnumTfInputProcessorProfiles_Skip
|
||||
};
|
||||
|
||||
static inline InputProcessorProfiles *impl_from_ITfInputProcessorProfiles(ITfInputProcessorProfiles *iface)
|
||||
{
|
||||
return CONTAINING_RECORD(iface, InputProcessorProfiles, ITfInputProcessorProfiles_iface);
|
||||
|
@ -149,28 +247,31 @@ static void add_userkey( REFCLSID rclsid, LANGID langid,
|
|||
RegCloseKey(key);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI InputProcessorProfiles_QueryInterface(ITfInputProcessorProfiles *iface, REFIID iid, LPVOID *ppvOut)
|
||||
static HRESULT WINAPI InputProcessorProfiles_QueryInterface(ITfInputProcessorProfiles *iface, REFIID iid, void **ppv)
|
||||
{
|
||||
InputProcessorProfiles *This = impl_from_ITfInputProcessorProfiles(iface);
|
||||
*ppvOut = NULL;
|
||||
|
||||
if (IsEqualIID(iid, &IID_IUnknown) || IsEqualIID(iid, &IID_ITfInputProcessorProfiles))
|
||||
{
|
||||
*ppvOut = &This->ITfInputProcessorProfiles_iface;
|
||||
*ppv = &This->ITfInputProcessorProfiles_iface;
|
||||
}
|
||||
else if (IsEqualIID(iid, &IID_ITfInputProcessorProfileMgr))
|
||||
{
|
||||
*ppv = &This->ITfInputProcessorProfileMgr_iface;
|
||||
}
|
||||
else if (IsEqualIID(iid, &IID_ITfSource))
|
||||
{
|
||||
*ppvOut = &This->ITfSource_iface;
|
||||
*ppv = &This->ITfSource_iface;
|
||||
}
|
||||
|
||||
if (*ppvOut)
|
||||
else
|
||||
{
|
||||
ITfInputProcessorProfiles_AddRef(iface);
|
||||
return S_OK;
|
||||
*ppv = NULL;
|
||||
WARN("unsupported interface: %s\n", debugstr_guid(iid));
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
|
||||
WARN("unsupported interface: %s\n", debugstr_guid(iid));
|
||||
return E_NOINTERFACE;
|
||||
ITfInputProcessorProfiles_AddRef(iface);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static ULONG WINAPI InputProcessorProfiles_AddRef(ITfInputProcessorProfiles *iface)
|
||||
|
@ -663,6 +764,125 @@ static const ITfInputProcessorProfilesVtbl InputProcessorProfilesVtbl =
|
|||
InputProcessorProfiles_SubstituteKeyboardLayout
|
||||
};
|
||||
|
||||
static inline InputProcessorProfiles *impl_from_ITfInputProcessorProfileMgr(ITfInputProcessorProfileMgr *iface)
|
||||
{
|
||||
return CONTAINING_RECORD(iface, InputProcessorProfiles, ITfInputProcessorProfileMgr_iface);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI InputProcessorProfileMgr_QueryInterface(ITfInputProcessorProfileMgr *iface, REFIID riid, void **ppv)
|
||||
{
|
||||
InputProcessorProfiles *This = impl_from_ITfInputProcessorProfileMgr(iface);
|
||||
return ITfInputProcessorProfiles_QueryInterface(&This->ITfInputProcessorProfiles_iface, riid, ppv);
|
||||
}
|
||||
|
||||
static ULONG WINAPI InputProcessorProfileMgr_AddRef(ITfInputProcessorProfileMgr *iface)
|
||||
{
|
||||
InputProcessorProfiles *This = impl_from_ITfInputProcessorProfileMgr(iface);
|
||||
return ITfInputProcessorProfiles_AddRef(&This->ITfInputProcessorProfiles_iface);
|
||||
}
|
||||
|
||||
static ULONG WINAPI InputProcessorProfileMgr_Release(ITfInputProcessorProfileMgr *iface)
|
||||
{
|
||||
InputProcessorProfiles *This = impl_from_ITfInputProcessorProfileMgr(iface);
|
||||
return ITfInputProcessorProfiles_Release(&This->ITfInputProcessorProfiles_iface);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI InputProcessorProfileMgr_ActivateProfile(ITfInputProcessorProfileMgr *iface, DWORD dwProfileType,
|
||||
LANGID langid, REFCLSID clsid, REFGUID guidProfile, HKL hkl, DWORD dwFlags)
|
||||
{
|
||||
InputProcessorProfiles *This = impl_from_ITfInputProcessorProfileMgr(iface);
|
||||
FIXME("(%p)->(%d %x %s %s %p %x)\n", This, dwProfileType, langid, debugstr_guid(clsid),
|
||||
debugstr_guid(guidProfile), hkl, dwFlags);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI InputProcessorProfileMgr_DeactivateProfile(ITfInputProcessorProfileMgr *iface, DWORD dwProfileType,
|
||||
LANGID langid, REFCLSID clsid, REFGUID guidProfile, HKL hkl, DWORD dwFlags)
|
||||
{
|
||||
InputProcessorProfiles *This = impl_from_ITfInputProcessorProfileMgr(iface);
|
||||
FIXME("(%p)->(%d %x %s %s %p %x)\n", This, dwProfileType, langid, debugstr_guid(clsid),
|
||||
debugstr_guid(guidProfile), hkl, dwFlags);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI InputProcessorProfileMgr_GetProfile(ITfInputProcessorProfileMgr *iface, DWORD dwProfileType,
|
||||
LANGID langid, REFCLSID clsid, REFGUID guidProfile, HKL hkl, TF_INPUTPROCESSORPROFILE *pProfile)
|
||||
{
|
||||
InputProcessorProfiles *This = impl_from_ITfInputProcessorProfileMgr(iface);
|
||||
FIXME("(%p)->(%d %x %s %s %p %p)\n", This, dwProfileType, langid, debugstr_guid(clsid),
|
||||
debugstr_guid(guidProfile), hkl, pProfile);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI InputProcessorProfileMgr_EnumProfiles(ITfInputProcessorProfileMgr *iface, LANGID langid,
|
||||
IEnumTfInputProcessorProfiles **ppEnum)
|
||||
{
|
||||
InputProcessorProfiles *This = impl_from_ITfInputProcessorProfileMgr(iface);
|
||||
EnumTfInputProcessorProfiles *enum_profiles;
|
||||
|
||||
TRACE("(%p)->(%x %p)\n", This, langid, ppEnum);
|
||||
|
||||
enum_profiles = HeapAlloc(GetProcessHeap(), 0, sizeof(*enum_profiles));
|
||||
if(!enum_profiles)
|
||||
return E_OUTOFMEMORY;
|
||||
|
||||
enum_profiles->IEnumTfInputProcessorProfiles_iface.lpVtbl = &EnumTfInputProcessorProfilesVtbl;
|
||||
enum_profiles->ref = 1;
|
||||
|
||||
*ppEnum = &enum_profiles->IEnumTfInputProcessorProfiles_iface;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI InputProcessorProfileMgr_ReleaseInputProcessor(ITfInputProcessorProfileMgr *iface, REFCLSID rclsid,
|
||||
DWORD dwFlags)
|
||||
{
|
||||
InputProcessorProfiles *This = impl_from_ITfInputProcessorProfileMgr(iface);
|
||||
FIXME("(%p)->(%s %x)\n", This, debugstr_guid(rclsid), dwFlags);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI InputProcessorProfileMgr_RegisterProfile(ITfInputProcessorProfileMgr *iface, REFCLSID rclsid,
|
||||
LANGID langid, REFGUID guidProfile, const WCHAR *pchDesc, ULONG cchDesc, const WCHAR *pchIconFile,
|
||||
ULONG cchFile, ULONG uIconIndex, HKL hklsubstitute, DWORD dwPreferredLayout, BOOL bEnabledByDefault,
|
||||
DWORD dwFlags)
|
||||
{
|
||||
InputProcessorProfiles *This = impl_from_ITfInputProcessorProfileMgr(iface);
|
||||
FIXME("(%p)->(%s %x %s %s %d %s %u %u %p %x %x %x)\n", This, debugstr_guid(rclsid), langid, debugstr_guid(guidProfile),
|
||||
debugstr_w(pchDesc), cchDesc, debugstr_w(pchIconFile), cchFile, uIconIndex, hklsubstitute, dwPreferredLayout,
|
||||
bEnabledByDefault, dwFlags);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI InputProcessorProfileMgr_UnregisterProfile(ITfInputProcessorProfileMgr *iface, REFCLSID rclsid,
|
||||
LANGID langid, REFGUID guidProfile, DWORD dwFlags)
|
||||
{
|
||||
InputProcessorProfiles *This = impl_from_ITfInputProcessorProfileMgr(iface);
|
||||
FIXME("(%p)->(%s %x %s %x)\n", This, debugstr_guid(rclsid), langid, debugstr_guid(guidProfile), dwFlags);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI InputProcessorProfileMgr_GetActiveProfile(ITfInputProcessorProfileMgr *iface, REFGUID catid,
|
||||
TF_INPUTPROCESSORPROFILE *pProfile)
|
||||
{
|
||||
InputProcessorProfiles *This = impl_from_ITfInputProcessorProfileMgr(iface);
|
||||
FIXME("(%p)->(%s %p)\n", This, debugstr_guid(catid), pProfile);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static const ITfInputProcessorProfileMgrVtbl InputProcessorProfileMgrVtbl = {
|
||||
InputProcessorProfileMgr_QueryInterface,
|
||||
InputProcessorProfileMgr_AddRef,
|
||||
InputProcessorProfileMgr_Release,
|
||||
InputProcessorProfileMgr_ActivateProfile,
|
||||
InputProcessorProfileMgr_DeactivateProfile,
|
||||
InputProcessorProfileMgr_GetProfile,
|
||||
InputProcessorProfileMgr_EnumProfiles,
|
||||
InputProcessorProfileMgr_ReleaseInputProcessor,
|
||||
InputProcessorProfileMgr_RegisterProfile,
|
||||
InputProcessorProfileMgr_UnregisterProfile,
|
||||
InputProcessorProfileMgr_GetActiveProfile
|
||||
};
|
||||
|
||||
/*****************************************************
|
||||
* ITfSource functions
|
||||
*****************************************************/
|
||||
|
@ -760,6 +980,7 @@ HRESULT InputProcessorProfiles_Constructor(IUnknown *pUnkOuter, IUnknown **ppOut
|
|||
|
||||
This->ITfInputProcessorProfiles_iface.lpVtbl= &InputProcessorProfilesVtbl;
|
||||
This->ITfSource_iface.lpVtbl = &InputProcessorProfilesSourceVtbl;
|
||||
This->ITfInputProcessorProfileMgr_iface.lpVtbl = &InputProcessorProfileMgrVtbl;
|
||||
This->refCount = 1;
|
||||
This->currentLanguage = GetUserDefaultLCID();
|
||||
|
||||
|
|
|
@ -16,6 +16,8 @@
|
|||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
typedef struct nsWineURI nsWineURI;
|
||||
|
||||
/* Keep sync with request_method_strings in nsio.c */
|
||||
|
|
|
@ -18,23 +18,120 @@
|
|||
|
||||
#include "mshtml_private.h"
|
||||
|
||||
static const char *debugstr_cp_guid(REFIID riid)
|
||||
typedef struct {
|
||||
IEnumConnections IEnumConnections_iface;
|
||||
|
||||
LONG ref;
|
||||
|
||||
unsigned iter;
|
||||
ConnectionPoint *cp;
|
||||
} EnumConnections;
|
||||
|
||||
static inline EnumConnections *impl_from_IEnumConnections(IEnumConnections *iface)
|
||||
{
|
||||
#define X(x) \
|
||||
if(IsEqualGUID(riid, &x)) \
|
||||
return #x
|
||||
|
||||
X(IID_IPropertyNotifySink);
|
||||
X(DIID_HTMLDocumentEvents);
|
||||
X(DIID_HTMLDocumentEvents2);
|
||||
X(DIID_HTMLTableEvents);
|
||||
X(DIID_HTMLTextContainerEvents);
|
||||
|
||||
#undef X
|
||||
|
||||
return debugstr_guid(riid);
|
||||
return CONTAINING_RECORD(iface, EnumConnections, IEnumConnections_iface);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI EnumConnections_QueryInterface(IEnumConnections *iface, REFIID riid, void **ppv)
|
||||
{
|
||||
EnumConnections *This = impl_from_IEnumConnections(iface);
|
||||
|
||||
TRACE("(%p)->(%s %p)\n", This, debugstr_mshtml_guid(riid), ppv);
|
||||
|
||||
if(IsEqualGUID(riid, &IID_IUnknown)) {
|
||||
*ppv = &This->IEnumConnections_iface;
|
||||
}else if(IsEqualGUID(riid, &IID_IEnumConnections)) {
|
||||
*ppv = &This->IEnumConnections_iface;
|
||||
}else {
|
||||
WARN("(%p)->(%s %p)\n", This, debugstr_mshtml_guid(riid), ppv);
|
||||
*ppv = NULL;
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
|
||||
IUnknown_AddRef((IUnknown*)*ppv);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static ULONG WINAPI EnumConnections_AddRef(IEnumConnections *iface)
|
||||
{
|
||||
EnumConnections *This = impl_from_IEnumConnections(iface);
|
||||
ULONG ref = InterlockedIncrement(&This->ref);
|
||||
|
||||
TRACE("(%p) ref=%d\n", This, ref);
|
||||
|
||||
return ref;
|
||||
}
|
||||
|
||||
static ULONG WINAPI EnumConnections_Release(IEnumConnections *iface)
|
||||
{
|
||||
EnumConnections *This = impl_from_IEnumConnections(iface);
|
||||
ULONG ref = InterlockedDecrement(&This->ref);
|
||||
|
||||
TRACE("(%p) ref=%d\n", This, ref);
|
||||
|
||||
if(!ref) {
|
||||
IConnectionPoint_Release(&This->cp->IConnectionPoint_iface);
|
||||
heap_free(This);
|
||||
}
|
||||
|
||||
return ref;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI EnumConnections_Next(IEnumConnections *iface, ULONG cConnections, CONNECTDATA *rgcd, ULONG *pcFetched)
|
||||
{
|
||||
EnumConnections *This = impl_from_IEnumConnections(iface);
|
||||
ULONG fetched = 0;
|
||||
|
||||
TRACE("(%p)->(%d %p %p)\n", This, cConnections, rgcd, pcFetched);
|
||||
|
||||
while(fetched < cConnections && This->iter < This->cp->sinks_size) {
|
||||
if(!This->cp->sinks[This->iter].unk) {
|
||||
This->iter++;
|
||||
continue;
|
||||
}
|
||||
|
||||
rgcd[fetched].pUnk = This->cp->sinks[This->iter].unk;
|
||||
rgcd[fetched].dwCookie = ++This->iter;
|
||||
IUnknown_AddRef(rgcd[fetched].pUnk);
|
||||
fetched++;
|
||||
}
|
||||
|
||||
if(pcFetched)
|
||||
*pcFetched = fetched;
|
||||
return fetched == cConnections ? S_OK : S_FALSE;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI EnumConnections_Skip(IEnumConnections *iface, ULONG cConnections)
|
||||
{
|
||||
EnumConnections *This = impl_from_IEnumConnections(iface);
|
||||
FIXME("(%p)->(%d)\n", This, cConnections);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI EnumConnections_Reset(IEnumConnections *iface)
|
||||
{
|
||||
EnumConnections *This = impl_from_IEnumConnections(iface);
|
||||
FIXME("(%p)\n", This);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI EnumConnections_Clone(IEnumConnections *iface, IEnumConnections **ppEnum)
|
||||
{
|
||||
EnumConnections *This = impl_from_IEnumConnections(iface);
|
||||
FIXME("(%p)->(%p)\n", This, ppEnum);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static const IEnumConnectionsVtbl EnumConnectionsVtbl = {
|
||||
EnumConnections_QueryInterface,
|
||||
EnumConnections_AddRef,
|
||||
EnumConnections_Release,
|
||||
EnumConnections_Next,
|
||||
EnumConnections_Skip,
|
||||
EnumConnections_Reset,
|
||||
EnumConnections_Clone
|
||||
};
|
||||
|
||||
static inline ConnectionPoint *impl_from_IConnectionPoint(IConnectionPoint *iface)
|
||||
{
|
||||
return CONTAINING_RECORD(iface, ConnectionPoint, IConnectionPoint_iface);
|
||||
|
@ -45,23 +142,20 @@ static HRESULT WINAPI ConnectionPoint_QueryInterface(IConnectionPoint *iface,
|
|||
{
|
||||
ConnectionPoint *This = impl_from_IConnectionPoint(iface);
|
||||
|
||||
*ppv = NULL;
|
||||
TRACE("(%p)->(%s %p)\n", This, debugstr_mshtml_guid(riid), ppv);
|
||||
|
||||
if(IsEqualGUID(&IID_IUnknown, riid)) {
|
||||
TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
|
||||
*ppv = &This->IConnectionPoint_iface;
|
||||
}else if(IsEqualGUID(&IID_IConnectionPoint, riid)) {
|
||||
TRACE("(%p)->(IID_IConnectionPoint %p)\n", This, ppv);
|
||||
*ppv = &This->IConnectionPoint_iface;
|
||||
}else {
|
||||
*ppv = NULL;
|
||||
WARN("Unsupported interface %s\n", debugstr_mshtml_guid(riid));
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
|
||||
if(*ppv) {
|
||||
IUnknown_AddRef((IUnknown*)*ppv);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
WARN("Unsupported interface %s\n", debugstr_guid(riid));
|
||||
return E_NOINTERFACE;
|
||||
IUnknown_AddRef((IUnknown*)*ppv);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static ULONG WINAPI ConnectionPoint_AddRef(IConnectionPoint *iface)
|
||||
|
@ -162,8 +256,23 @@ static HRESULT WINAPI ConnectionPoint_EnumConnections(IConnectionPoint *iface,
|
|||
IEnumConnections **ppEnum)
|
||||
{
|
||||
ConnectionPoint *This = impl_from_IConnectionPoint(iface);
|
||||
FIXME("(%p)->(%p)\n", This, ppEnum);
|
||||
return E_NOTIMPL;
|
||||
EnumConnections *ret;
|
||||
|
||||
TRACE("(%p)->(%p)\n", This, ppEnum);
|
||||
|
||||
ret = heap_alloc(sizeof(*ret));
|
||||
if(!ret)
|
||||
return E_OUTOFMEMORY;
|
||||
|
||||
ret->IEnumConnections_iface.lpVtbl = &EnumConnectionsVtbl;
|
||||
ret->ref = 1;
|
||||
ret->iter = 0;
|
||||
|
||||
IConnectionPoint_AddRef(&This->IConnectionPoint_iface);
|
||||
ret->cp = This;
|
||||
|
||||
*ppEnum = &ret->IEnumConnections_iface;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static const IConnectionPointVtbl ConnectionPointVtbl =
|
||||
|
@ -283,7 +392,7 @@ static HRESULT WINAPI ConnectionPointContainer_FindConnectionPoint(IConnectionPo
|
|||
ConnectionPointContainer *This = impl_from_IConnectionPointContainer(iface);
|
||||
ConnectionPoint *cp;
|
||||
|
||||
TRACE("(%p)->(%s %p)\n", This, debugstr_cp_guid(riid), ppCP);
|
||||
TRACE("(%p)->(%s %p)\n", This, debugstr_mshtml_guid(riid), ppCP);
|
||||
|
||||
if(This->forward_container)
|
||||
return IConnectionPointContainer_FindConnectionPoint(&This->forward_container->IConnectionPointContainer_iface,
|
||||
|
@ -291,7 +400,7 @@ static HRESULT WINAPI ConnectionPointContainer_FindConnectionPoint(IConnectionPo
|
|||
|
||||
cp = get_cp(This, riid, TRUE);
|
||||
if(!cp) {
|
||||
FIXME("unsupported riid %s\n", debugstr_cp_guid(riid));
|
||||
FIXME("unsupported riid %s\n", debugstr_mshtml_guid(riid));
|
||||
*ppCP = NULL;
|
||||
return CONNECT_E_NOCONNECTION;
|
||||
}
|
||||
|
|
|
@ -129,7 +129,7 @@ static HRESULT get_typeinfo(tid_t tid, ITypeInfo **typeinfo)
|
|||
|
||||
hres = ITypeLib_GetTypeInfoOfGuid(typelib, tid_ids[tid], &ti);
|
||||
if(FAILED(hres)) {
|
||||
ERR("GetTypeInfoOfGuid(%s) failed: %08x\n", debugstr_guid(tid_ids[tid]), hres);
|
||||
ERR("GetTypeInfoOfGuid(%s) failed: %08x\n", debugstr_mshtml_guid(tid_ids[tid]), hres);
|
||||
return hres;
|
||||
}
|
||||
|
||||
|
@ -616,7 +616,7 @@ static HRESULT typeinfo_invoke(DispatchEx *This, func_info_t *func, WORD flags,
|
|||
|
||||
hres = IUnknown_QueryInterface(This->outer, tid_ids[func->tid], (void**)&unk);
|
||||
if(FAILED(hres)) {
|
||||
ERR("Could not get iface %s: %08x\n", debugstr_guid(tid_ids[func->tid]), hres);
|
||||
ERR("Could not get iface %s: %08x\n", debugstr_mshtml_guid(tid_ids[func->tid]), hres);
|
||||
return E_FAIL;
|
||||
}
|
||||
|
||||
|
@ -702,6 +702,37 @@ static HRESULT function_value(DispatchEx *dispex, LCID lcid, WORD flags, DISPPAR
|
|||
return E_UNEXPECTED;
|
||||
hres = typeinfo_invoke(This->obj, This->info, flags, params, res, ei);
|
||||
break;
|
||||
case DISPATCH_PROPERTYGET: {
|
||||
unsigned name_len;
|
||||
WCHAR *ptr;
|
||||
BSTR str;
|
||||
|
||||
static const WCHAR func_prefixW[] =
|
||||
{'\n','f','u','n','c','t','i','o','n',' '};
|
||||
static const WCHAR func_suffixW[] =
|
||||
{'(',')',' ','{','\n',' ',' ',' ',' ','[','n','a','t','i','v','e',' ','c','o','d','e',']','\n','}','\n'};
|
||||
|
||||
/* FIXME: This probably should be more generic. Also we should try to get IID_IActiveScriptSite and SID_GetCaller. */
|
||||
if(!caller)
|
||||
return E_ACCESSDENIED;
|
||||
|
||||
name_len = SysStringLen(This->info->name);
|
||||
ptr = str = SysAllocStringLen(NULL, name_len + (sizeof(func_prefixW)+sizeof(func_suffixW))/sizeof(WCHAR));
|
||||
if(!str)
|
||||
return E_OUTOFMEMORY;
|
||||
|
||||
memcpy(ptr, func_prefixW, sizeof(func_prefixW));
|
||||
ptr += sizeof(func_prefixW)/sizeof(WCHAR);
|
||||
|
||||
memcpy(ptr, This->info->name, name_len*sizeof(WCHAR));
|
||||
ptr += name_len;
|
||||
|
||||
memcpy(ptr, func_suffixW, sizeof(func_suffixW));
|
||||
|
||||
V_VT(res) = VT_BSTR;
|
||||
V_BSTR(res) = str;
|
||||
return S_OK;
|
||||
}
|
||||
default:
|
||||
FIXME("Unimplemented flags %x\n", flags);
|
||||
hres = E_NOTIMPL;
|
||||
|
@ -1184,6 +1215,7 @@ static HRESULT invoke_builtin_prop(DispatchEx *This, DISPID id, LCID lcid, WORD
|
|||
|
||||
switch(flags) {
|
||||
case DISPATCH_PROPERTYPUT:
|
||||
case DISPATCH_PROPERTYPUT | DISPATCH_PROPERTYPUTREF:
|
||||
if(res)
|
||||
V_VT(res) = VT_EMPTY;
|
||||
hres = builtin_propput(This, func, dp, caller);
|
||||
|
@ -1203,7 +1235,7 @@ static HRESULT invoke_builtin_prop(DispatchEx *This, DISPID id, LCID lcid, WORD
|
|||
|
||||
if(flags != (DISPATCH_PROPERTYGET|DISPATCH_METHOD) || dp->cArgs) {
|
||||
if(V_VT(&v) != VT_DISPATCH) {
|
||||
FIXME("Not a function %s\n", debugstr_variant(&v));
|
||||
FIXME("Not a function %s flags %08x\n", debugstr_variant(&v), flags);
|
||||
VariantClear(&v);
|
||||
return E_FAIL;
|
||||
}
|
||||
|
|
|
@ -246,7 +246,7 @@ static void remove_child_attr(nsIDOMElement *elem, LPCWSTR tag, nsAString *attr_
|
|||
static void get_font_size(HTMLDocument *This, WCHAR *ret)
|
||||
{
|
||||
nsISelection *nsselection = get_ns_selection(This);
|
||||
nsIDOMElement *elem = NULL;
|
||||
nsIDOMHTMLElement *elem = NULL;
|
||||
nsIDOMNode *node = NULL, *tmp_node;
|
||||
nsAString tag_str;
|
||||
LPCWSTR tag;
|
||||
|
@ -267,36 +267,29 @@ static void get_font_size(HTMLDocument *This, WCHAR *ret)
|
|||
break;
|
||||
|
||||
if(node_type == ELEMENT_NODE) {
|
||||
nsIDOMNode_QueryInterface(node, &IID_nsIDOMElement, (void**)&elem);
|
||||
nsIDOMNode_QueryInterface(node, &IID_nsIDOMHTMLElement, (void**)&elem);
|
||||
|
||||
nsAString_Init(&tag_str, NULL);
|
||||
nsIDOMElement_GetTagName(elem, &tag_str);
|
||||
nsIDOMHTMLElement_GetTagName(elem, &tag_str);
|
||||
nsAString_GetData(&tag_str, &tag);
|
||||
|
||||
if(!strcmpiW(tag, fontW)) {
|
||||
nsAString size_str, val_str;
|
||||
LPCWSTR val;
|
||||
nsAString val_str;
|
||||
const PRUnichar *val;
|
||||
|
||||
TRACE("found font tag %p\n", elem);
|
||||
|
||||
nsAString_InitDepend(&size_str, sizeW);
|
||||
nsAString_Init(&val_str, NULL);
|
||||
|
||||
nsIDOMElement_GetAttribute(elem, &size_str, &val_str);
|
||||
nsAString_GetData(&val_str, &val);
|
||||
|
||||
get_elem_attr_value(elem, sizeW, &val_str, &val);
|
||||
if(*val) {
|
||||
TRACE("found size %s\n", debugstr_w(val));
|
||||
strcpyW(ret, val);
|
||||
}
|
||||
|
||||
nsAString_Finish(&size_str);
|
||||
nsAString_Finish(&val_str);
|
||||
}
|
||||
|
||||
nsAString_Finish(&tag_str);
|
||||
|
||||
nsIDOMElement_Release(elem);
|
||||
nsIDOMHTMLElement_Release(elem);
|
||||
}
|
||||
|
||||
if(*ret)
|
||||
|
|
|
@ -81,8 +81,9 @@ HTMLOuterWindow *get_target_window(HTMLOuterWindow *window, nsAString *target_st
|
|||
|
||||
if(!strcmpiW(target, _parentW)) {
|
||||
if(!window->parent) {
|
||||
WARN("Window has no parent\n");
|
||||
return NULL;
|
||||
WARN("Window has no parent, treat as self\n");
|
||||
IHTMLWindow2_AddRef(&window->base.IHTMLWindow2_iface);
|
||||
return window;
|
||||
}
|
||||
|
||||
IHTMLWindow2_AddRef(&window->parent->base.IHTMLWindow2_iface);
|
||||
|
|
|
@ -28,16 +28,16 @@ static HRESULT WINAPI HTMLDOMAttribute_QueryInterface(IHTMLDOMAttribute *iface,
|
|||
{
|
||||
HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute(iface);
|
||||
|
||||
TRACE("(%p)->(%s %p)\n", This, debugstr_mshtml_guid(riid), ppv);
|
||||
|
||||
if(IsEqualGUID(&IID_IUnknown, riid)) {
|
||||
TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
|
||||
*ppv = &This->IHTMLDOMAttribute_iface;
|
||||
}else if(IsEqualGUID(&IID_IHTMLDOMAttribute, riid)) {
|
||||
TRACE("(%p)->(IID_IHTMLDOMAttribute %p)\n", This, ppv);
|
||||
*ppv = &This->IHTMLDOMAttribute_iface;
|
||||
}else if(dispex_query_interface(&This->dispex, riid, ppv)) {
|
||||
return *ppv ? S_OK : E_NOINTERFACE;
|
||||
}else {
|
||||
WARN("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
|
||||
WARN("%s not supported\n", debugstr_mshtml_guid(riid));
|
||||
*ppv = NULL;
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
|
@ -123,11 +123,25 @@ static HRESULT WINAPI HTMLDOMAttribute_get_nodeName(IHTMLDOMAttribute *iface, BS
|
|||
return IDispatchEx_GetMemberName(&This->elem->node.dispex.IDispatchEx_iface, This->dispid, p);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLDOMAttribute_put_nodeName(IHTMLDOMAttribute *iface, VARIANT v)
|
||||
static HRESULT WINAPI HTMLDOMAttribute_put_nodeValue(IHTMLDOMAttribute *iface, VARIANT v)
|
||||
{
|
||||
HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute(iface);
|
||||
FIXME("(%p)->(%s)\n", This, debugstr_variant(&v));
|
||||
return E_NOTIMPL;
|
||||
DISPID dispidNamed = DISPID_PROPERTYPUT;
|
||||
DISPPARAMS dp = {&v, &dispidNamed, 1, 1};
|
||||
EXCEPINFO ei;
|
||||
VARIANT ret;
|
||||
|
||||
TRACE("(%p)->(%s)\n", This, debugstr_variant(&v));
|
||||
|
||||
if(!This->elem) {
|
||||
FIXME("NULL This->elem\n");
|
||||
return E_UNEXPECTED;
|
||||
}
|
||||
|
||||
memset(&ei, 0, sizeof(ei));
|
||||
|
||||
return IDispatchEx_InvokeEx(&This->elem->node.dispex.IDispatchEx_iface, This->dispid, LOCALE_SYSTEM_DEFAULT,
|
||||
DISPATCH_PROPERTYPUT, &dp, &ret, &ei, NULL);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLDOMAttribute_get_nodeValue(IHTMLDOMAttribute *iface, VARIANT *p)
|
||||
|
@ -201,7 +215,7 @@ static const IHTMLDOMAttributeVtbl HTMLDOMAttributeVtbl = {
|
|||
HTMLDOMAttribute_GetIDsOfNames,
|
||||
HTMLDOMAttribute_Invoke,
|
||||
HTMLDOMAttribute_get_nodeName,
|
||||
HTMLDOMAttribute_put_nodeName,
|
||||
HTMLDOMAttribute_put_nodeValue,
|
||||
HTMLDOMAttribute_get_nodeValue,
|
||||
HTMLDOMAttribute_get_specified
|
||||
};
|
||||
|
|
|
@ -55,34 +55,28 @@ static HRESULT WINAPI HTMLCurrentStyle_QueryInterface(IHTMLCurrentStyle *iface,
|
|||
{
|
||||
HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle(iface);
|
||||
|
||||
*ppv = NULL;
|
||||
TRACE("(%p)->(%s %p)\n", This, debugstr_mshtml_guid(riid), ppv);
|
||||
|
||||
if(IsEqualGUID(&IID_IUnknown, riid)) {
|
||||
TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
|
||||
*ppv = &This->IHTMLCurrentStyle_iface;
|
||||
}else if(IsEqualGUID(&IID_IHTMLCurrentStyle, riid)) {
|
||||
TRACE("(%p)->(IID_IHTMLCurrentStyle %p)\n", This, ppv);
|
||||
*ppv = &This->IHTMLCurrentStyle_iface;
|
||||
}else if(IsEqualGUID(&IID_IHTMLCurrentStyle2, riid)) {
|
||||
TRACE("(%p)->(IID_IHTMLCurrentStyle2 %p)\n", This, ppv);
|
||||
*ppv = &This->IHTMLCurrentStyle2_iface;
|
||||
}else if(IsEqualGUID(&IID_IHTMLCurrentStyle3, riid)) {
|
||||
TRACE("(%p)->(IID_IHTMLCurrentStyle3 %p)\n", This, ppv);
|
||||
*ppv = &This->IHTMLCurrentStyle3_iface;
|
||||
}else if(IsEqualGUID(&IID_IHTMLCurrentStyle4, riid)) {
|
||||
TRACE("(%p)->(IID_IHTMLCurrentStyle4 %p)\n", This, ppv);
|
||||
*ppv = &This->IHTMLCurrentStyle4_iface;
|
||||
}else if(dispex_query_interface(&This->dispex, riid, ppv)) {
|
||||
return *ppv ? S_OK : E_NOINTERFACE;
|
||||
}else {
|
||||
*ppv = NULL;
|
||||
WARN("unsupported %s\n", debugstr_mshtml_guid(riid));
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
|
||||
if(*ppv) {
|
||||
IUnknown_AddRef((IUnknown*)*ppv);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
WARN("unsupported %s\n", debugstr_guid(riid));
|
||||
return E_NOINTERFACE;
|
||||
IUnknown_AddRef((IUnknown*)*ppv);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static ULONG WINAPI HTMLCurrentStyle_AddRef(IHTMLCurrentStyle *iface)
|
||||
|
@ -785,8 +779,8 @@ static HRESULT WINAPI HTMLCurrentStyle_get_overflowY(IHTMLCurrentStyle *iface, B
|
|||
static HRESULT WINAPI HTMLCurrentStyle_get_textTransform(IHTMLCurrentStyle *iface, BSTR *p)
|
||||
{
|
||||
HTMLCurrentStyle *This = impl_from_IHTMLCurrentStyle(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
TRACE("(%p)->(%p)\n", This, p);
|
||||
return get_nsstyle_attr(This->nsstyle, STYLEID_TEXT_TRANSFORM, p, 0);
|
||||
}
|
||||
|
||||
static const IHTMLCurrentStyleVtbl HTMLCurrentStyleVtbl = {
|
||||
|
|
|
@ -1555,8 +1555,17 @@ static HRESULT WINAPI HTMLDocument_get_onerrorupdate(IHTMLDocument2 *iface, VARI
|
|||
static HRESULT WINAPI HTMLDocument_toString(IHTMLDocument2 *iface, BSTR *String)
|
||||
{
|
||||
HTMLDocument *This = impl_from_IHTMLDocument2(iface);
|
||||
FIXME("(%p)->(%p)\n", This, String);
|
||||
return E_NOTIMPL;
|
||||
|
||||
static const WCHAR objectW[] = {'[','o','b','j','e','c','t',']',0};
|
||||
|
||||
TRACE("(%p)->(%p)\n", This, String);
|
||||
|
||||
if(!String)
|
||||
return E_INVALIDARG;
|
||||
|
||||
*String = SysAllocString(objectW);
|
||||
return *String ? S_OK : E_OUTOFMEMORY;
|
||||
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLDocument_createStyleSheet(IHTMLDocument2 *iface, BSTR bstrHref,
|
||||
|
@ -2585,8 +2594,21 @@ static HRESULT WINAPI HTMLDocument5_get_doctype(IHTMLDocument5 *iface, IHTMLDOMN
|
|||
static HRESULT WINAPI HTMLDocument5_get_implementation(IHTMLDocument5 *iface, IHTMLDOMImplementation **p)
|
||||
{
|
||||
HTMLDocument *This = impl_from_IHTMLDocument5(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
HTMLDocumentNode *doc_node = This->doc_node;
|
||||
|
||||
TRACE("(%p)->(%p)\n", This, p);
|
||||
|
||||
if(!doc_node->dom_implementation) {
|
||||
HRESULT hres;
|
||||
|
||||
hres = create_dom_implementation(&doc_node->dom_implementation);
|
||||
if(FAILED(hres))
|
||||
return hres;
|
||||
}
|
||||
|
||||
IHTMLDOMImplementation_AddRef(doc_node->dom_implementation);
|
||||
*p = doc_node->dom_implementation;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLDocument5_createAttribute(IHTMLDocument5 *iface, BSTR bstrattrName,
|
||||
|
@ -3841,7 +3863,7 @@ static ULONG WINAPI SupportErrorInfo_Release(ISupportErrorInfo *iface)
|
|||
|
||||
static HRESULT WINAPI SupportErrorInfo_InterfaceSupportsErrorInfo(ISupportErrorInfo *iface, REFIID riid)
|
||||
{
|
||||
FIXME("(%p)->(%s)\n", iface, debugstr_guid(riid));
|
||||
FIXME("(%p)->(%s)\n", iface, debugstr_mshtml_guid(riid));
|
||||
return S_FALSE;
|
||||
}
|
||||
|
||||
|
@ -4113,106 +4135,81 @@ static BOOL htmldoc_qi(HTMLDocument *This, REFIID riid, void **ppv)
|
|||
{
|
||||
*ppv = NULL;
|
||||
|
||||
if(IsEqualGUID(&IID_IUnknown, riid)) {
|
||||
TRACE("(%p)->(IID_IUnknown, %p)\n", This, ppv);
|
||||
if(IsEqualGUID(&IID_IUnknown, riid))
|
||||
*ppv = &This->IHTMLDocument2_iface;
|
||||
}else if(IsEqualGUID(&IID_IDispatch, riid)) {
|
||||
TRACE("(%p)->(IID_IDispatch, %p)\n", This, ppv);
|
||||
else if(IsEqualGUID(&IID_IDispatch, riid))
|
||||
*ppv = &This->IDispatchEx_iface;
|
||||
}else if(IsEqualGUID(&IID_IDispatchEx, riid)) {
|
||||
TRACE("(%p)->(IID_IDispatchEx, %p)\n", This, ppv);
|
||||
else if(IsEqualGUID(&IID_IDispatchEx, riid))
|
||||
*ppv = &This->IDispatchEx_iface;
|
||||
}else if(IsEqualGUID(&IID_IHTMLDocument, riid)) {
|
||||
TRACE("(%p)->(IID_IHTMLDocument, %p)\n", This, ppv);
|
||||
else if(IsEqualGUID(&IID_IHTMLDocument, riid))
|
||||
*ppv = &This->IHTMLDocument2_iface;
|
||||
}else if(IsEqualGUID(&IID_IHTMLDocument2, riid)) {
|
||||
TRACE("(%p)->(IID_IHTMLDocument2, %p)\n", This, ppv);
|
||||
else if(IsEqualGUID(&IID_IHTMLDocument2, riid))
|
||||
*ppv = &This->IHTMLDocument2_iface;
|
||||
}else if(IsEqualGUID(&IID_IHTMLDocument3, riid)) {
|
||||
TRACE("(%p)->(IID_IHTMLDocument3, %p)\n", This, ppv);
|
||||
else if(IsEqualGUID(&IID_IHTMLDocument3, riid))
|
||||
*ppv = &This->IHTMLDocument3_iface;
|
||||
}else if(IsEqualGUID(&IID_IHTMLDocument4, riid)) {
|
||||
TRACE("(%p)->(IID_IHTMLDocument4, %p)\n", This, ppv);
|
||||
else if(IsEqualGUID(&IID_IHTMLDocument4, riid))
|
||||
*ppv = &This->IHTMLDocument4_iface;
|
||||
}else if(IsEqualGUID(&IID_IHTMLDocument5, riid)) {
|
||||
TRACE("(%p)->(IID_IHTMLDocument5, %p)\n", This, ppv);
|
||||
else if(IsEqualGUID(&IID_IHTMLDocument5, riid))
|
||||
*ppv = &This->IHTMLDocument5_iface;
|
||||
}else if(IsEqualGUID(&IID_IHTMLDocument6, riid)) {
|
||||
TRACE("(%p)->(IID_IHTMLDocument6, %p)\n", This, ppv);
|
||||
else if(IsEqualGUID(&IID_IHTMLDocument6, riid))
|
||||
*ppv = &This->IHTMLDocument6_iface;
|
||||
}else if(IsEqualGUID(&IID_IHTMLDocument7, riid)) {
|
||||
TRACE("(%p)->(IID_IHTMLDocument7, %p)\n", This, ppv);
|
||||
else if(IsEqualGUID(&IID_IHTMLDocument7, riid))
|
||||
*ppv = &This->IHTMLDocument7_iface;
|
||||
}else if(IsEqualGUID(&IID_IPersist, riid)) {
|
||||
TRACE("(%p)->(IID_IPersist, %p)\n", This, ppv);
|
||||
else if(IsEqualGUID(&IID_IPersist, riid))
|
||||
*ppv = &This->IPersistFile_iface;
|
||||
}else if(IsEqualGUID(&IID_IPersistMoniker, riid)) {
|
||||
TRACE("(%p)->(IID_IPersistMoniker, %p)\n", This, ppv);
|
||||
else if(IsEqualGUID(&IID_IPersistMoniker, riid))
|
||||
*ppv = &This->IPersistMoniker_iface;
|
||||
}else if(IsEqualGUID(&IID_IPersistFile, riid)) {
|
||||
TRACE("(%p)->(IID_IPersistFile, %p)\n", This, ppv);
|
||||
else if(IsEqualGUID(&IID_IPersistFile, riid))
|
||||
*ppv = &This->IPersistFile_iface;
|
||||
}else if(IsEqualGUID(&IID_IMonikerProp, riid)) {
|
||||
TRACE("(%p)->(IID_IMonikerProp, %p)\n", This, ppv);
|
||||
else if(IsEqualGUID(&IID_IMonikerProp, riid))
|
||||
*ppv = &This->IMonikerProp_iface;
|
||||
}else if(IsEqualGUID(&IID_IOleObject, riid)) {
|
||||
TRACE("(%p)->(IID_IOleObject, %p)\n", This, ppv);
|
||||
else if(IsEqualGUID(&IID_IOleObject, riid))
|
||||
*ppv = &This->IOleObject_iface;
|
||||
}else if(IsEqualGUID(&IID_IOleDocument, riid)) {
|
||||
TRACE("(%p)->(IID_IOleDocument, %p)\n", This, ppv);
|
||||
else if(IsEqualGUID(&IID_IOleDocument, riid))
|
||||
*ppv = &This->IOleDocument_iface;
|
||||
}else if(IsEqualGUID(&IID_IOleDocumentView, riid)) {
|
||||
TRACE("(%p)->(IID_IOleDocumentView, %p)\n", This, ppv);
|
||||
else if(IsEqualGUID(&IID_IOleDocumentView, riid))
|
||||
*ppv = &This->IOleDocumentView_iface;
|
||||
}else if(IsEqualGUID(&IID_IOleInPlaceActiveObject, riid)) {
|
||||
TRACE("(%p)->(IID_IOleInPlaceActiveObject, %p)\n", This, ppv);
|
||||
else if(IsEqualGUID(&IID_IOleInPlaceActiveObject, riid))
|
||||
*ppv = &This->IOleInPlaceActiveObject_iface;
|
||||
}else if(IsEqualGUID(&IID_IViewObject, riid)) {
|
||||
TRACE("(%p)->(IID_IViewObject, %p)\n", This, ppv);
|
||||
else if(IsEqualGUID(&IID_IViewObject, riid))
|
||||
*ppv = &This->IViewObjectEx_iface;
|
||||
}else if(IsEqualGUID(&IID_IViewObject2, riid)) {
|
||||
TRACE("(%p)->(IID_IViewObject2, %p)\n", This, ppv);
|
||||
else if(IsEqualGUID(&IID_IViewObject2, riid))
|
||||
*ppv = &This->IViewObjectEx_iface;
|
||||
}else if(IsEqualGUID(&IID_IViewObjectEx, riid)) {
|
||||
TRACE("(%p)->(IID_IViewObjectEx, %p)\n", This, ppv);
|
||||
else if(IsEqualGUID(&IID_IViewObjectEx, riid))
|
||||
*ppv = &This->IViewObjectEx_iface;
|
||||
}else if(IsEqualGUID(&IID_IOleWindow, riid)) {
|
||||
TRACE("(%p)->(IID_IOleWindow, %p)\n", This, ppv);
|
||||
else if(IsEqualGUID(&IID_IOleWindow, riid))
|
||||
*ppv = &This->IOleInPlaceActiveObject_iface;
|
||||
}else if(IsEqualGUID(&IID_IOleInPlaceObject, riid)) {
|
||||
TRACE("(%p)->(IID_IOleInPlaceObject, %p)\n", This, ppv);
|
||||
else if(IsEqualGUID(&IID_IOleInPlaceObject, riid))
|
||||
*ppv = &This->IOleInPlaceObjectWindowless_iface;
|
||||
}else if(IsEqualGUID(&IID_IOleInPlaceObjectWindowless, riid)) {
|
||||
TRACE("(%p)->(IID_IOleInPlaceObjectWindowless, %p)\n", This, ppv);
|
||||
else if(IsEqualGUID(&IID_IOleInPlaceObjectWindowless, riid))
|
||||
*ppv = &This->IOleInPlaceObjectWindowless_iface;
|
||||
}else if(IsEqualGUID(&IID_IServiceProvider, riid)) {
|
||||
TRACE("(%p)->(IID_IServiceProvider, %p)\n", This, ppv);
|
||||
else if(IsEqualGUID(&IID_IServiceProvider, riid))
|
||||
*ppv = &This->IServiceProvider_iface;
|
||||
}else if(IsEqualGUID(&IID_IOleCommandTarget, riid)) {
|
||||
TRACE("(%p)->(IID_IOleCommandTarget, %p)\n", This, ppv);
|
||||
else if(IsEqualGUID(&IID_IOleCommandTarget, riid))
|
||||
*ppv = &This->IOleCommandTarget_iface;
|
||||
}else if(IsEqualGUID(&IID_IOleControl, riid)) {
|
||||
TRACE("(%p)->(IID_IOleControl, %p)\n", This, ppv);
|
||||
else if(IsEqualGUID(&IID_IOleControl, riid))
|
||||
*ppv = &This->IOleControl_iface;
|
||||
}else if(IsEqualGUID(&IID_IHlinkTarget, riid)) {
|
||||
TRACE("(%p)->(IID_IHlinkTarget, %p)\n", This, ppv);
|
||||
else if(IsEqualGUID(&IID_IHlinkTarget, riid))
|
||||
*ppv = &This->IHlinkTarget_iface;
|
||||
}else if(IsEqualGUID(&IID_IConnectionPointContainer, riid)) {
|
||||
TRACE("(%p)->(IID_IConnectionPointContainer %p)\n", This, ppv);
|
||||
else if(IsEqualGUID(&IID_IConnectionPointContainer, riid))
|
||||
*ppv = &This->cp_container.IConnectionPointContainer_iface;
|
||||
}else if(IsEqualGUID(&IID_IPersistStreamInit, riid)) {
|
||||
TRACE("(%p)->(IID_IPersistStreamInit %p)\n", This, ppv);
|
||||
else if(IsEqualGUID(&IID_IPersistStreamInit, riid))
|
||||
*ppv = &This->IPersistStreamInit_iface;
|
||||
}else if(IsEqualGUID(&DIID_DispHTMLDocument, riid)) {
|
||||
TRACE("(%p)->(DIID_DispHTMLDocument %p)\n", This, ppv);
|
||||
else if(IsEqualGUID(&DIID_DispHTMLDocument, riid))
|
||||
*ppv = &This->IHTMLDocument2_iface;
|
||||
}else if(IsEqualGUID(&IID_ISupportErrorInfo, riid)) {
|
||||
TRACE("(%p)->(IID_ISupportErrorInfo %p)\n", This, ppv);
|
||||
else if(IsEqualGUID(&IID_ISupportErrorInfo, riid))
|
||||
*ppv = &This->ISupportErrorInfo_iface;
|
||||
}else if(IsEqualGUID(&IID_IPersistHistory, riid)) {
|
||||
TRACE("(%p)->(IID_IPersistHistory %p)\n", This, ppv);
|
||||
else if(IsEqualGUID(&IID_IPersistHistory, riid))
|
||||
*ppv = &This->IPersistHistory_iface;
|
||||
}else if(IsEqualGUID(&CLSID_CMarkup, riid)) {
|
||||
else if(IsEqualGUID(&IID_IObjectWithSite, riid))
|
||||
*ppv = &This->IObjectWithSite_iface;
|
||||
else if(IsEqualGUID(&IID_IOleContainer, riid))
|
||||
*ppv = &This->IOleContainer_iface;
|
||||
else if(IsEqualGUID(&IID_IObjectSafety, riid))
|
||||
*ppv = &This->IObjectSafety_iface;
|
||||
else if(IsEqualGUID(&IID_IProvideClassInfo, riid))
|
||||
*ppv = &This->IProvideClassInfo_iface;
|
||||
else if(IsEqualGUID(&CLSID_CMarkup, riid)) {
|
||||
FIXME("(%p)->(CLSID_CMarkup %p)\n", This, ppv);
|
||||
*ppv = NULL;
|
||||
}else if(IsEqualGUID(&IID_IRunnableObject, riid)) {
|
||||
|
@ -4230,18 +4227,6 @@ static BOOL htmldoc_qi(HTMLDocument *This, REFIID riid, void **ppv)
|
|||
}else if(IsEqualGUID(&IID_IStdMarshalInfo, riid)) {
|
||||
TRACE("(%p)->(IID_IStdMarshalInfo %p) returning NULL\n", This, ppv);
|
||||
*ppv = NULL;
|
||||
}else if(IsEqualGUID(&IID_IObjectWithSite, riid)) {
|
||||
TRACE("(%p)->(IID_IObjectWithSite %p)\n", This, ppv);
|
||||
*ppv = &This->IObjectWithSite_iface;
|
||||
}else if(IsEqualGUID(&IID_IOleContainer, riid)) {
|
||||
TRACE("(%p)->(IID_IOleContainer %p)\n", This, ppv);
|
||||
*ppv = &This->IOleContainer_iface;
|
||||
}else if(IsEqualGUID(&IID_IObjectSafety, riid)) {
|
||||
TRACE("(%p)->(IID_IObjectSafety %p)\n", This, ppv);
|
||||
*ppv = &This->IObjectSafety_iface;
|
||||
}else if(IsEqualGUID(&IID_IProvideClassInfo, riid)) {
|
||||
TRACE("(%p)->(IID_IProvideClassInfo, %p)\n", This, ppv);
|
||||
*ppv = &This->IProvideClassInfo_iface;
|
||||
}else {
|
||||
return FALSE;
|
||||
}
|
||||
|
@ -4304,15 +4289,15 @@ static HRESULT HTMLDocumentNode_QI(HTMLDOMNode *iface, REFIID riid, void **ppv)
|
|||
{
|
||||
HTMLDocumentNode *This = impl_from_HTMLDOMNode(iface);
|
||||
|
||||
TRACE("(%p)->(%s %p)\n", This, debugstr_mshtml_guid(riid), ppv);
|
||||
|
||||
if(htmldoc_qi(&This->basedoc, riid, ppv))
|
||||
return *ppv ? S_OK : E_NOINTERFACE;
|
||||
|
||||
if(IsEqualGUID(&IID_IInternetHostSecurityManager, riid)) {
|
||||
TRACE("(%p)->(IID_IInternetHostSecurityManager %p)\n", This, ppv);
|
||||
if(IsEqualGUID(&IID_IInternetHostSecurityManager, riid))
|
||||
*ppv = &This->IInternetHostSecurityManager_iface;
|
||||
}else {
|
||||
else
|
||||
return HTMLDOMNode_QI(&This->node, riid, ppv);
|
||||
}
|
||||
|
||||
IUnknown_AddRef((IUnknown*)*ppv);
|
||||
return S_OK;
|
||||
|
@ -4344,11 +4329,7 @@ static void HTMLDocumentNode_destructor(HTMLDOMNode *iface)
|
|||
This->nsnode_selector = NULL;
|
||||
}
|
||||
|
||||
if(This->nsdoc) {
|
||||
assert(!This->window);
|
||||
release_document_mutation(This);
|
||||
nsIDOMHTMLDocument_Release(This->nsdoc);
|
||||
}else if(This->window) {
|
||||
if(!This->nsdoc && This->window) {
|
||||
/* document fragments own reference to inner window */
|
||||
IHTMLWindow2_Release(&This->window->base.IHTMLWindow2_iface);
|
||||
This->window = NULL;
|
||||
|
@ -4595,19 +4576,19 @@ static HRESULT WINAPI CustomDoc_QueryInterface(ICustomDoc *iface, REFIID riid, v
|
|||
{
|
||||
HTMLDocumentObj *This = impl_from_ICustomDoc(iface);
|
||||
|
||||
TRACE("(%p)->(%s %p)\n", This, debugstr_mshtml_guid(riid), ppv);
|
||||
|
||||
if(htmldoc_qi(&This->basedoc, riid, ppv))
|
||||
return *ppv ? S_OK : E_NOINTERFACE;
|
||||
|
||||
if(IsEqualGUID(&IID_ICustomDoc, riid)) {
|
||||
TRACE("(%p)->(IID_ICustomDoc %p)\n", This, ppv);
|
||||
*ppv = &This->ICustomDoc_iface;
|
||||
}else if(IsEqualGUID(&IID_ITargetContainer, riid)) {
|
||||
TRACE("(%p)->(IID_ITargetContainer %p)\n", This, ppv);
|
||||
*ppv = &This->ITargetContainer_iface;
|
||||
}else if(dispex_query_interface(&This->dispex, riid, ppv)) {
|
||||
return *ppv ? S_OK : E_NOINTERFACE;
|
||||
}else {
|
||||
FIXME("Unimplemented interface %s\n", debugstr_guid(riid));
|
||||
FIXME("Unimplemented interface %s\n", debugstr_mshtml_guid(riid));
|
||||
*ppv = NULL;
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
|
@ -4744,7 +4725,7 @@ HRESULT HTMLDocument_Create(IUnknown *pUnkOuter, REFIID riid, void** ppvObject)
|
|||
nsresult nsres;
|
||||
HRESULT hres;
|
||||
|
||||
TRACE("(%p %s %p)\n", pUnkOuter, debugstr_guid(riid), ppvObject);
|
||||
TRACE("(%p %s %p)\n", pUnkOuter, debugstr_mshtml_guid(riid), ppvObject);
|
||||
|
||||
doc = heap_alloc_zero(sizeof(HTMLDocumentObj));
|
||||
if(!doc)
|
||||
|
|
|
@ -138,6 +138,68 @@ HRESULT replace_node_by_html(nsIDOMHTMLDocument *nsdoc, nsIDOMNode *nsnode, cons
|
|||
return hres;
|
||||
}
|
||||
|
||||
nsresult get_elem_attr_value(nsIDOMHTMLElement *nselem, const WCHAR *name, nsAString *val_str, const PRUnichar **val)
|
||||
{
|
||||
nsAString name_str;
|
||||
nsresult nsres;
|
||||
|
||||
nsAString_InitDepend(&name_str, name);
|
||||
nsAString_Init(val_str, NULL);
|
||||
nsres = nsIDOMHTMLElement_GetAttribute(nselem, &name_str, val_str);
|
||||
nsAString_Finish(&name_str);
|
||||
if(NS_FAILED(nsres)) {
|
||||
ERR("GetAttribute(%s) failed: %08x\n", debugstr_w(name), nsres);
|
||||
nsAString_Finish(val_str);
|
||||
return nsres;
|
||||
}
|
||||
|
||||
nsAString_GetData(val_str, val);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
HRESULT elem_string_attr_getter(HTMLElement *elem, const WCHAR *name, BOOL use_null, BSTR *p)
|
||||
{
|
||||
const PRUnichar *val;
|
||||
nsAString val_str;
|
||||
nsresult nsres;
|
||||
HRESULT hres = S_OK;
|
||||
|
||||
nsres = get_elem_attr_value(elem->nselem, name, &val_str, &val);
|
||||
if(NS_FAILED(nsres))
|
||||
return E_FAIL;
|
||||
|
||||
TRACE("%s: returning %s\n", debugstr_w(name), debugstr_w(val));
|
||||
|
||||
if(*val || !use_null) {
|
||||
*p = SysAllocString(val);
|
||||
if(!*p)
|
||||
hres = E_OUTOFMEMORY;
|
||||
}else {
|
||||
*p = NULL;
|
||||
}
|
||||
nsAString_Finish(&val_str);
|
||||
return hres;
|
||||
}
|
||||
|
||||
HRESULT elem_string_attr_setter(HTMLElement *elem, const WCHAR *name, const WCHAR *value)
|
||||
{
|
||||
nsAString name_str, val_str;
|
||||
nsresult nsres;
|
||||
|
||||
nsAString_InitDepend(&name_str, name);
|
||||
nsAString_InitDepend(&val_str, value);
|
||||
nsres = nsIDOMHTMLElement_SetAttribute(elem->nselem, &name_str, &val_str);
|
||||
nsAString_Finish(&name_str);
|
||||
nsAString_Finish(&val_str);
|
||||
|
||||
if(NS_FAILED(nsres)) {
|
||||
WARN("SetAttribute failed: %08x\n", nsres);
|
||||
return E_FAIL;
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
typedef struct
|
||||
{
|
||||
DispatchEx dispex;
|
||||
|
@ -771,30 +833,53 @@ static HRESULT WINAPI HTMLElement_get_onselectstart(IHTMLElement *iface, VARIANT
|
|||
static HRESULT WINAPI HTMLElement_scrollIntoView(IHTMLElement *iface, VARIANT varargStart)
|
||||
{
|
||||
HTMLElement *This = impl_from_IHTMLElement(iface);
|
||||
FIXME("(%p)->(%s)\n", This, debugstr_variant(&varargStart));
|
||||
return E_NOTIMPL;
|
||||
cpp_bool start = TRUE;
|
||||
nsresult nsres;
|
||||
|
||||
TRACE("(%p)->(%s)\n", This, debugstr_variant(&varargStart));
|
||||
|
||||
switch(V_VT(&varargStart)) {
|
||||
case VT_EMPTY:
|
||||
case VT_ERROR:
|
||||
break;
|
||||
case VT_BOOL:
|
||||
start = V_BOOL(&varargStart) != VARIANT_FALSE;
|
||||
break;
|
||||
default:
|
||||
FIXME("Unsupported argument %s\n", debugstr_variant(&varargStart));
|
||||
}
|
||||
|
||||
if(!This->nselem) {
|
||||
FIXME("Unsupported for comments\n");
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
nsres = nsIDOMHTMLElement_ScrollIntoView(This->nselem, start, 1);
|
||||
assert(nsres == NS_OK);
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLElement_contains(IHTMLElement *iface, IHTMLElement *pChild,
|
||||
VARIANT_BOOL *pfResult)
|
||||
{
|
||||
HTMLElement *This = impl_from_IHTMLElement(iface);
|
||||
HTMLElement *child;
|
||||
cpp_bool result;
|
||||
nsresult nsres;
|
||||
cpp_bool result = FALSE;
|
||||
|
||||
TRACE("(%p)->(%p %p)\n", This, pChild, pfResult);
|
||||
|
||||
child = unsafe_impl_from_IHTMLElement(pChild);
|
||||
if(!child) {
|
||||
ERR("not our element\n");
|
||||
return E_FAIL;
|
||||
}
|
||||
if(pChild) {
|
||||
HTMLElement *child;
|
||||
nsresult nsres;
|
||||
|
||||
nsres = nsIDOMNode_Contains(This->node.nsnode, child->node.nsnode, &result);
|
||||
if(NS_FAILED(nsres)) {
|
||||
ERR("failed\n");
|
||||
return E_FAIL;
|
||||
child = unsafe_impl_from_IHTMLElement(pChild);
|
||||
if(!child) {
|
||||
ERR("not our element\n");
|
||||
return E_FAIL;
|
||||
}
|
||||
|
||||
nsres = nsIDOMNode_Contains(This->node.nsnode, child->node.nsnode, &result);
|
||||
assert(nsres == NS_OK);
|
||||
}
|
||||
|
||||
*pfResult = result ? VARIANT_TRUE : VARIANT_FALSE;
|
||||
|
@ -804,8 +889,10 @@ static HRESULT WINAPI HTMLElement_contains(IHTMLElement *iface, IHTMLElement *pC
|
|||
static HRESULT WINAPI HTMLElement_get_sourceIndex(IHTMLElement *iface, LONG *p)
|
||||
{
|
||||
HTMLElement *This = impl_from_IHTMLElement(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
|
||||
TRACE("(%p)->(%p)\n", This, p);
|
||||
|
||||
return get_elem_source_index(This, p);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLElement_get_recordNumber(IHTMLElement *iface, VARIANT *p)
|
||||
|
@ -1547,37 +1634,26 @@ HRESULT HTMLElement_QI(HTMLDOMNode *iface, REFIID riid, void **ppv)
|
|||
{
|
||||
HTMLElement *This = impl_from_HTMLDOMNode(iface);
|
||||
|
||||
*ppv = NULL;
|
||||
|
||||
if(IsEqualGUID(&IID_IUnknown, riid)) {
|
||||
TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
|
||||
*ppv = &This->IHTMLElement_iface;
|
||||
}else if(IsEqualGUID(&IID_IDispatch, riid)) {
|
||||
TRACE("(%p)->(IID_IDispatch %p)\n", This, ppv);
|
||||
*ppv = &This->IHTMLElement_iface;
|
||||
}else if(IsEqualGUID(&IID_IHTMLElement, riid)) {
|
||||
TRACE("(%p)->(IID_IHTMLElement %p)\n", This, ppv);
|
||||
*ppv = &This->IHTMLElement_iface;
|
||||
}else if(IsEqualGUID(&IID_IHTMLElement2, riid)) {
|
||||
TRACE("(%p)->(IID_IHTMLElement2 %p)\n", This, ppv);
|
||||
*ppv = &This->IHTMLElement2_iface;
|
||||
}else if(IsEqualGUID(&IID_IHTMLElement3, riid)) {
|
||||
TRACE("(%p)->(IID_IHTMLElement3 %p)\n", This, ppv);
|
||||
*ppv = &This->IHTMLElement3_iface;
|
||||
}else if(IsEqualGUID(&IID_IHTMLElement4, riid)) {
|
||||
TRACE("(%p)->(IID_IHTMLElement4 %p)\n", This, ppv);
|
||||
*ppv = &This->IHTMLElement4_iface;
|
||||
}else if(IsEqualGUID(&IID_IConnectionPointContainer, riid)) {
|
||||
TRACE("(%p)->(IID_IConnectionPointContainer %p)\n", This, ppv);
|
||||
*ppv = &This->cp_container.IConnectionPointContainer_iface;
|
||||
}else {
|
||||
return HTMLDOMNode_QI(&This->node, riid, ppv);
|
||||
}
|
||||
|
||||
if(*ppv) {
|
||||
IHTMLElement_AddRef(&This->IHTMLElement_iface);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
return HTMLDOMNode_QI(&This->node, riid, ppv);
|
||||
IUnknown_AddRef((IUnknown*)*ppv);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
void HTMLElement_destructor(HTMLDOMNode *iface)
|
||||
|
@ -1896,25 +1972,23 @@ static HRESULT WINAPI HTMLFiltersCollection_QueryInterface(IHTMLFiltersCollectio
|
|||
{
|
||||
HTMLFiltersCollection *This = impl_from_IHTMLFiltersCollection(iface);
|
||||
|
||||
TRACE("%p %s %p\n", This, debugstr_guid( riid ), ppv );
|
||||
TRACE("%p %s %p\n", This, debugstr_mshtml_guid(riid), ppv );
|
||||
|
||||
if(IsEqualGUID(&IID_IUnknown, riid)) {
|
||||
TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
|
||||
*ppv = &This->IHTMLFiltersCollection_iface;
|
||||
}else if(IsEqualGUID(&IID_IHTMLFiltersCollection, riid)) {
|
||||
TRACE("(%p)->(IID_IHTMLFiltersCollection %p)\n", This, ppv);
|
||||
*ppv = &This->IHTMLFiltersCollection_iface;
|
||||
}else if(dispex_query_interface(&This->dispex, riid, ppv)) {
|
||||
return *ppv ? S_OK : E_NOINTERFACE;
|
||||
}else {
|
||||
*ppv = NULL;
|
||||
FIXME("(%p)->(%s %p)\n", This, debugstr_mshtml_guid(riid), ppv);
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
|
||||
if(*ppv) {
|
||||
IUnknown_AddRef((IUnknown*)*ppv);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
FIXME("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
|
||||
return E_NOINTERFACE;
|
||||
IUnknown_AddRef((IUnknown*)*ppv);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static ULONG WINAPI HTMLFiltersCollection_AddRef(IHTMLFiltersCollection *iface)
|
||||
|
@ -2082,31 +2156,24 @@ static HRESULT WINAPI HTMLAttributeCollection_QueryInterface(IHTMLAttributeColle
|
|||
{
|
||||
HTMLAttributeCollection *This = impl_from_IHTMLAttributeCollection(iface);
|
||||
|
||||
*ppv = NULL;
|
||||
|
||||
if(IsEqualGUID(&IID_IUnknown, riid)) {
|
||||
TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
|
||||
*ppv = &This->IHTMLAttributeCollection_iface;
|
||||
}else if(IsEqualGUID(&IID_IHTMLAttributeCollection, riid)) {
|
||||
TRACE("(%p)->(IID_IHTMLAttributeCollection %p)\n", This, ppv);
|
||||
*ppv = &This->IHTMLAttributeCollection_iface;
|
||||
}else if(IsEqualGUID(&IID_IHTMLAttributeCollection2, riid)) {
|
||||
TRACE("(%p)->(IID_IHTMLAttributeCollection2 %p)\n", This, ppv);
|
||||
*ppv = &This->IHTMLAttributeCollection2_iface;
|
||||
}else if(IsEqualGUID(&IID_IHTMLAttributeCollection3, riid)) {
|
||||
TRACE("(%p)->(IID_IHTMLAttributeCollection3 %p)\n", This, ppv);
|
||||
*ppv = &This->IHTMLAttributeCollection3_iface;
|
||||
}else if(dispex_query_interface(&This->dispex, riid, ppv)) {
|
||||
return *ppv ? S_OK : E_NOINTERFACE;
|
||||
}else {
|
||||
*ppv = NULL;
|
||||
WARN("(%p)->(%s %p)\n", This, debugstr_mshtml_guid(riid), ppv);
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
|
||||
if(*ppv) {
|
||||
IUnknown_AddRef((IUnknown*)*ppv);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
WARN("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
|
||||
return E_NOINTERFACE;
|
||||
IUnknown_AddRef((IUnknown*)*ppv);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static ULONG WINAPI HTMLAttributeCollection_AddRef(IHTMLAttributeCollection *iface)
|
||||
|
|
|
@ -36,16 +36,16 @@ static HRESULT WINAPI HTMLRect_QueryInterface(IHTMLRect *iface, REFIID riid, voi
|
|||
{
|
||||
HTMLRect *This = impl_from_IHTMLRect(iface);
|
||||
|
||||
TRACE("(%p)->(%s %p)\n", This, debugstr_mshtml_guid(riid), ppv);
|
||||
|
||||
if(IsEqualGUID(&IID_IUnknown, riid)) {
|
||||
TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
|
||||
*ppv = &This->IHTMLRect_iface;
|
||||
}else if(IsEqualGUID(&IID_IHTMLRect, riid)) {
|
||||
TRACE("(%p)->(IID_IHTMLRect %p)\n", This, ppv);
|
||||
*ppv = &This->IHTMLRect_iface;
|
||||
}else if(dispex_query_interface(&This->dispex, riid, ppv)) {
|
||||
return *ppv ? S_OK : E_NOINTERFACE;
|
||||
}else {
|
||||
FIXME("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
|
||||
FIXME("(%p)->(%s %p)\n", This, debugstr_mshtml_guid(riid), ppv);
|
||||
*ppv = NULL;
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue